[clang] Add -fsanitize=memtag-globals (no-op).
Adds the -fsanitize plumbing for memtag-globals. Makes -fsanitize=memtag imply -fsanitize=memtag-globals. This has no effect on codegen for now. Reviewed By: eugenis, aaron.ballman Differential Revision: https://reviews.llvm.org/D127163
This commit is contained in:
parent
8010d7e044
commit
45d88cd008
|
@ -49,6 +49,8 @@ FEATURE(memtag_stack,
|
|||
LangOpts.Sanitize.has(SanitizerKind::MemtagStack))
|
||||
FEATURE(memtag_heap,
|
||||
LangOpts.Sanitize.has(SanitizerKind::MemtagHeap))
|
||||
FEATURE(memtag_globals,
|
||||
LangOpts.Sanitize.has(SanitizerKind::MemtagGlobals))
|
||||
FEATURE(xray_instrument, LangOpts.XRayInstrument)
|
||||
FEATURE(undefined_behavior_sanitizer,
|
||||
LangOpts.Sanitize.hasOneOf(SanitizerKind::Undefined))
|
||||
|
|
|
@ -58,7 +58,8 @@ SANITIZER("kernel-hwaddress", KernelHWAddress)
|
|||
// A variant of AddressSanitizer using AArch64 MTE extension.
|
||||
SANITIZER("memtag-stack", MemtagStack)
|
||||
SANITIZER("memtag-heap", MemtagHeap)
|
||||
SANITIZER_GROUP("memtag", MemTag, MemtagStack | MemtagHeap)
|
||||
SANITIZER("memtag-globals", MemtagGlobals)
|
||||
SANITIZER_GROUP("memtag", MemTag, MemtagStack | MemtagHeap | MemtagGlobals)
|
||||
|
||||
// MemorySanitizer
|
||||
SANITIZER("memory", Memory)
|
||||
|
|
|
@ -99,13 +99,18 @@ public:
|
|||
bool needsStatsRt() const { return Stats; }
|
||||
bool needsScudoRt() const { return Sanitizers.has(SanitizerKind::Scudo); }
|
||||
|
||||
bool hasMemTag() const { return hasMemtagHeap() || hasMemtagStack(); }
|
||||
bool hasMemTag() const {
|
||||
return hasMemtagHeap() || hasMemtagStack() || hasMemtagGlobals();
|
||||
}
|
||||
bool hasMemtagHeap() const {
|
||||
return Sanitizers.has(SanitizerKind::MemtagHeap);
|
||||
}
|
||||
bool hasMemtagStack() const {
|
||||
return Sanitizers.has(SanitizerKind::MemtagStack);
|
||||
}
|
||||
bool hasMemtagGlobals() const {
|
||||
return Sanitizers.has(SanitizerKind::MemtagGlobals);
|
||||
}
|
||||
const std::string &getMemtagMode() const {
|
||||
assert(!MemtagMode.empty());
|
||||
return MemtagMode;
|
||||
|
|
|
@ -45,7 +45,8 @@ static const SanitizerMask SupportsCoverage =
|
|||
SanitizerKind::Address | SanitizerKind::HWAddress |
|
||||
SanitizerKind::KernelAddress | SanitizerKind::KernelHWAddress |
|
||||
SanitizerKind::MemtagStack | SanitizerKind::MemtagHeap |
|
||||
SanitizerKind::Memory | SanitizerKind::KernelMemory | SanitizerKind::Leak |
|
||||
SanitizerKind::MemtagGlobals | SanitizerKind::Memory |
|
||||
SanitizerKind::KernelMemory | SanitizerKind::Leak |
|
||||
SanitizerKind::Undefined | SanitizerKind::Integer | SanitizerKind::Bounds |
|
||||
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
|
||||
SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
|
||||
|
@ -73,7 +74,8 @@ static const SanitizerMask CFIClasses =
|
|||
SanitizerKind::CFIUnrelatedCast;
|
||||
static const SanitizerMask CompatibleWithMinimalRuntime =
|
||||
TrappingSupported | SanitizerKind::Scudo | SanitizerKind::ShadowCallStack |
|
||||
SanitizerKind::MemtagStack | SanitizerKind::MemtagHeap;
|
||||
SanitizerKind::MemtagStack | SanitizerKind::MemtagHeap |
|
||||
SanitizerKind::MemtagGlobals;
|
||||
|
||||
enum CoverageFeature {
|
||||
CoverageFunc = 1 << 0,
|
||||
|
|
|
@ -193,9 +193,9 @@
|
|||
// RUN: %clang -target x86_64-linux-android -fsanitize=memtag -fno-rtti %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-BAD-ARCH
|
||||
// CHECK-SANMT-BAD-ARCH: unsupported option '-fsanitize=memtag' for target
|
||||
|
||||
// RUN: %clang -target aarch64-linux -fsanitize=memtag -march=armv8-a+memtag %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-MT
|
||||
// RUN: %clang -target aarch64-linux-android31 -fsanitize=memtag -march=armv8-a+memtag %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-MT
|
||||
// CHECK-SANMT-MT: "-target-feature" "+mte"
|
||||
// CHECK-SANMT-MT-SAME: "-fsanitize=memtag-stack,memtag-heap"
|
||||
// CHECK-SANMT-MT-SAME: "-fsanitize=memtag-stack,memtag-heap,memtag-globals"
|
||||
|
||||
// RUN: %clang -target aarch64-linux -fsanitize=memtag %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-SANMT-NOMT-0
|
||||
// CHECK-SANMT-NOMT-0: '-fsanitize=memtag-stack' requires hardware support (+memtag)
|
||||
|
@ -827,7 +827,7 @@
|
|||
// CHECK-INTSAN-MINIMAL: "-fsanitize-minimal-runtime"
|
||||
|
||||
// RUN: %clang -target aarch64-linux-android -march=armv8-a+memtag -fsanitize=memtag -fsanitize-minimal-runtime %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-MEMTAG-MINIMAL
|
||||
// CHECK-MEMTAG-MINIMAL: "-fsanitize=memtag-stack,memtag-heap"
|
||||
// CHECK-MEMTAG-MINIMAL: "-fsanitize=memtag-stack,memtag-heap,memtag-globals"
|
||||
// CHECK-MEMTAG-MINIMAL: "-fsanitize-minimal-runtime"
|
||||
|
||||
// RUN: %clang -target x86_64-linux-gnu -fsanitize=undefined -fsanitize=function -fsanitize-minimal-runtime %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-UBSAN-FUNCTION-MINIMAL
|
||||
|
|
Loading…
Reference in a new issue