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