add realtime sanitizer

This commit is contained in:
Lucas Baumann 2025-05-23 14:35:28 +02:00 committed by Lucas Baumann
parent bc883e24b8
commit d198633b95
34 changed files with 240 additions and 38 deletions

View file

@ -38,6 +38,7 @@
#include "llvm/Transforms/Instrumentation/HWAddressSanitizer.h"
#include "llvm/Transforms/Instrumentation/InstrProfiling.h"
#include "llvm/Transforms/Instrumentation/MemorySanitizer.h"
#include "llvm/Transforms/Instrumentation/RealtimeSanitizer.h"
#include "llvm/Transforms/Instrumentation/ThreadSanitizer.h"
#include "llvm/Transforms/Scalar/AnnotationRemarks.h"
#include "llvm/Transforms/Utils/CanonicalizeAliases.h"
@ -531,6 +532,7 @@ struct LLVMRustSanitizerOptions {
bool SanitizeMemory;
bool SanitizeMemoryRecover;
int SanitizeMemoryTrackOrigins;
bool SanitizerRealtime;
bool SanitizeThread;
bool SanitizeHWAddress;
bool SanitizeHWAddressRecover;
@ -786,6 +788,13 @@ extern "C" LLVMRustResult LLVMRustOptimize(
MPM.addPass(HWAddressSanitizerPass(opts));
});
}
if (SanitizerOptions->SanitizerRealtime) {
OptimizerLastEPCallbacks.push_back([](ModulePassManager &MPM,
OptimizationLevel Level,
ThinOrFullLTOPhase phase) {
MPM.addPass(RealtimeSanitizerPass());
});
}
}
ModulePassManager MPM;

View file

@ -246,6 +246,8 @@ enum class LLVMRustAttributeKind {
DeadOnReturn = 44,
CapturesReadOnly = 45,
CapturesNone = 46,
SanitizeRealtimeNonblocking = 47,
SanitizeRealtimeBlocking = 48,
};
static Attribute::AttrKind fromRust(LLVMRustAttributeKind Kind) {
@ -342,6 +344,10 @@ static Attribute::AttrKind fromRust(LLVMRustAttributeKind Kind) {
case LLVMRustAttributeKind::CapturesReadOnly:
case LLVMRustAttributeKind::CapturesNone:
report_fatal_error("Should be handled separately");
case LLVMRustAttributeKind::SanitizeRealtimeNonblocking:
return Attribute::SanitizeRealtime;
case LLVMRustAttributeKind::SanitizeRealtimeBlocking:
return Attribute::SanitizeRealtimeBlocking;
}
report_fatal_error("bad LLVMRustAttributeKind");
}