From 35e5a752439c927bd762518370d039f510975225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Fri, 12 Jan 2018 01:18:12 +0100 Subject: [PATCH] restored SANITIZE make option (#3043) * restored basic support for SANITIZE make option * disabled some unwanted UBSAN checks / enabled nullability checks / enabled ASAN use-after-scope checks (nw) --- makefile | 6 +++++- scripts/genie.lua | 41 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/makefile b/makefile index 3e9b682b959..bfe449b759a 100644 --- a/makefile +++ b/makefile @@ -40,7 +40,7 @@ # DEBUG = 1 # PROFILER = 1 -# SANITIZE = 1 +# SANITIZE = # PTR64 = 1 # BIGENDIAN = 1 @@ -781,6 +781,10 @@ endif ifdef WEBASSEMBLY PARAMS += --WEBASSEMBLY='$(WEBASSEMBLY)' endif + +ifdef SANITIZE +PARAMS += --SANITIZE='$(SANITIZE)' +endif #------------------------------------------------- # All scripts #------------------------------------------------- diff --git a/scripts/genie.lua b/scripts/genie.lua index 0c1a6abb179..a9f6f11be05 100644 --- a/scripts/genie.lua +++ b/scripts/genie.lua @@ -386,6 +386,11 @@ newoption { description = "Produce WebAssembly output when building with Emscripten.", } +newoption { + trigger = "SANITIZE", + description = "Specifies the santizer(s) to use." +} + newoption { trigger = "PROJECT", description = "Select projects to be built. Will look into project folder for files.", @@ -950,14 +955,42 @@ end buildoptions_cpp { "-Woverloaded-virtual", } - ---ifdef SANITIZE ---CCOMFLAGS += -fsanitize=$(SANITIZE) + +if _OPTIONS["SANITIZE"] then + buildoptions { + "-fsanitize=".. _OPTIONS["SANITIZE"] + } + linkoptions { + "-fsanitize=".. _OPTIONS["SANITIZE"] + } + if string.find(_OPTIONS["SANITIZE"], "address") then + buildoptions { + "-fsanitize-address-use-after-scope" + } + linkoptions { + "-fsanitize-address-use-after-scope" + } + end + if string.find(_OPTIONS["SANITIZE"], "undefined") then + -- 'function' produces errors without delegates by design + -- 'alignment' produces a lot of errors which we are not interested in + -- 'nullability' errors are not actually undefined behavior but unintentional + buildoptions { + "-fno-sanitize=function", + "-fno-sanitize=alignment", + "-fsanitize=nullability" + } + linkoptions { + "-fno-sanitize=function", + "-fno-sanitize=alignment", + "-fsanitize=nullability" + } + end +end --ifneq (,$(findstring thread,$(SANITIZE))) --CCOMFLAGS += -fPIE --endif ---endif