[clang] [compiler-rt] PREVIEW: Introduce realtime sanitizer backend (PR #91529)

2024-05-08 Thread Chris Apple via cfe-commits

https://github.com/cjappl edited https://github.com/llvm/llvm-project/pull/91529
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [compiler-rt] PREVIEW: Introduce realtime sanitizer backend (PR #91529)

2024-05-08 Thread via cfe-commits

llvmbot wrote:



@llvm/pr-subscribers-clang-driver

@llvm/pr-subscribers-clang

Author: Chris Apple (cjappl)


Changes



This introduces a nice self contained piece

All interceptors
All infrastructure "boilerplate" cmake
All unit tests (no lit tests)
Minimal meddling in clang, just to get the tests running

Unit tests for this RUN which I think is what makes this a great chunk.


---

Patch is 70.54 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/91529.diff


30 Files Affected:

- (modified) clang/include/clang/Basic/Sanitizers.def (+3) 
- (modified) clang/include/clang/Driver/SanitizerArgs.h (+1) 
- (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+6) 
- (modified) clang/lib/Driver/ToolChains/Darwin.cpp (+8) 
- (modified) clang/lib/Driver/ToolChains/Linux.cpp (+1) 
- (modified) clang/runtime/CMakeLists.txt (+1) 
- (modified) compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake (+3) 
- (modified) compiler-rt/cmake/config-ix.cmake (+11-1) 
- (added) compiler-rt/lib/radsan/CMakeLists.txt (+92) 
- (added) compiler-rt/lib/radsan/radsan.cpp (+38) 
- (added) compiler-rt/lib/radsan/radsan.h (+76) 
- (added) compiler-rt/lib/radsan/radsan_context.cpp (+82) 
- (added) compiler-rt/lib/radsan/radsan_context.h (+38) 
- (added) compiler-rt/lib/radsan/radsan_interceptors.cpp (+412) 
- (added) compiler-rt/lib/radsan/radsan_interceptors.h (+15) 
- (added) compiler-rt/lib/radsan/radsan_preinit.cpp (+23) 
- (added) compiler-rt/lib/radsan/radsan_stack.cpp (+52) 
- (added) compiler-rt/lib/radsan/radsan_stack.h (+15) 
- (added) compiler-rt/lib/radsan/tests/CMakeLists.txt (+103) 
- (added) compiler-rt/lib/radsan/tests/radsan_test.cpp (+203) 
- (added) compiler-rt/lib/radsan/tests/radsan_test_context.cpp (+69) 
- (added) compiler-rt/lib/radsan/tests/radsan_test_interceptors.cpp (+454) 
- (added) compiler-rt/lib/radsan/tests/radsan_test_main.cpp (+17) 
- (added) compiler-rt/lib/radsan/tests/radsan_test_utilities.h (+49) 
- (added) compiler-rt/test/radsan/CMakeLists.txt (+47) 
- (added) compiler-rt/test/radsan/Unit/lit.site.cfg.py.in (+25) 
- (added) compiler-rt/test/radsan/lit.cfg.py (+69) 
- (added) compiler-rt/test/radsan/lit.site.cfg.py.in (+17) 
- (modified) compiler-rt/test/sanitizer_common/CMakeLists.txt (+1-1) 
- (modified) compiler-rt/test/sanitizer_common/lit.common.cfg.py (+3) 


``diff
diff --git a/clang/include/clang/Basic/Sanitizers.def 
b/clang/include/clang/Basic/Sanitizers.def
index b228ffd07ee74..ffb23974fe371 100644
--- a/clang/include/clang/Basic/Sanitizers.def
+++ b/clang/include/clang/Basic/Sanitizers.def
@@ -37,6 +37,9 @@
 #endif
 
 
+// RealtimeSanitizer
+SANITIZER("realtime", Realtime)
+
 // AddressSanitizer
 SANITIZER("address", Address)
 
diff --git a/clang/include/clang/Driver/SanitizerArgs.h 
b/clang/include/clang/Driver/SanitizerArgs.h
index 07070ec4fc065..dd7c128232772 100644
--- a/clang/include/clang/Driver/SanitizerArgs.h
+++ b/clang/include/clang/Driver/SanitizerArgs.h
@@ -79,6 +79,7 @@ class SanitizerArgs {
   bool needsStableAbi() const { return StableABI; }
 
   bool needsMemProfRt() const { return NeedsMemProfRt; }
+  bool needsRadsanRt() const { return Sanitizers.has(SanitizerKind::Realtime); 
}
   bool needsAsanRt() const { return Sanitizers.has(SanitizerKind::Address); }
   bool needsHwasanRt() const {
 return Sanitizers.has(SanitizerKind::HWAddress);
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 6796b43a15502..6508c4ca690b5 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -1357,6 +1357,8 @@ collectSanitizerRuntimes(const ToolChain , const 
ArgList ,
   if (!Args.hasArg(options::OPT_shared))
 HelperStaticRuntimes.push_back("hwasan-preinit");
 }
+if (SanArgs.needsRadsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("radsan");
   }
 
   // The stats_client library is also statically linked into DSOs.
@@ -1382,6 +1384,10 @@ collectSanitizerRuntimes(const ToolChain , const 
ArgList ,
   StaticRuntimes.push_back("asan_cxx");
   }
 
+  if (!SanArgs.needsSharedRt() && SanArgs.needsRadsanRt() && 
SanArgs.linkRuntimes()) {
+StaticRuntimes.push_back("radsan");
+  }
+
   if (!SanArgs.needsSharedRt() && SanArgs.needsMemProfRt()) {
 StaticRuntimes.push_back("memprof");
 if (SanArgs.linkCXXRuntimes())
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index caf6c4a444fdc..cb96f9992ab7f 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -1487,6 +1487,8 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList 
,
 const char *sanitizer = nullptr;
 if (Sanitize.needsUbsanRt()) {
   sanitizer = "UndefinedBehaviorSanitizer";
+} else if (Sanitize.needsRadsanRt()) {
+  sanitizer = "RealtimeSanitizer";
 } else if (Sanitize.needsAsanRt()) {
   

[clang] [compiler-rt] PREVIEW: Introduce realtime sanitizer backend (PR #91529)

2024-05-08 Thread Chris Apple via cfe-commits

cjappl wrote:

Sorry, premature!!

https://github.com/llvm/llvm-project/pull/91529
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [compiler-rt] PREVIEW: Introduce realtime sanitizer backend (PR #91529)

2024-05-08 Thread Chris Apple via cfe-commits

https://github.com/cjappl closed https://github.com/llvm/llvm-project/pull/91529
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits