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 &TC, const
ArgList &Args,
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 &TC, const
ArgList &Args,
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
&Args,
const char *sanitizer = nullptr;
if (Sanitize.needsUbsanRt()) {
sanitizer = "UndefinedBehaviorSanitizer";
+} else if (Sanitize.needsRadsanRt()) {
+ sanitizer = "RealtimeSanitizer";
} else if (Sanitize.needs