From 4ae5d4b331923ee837f0d6afd5605da0a49419c9 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Fri, 31 Oct 2014 16:23:08 -0700 Subject: [PATCH] Add a SANITIZE_HOST flag. We had discussed the idea of making all host tools default to using ASAN. Even if we don't make it the default, this makes it easy for the user to switch all host binaries over. Change-Id: I64a5c741b1b4e9aefed3a6be8dcd4f386e06b29c --- core/binary.mk | 14 +------------- core/config_sanitizers.mk | 32 ++++++++++++++++++++++++++++++++ envsetup.sh | 6 ++++++ 3 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 core/config_sanitizers.mk diff --git a/core/binary.mk b/core/binary.mk index 7fd7e3238c..752a5c36ea 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -191,19 +191,7 @@ $(foreach lib, $(LOCAL_HAL_STATIC_LIBRARIES), \ b_lib := endif -ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),true) - my_clang := true - # Frame pointer based unwinder in ASan requires ARM frame setup. - LOCAL_ARM_MODE := arm - my_cflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS) - my_ldflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS) - ifdef LOCAL_IS_HOST_MODULE - my_ldflags += -fsanitize=address - else - my_shared_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES) - my_static_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES) - endif -endif +include $(BUILD_SYSTEM)/config_sanitizers.mk ifeq ($(strip $($(LOCAL_2ND_ARCH_VAR_PREFIX)WITHOUT_$(my_prefix)CLANG)),true) my_clang := diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk new file mode 100644 index 0000000000..a1964a9a4a --- /dev/null +++ b/core/config_sanitizers.mk @@ -0,0 +1,32 @@ +############################################## +## Perform configuration steps for sanitizers. +############################################## + +# Configure SANITIZE_HOST. +ifdef LOCAL_IS_HOST_MODULE +ifeq ($(SANITIZE_HOST),true) +ifneq ($(strip $(LOCAL_CLANG)),false) +ifneq ($(strip $(LOCAL_ADDRESS_SANITIZER)),false) + LOCAL_ADDRESS_SANITIZER := true +endif +endif +endif +endif + +# Configure address sanitizer. +ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),true) + my_clang := true + # Frame pointer based unwinder in ASan requires ARM frame setup. + LOCAL_ARM_MODE := arm + my_cflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS) + my_ldflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS) + ifdef LOCAL_IS_HOST_MODULE + my_ldflags += -fsanitize=address + # -nodefaultlibs (provided with libc++) prevents the driver from linking + # libraries needed with -fsanitize=address. http://b/18650275 + my_ldlibs += -ldl -lpthread + else + my_shared_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES) + my_static_libraries += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES) + endif +endif diff --git a/envsetup.sh b/envsetup.sh index 0e853fe17c..9a540ef8bc 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -17,6 +17,11 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y - sgrep: Greps on all local source files. - godir: Go to the directory containing a file. +Environemnt options: +- SANITIZE_HOST: Set to 'true' to use ASAN for all host modules. Note that + ASAN_OPTIONS=detect_leaks=0 will be set by default until the + build is leak-check clean. + Look at the source to view more functions. The complete list is: EOF T=$(gettop) @@ -231,6 +236,7 @@ function set_stuff_for_environment() export ANDROID_BUILD_TOP=$(gettop) # With this environment variable new GCC can apply colors to warnings/errors export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + export ASAN_OPTIONS=detect_leaks=0 } function set_sequence_number()