https://github.com/nathanchance created 
https://github.com/llvm/llvm-project/pull/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.


>From 555acfb8a863ada66b1b09ae9c40b734dfb417c3 Mon Sep 17 00:00:00 2001
From: Nathan Chancellor <[email protected]>
Date: Tue, 2 Sep 2025 14:51:49 -0700
Subject: [PATCH] [Frontend] Define __SANITIZE__ macros for kernel address
 variants

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.
---
 clang/lib/Frontend/InitPreprocessor.cpp        | 6 ++++--
 clang/test/Preprocessor/sanitizer-predefines.c | 2 ++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Frontend/InitPreprocessor.cpp 
b/clang/lib/Frontend/InitPreprocessor.cpp
index 4865c0b889044..afb6be8c959b8 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -1519,9 +1519,11 @@ static void InitializePredefinedMacros(const TargetInfo 
&TI,
   if (TI.getTriple().isOSBinFormatELF())
     Builder.defineMacro("__ELF__");
 
-  if (LangOpts.Sanitize.has(SanitizerKind::Address))
+  if (LangOpts.Sanitize.has(SanitizerKind::Address) ||
+      LangOpts.Sanitize.has(SanitizerKind::KernelAddress))
     Builder.defineMacro("__SANITIZE_ADDRESS__");
-  if (LangOpts.Sanitize.has(SanitizerKind::HWAddress))
+  if (LangOpts.Sanitize.has(SanitizerKind::HWAddress) ||
+      LangOpts.Sanitize.has(SanitizerKind::KernelHWAddress))
     Builder.defineMacro("__SANITIZE_HWADDRESS__");
   if (LangOpts.Sanitize.has(SanitizerKind::Thread))
     Builder.defineMacro("__SANITIZE_THREAD__");
diff --git a/clang/test/Preprocessor/sanitizer-predefines.c 
b/clang/test/Preprocessor/sanitizer-predefines.c
index 9d2f6bf2517a2..d903a40de050f 100644
--- a/clang/test/Preprocessor/sanitizer-predefines.c
+++ b/clang/test/Preprocessor/sanitizer-predefines.c
@@ -1,7 +1,9 @@
 // RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=address %s 
| FileCheck %s --check-prefix=ASAN
+// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux 
-fsanitize=kernel-address %s | FileCheck %s --check-prefix=ASAN
 // ASAN: #define __SANITIZE_ADDRESS__ 1
 
 // RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=hwaddress 
%s | FileCheck %s --check-prefix=HWASAN
+// RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux 
-fsanitize=kernel-hwaddress %s | FileCheck %s --check-prefix=HWASAN
 // HWASAN: #define __SANITIZE_HWADDRESS__ 1
 
 // RUN: %clang_cc1 -E -dM -triple aarch64-unknown-linux -fsanitize=thread %s | 
FileCheck %s --check-prefix=TSAN

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to