From abf4bc916ab136eb1d5658632c63f950890f3eed Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 16 Jun 2015 23:27:34 -0700 Subject: [PATCH] Add support for `LOCAL_SANITIZE := integer`. This also does a bit of cleanup in config_sanitizers.mk. The result is that `LOCAL_SANITIZE := ` should function fine for both host and target. This is a superset of LOCAL_DETECT_INTEGER_OVERFLOWS, so remove that. This also checks integer division by zero. It's supposed to cover shifting undefined behaviors as well, but apparently it does not (though `LOCAL_SANITIZE := shift` works fine). Change-Id: I4ac99eafa6920a3f8cb82af37ce56ff0fdb95223 --- core/clang/config.mk | 2 +- core/clear_vars.mk | 1 - core/config_sanitizers.mk | 33 ++++++++------------------------- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/core/clang/config.mk b/core/clang/config.mk index 512b11665..4875ea12f 100644 --- a/core/clang/config.mk +++ b/core/clang/config.mk @@ -150,7 +150,7 @@ endif ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -fno-omit-frame-pointer ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS := -Wl,-u,__asan_preinit -ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES := libdl +ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES := ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES := libasan # This allows us to use the superset of functionality that compiler-rt diff --git a/core/clear_vars.mk b/core/clear_vars.mk index e352cc5a8..f30c8ba66 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -150,7 +150,6 @@ LOCAL_MODULE_OWNER:= LOCAL_CTS_TEST_PACKAGE:= LOCAL_CTS_TEST_RUNNER:= LOCAL_CLANG:= -LOCAL_DETECT_INTEGER_OVERFLOWS:= LOCAL_JAR_EXCLUDE_FILES:= LOCAL_JAR_PACKAGES:= LOCAL_JAR_EXCLUDE_PACKAGES:= diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index 9cff6ea33..7ebbf9ff4 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -41,14 +41,6 @@ endif ifneq ($(filter default-ub,$(my_sanitize)),) my_sanitize := $(CLANG_DEFAULT_UB_CHECKS) - - ifdef LOCAL_IS_HOST_MODULE - my_cflags += -fno-sanitize-recover=all - my_ldlibs += -ldl - else - my_cflags += -fsanitize-undefined-trap-on-error - my_shared_libraries += libdl - endif endif ifneq ($(my_sanitize),) @@ -56,7 +48,13 @@ ifneq ($(my_sanitize),) my_cflags += -fsanitize=$(fsanitize_arg) ifdef LOCAL_IS_HOST_MODULE + my_cflags += -fno-sanitize-recover=all my_ldflags += -fsanitize=$(fsanitize_arg) + my_ldlibs += -ldl + else + my_cflags += -fsanitize-undefined-trap-on-error + my_cflags += -ftrap-function=abort + my_shared_libraries += libdl endif endif @@ -68,7 +66,7 @@ ifneq ($(filter address,$(my_sanitize)),) ifdef LOCAL_IS_HOST_MODULE # -nodefaultlibs (provided with libc++) prevents the driver from linking # libraries needed with -fsanitize=address. http://b/18650275 (WAI) - my_ldlibs += -lm -ldl -lpthread + my_ldlibs += -lm -lpthread my_ldflags += -Wl,--no-as-needed else # ASan runtime library must be the first in the link order. @@ -81,27 +79,12 @@ ifneq ($(filter address,$(my_sanitize)),) endif ifneq ($(filter undefined,$(my_sanitize)),) - my_cflags += -fno-sanitize-recover=all - - ifdef LOCAL_IS_HOST_MODULE - my_ldlibs += -ldl - else + ifndef LOCAL_IS_HOST_MODULE $(error ubsan is not yet supported on the target) endif endif - ifneq ($(strip $(LOCAL_SANITIZE_RECOVER)),) recover_arg := $(subst $(space),$(comma),$(LOCAL_SANITIZE_RECOVER)), my_cflags += -fsanitize-recover=$(recover_arg) endif - -ifeq ($(strip $(LOCAL_DETECT_INTEGER_OVERFLOWS)),true) - ifeq ($(my_clang),true) - my_cflags += -fsanitize=signed-integer-overflow,unsigned-integer-overflow - my_cflags += -ftrap-function=abort - my_cflags += -fsanitize-undefined-trap-on-error - else - $(error $(LOCAL_MODULE): You must enable LOCAL_CLANG:=true to use LOCAL_DETECT_INTEGER_OVERFLOWS) - endif -endif