forked from OSchip/llvm-project
Do not link clang_rt.cfi on Android.
Summary: The OS provides cross-dso CFI support starting with Android O. Trapping mode does not require any runtime at all, and diagnostic mode requires just ubsan-standalone. Reviewers: pcc Subscribers: srhines, cfe-commits Differential Revision: https://reviews.llvm.org/D38908 llvm-svn: 315921
This commit is contained in:
parent
79503c035f
commit
d5d36a162d
|
@ -44,6 +44,8 @@ class SanitizerArgs {
|
|||
bool TsanFuncEntryExit = true;
|
||||
bool TsanAtomics = true;
|
||||
bool MinimalRuntime = false;
|
||||
// True if cross-dso CFI support if provided by the system (i.e. Android).
|
||||
bool ImplicitCfiRuntime = false;
|
||||
|
||||
public:
|
||||
/// Parses the sanitizer arguments from an argument list.
|
||||
|
|
|
@ -171,19 +171,23 @@ static SanitizerMask parseSanitizeTrapArgs(const Driver &D,
|
|||
}
|
||||
|
||||
bool SanitizerArgs::needsUbsanRt() const {
|
||||
return ((Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) ||
|
||||
CoverageFeatures) &&
|
||||
!Sanitizers.has(Address) && !Sanitizers.has(Memory) &&
|
||||
!Sanitizers.has(Thread) && !Sanitizers.has(DataFlow) &&
|
||||
!Sanitizers.has(Leak) && !CfiCrossDso;
|
||||
// All of these include ubsan.
|
||||
if (needsAsanRt() || needsMsanRt() || needsTsanRt() || needsDfsanRt() ||
|
||||
needsLsanRt() || needsCfiDiagRt())
|
||||
return false;
|
||||
|
||||
return (Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) ||
|
||||
CoverageFeatures;
|
||||
}
|
||||
|
||||
bool SanitizerArgs::needsCfiRt() const {
|
||||
return !(Sanitizers.Mask & CFI & ~TrapSanitizers.Mask) && CfiCrossDso;
|
||||
return !(Sanitizers.Mask & CFI & ~TrapSanitizers.Mask) && CfiCrossDso &&
|
||||
!ImplicitCfiRuntime;
|
||||
}
|
||||
|
||||
bool SanitizerArgs::needsCfiDiagRt() const {
|
||||
return (Sanitizers.Mask & CFI & ~TrapSanitizers.Mask) && CfiCrossDso;
|
||||
return (Sanitizers.Mask & CFI & ~TrapSanitizers.Mask) && CfiCrossDso &&
|
||||
!ImplicitCfiRuntime;
|
||||
}
|
||||
|
||||
bool SanitizerArgs::requiresPIE() const {
|
||||
|
@ -615,6 +619,8 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
|
|||
TC.getTriple().isAndroid() || TC.getTriple().isOSFuchsia() ||
|
||||
TC.getTriple().isOSDarwin());
|
||||
|
||||
ImplicitCfiRuntime = TC.getTriple().isAndroid();
|
||||
|
||||
if (AllAddedKinds & Address) {
|
||||
NeedPIE |= TC.getTriple().isAndroid() || TC.getTriple().isOSFuchsia();
|
||||
if (Arg *A =
|
||||
|
|
|
@ -508,6 +508,24 @@
|
|||
// CHECK-CFI-CROSS-DSO-DIAG-LINUX: "-whole-archive" "{{[^"]*}}libclang_rt.cfi_diag-x86_64.a" "-no-whole-archive"
|
||||
// CHECK-CFI-CROSS-DSO-DIAG-LINUX: -export-dynamic
|
||||
|
||||
// Cross-DSO CFI on Android does not link runtime libraries.
|
||||
// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso %s -### -o %t.o 2>&1 \
|
||||
// RUN: -target aarch64-linux-android -fuse-ld=ld \
|
||||
// RUN: --sysroot=%S/Inputs/basic_android_tree \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-CFI-CROSS-DSO-ANDROID %s
|
||||
// CHECK-CFI-CROSS-DSO-ANDROID: "{{.*}}ld{{(.exe)?}}"
|
||||
// CHECK-CFI-CROSS-DSO-ANDROID-NOT: libclang_rt.
|
||||
|
||||
// Cross-DSO CFI with diagnostics on Android links just the UBSAN runtime.
|
||||
// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso %s -### -o %t.o 2>&1 \
|
||||
// RUN: -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
|
||||
// RUN: -target aarch64-linux-android -fuse-ld=ld \
|
||||
// RUN: --sysroot=%S/Inputs/basic_android_tree \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-CFI-CROSS-DSO-DIAG-ANDROID %s
|
||||
// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{.*}}ld{{(.exe)?}}"
|
||||
// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{[^"]*}}libclang_rt.ubsan_standalone-aarch64-android.so"
|
||||
// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "-export-dynamic-symbol=__cfi_check"
|
||||
|
||||
// RUN: %clangxx -fsanitize=address %s -### -o %t.o 2>&1 \
|
||||
// RUN: -mmacosx-version-min=10.6 \
|
||||
// RUN: -target x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \
|
||||
|
@ -596,26 +614,6 @@
|
|||
// CHECK-SAFESTACK-ANDROID-AARCH64: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
|
||||
// CHECK-SAFESTACK-ANDROID-AARCH64-NOT: libclang_rt.safestack
|
||||
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
|
||||
// RUN: -target arm-linux-androideabi -fuse-ld=ld -fsanitize=cfi \
|
||||
// RUN: --sysroot=%S/Inputs/basic_android_tree \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-CFI-ANDROID %s
|
||||
//
|
||||
// CHECK-CFI-ANDROID: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
|
||||
// CHECK-CFI-ANDROID-NOT: libclang_rt.cfi
|
||||
// CHECK-CFI-ANDROID-NOT: __cfi_check
|
||||
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
|
||||
// RUN: -target arm-linux-androideabi -fuse-ld=ld -fsanitize=cfi \
|
||||
// RUN: -fsanitize-cfi-cross-dso \
|
||||
// RUN: --sysroot=%S/Inputs/basic_android_tree \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-CROSSDSO-CFI-ANDROID %s
|
||||
//
|
||||
// CHECK-CROSSDSO-CFI-ANDROID: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
|
||||
// CHECK-CROSSDSO-CFI-ANDROID-NOT: libclang_rt.cfi
|
||||
// CHECK-CROSSDSO-CFI-ANDROID: -export-dynamic-symbol=__cfi_check
|
||||
// CHECK-CROSSDSO-CFI-ANDROID-NOT: libclang_rt.cfi
|
||||
|
||||
// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
|
||||
// RUN: -target x86_64-scei-ps4 -fuse-ld=ld \
|
||||
// RUN: -shared \
|
||||
|
|
Loading…
Reference in New Issue