Skip to content

Commit df430c3

Browse files
authored
[Frontend] Define __SANITIZE__ macros for kernel address variants (#156543)
GCC defines these macros for both userspace and kernel address sanitizers: $ gcc -E -dM -fsanitize=address -x c /dev/null &| string match -er SANITIZE #define __SANITIZE_ADDRESS__ 1 $ gcc -E -dM -fsanitize=kernel-address -x c /dev/null &| string match -er SANITIZE #define __SANITIZE_ADDRESS__ 1 $ gcc -E -dM -fsanitize=hwaddress -x c /dev/null &| string match -er SANITIZE #define __SANITIZE_HWADDRESS__ 1 $ gcc -E -dM -fsanitize=kernel-hwaddress -x c /dev/null &| string match -er SANITIZE #define __SANITIZE_HWADDRESS__ 1 PR #153888 added these same defines for clang but only for the userspace address sanitizers: $ clang -E -dM -fsanitize=address -x c /dev/null &| string match -er SANITIZE #define __SANITIZE_ADDRESS__ 1 $ clang -E -dM -fsanitize=kernel-address -x c /dev/null &| string match -er SANITIZE $ clang -E -dM -fsanitize=hwaddress -x c /dev/null &| string match -er SANITIZE #define __SANITIZE_HWADDRESS__ 1 $ clang -E -dM -fsanitize=kernel-hwaddress -x c /dev/null &| string match -er SANITIZE Match GCC's behavior so that the Linux kernel can eventually drop its own internal defines.
1 parent c424468 commit df430c3

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

clang/lib/Frontend/InitPreprocessor.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,9 +1519,11 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
15191519
if (TI.getTriple().isOSBinFormatELF())
15201520
Builder.defineMacro("__ELF__");
15211521

1522-
if (LangOpts.Sanitize.has(SanitizerKind::Address))
1522+
if (LangOpts.Sanitize.hasOneOf(SanitizerKind::Address |
1523+
SanitizerKind::KernelAddress))
15231524
Builder.defineMacro("__SANITIZE_ADDRESS__");
1524-
if (LangOpts.Sanitize.has(SanitizerKind::HWAddress))
1525+
if (LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress |
1526+
SanitizerKind::KernelHWAddress))
15251527
Builder.defineMacro("__SANITIZE_HWADDRESS__");
15261528
if (LangOpts.Sanitize.has(SanitizerKind::Thread))
15271529
Builder.defineMacro("__SANITIZE_THREAD__");

clang/test/Preprocessor/sanitizer-predefines.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=address %s | FileCheck %s --check-prefix=ASAN
2+
// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=kernel-address %s | FileCheck %s --check-prefix=ASAN
23
// ASAN: #define __SANITIZE_ADDRESS__ 1
34

45
// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=hwaddress %s | FileCheck %s --check-prefix=HWASAN
6+
// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=kernel-hwaddress %s | FileCheck %s --check-prefix=HWASAN
57
// HWASAN: #define __SANITIZE_HWADDRESS__ 1
68

79
// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=thread %s | FileCheck %s --check-prefix=TSAN

0 commit comments

Comments
 (0)