add realtime sanitizer
This commit is contained in:
parent
bc883e24b8
commit
d198633b95
34 changed files with 240 additions and 38 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue