Merge llvm commits for kernel address and memory sanitizer support
Merge commit 99eca1bd9c7a from llvm git (by Mark Johnston): [Driver] Enable kernel address and memory sanitizers on FreeBSD Test Plan: using kernel ASAN and MSAN implementations in FreeBSD Reviewed By: emaste, dim, arichardson Differential Revision: https://reviews.llvm.org/D98286 Merge commit f511dc75e4c1 from llvm git (by Mark Johnston): [asan] Add an offset for the kernel address sanitizer on FreeBSD This is based on a port of the sanitizer runtime to the FreeBSD kernel that has been commited as https://cgit.freebsd.org/src/commit/?id=38da497a4dfcf1979c8c2b0e9f3fa0564035c147 and the following commits. Reviewed By: emaste, dim Differential Revision: https://reviews.llvm.org/D98285 Requested by: markj MFC after: 3 days
This commit is contained in:
parent
f17c4e38f5
commit
1b00608b26
@ -459,6 +459,7 @@ bool FreeBSD::IsUnwindTablesDefault(const ArgList &Args) const { return true; }
|
||||
bool FreeBSD::isPIEDefault() const { return getSanitizerArgs().requiresPIE(); }
|
||||
|
||||
SanitizerMask FreeBSD::getSupportedSanitizers() const {
|
||||
const bool IsAArch64 = getTriple().getArch() == llvm::Triple::aarch64;
|
||||
const bool IsX86 = getTriple().getArch() == llvm::Triple::x86;
|
||||
const bool IsX86_64 = getTriple().getArch() == llvm::Triple::x86_64;
|
||||
const bool IsMIPS64 = getTriple().isMIPS64();
|
||||
@ -477,8 +478,13 @@ SanitizerMask FreeBSD::getSupportedSanitizers() const {
|
||||
Res |= SanitizerKind::Fuzzer;
|
||||
Res |= SanitizerKind::FuzzerNoLink;
|
||||
}
|
||||
if (IsX86_64)
|
||||
if (IsAArch64 || IsX86_64) {
|
||||
Res |= SanitizerKind::KernelAddress;
|
||||
Res |= SanitizerKind::KernelMemory;
|
||||
}
|
||||
if (IsX86_64) {
|
||||
Res |= SanitizerKind::Memory;
|
||||
}
|
||||
return Res;
|
||||
}
|
||||
|
||||
|
@ -107,6 +107,7 @@ static const uint64_t kMIPS64_ShadowOffset64 = 1ULL << 37;
|
||||
static const uint64_t kAArch64_ShadowOffset64 = 1ULL << 36;
|
||||
static const uint64_t kFreeBSD_ShadowOffset32 = 1ULL << 30;
|
||||
static const uint64_t kFreeBSD_ShadowOffset64 = 1ULL << 46;
|
||||
static const uint64_t kFreeBSDKasan_ShadowOffset64 = 0xdffff7c000000000;
|
||||
static const uint64_t kNetBSD_ShadowOffset32 = 1ULL << 30;
|
||||
static const uint64_t kNetBSD_ShadowOffset64 = 1ULL << 46;
|
||||
static const uint64_t kNetBSDKasan_ShadowOffset64 = 0xdfff900000000000;
|
||||
@ -489,9 +490,12 @@ static ShadowMapping getShadowMapping(Triple &TargetTriple, int LongSize,
|
||||
Mapping.Offset = kPPC64_ShadowOffset64;
|
||||
else if (IsSystemZ)
|
||||
Mapping.Offset = kSystemZ_ShadowOffset64;
|
||||
else if (IsFreeBSD && !IsMIPS64)
|
||||
Mapping.Offset = kFreeBSD_ShadowOffset64;
|
||||
else if (IsNetBSD) {
|
||||
else if (IsFreeBSD && !IsMIPS64) {
|
||||
if (IsKasan)
|
||||
Mapping.Offset = kFreeBSDKasan_ShadowOffset64;
|
||||
else
|
||||
Mapping.Offset = kFreeBSD_ShadowOffset64;
|
||||
} else if (IsNetBSD) {
|
||||
if (IsKasan)
|
||||
Mapping.Offset = kNetBSDKasan_ShadowOffset64;
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user