[compiler-rt] r229585 - Revert "Remove support for building sanitizers from Makefile/autoconf build."

Matthias Braun matze at braunis.de
Tue Feb 17 15:30:51 PST 2015


Author: matze
Date: Tue Feb 17 17:30:51 2015
New Revision: 229585

URL: http://llvm.org/viewvc/llvm-project?rev=229585&view=rev
Log:
Revert "Remove support for building sanitizers from Makefile/autoconf build."

This reverts commit r229556.

Reverting this for now as internal apple builds rely on this
functionality.

Added:
    compiler-rt/trunk/lib/asan/Makefile.mk
    compiler-rt/trunk/lib/dfsan/Makefile.mk
    compiler-rt/trunk/lib/interception/Makefile.mk
    compiler-rt/trunk/lib/lsan/Makefile.mk
    compiler-rt/trunk/lib/msan/Makefile.mk
    compiler-rt/trunk/lib/sanitizer_common/Makefile.mk
    compiler-rt/trunk/lib/tsan/Makefile.mk
      - copied, changed from r229581, compiler-rt/trunk/lib/Makefile.mk
    compiler-rt/trunk/lib/tsan/rtl/Makefile.mk
    compiler-rt/trunk/lib/ubsan/Makefile.mk
Modified:
    compiler-rt/trunk/lib/Makefile.mk
    compiler-rt/trunk/lib/asan/README.txt
    compiler-rt/trunk/make/platform/clang_darwin.mk
    compiler-rt/trunk/make/platform/clang_linux.mk

Modified: compiler-rt/trunk/lib/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/Makefile.mk?rev=229585&r1=229584&r2=229585&view=diff
==============================================================================
--- compiler-rt/trunk/lib/Makefile.mk (original)
+++ compiler-rt/trunk/lib/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -10,5 +10,13 @@
 SubDirs :=
 
 # Add submodules.
+SubDirs += asan
 SubDirs += builtins
+SubDirs += dfsan
+SubDirs += interception
+SubDirs += lsan
+SubDirs += msan
 SubDirs += profile
+SubDirs += sanitizer_common
+SubDirs += tsan
+SubDirs += ubsan

Added: compiler-rt/trunk/lib/asan/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/asan/Makefile.mk (added)
+++ compiler-rt/trunk/lib/asan/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,29 @@
+#===- lib/asan/Makefile.mk ---------------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := asan
+SubDirs := 
+
+CCSources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+CXXOnlySources := asan_new_delete.cc
+COnlySources := $(filter-out $(CXXOnlySources),$(CCSources))
+SSources := $(foreach file,$(wildcard $(Dir)/*.S),$(notdir $(file)))
+Sources := $(CCSources) $(SSources)
+ObjNames := $(CCSources:%.cc=%.o) $(SSources:%.S=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../interception/*.h)
+Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h)
+
+# Define a convenience variable for all the asan functions.
+AsanFunctions := $(COnlySources:%.cc=%) $(SSources:%.S=%)
+AsanCXXFunctions := $(CXXOnlySources:%.cc=%)

Modified: compiler-rt/trunk/lib/asan/README.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/README.txt?rev=229585&r1=229584&r2=229585&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/README.txt (original)
+++ compiler-rt/trunk/lib/asan/README.txt Tue Feb 17 17:30:51 2015
@@ -1,9 +1,11 @@
 AddressSanitizer RT
 ================================
-This directory contains sources of the AddressSanitizer (ASan) runtime library.
+This directory contains sources of the AddressSanitizer (asan) runtime library.
+We are in the process of integrating AddressSanitizer with LLVM, stay tuned.
 
 Directory structure:
 README.txt       : This file.
+Makefile.mk      : File for make-based build.
 CMakeLists.txt   : File for cmake-based build.
 asan_*.{cc,h}    : Sources of the asan runtime library.
 scripts/*        : Helper scripts.
@@ -11,13 +13,14 @@ tests/*          : ASan unit tests.
 
 Also ASan runtime needs the following libraries:
 lib/interception/      : Machinery used to intercept function calls.
-lib/sanitizer_common/  : Code shared between various sanitizers.
+lib/sanitizer_common/  : Code shared between ASan and TSan.
 
-ASan runtime currently also embeds part of LeakSanitizer runtime for
-leak detection (lib/lsan/lsan_common.{cc,h}).
+Currently ASan runtime can be built by both make and cmake build systems.
+(see compiler-rt/make and files Makefile.mk for make-based build and
+files CMakeLists.txt for cmake-based build).
 
-ASan runtime can only be built by CMake. You can run ASan tests
-from the root of your CMake build tree:
+ASan unit and output tests work only with cmake. You may run this
+command from the root of your cmake build tree:
 
 make check-asan
 

Added: compiler-rt/trunk/lib/dfsan/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/dfsan/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/dfsan/Makefile.mk (added)
+++ compiler-rt/trunk/lib/dfsan/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,23 @@
+#===- lib/dfsan/Makefile.mk --------------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := dfsan
+SubDirs :=
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+ObjNames := $(Sources:%.cc=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h)
+
+# Define a convenience variable for all the dfsan functions.
+DfsanFunctions := $(Sources:%.cc=%)

Added: compiler-rt/trunk/lib/interception/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/interception/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/interception/Makefile.mk (added)
+++ compiler-rt/trunk/lib/interception/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,23 @@
+#===- lib/interception/Makefile.mk -------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := interception
+SubDirs :=
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+ObjNames := $(Sources:%.cc=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h)
+
+# Define a convenience variable for all the interception functions.
+InterceptionFunctions := $(Sources:%.cc=%)

Added: compiler-rt/trunk/lib/lsan/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/lsan/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/lsan/Makefile.mk (added)
+++ compiler-rt/trunk/lib/lsan/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,28 @@
+#===- lib/lsan/Makefile.mk ---------------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := lsan
+SubDirs := 
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+ObjNames := $(Sources:%.cc=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../interception/*.h)
+Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h)
+
+# Define a convenience variable for all the lsan functions.
+LsanFunctions := $(Sources:%.cc=%)
+
+# lsan functions used in another sanitizers.
+LsanCommonSources := $(foreach file,$(wildcard $(Dir)/lsan_common*.cc),$(notdir $(file)))
+LsanCommonFunctions := $(LsanCommonSources:%.cc=%)

Added: compiler-rt/trunk/lib/msan/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/msan/Makefile.mk (added)
+++ compiler-rt/trunk/lib/msan/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,24 @@
+#===- lib/msan/Makefile.mk ---------------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := msan
+SubDirs :=
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+ObjNames := $(Sources:%.cc=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../interception/*.h)
+Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h)
+
+# Define a convenience variable for all the msan functions.
+MsanFunctions := $(Sources:%.cc=%)

Added: compiler-rt/trunk/lib/sanitizer_common/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/Makefile.mk (added)
+++ compiler-rt/trunk/lib/sanitizer_common/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,22 @@
+#===- lib/sanitizer_common/Makefile.mk ---------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := sanitizer_common
+SubDirs :=
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+ObjNames := $(Sources:%.cc=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+
+# Define a convenience variable for all the sanitizer_common functions.
+SanitizerCommonFunctions := $(Sources:%.cc=%)

Copied: compiler-rt/trunk/lib/tsan/Makefile.mk (from r229581, compiler-rt/trunk/lib/Makefile.mk)
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/Makefile.mk?p2=compiler-rt/trunk/lib/tsan/Makefile.mk&p1=compiler-rt/trunk/lib/Makefile.mk&r1=229581&r2=229585&rev=229585&view=diff
==============================================================================
--- compiler-rt/trunk/lib/Makefile.mk (original)
+++ compiler-rt/trunk/lib/tsan/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -1,4 +1,4 @@
-#===- lib/Makefile.mk --------------------------------------*- Makefile -*--===#
+#===- lib/tsan/Makefile.mk ---------------------------------*- Makefile -*--===#
 #
 #                     The LLVM Compiler Infrastructure
 #
@@ -7,8 +7,12 @@
 #
 #===------------------------------------------------------------------------===#
 
-SubDirs :=
+ModuleName := tsan
+SubDirs := rtl
+Sources :=
+ObjNames :=
+Dependencies :=
 
-# Add submodules.
-SubDirs += builtins
-SubDirs += profile
+Implementation := Generic
+
+TsanFunctions :=

Added: compiler-rt/trunk/lib/tsan/rtl/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/Makefile.mk (added)
+++ compiler-rt/trunk/lib/tsan/rtl/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,25 @@
+#===- lib/tsan/rtl/Makefile.mk -----------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := tsan
+SubDirs :=
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+AsmSources := $(foreach file,$(wildcard $(Dir)/*.S),$(notdir $(file)))
+ObjNames := $(Sources:%.cc=%.o) $(AsmSources:%.S=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../../interception/*.h)
+Dependencies += $(wildcard $(Dir)/../../sanitizer_common/*.h)
+
+# Define a convenience variable for all the tsan functions.
+TsanFunctions += $(Sources:%.cc=%) $(AsmSources:%.S=%)

Added: compiler-rt/trunk/lib/ubsan/Makefile.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/Makefile.mk?rev=229585&view=auto
==============================================================================
--- compiler-rt/trunk/lib/ubsan/Makefile.mk (added)
+++ compiler-rt/trunk/lib/ubsan/Makefile.mk Tue Feb 17 17:30:51 2015
@@ -0,0 +1,26 @@
+#===- lib/ubsan/Makefile.mk ---------------------------------*- Makefile -*--===#
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+#===------------------------------------------------------------------------===#
+
+ModuleName := ubsan
+SubDirs :=
+
+Sources := $(foreach file,$(wildcard $(Dir)/*.cc),$(notdir $(file)))
+CXXSources := ubsan_type_hash.cc ubsan_handlers_cxx.cc
+CSources := $(filter-out $(CXXSources),$(Sources))
+ObjNames := $(Sources:%.cc=%.o)
+
+Implementation := Generic
+
+# FIXME: use automatic dependencies?
+Dependencies := $(wildcard $(Dir)/*.h)
+Dependencies += $(wildcard $(Dir)/../sanitizer_common/*.h)
+
+# Define a convenience variable for all the ubsan functions.
+UbsanFunctions := $(CSources:%.cc=%)
+UbsanCXXFunctions := $(CXXSources:%.cc=%)

Modified: compiler-rt/trunk/make/platform/clang_darwin.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/make/platform/clang_darwin.mk?rev=229585&r1=229584&r2=229585&view=diff
==============================================================================
--- compiler-rt/trunk/make/platform/clang_darwin.mk (original)
+++ compiler-rt/trunk/make/platform/clang_darwin.mk Tue Feb 17 17:30:51 2015
@@ -112,6 +112,16 @@ Configs += profile_ios
 UniversalArchs.profile_ios := $(call CheckArches,i386 x86_64,profile_ios,$(IOSSIM_SDK))
 UniversalArchs.profile_ios += $(call CheckArches,armv7 arm64,profile_ios,$(IOS_SDK))
 
+# Configurations which define the ASAN support functions.
+Configs += asan_osx_dynamic
+UniversalArchs.asan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,asan_osx_dynamic,$(OSX_SDK))
+
+Configs += asan_iossim_dynamic
+UniversalArchs.asan_iossim_dynamic := $(call CheckArches,i386 x86_64,asan_iossim_dynamic,$(IOSSIM_SDK))
+
+Configs += ubsan_osx
+UniversalArchs.ubsan_osx := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx,$(OSX_SDK))
+
 # Darwin 10.6 has a bug in cctools that makes it unable to use ranlib on our ARM
 # object files. If we are on that platform, strip out all ARM archs. We still
 # build the libraries themselves so that Clang can find them where it expects
@@ -162,6 +172,27 @@ IOSSIM_DEPLOYMENT_ARGS += -isysroot $(IO
 CFLAGS.eprintf		:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
 CFLAGS.10.4		:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
 
+CFLAGS.asan_osx_dynamic := \
+	$(CFLAGS) -mmacosx-version-min=10.7 \
+	-stdlib=libc++ \
+	-isysroot $(OSX_SDK) \
+	-fno-builtin \
+	-gline-tables-only \
+	-DMAC_INTERPOSE_FUNCTIONS=1 \
+	-DASAN_DYNAMIC=1
+
+CFLAGS.asan_iossim_dynamic := \
+	$(CFLAGS) -mios-simulator-version-min=7.0 \
+        -isysroot $(IOSSIM_SDK) \
+        -fno-builtin \
+	-gline-tables-only \
+	-DMAC_INTERPOSE_FUNCTIONS=1 \
+	-DASAN_DYNAMIC=1
+
+CFLAGS.ubsan_osx := $(CFLAGS) -mmacosx-version-min=10.6 \
+	-isysroot $(OSX_SDK) \
+	-fno-builtin
+
 CFLAGS.ios.i386		:= $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
 CFLAGS.ios.x86_64	:= $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
 CFLAGS.ios.armv7	:= $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
@@ -191,6 +222,20 @@ CFLAGS.profile_ios.armv7k := $(CFLAGS) $
 CFLAGS.profile_ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
 CFLAGS.profile_ios.arm64  := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
 
+# Configure the asan_osx_dynamic library to be built shared.
+SHARED_LIBRARY.asan_osx_dynamic := 1
+LDFLAGS.asan_osx_dynamic := -lc++ -undefined dynamic_lookup -install_name @rpath/libclang_rt.asan_osx_dynamic.dylib \
+  -mmacosx-version-min=10.7 \
+  -isysroot $(OSX_SDK)
+
+# Configure the asan_iossim_dynamic library to be built shared.
+SHARED_LIBRARY.asan_iossim_dynamic := 1
+# configure+make uses Clang, so we're using isysroot instead of --sysroot
+# or -Wl,-syslibroot.
+LDFLAGS.asan_iossim_dynamic := -undefined dynamic_lookup -install_name @rpath/libclang_rt.asan_iossim_dynamic.dylib \
+  -Wl,-ios_simulator_version_min,7.0.0 \
+  -mios-simulator-version-min=7.0 -isysroot $(IOSSIM_SDK)
+
 FUNCTIONS.eprintf := eprintf
 FUNCTIONS.10.4 := eprintf floatundidf floatundisf floatundixf
 
@@ -208,6 +253,19 @@ FUNCTIONS.profile_osx := GCDAProfiling I
                          InstrProfilingRuntime
 FUNCTIONS.profile_ios := $(FUNCTIONS.profile_osx)
 
+FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
+                              $(InterceptionFunctions) \
+                              $(SanitizerCommonFunctions) \
+	                      $(AsanDynamicFunctions)
+
+FUNCTIONS.asan_iossim_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
+                                 $(InterceptionFunctions) \
+                                 $(SanitizerCommonFunctions) \
+	                         $(AsanDynamicFunctions)
+
+FUNCTIONS.ubsan_osx := $(UbsanFunctions) $(UbsanCXXFunctions) \
+                       $(SanitizerCommonFunctions)
+
 CCKEXT_PROFILE_FUNCTIONS := \
 	InstrProfiling \
 	InstrProfilingBuffer \

Modified: compiler-rt/trunk/make/platform/clang_linux.mk
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/make/platform/clang_linux.mk?rev=229585&r1=229584&r2=229585&view=diff
==============================================================================
--- compiler-rt/trunk/make/platform/clang_linux.mk (original)
+++ compiler-rt/trunk/make/platform/clang_linux.mk Tue Feb 17 17:30:51 2015
@@ -49,34 +49,80 @@ endif
 
 # Build runtime libraries for i386.
 ifeq ($(call contains,$(SupportedArches),i386),true)
-Configs += builtins-i386 profile-i386
+Configs += builtins-i386 profile-i386 san-i386 asan-i386 asan_cxx-i386 \
+	   ubsan-i386 ubsan_cxx-i386
 Arch.builtins-i386 := i386
 Arch.profile-i386 := i386
+Arch.san-i386 := i386
+Arch.asan-i386 := i386
+Arch.asan_cxx-i386 := i386
+Arch.ubsan-i386 := i386
+Arch.ubsan_cxx-i386 := i386
 endif
 
 # Build runtime libraries for x86_64.
 ifeq ($(call contains,$(SupportedArches),x86_64),true)
-Configs += builtins-x86_64 profile-x86_64
+Configs += builtins-x86_64 profile-x86_64 san-x86_64 asan-x86_64 asan_cxx-x86_64 \
+	   tsan-x86_64 msan-x86_64 ubsan-x86_64 ubsan_cxx-x86_64 dfsan-x86_64 \
+	   lsan-x86_64
 Arch.builtins-x86_64 := x86_64
 Arch.profile-x86_64 := x86_64
+Arch.san-x86_64 := x86_64
+Arch.asan-x86_64 := x86_64
+Arch.asan_cxx-x86_64 := x86_64
+Arch.tsan-x86_64 := x86_64
+Arch.msan-x86_64 := x86_64
+Arch.ubsan-x86_64 := x86_64
+Arch.ubsan_cxx-x86_64 := x86_64
+Arch.dfsan-x86_64 := x86_64
+Arch.lsan-x86_64 := x86_64
 endif
 
 endif
 
+ifneq ($(LLVM_ANDROID_TOOLCHAIN_DIR),)
+Configs += asan-arm-android
+Arch.asan-arm-android := arm-android
+endif
+
 endif
 
 ###
 
 CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer
+SANITIZER_CFLAGS := -fPIE -fno-builtin -gline-tables-only
 
 CFLAGS.builtins-i386 := $(CFLAGS) -m32
 CFLAGS.builtins-x86_64 := $(CFLAGS) -m64
 CFLAGS.profile-i386 := $(CFLAGS) -m32
 CFLAGS.profile-x86_64 := $(CFLAGS) -m64
+CFLAGS.san-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.san-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.asan-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.asan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.asan_cxx-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.asan_cxx-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.tsan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.msan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.ubsan-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.ubsan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.ubsan_cxx-i386 := $(CFLAGS) -m32 $(SANITIZER_CFLAGS)
+CFLAGS.ubsan_cxx-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS)
+CFLAGS.dfsan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+CFLAGS.lsan-x86_64 := $(CFLAGS) -m64 $(SANITIZER_CFLAGS) -fno-rtti
+
+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) $(SANITIZER_CFLAGS) \
+	$(ANDROID_COMMON_FLAGS) -fno-rtti
+LDFLAGS.asan-arm-android := $(LDFLAGS) $(ANDROID_COMMON_FLAGS) -ldl -lm -llog \
+	-lstdc++ -Wl,-soname=libclang_rt.asan-arm-android.so -Wl,-z,defs
 
 # Use our stub SDK as the sysroot to support more portable building. For now we
 # just do this for the core module, because the stub SDK doesn't have
-# enough support to build the profile runtime.
+# enough support to build the sanitizers or profile runtimes.
 CFLAGS.builtins-i386 += --sysroot=$(ProjSrcRoot)/SDKs/linux
 CFLAGS.builtins-x86_64 += --sysroot=$(ProjSrcRoot)/SDKs/linux
 
@@ -86,6 +132,29 @@ FUNCTIONS.profile-i386 := GCDAProfiling
                           InstrProfilingFile InstrProfilingPlatformOther \
                           InstrProfilingRuntime
 FUNCTIONS.profile-x86_64 := $(FUNCTIONS.profile-i386)
+FUNCTIONS.san-i386 := $(SanitizerCommonFunctions)
+FUNCTIONS.san-x86_64 := $(SanitizerCommonFunctions)
+FUNCTIONS.asan-i386 := $(AsanFunctions) $(InterceptionFunctions) \
+                                        $(SanitizerCommonFunctions)
+FUNCTIONS.asan-x86_64 := $(AsanFunctions) $(InterceptionFunctions) \
+                         $(SanitizerCommonFunctions) $(LsanCommonFunctions)
+FUNCTIONS.asan_cxx-i386 := $(AsanCXXFunctions)
+FUNCTIONS.asan_cxx-x86_64 := $(AsanCXXFunctions)
+FUNCTIONS.asan-arm-android := $(AsanFunctions) $(AsanCXXFunctions) \
+                              $(InterceptionFunctions) \
+                              $(SanitizerCommonFunctions)
+FUNCTIONS.tsan-x86_64 := $(TsanFunctions) $(InterceptionFunctions) \
+                                          $(SanitizerCommonFunctions)
+FUNCTIONS.msan-x86_64 := $(MsanFunctions) $(InterceptionFunctions) \
+                                          $(SanitizerCommonFunctions)
+FUNCTIONS.ubsan-i386 := $(UbsanFunctions)
+FUNCTIONS.ubsan-x86_64 := $(UbsanFunctions)
+FUNCTIONS.ubsan_cxx-i386 := $(UbsanCXXFunctions)
+FUNCTIONS.ubsan_cxx-x86_64 := $(UbsanCXXFunctions)
+FUNCTIONS.dfsan-x86_64 := $(DfsanFunctions) $(InterceptionFunctions) \
+                                            $(SanitizerCommonFunctions)
+FUNCTIONS.lsan-x86_64 := $(LsanFunctions) $(InterceptionFunctions) \
+                                          $(SanitizerCommonFunctions)
 
 # Always use optimized variants.
 OPTIMIZED := 1





More information about the llvm-commits mailing list