Skip to content

Commit d7c7941

Browse files
committed
[CompilerRT] Remove ubsan static runtime on Apple
This patch removes the static ubsan runtime on Apple devices. The motivation is to reduce the toolchain size. rdar://102061519 Differential Revision: https://reviews.llvm.org/D141550
1 parent be35333 commit d7c7941

File tree

5 files changed

+28
-19
lines changed

5 files changed

+28
-19
lines changed

clang/include/clang/Basic/DiagnosticDriverKinds.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ def err_drv_malformed_sanitizer_coverage_allowlist : Error<
210210
"malformed sanitizer coverage allowlist: '%0'">;
211211
def err_drv_malformed_sanitizer_coverage_ignorelist : Error<
212212
"malformed sanitizer coverage ignorelist: '%0'">;
213+
def err_drv_unsupported_static_ubsan_darwin : Error<
214+
"static UndefinedBehaviorSanitizer runtime is not supported on darwin">;
213215
def err_drv_duplicate_config : Error<
214216
"no more than one option '--config' is allowed">;
215217
def err_drv_config_file_not_exist : Error<

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,15 +1580,22 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,
15801580
}
15811581

15821582
const SanitizerArgs &Sanitize = getSanitizerArgs(Args);
1583+
1584+
if (!Sanitize.needsSharedRt() && Sanitize.needsUbsanRt()) {
1585+
getDriver().Diag(diag::err_drv_unsupported_static_ubsan_darwin);
1586+
return;
1587+
}
1588+
15831589
if (Sanitize.needsAsanRt())
15841590
AddLinkSanitizerLibArgs(Args, CmdArgs, "asan");
15851591
if (Sanitize.needsLsanRt())
15861592
AddLinkSanitizerLibArgs(Args, CmdArgs, "lsan");
1587-
if (Sanitize.needsUbsanRt())
1593+
if (Sanitize.needsUbsanRt()) {
1594+
assert(Sanitize.needsSharedRt() && "Static sanitizer runtimes not supported");
15881595
AddLinkSanitizerLibArgs(Args, CmdArgs,
15891596
Sanitize.requiresMinimalRuntime() ? "ubsan_minimal"
1590-
: "ubsan",
1591-
Sanitize.needsSharedRt());
1597+
: "ubsan");
1598+
}
15921599
if (Sanitize.needsTsanRt())
15931600
AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan");
15941601
if (Sanitize.needsFuzzer() && !Args.hasArg(options::OPT_dynamiclib)) {

clang/test/Driver/sanitizer-ld.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,7 @@
423423
// RUN: --target=x86_64-apple-darwin -fuse-ld=ld -static-libsan \
424424
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
425425
// RUN: | FileCheck --check-prefix=CHECK-UBSAN-STATIC-DARWIN %s
426-
// CHECK-UBSAN-STATIC-DARWIN: "{{.*}}ld{{(.exe)?}}"
427-
// CHECK-UBSAN-STATIC-DARWIN: "{{.*}}libclang_rt.ubsan_osx.a"
426+
// CHECK-UBSAN-STATIC-DARWIN: {{.*}}error: static UndefinedBehaviorSanitizer runtime is not supported on darwin
428427

429428
// RUN: %clang -fsanitize=address,undefined -### %s 2>&1 \
430429
// RUN: --target=i386-unknown-linux -fuse-ld=ld \

compiler-rt/lib/ubsan/CMakeLists.txt

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,21 @@ if(APPLE)
114114
LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
115115
PARENT_TARGET ubsan)
116116

117-
add_compiler_rt_runtime(clang_rt.ubsan
118-
STATIC
119-
OS ${UBSAN_SUPPORTED_OS}
120-
ARCHS ${UBSAN_SUPPORTED_ARCH}
121-
OBJECT_LIBS RTUbsan
122-
RTUbsan_standalone
123-
RTSanitizerCommonNoHooks
124-
RTSanitizerCommonLibcNoHooks
125-
RTSanitizerCommonCoverage
126-
RTSanitizerCommonSymbolizerNoHooks
127-
RTInterception
128-
LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
129-
PARENT_TARGET ubsan)
117+
if (NOT APPLE)
118+
add_compiler_rt_runtime(clang_rt.ubsan
119+
STATIC
120+
OS ${UBSAN_SUPPORTED_OS}
121+
ARCHS ${UBSAN_SUPPORTED_ARCH}
122+
OBJECT_LIBS RTUbsan
123+
RTUbsan_standalone
124+
RTSanitizerCommonNoHooks
125+
RTSanitizerCommonLibcNoHooks
126+
RTSanitizerCommonCoverage
127+
RTSanitizerCommonSymbolizerNoHooks
128+
RTInterception
129+
LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
130+
PARENT_TARGET ubsan)
131+
endif()
130132
endif()
131133

132134
else()

compiler-rt/test/ubsan/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ if(APPLE)
101101
set(UBSAN_TEST_TARGET_ARCH ${arch})
102102
get_test_cc_for_arch(${arch} UBSAN_TEST_TARGET_CC UBSAN_TEST_TARGET_CFLAGS)
103103
set(UBSAN_TEST_TARGET_CFLAGS "${UBSAN_TEST_TARGET_CFLAGS} -lc++abi")
104-
add_ubsan_testsuites("StandaloneStatic" ubsan ${arch})
105104
endforeach()
106105

107106
# Device and simulator test suites.

0 commit comments

Comments
 (0)