Skip to content
This repository was archived by the owner on May 21, 2019. It is now read-only.

Commit 652a27a

Browse files
committed
Revert "Revert "[UBSan] Use shared library for UBSan on OS X" and its followup"
Fix the build/tests by providing -lc++abi for UBSan runtime only. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@233122 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent c3dce9d commit 652a27a

File tree

3 files changed

+60
-36
lines changed

3 files changed

+60
-36
lines changed

lib/ubsan/CMakeLists.txt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,20 @@ set(UBSAN_CXXFLAGS ${SANITIZER_COMMON_CFLAGS})
2222
add_custom_target(ubsan)
2323

2424
if(APPLE)
25-
# Build universal binary on APPLE.
26-
add_compiler_rt_osx_static_runtime(clang_rt.ubsan_osx
27-
ARCH ${UBSAN_SUPPORTED_ARCH}
28-
SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES}
29-
$<TARGET_OBJECTS:RTSanitizerCommon.osx>
30-
CFLAGS ${UBSAN_CXXFLAGS})
31-
add_dependencies(ubsan clang_rt.ubsan_osx)
25+
foreach(os ${SANITIZER_COMMON_SUPPORTED_DARWIN_OS})
26+
add_compiler_rt_darwin_object_library(RTUbsan ${os}
27+
ARCH ${UBSAN_SUPPORTED_ARCH}
28+
SOURCES ${UBSAN_SOURCES} ${UBSAN_CXX_SOURCES}
29+
CFLAGS ${UBSAN_CXXFLAGS})
30+
31+
add_compiler_rt_darwin_dynamic_runtime(clang_rt.ubsan_${os}_dynamic ${os}
32+
ARCH ${UBSAN_SUPPORTED_ARCH}
33+
SOURCES $<TARGET_OBJECTS:RTUbsan.${os}>
34+
$<TARGET_OBJECTS:RTSanitizerCommon.${os}>
35+
LINKFLAGS -lc++abi)
36+
37+
add_dependencies(ubsan clang_rt.ubsan_${os}_dynamic)
38+
endforeach()
3239
else()
3340
# Build separate libraries for each target.
3441
foreach(arch ${UBSAN_SUPPORTED_ARCH})

make/platform/clang_darwin.mk

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,11 @@ UniversalArchs.asan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,asan_o
119119
Configs += asan_iossim_dynamic
120120
UniversalArchs.asan_iossim_dynamic := $(call CheckArches,i386 x86_64,asan_iossim_dynamic,$(IOSSIM_SDK))
121121

122-
Configs += ubsan_osx
123-
UniversalArchs.ubsan_osx := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx,$(OSX_SDK))
122+
Configs += ubsan_osx_dynamic
123+
UniversalArchs.ubsan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx_dynamic,$(OSX_SDK))
124+
125+
Configs += ubsan_iossim_dynamic
126+
UniversalArchs.ubsan_iossim_dynamic := $(call CheckArches,i386 x86_64,ubsan_iossim_dynamic,$(IOSSIM_SDK))
124127

125128
# Darwin 10.6 has a bug in cctools that makes it unable to use ranlib on our ARM
126129
# 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)
172175
CFLAGS.eprintf := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
173176
CFLAGS.10.4 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
174177

178+
SANITIZER_MACOSX_DEPLOYMENT_ARGS := -mmacosx-version-min=10.7
179+
SANITIZER_IOSSIM_DEPLOYMENT_ARGS := -mios-simulator-version-min=7.0 \
180+
-isysroot $(IOSSIM_SDK)
181+
SANITIZER_CFLAGS := -fno-builtin -gline-tables-only
182+
175183
CFLAGS.asan_osx_dynamic := \
176-
$(CFLAGS) -mmacosx-version-min=10.7 \
184+
$(CFLAGS) $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) \
185+
$(SANITIZER_CFLAGS) \
177186
-stdlib=libc++ \
178-
-fno-builtin \
179-
-gline-tables-only \
180187
-DMAC_INTERPOSE_FUNCTIONS=1 \
181188
-DASAN_DYNAMIC=1
182189

183190
CFLAGS.asan_iossim_dynamic := \
184-
$(CFLAGS) -mios-simulator-version-min=7.0 \
185-
-isysroot $(IOSSIM_SDK) \
186-
-fno-builtin \
187-
-gline-tables-only \
191+
$(CFLAGS) $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) \
192+
$(SANITIZER_CFLAGS) \
188193
-DMAC_INTERPOSE_FUNCTIONS=1 \
189194
-DASAN_DYNAMIC=1
190195

191-
CFLAGS.ubsan_osx := $(CFLAGS) -mmacosx-version-min=10.6 \
192-
-fno-builtin
196+
CFLAGS.ubsan_osx_dynamic := \
197+
$(CFLAGS) $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) \
198+
$(SANITIZER_CFLAGS) \
199+
-stdlib=libc++
200+
201+
CFLAGS.ubsan_iossim_dynamic := \
202+
$(CFLAGS) $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) \
203+
$(SANITIZER_CFLAGS)
204+
193205

194206
CFLAGS.ios.i386 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
195207
CFLAGS.ios.x86_64 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
@@ -220,24 +232,29 @@ CFLAGS.profile_ios.armv7k := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
220232
CFLAGS.profile_ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
221233
CFLAGS.profile_ios.arm64 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
222234

223-
# Configure the asan_osx_dynamic library to be built shared.
235+
SANITIZER_LDFLAGS := -undefined dynamic_lookup
236+
224237
SHARED_LIBRARY.asan_osx_dynamic := 1
225-
LDFLAGS.asan_osx_dynamic := -lc++ -undefined dynamic_lookup -install_name @rpath/libclang_rt.asan_osx_dynamic.dylib \
226-
-mmacosx-version-min=10.7
238+
LDFLAGS.asan_osx_dynamic := -lc++ $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.asan_osx_dynamic.dylib \
239+
$(SANITIZER_MACOSX_DEPLOYMENT_ARGS)
227240

228-
# Configure the asan_iossim_dynamic library to be built shared.
229241
SHARED_LIBRARY.asan_iossim_dynamic := 1
230-
# configure+make uses Clang, so we're using isysroot instead of --sysroot
231-
# or -Wl,-syslibroot.
232-
LDFLAGS.asan_iossim_dynamic := -undefined dynamic_lookup -install_name @rpath/libclang_rt.asan_iossim_dynamic.dylib \
233-
-Wl,-ios_simulator_version_min,7.0.0 \
234-
-mios-simulator-version-min=7.0 -isysroot $(IOSSIM_SDK)
242+
LDFLAGS.asan_iossim_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.asan_iossim_dynamic.dylib \
243+
-Wl,-ios_simulator_version_min,7.0.0 $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS)
244+
245+
SHARED_LIBRARY.ubsan_osx_dynamic := 1
246+
LDFLAGS.ubsan_osx_dynamic := -lc++ $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.ubsan_osx_dynamic.dylib \
247+
$(SANITIZER_MACOSX_DEPLOYMENT_ARGS)
248+
249+
SHARED_LIBRARY.ubsan_iossim_dynamic := 1
250+
LDFLAGS.ubsan_iossim_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.ubsan_iossim_dynamic.dylib \
251+
-Wl,-ios_simulator_version_min,7.0.0 $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS)
235252

236253
ifneq ($(OSX_SDK),)
237254
CFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK)
238255
LDFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK)
239-
CFLAGS.ubsan_osx += -isysroot $(OSX_SDK)
240-
LDFLAGS.ubsan_osx += -isysroot $(OSX_SDK)
256+
CFLAGS.ubsan_osx_dynamic += -isysroot $(OSX_SDK)
257+
LDFLAGS.ubsan_osx_dynamic += -isysroot $(OSX_SDK)
241258
endif
242259

243260
FUNCTIONS.eprintf := eprintf
@@ -260,15 +277,18 @@ FUNCTIONS.profile_ios := $(FUNCTIONS.profile_osx)
260277
FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
261278
$(InterceptionFunctions) \
262279
$(SanitizerCommonFunctions) \
263-
$(AsanDynamicFunctions)
280+
$(AsanDynamicFunctions)
264281

265282
FUNCTIONS.asan_iossim_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
266283
$(InterceptionFunctions) \
267284
$(SanitizerCommonFunctions) \
268-
$(AsanDynamicFunctions)
285+
$(AsanDynamicFunctions)
286+
287+
FUNCTIONS.ubsan_osx_dynamic := $(UbsanFunctions) $(UbsanCXXFunctions) \
288+
$(SanitizerCommonFunctions)
269289

270-
FUNCTIONS.ubsan_osx := $(UbsanFunctions) $(UbsanCXXFunctions) \
271-
$(SanitizerCommonFunctions)
290+
FUNCTIONS.ubsan_iossim_dynamic := $(UbsanFunctions) $(UbsanCXXFunctions) \
291+
$(SanitizerCommonFunctions)
272292

273293
CCKEXT_PROFILE_FUNCTIONS := \
274294
InstrProfiling \

test/ubsan/TestCases/TypeCheck/vptr-virtual-base.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
// RUN: %clangxx -frtti -fsanitize=vptr -fno-sanitize-recover=vptr -g %s -O3 -o %t
22
// RUN: not %run %t 2>&1 | FileCheck %s
33

4-
// FIXME: This test produces linker errors on Darwin.
5-
// XFAIL: darwin
6-
74
struct S { virtual int f() { return 0; } };
85
struct T : virtual S {};
96

0 commit comments

Comments
 (0)