[Clang][ASan] Teach Clang to not emit ASan module destructors when compiling with `-mkernel` or `-fapple-kext`.

rdar://71609176

Differential Revision: https://reviews.llvm.org/D96573
This commit is contained in:
Dan Liew 2021-02-11 18:56:14 -08:00
parent 5d64dd8e3c
commit fdce098b49
2 changed files with 21 additions and 0 deletions

View File

@ -825,6 +825,12 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
AsanInvalidPointerSub = true;
}
if (TC.getTriple().isOSDarwin() &&
(Args.hasArg(options::OPT_mkernel) ||
Args.hasArg(options::OPT_fapple_kext))) {
AsanDtorKind = llvm::AsanDtorKind::None;
}
if (const auto *Arg =
Args.getLastArg(options::OPT_sanitize_address_destructor_kind_EQ)) {
auto parsedAsanDtorKind = AsanDtorKindFromString(Arg->getValue());

View File

@ -0,0 +1,15 @@
// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -mkernel -### \
// RUN: %s 2>&1 | FileCheck %s
// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -fapple-kext \
// RUN: -### %s 2>&1 | FileCheck %s
// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -fapple-kext \
// RUN: -mkernel -### %s 2>&1 | FileCheck %s
// CHECK: "-fsanitize-address-destructor-kind=none"
// Check it's possible to override the driver's decision.
// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=address -fapple-kext \
// RUN: -mkernel -### -fsanitize-address-destructor-kind=global %s 2>&1 | \
// RUN: FileCheck -check-prefix=CHECK-OVERRIDE %s
// CHECK-OVERRIDE: "-fsanitize-address-destructor-kind=global"