Add support for building with AddressSanitizer.
Change-Id: I559d21bbeb9f869f51e48ce18247ceaf766768b4
diff --git a/core/binary.mk b/core/binary.mk
index bba5711..852ac46 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -123,6 +123,15 @@
#######################################
include $(BUILD_SYSTEM)/base_rules.mk
#######################################
+
+ifeq ($(strip $(LOCAL_ADDRESS_SANITIZER)),true)
+ LOCAL_CLANG := true
+ LOCAL_CFLAGS += $(ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
+ LOCAL_LDFLAGS += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS)
+ LOCAL_SHARED_LIBRARIES += $(ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES)
+ LOCAL_STATIC_LIBRARIES += $(ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES)
+endif
+
my_compiler_dependencies :=
ifeq ($(strip $(LOCAL_CLANG)),true)
LOCAL_CFLAGS += $(CLANG_CONFIG_EXTRA_CFLAGS)
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 41259e4..6131be7 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -119,6 +119,7 @@
LOCAL_CTS_TEST_PACKAGE:=
LOCAL_CTS_TEST_RUNNER:=
LOCAL_CLANG:=
+LOCAL_ADDRESS_SANITIZER:=
# Trim MAKEFILE_LIST so that $(call my-dir) doesn't need to
# iterate over thousands of entries every time.
diff --git a/core/llvm_config.mk b/core/llvm_config.mk
index d46f2c3..bebc08c 100644
--- a/core/llvm_config.mk
+++ b/core/llvm_config.mk
@@ -59,3 +59,8 @@
# llvm does not yet support -march=armv5e nor -march=armv5te, fall back to armv5 or armv5t
$(call clang-flags-subst,-march=armv5te,-march=armv5t)
$(call clang-flags-subst,-march=armv5e,-march=armv5)
+
+ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS := -faddress-sanitizer
+ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS := -Wl,-u,__asan_preinit
+ADDRESS_SANITIZER_CONFIG_EXTRA_SHARED_LIBRARIES := libdl libasan_preload
+ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES := libasan