From 64579da1a7963999917a26d364a9884aeba69fd5 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Wed, 24 Oct 2012 14:03:41 +0000 Subject: [PATCH] Build ASan runtime for ARM/Android. llvm-svn: 166559 --- compiler-rt/Makefile | 10 ++++++++-- compiler-rt/make/lib_info.mk | 2 +- compiler-rt/make/options.mk | 2 ++ compiler-rt/make/platform/clang_darwin.mk | 2 ++ compiler-rt/make/platform/clang_linux.mk | 17 +++++++++++++++++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/compiler-rt/Makefile b/compiler-rt/Makefile index aea6b8878662..63b05367b125 100644 --- a/compiler-rt/Makefile +++ b/compiler-rt/Makefile @@ -133,10 +133,12 @@ $(call Set,Tmp.Config,$(1)) $(call Set,Tmp.ObjPath,$(ProjObjRoot)/$(Tmp.Name)/$(Tmp.Config)) $(call Set,Tmp.SHARED_LIBRARY,$(strip \ $(call GetCNAVar,SHARED_LIBRARY,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch)))) +$(call Set,Tmp.SHARED_LIBRARY_SUFFIX,$(strip \ + $(call GetCNAVar,SHARED_LIBRARY_SUFFIX,$(Tmp.Key),$(Tmp.Config),$(Tmp.Arch)))) # Compute the library suffix. $(if $(call streq,1,$(Tmp.SHARED_LIBRARY)), - $(call Set,Tmp.LibrarySuffix,dylib), + $(call Set,Tmp.LibrarySuffix,$(Tmp.SHARED_LIBRARY_SUFFIX)), $(call Set,Tmp.LibrarySuffix,a)) # Compute the archs to build, depending on whether this is a universal build or @@ -192,7 +194,7 @@ $(call Set,Tmp.SHARED_LIBRARY,$(strip \ # Compute the library suffix. $(if $(call streq,1,$(Tmp.SHARED_LIBRARY)), - $(call Set,Tmp.LibrarySuffix,dylib), + $(call Set,Tmp.LibrarySuffix,$(Tmp.SHARED_LIBRARY_SUFFIX)), $(call Set,Tmp.LibrarySuffix,a)) # Compute the object inputs for this library. @@ -210,6 +212,10 @@ $(Tmp.ObjPath)/libcompiler_rt.dylib: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir $(Summary) " DYLIB: $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@" $(Verb) $(Tmp.CC) -arch $(Tmp.Arch) -dynamiclib -o $$@ \ $(Tmp.Inputs) $(Tmp.LDFLAGS) +$(Tmp.ObjPath)/libcompiler_rt.so: $(Tmp.Inputs) $(Tmp.ObjPath)/.dir + $(Summary) " SO: $(Tmp.Name)/$(Tmp.Config)/$(Tmp.Arch): $$@" + $(Verb) $(Tmp.CC) -shared -o $$@ \ + $(Tmp.Inputs) $(Tmp.LDFLAGS) .PRECIOUS: $(Tmp.ObjPath)/.dir # Per-Config-Arch Targets diff --git a/compiler-rt/make/lib_info.mk b/compiler-rt/make/lib_info.mk index 81f969548351..5e668160e7ca 100644 --- a/compiler-rt/make/lib_info.mk +++ b/compiler-rt/make/lib_info.mk @@ -56,4 +56,4 @@ AvailableOptions := AR ARFLAGS \ CC CFLAGS LDFLAGS FUNCTIONS OPTIMIZED \ RANLIB RANLIBFLAGS \ VISIBILITY_HIDDEN KERNEL_USE \ - SHARED_LIBRARY STRIP LIPO + SHARED_LIBRARY SHARED_LIBRARY_SUFFIX STRIP LIPO diff --git a/compiler-rt/make/options.mk b/compiler-rt/make/options.mk index d943e0088aaa..ec4a55df7486 100644 --- a/compiler-rt/make/options.mk +++ b/compiler-rt/make/options.mk @@ -43,3 +43,5 @@ RANLIBFLAGS := 2> /dev/null STRIP := strip LIPO := lipo + +SHARED_LIBRARY_SUFFIX := so diff --git a/compiler-rt/make/platform/clang_darwin.mk b/compiler-rt/make/platform/clang_darwin.mk index db128cf7e2b9..5bc0e10629c5 100644 --- a/compiler-rt/make/platform/clang_darwin.mk +++ b/compiler-rt/make/platform/clang_darwin.mk @@ -435,3 +435,5 @@ KERNEL_USE.cc_kext := 1 KERNEL_USE.cc_kext_ios5 := 1 VISIBILITY_HIDDEN := 1 + +SHARED_LIBRARY_SUFFIX := dylib diff --git a/compiler-rt/make/platform/clang_linux.mk b/compiler-rt/make/platform/clang_linux.mk index 770a551b72a6..4366143467dc 100644 --- a/compiler-rt/make/platform/clang_linux.mk +++ b/compiler-rt/make/platform/clang_linux.mk @@ -66,6 +66,11 @@ Arch.asan-x86_64 := x86_64 Arch.tsan-x86_64 := x86_64 endif +ifneq ($(LLVM_ANDROID_TOOLCHAIN_DIR),) +Configs += asan-arm-android +Arch.asan-arm-android := arm-android +endif + endif endif @@ -81,6 +86,14 @@ CFLAGS.asan-i386 := $(CFLAGS) -m32 -fPIE -fno-builtin CFLAGS.asan-x86_64 := $(CFLAGS) -m64 -fPIE -fno-builtin CFLAGS.tsan-x86_64 := $(CFLAGS) -m64 -fPIE -fno-builtin +SHARED_LIBRARY.asan-arm-android := 1 +ANDROID_COMMON_FLAGS := -target arm-linux-androideabi \ + --sysroot=$(LLVM_ANDROID_TOOLCHAIN_DIR)/sysroot \ + -B$(LLVM_ANDROID_TOOLCHAIN_DIR) +CFLAGS.asan-arm-android := $(CFLAGS) -fPIC -fno-builtin \ + $(ANDROID_COMMON_FLAGS) -mllvm -arm-enable-ehabi +LDFLAGS.asan-arm-android := $(LDFLAGS) $(ANDROID_COMMON_FLAGS) -ldl + # Use our stub SDK as the sysroot to support more portable building. For now we # just do this for the non-ASAN modules, because the stub SDK doesn't have # enough support to build ASAN. @@ -97,6 +110,8 @@ FUNCTIONS.asan-i386 := $(AsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) FUNCTIONS.asan-x86_64 := $(AsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) +FUNCTIONS.asan-arm-android := $(AsanFunctions) $(InterceptionFunctions) \ + $(SanitizerCommonFunctions) FUNCTIONS.tsan-x86_64 := $(TsanFunctions) $(InterceptionFunctions) \ $(SanitizerCommonFunctions) @@ -105,3 +120,5 @@ OPTIMIZED := 1 # We don't need to use visibility hidden on Linux. VISIBILITY_HIDDEN := 0 + +SHARED_LIBRARY_SUFFIX := so