aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2014-10-31 16:23:08 -0700
committerDan Albert <danalbert@google.com>2014-12-05 22:20:37 -0800
commit4ae5d4b331923ee837f0d6afd5605da0a49419c9 (patch)
tree9c9e1bfcc90aedd6046b0ee34990c97c888f0788
parentb58fb4aac63e729fbbe7a47a03296c9f3c5ec5ff (diff)
downloadbuild-4ae5d4b331923ee837f0d6afd5605da0a49419c9.tar.gz
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
-rw-r--r--core/binary.mk14
-rw-r--r--core/config_sanitizers.mk32
-rw-r--r--envsetup.sh6
3 files changed, 39 insertions, 13 deletions
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()