forked from OSchip/llvm-project
[UBSan] Use shared library for UBSan on OS X (compiler-rt part).
Summary: Switch to shared library for UBSan. Add support for building UBSan on OSX and iossim by cargo-culting ASan build rules. Test Plan: regression test suite Reviewers: zaks.anna, kubabrecka Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8473 llvm-svn: 233036
This commit is contained in:
parent
498f3c3416
commit
c4eb977b0f
|
@ -304,7 +304,8 @@ if(APPLE)
|
||||||
set(DARWIN_iossim_CFLAGS
|
set(DARWIN_iossim_CFLAGS
|
||||||
-mios-simulator-version-min=7.0 -isysroot ${IOSSIM_SDK_DIR})
|
-mios-simulator-version-min=7.0 -isysroot ${IOSSIM_SDK_DIR})
|
||||||
set(DARWIN_osx_LINKFLAGS -mmacosx-version-min=${SANITIZER_MIN_OSX_VERSION}
|
set(DARWIN_osx_LINKFLAGS -mmacosx-version-min=${SANITIZER_MIN_OSX_VERSION}
|
||||||
-stdlib=libc++)
|
-stdlib=libc++
|
||||||
|
-lc++abi)
|
||||||
set(DARWIN_iossim_LINKFLAGS
|
set(DARWIN_iossim_LINKFLAGS
|
||||||
-Wl,-ios_simulator_version_min,7.0.0
|
-Wl,-ios_simulator_version_min,7.0.0
|
||||||
-mios-simulator-version-min=7.0
|
-mios-simulator-version-min=7.0
|
||||||
|
|
|
@ -22,13 +22,19 @@ set(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CFLAGS})
|
||||||
add_custom_target(ubsan)
|
add_custom_target(ubsan)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
# Build universal binary on APPLE.
|
foreach(os ${SANITIZER_COMMON_SUPPORTED_DARWIN_OS})
|
||||||
add_compiler_rt_osx_static_runtime(clang_rt.ubsan_osx
|
add_compiler_rt_darwin_object_library(RTUbsan ${os}
|
||||||
ARCH ${UBSAN_SUPPORTED_ARCH}
|
ARCH ${UBSAN_SUPPORTED_ARCH}
|
||||||
SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES}
|
SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES}
|
||||||
$<TARGET_OBJECTS:RTSanitizerCommon.osx>
|
CFLAGS ${UBSAN_CXXFLAGS})
|
||||||
CFLAGS ${UBSAN_CXXFLAGS})
|
|
||||||
add_dependencies(ubsan clang_rt.ubsan_osx)
|
add_compiler_rt_darwin_dynamic_runtime(clang_rt.ubsan_${os}_dynamic ${os}
|
||||||
|
ARCH ${UBSAN_SUPPORTED_ARCH}
|
||||||
|
SOURCES $<TARGET_OBJECTS:RTUbsan.${os}>
|
||||||
|
$<TARGET_OBJECTS:RTSanitizerCommon.${os}>)
|
||||||
|
|
||||||
|
add_dependencies(ubsan clang_rt.ubsan_${os}_dynamic)
|
||||||
|
endforeach()
|
||||||
else()
|
else()
|
||||||
# Build separate libraries for each target.
|
# Build separate libraries for each target.
|
||||||
foreach(arch ${UBSAN_SUPPORTED_ARCH})
|
foreach(arch ${UBSAN_SUPPORTED_ARCH})
|
||||||
|
|
|
@ -119,8 +119,11 @@ UniversalArchs.asan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,asan_o
|
||||||
Configs += asan_iossim_dynamic
|
Configs += asan_iossim_dynamic
|
||||||
UniversalArchs.asan_iossim_dynamic := $(call CheckArches,i386 x86_64,asan_iossim_dynamic,$(IOSSIM_SDK))
|
UniversalArchs.asan_iossim_dynamic := $(call CheckArches,i386 x86_64,asan_iossim_dynamic,$(IOSSIM_SDK))
|
||||||
|
|
||||||
Configs += ubsan_osx
|
Configs += ubsan_osx_dynamic
|
||||||
UniversalArchs.ubsan_osx := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx,$(OSX_SDK))
|
UniversalArchs.ubsan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx_dynamic,$(OSX_SDK))
|
||||||
|
|
||||||
|
Configs += ubsan_iossim_dynamic
|
||||||
|
UniversalArchs.ubsan_iossim_dynamic := $(call CheckArches,i386 x86_64,ubsan_iossim_dynamic,$(IOSSIM_SDK))
|
||||||
|
|
||||||
# Darwin 10.6 has a bug in cctools that makes it unable to use ranlib on our ARM
|
# 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
|
# object files. If we are on that platform, strip out all ARM archs. We still
|
||||||
|
@ -172,24 +175,33 @@ IOSSIM_DEPLOYMENT_ARGS += -isysroot $(IOSSIM_SDK)
|
||||||
CFLAGS.eprintf := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
|
CFLAGS.eprintf := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
|
||||||
CFLAGS.10.4 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
|
CFLAGS.10.4 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
|
||||||
|
|
||||||
|
SANITIZER_MACOSX_DEPLOYMENT_ARGS := -mmacosx-version-min=10.7
|
||||||
|
SANITIZER_IOSSIM_DEPLOYMENT_ARGS := -mios-simulator-version-min=7.0 \
|
||||||
|
-isysroot $(IOSSIM_SDK)
|
||||||
|
SANITIZER_CFLAGS := -fno-builtin -gline-tables-only
|
||||||
|
|
||||||
CFLAGS.asan_osx_dynamic := \
|
CFLAGS.asan_osx_dynamic := \
|
||||||
$(CFLAGS) -mmacosx-version-min=10.7 \
|
$(CFLAGS) $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) \
|
||||||
|
$(SANITIZER_CFLAGS) \
|
||||||
-stdlib=libc++ \
|
-stdlib=libc++ \
|
||||||
-fno-builtin \
|
|
||||||
-gline-tables-only \
|
|
||||||
-DMAC_INTERPOSE_FUNCTIONS=1 \
|
-DMAC_INTERPOSE_FUNCTIONS=1 \
|
||||||
-DASAN_DYNAMIC=1
|
-DASAN_DYNAMIC=1
|
||||||
|
|
||||||
CFLAGS.asan_iossim_dynamic := \
|
CFLAGS.asan_iossim_dynamic := \
|
||||||
$(CFLAGS) -mios-simulator-version-min=7.0 \
|
$(CFLAGS) $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) \
|
||||||
-isysroot $(IOSSIM_SDK) \
|
$(SANITIZER_CFLAGS) \
|
||||||
-fno-builtin \
|
|
||||||
-gline-tables-only \
|
|
||||||
-DMAC_INTERPOSE_FUNCTIONS=1 \
|
-DMAC_INTERPOSE_FUNCTIONS=1 \
|
||||||
-DASAN_DYNAMIC=1
|
-DASAN_DYNAMIC=1
|
||||||
|
|
||||||
CFLAGS.ubsan_osx := $(CFLAGS) -mmacosx-version-min=10.6 \
|
CFLAGS.ubsan_osx_dynamic := \
|
||||||
-fno-builtin
|
$(CFLAGS) $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) \
|
||||||
|
$(SANITIZER_CFLAGS) \
|
||||||
|
-stdlib=libc++
|
||||||
|
|
||||||
|
CFLAGS.ubsan_iossim_dynamic := \
|
||||||
|
$(CFLAGS) $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) \
|
||||||
|
$(SANITIZER_CFLAGS)
|
||||||
|
|
||||||
|
|
||||||
CFLAGS.ios.i386 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
|
CFLAGS.ios.i386 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
|
||||||
CFLAGS.ios.x86_64 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
|
CFLAGS.ios.x86_64 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
|
||||||
|
@ -220,24 +232,29 @@ CFLAGS.profile_ios.armv7k := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
|
||||||
CFLAGS.profile_ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
|
CFLAGS.profile_ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
|
||||||
CFLAGS.profile_ios.arm64 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
|
CFLAGS.profile_ios.arm64 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
|
||||||
|
|
||||||
# Configure the asan_osx_dynamic library to be built shared.
|
SANITIZER_LDFLAGS := -undefined dynamic_lookup
|
||||||
SHARED_LIBRARY.asan_osx_dynamic := 1
|
|
||||||
LDFLAGS.asan_osx_dynamic := -lc++ -undefined dynamic_lookup -install_name @rpath/libclang_rt.asan_osx_dynamic.dylib \
|
SHARED_LIBRARY.asan_osx_dynamic := 1
|
||||||
-mmacosx-version-min=10.7
|
LDFLAGS.asan_osx_dynamic := -lc++ $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.asan_osx_dynamic.dylib \
|
||||||
|
$(SANITIZER_MACOSX_DEPLOYMENT_ARGS)
|
||||||
|
|
||||||
# Configure the asan_iossim_dynamic library to be built shared.
|
|
||||||
SHARED_LIBRARY.asan_iossim_dynamic := 1
|
SHARED_LIBRARY.asan_iossim_dynamic := 1
|
||||||
# configure+make uses Clang, so we're using isysroot instead of --sysroot
|
LDFLAGS.asan_iossim_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.asan_iossim_dynamic.dylib \
|
||||||
# or -Wl,-syslibroot.
|
-Wl,-ios_simulator_version_min,7.0.0 $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS)
|
||||||
LDFLAGS.asan_iossim_dynamic := -undefined dynamic_lookup -install_name @rpath/libclang_rt.asan_iossim_dynamic.dylib \
|
|
||||||
-Wl,-ios_simulator_version_min,7.0.0 \
|
SHARED_LIBRARY.ubsan_osx_dynamic := 1
|
||||||
-mios-simulator-version-min=7.0 -isysroot $(IOSSIM_SDK)
|
LDFLAGS.ubsan_osx_dynamic := -lc++ $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.ubsan_osx_dynamic.dylib \
|
||||||
|
$(SANITIZER_MACOSX_DEPLOYMENT_ARGS)
|
||||||
|
|
||||||
|
SHARED_LIBRARY.ubsan_iossim_dynamic := 1
|
||||||
|
LDFLAGS.ubsan_iossim_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.ubsan_iossim_dynamic.dylib \
|
||||||
|
-Wl,-ios_simulator_version_min,7.0.0 $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS)
|
||||||
|
|
||||||
ifneq ($(OSX_SDK),)
|
ifneq ($(OSX_SDK),)
|
||||||
CFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK)
|
CFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK)
|
||||||
LDFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK)
|
LDFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK)
|
||||||
CFLAGS.ubsan_osx += -isysroot $(OSX_SDK)
|
CFLAGS.ubsan_osx_dynamic += -isysroot $(OSX_SDK)
|
||||||
LDFLAGS.ubsan_osx += -isysroot $(OSX_SDK)
|
LDFLAGS.ubsan_osx_dynamic += -isysroot $(OSX_SDK)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
FUNCTIONS.eprintf := eprintf
|
FUNCTIONS.eprintf := eprintf
|
||||||
|
@ -260,15 +277,18 @@ FUNCTIONS.profile_ios := $(FUNCTIONS.profile_osx)
|
||||||
FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
|
FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
|
||||||
$(InterceptionFunctions) \
|
$(InterceptionFunctions) \
|
||||||
$(SanitizerCommonFunctions) \
|
$(SanitizerCommonFunctions) \
|
||||||
$(AsanDynamicFunctions)
|
$(AsanDynamicFunctions)
|
||||||
|
|
||||||
FUNCTIONS.asan_iossim_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
|
FUNCTIONS.asan_iossim_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
|
||||||
$(InterceptionFunctions) \
|
$(InterceptionFunctions) \
|
||||||
$(SanitizerCommonFunctions) \
|
$(SanitizerCommonFunctions) \
|
||||||
$(AsanDynamicFunctions)
|
$(AsanDynamicFunctions)
|
||||||
|
|
||||||
FUNCTIONS.ubsan_osx := $(UbsanFunctions) $(UbsanCXXFunctions) \
|
FUNCTIONS.ubsan_osx_dynamic := $(UbsanFunctions) $(UbsanCXXFunctions) \
|
||||||
$(SanitizerCommonFunctions)
|
$(SanitizerCommonFunctions)
|
||||||
|
|
||||||
|
FUNCTIONS.ubsan_iossim_dynamic := $(UbsanFunctions) $(UbsanCXXFunctions) \
|
||||||
|
$(SanitizerCommonFunctions)
|
||||||
|
|
||||||
CCKEXT_PROFILE_FUNCTIONS := \
|
CCKEXT_PROFILE_FUNCTIONS := \
|
||||||
InstrProfiling \
|
InstrProfiling \
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
// RUN: %clangxx -frtti -fsanitize=vptr -fno-sanitize-recover=vptr -g %s -O3 -o %t
|
// RUN: %clangxx -frtti -fsanitize=vptr -fno-sanitize-recover=vptr -g %s -O3 -o %t
|
||||||
// RUN: not %run %t 2>&1 | FileCheck %s
|
// RUN: not %run %t 2>&1 | FileCheck %s
|
||||||
|
|
||||||
// FIXME: This test produces linker errors on Darwin.
|
|
||||||
// XFAIL: darwin
|
|
||||||
|
|
||||||
struct S { virtual int f() { return 0; } };
|
struct S { virtual int f() { return 0; } };
|
||||||
struct T : virtual S {};
|
struct T : virtual S {};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue