mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
[msan] allow -fsanitize-coverage=N together with -fsanitize=memory, llvm part
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223312 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a78929d201
commit
0fd28b40a4
@ -1036,7 +1036,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
IRBuilder<> IRB(I.getNextNode());
|
||||
Type *ShadowTy = getShadowTy(&I);
|
||||
Value *Addr = I.getPointerOperand();
|
||||
if (PropagateShadow) {
|
||||
if (PropagateShadow && !I.getMetadata("nosanitize")) {
|
||||
Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
|
||||
setShadow(&I,
|
||||
IRB.CreateAlignedLoad(ShadowPtr, I.getAlignment(), "_msld"));
|
||||
|
@ -166,7 +166,8 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
|
||||
bool SanitizerCoverageModule::runOnFunction(Function &F) {
|
||||
if (F.empty()) return false;
|
||||
// For now instrument only functions that will also be asan-instrumented.
|
||||
if (!F.hasFnAttribute(Attribute::SanitizeAddress))
|
||||
if (!F.hasFnAttribute(Attribute::SanitizeAddress) &&
|
||||
!F.hasFnAttribute(Attribute::SanitizeMemory))
|
||||
return false;
|
||||
if (CoverageLevel >= 3)
|
||||
SplitAllCriticalEdges(F, this);
|
||||
@ -273,6 +274,8 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F,
|
||||
LoadInst *Load = IRB.CreateLoad(Guard);
|
||||
Load->setAtomic(Monotonic);
|
||||
Load->setAlignment(1);
|
||||
Load->setMetadata(F.getParent()->getMDKindID("nosanitize"),
|
||||
MDNode::get(*C, ArrayRef<llvm::Value *>()));
|
||||
Value *Cmp = IRB.CreateICmpEQ(Constant::getNullValue(Int8Ty), Load);
|
||||
Instruction *Ins = SplitBlockAndInsertIfThen(
|
||||
Cmp, IP, false, MDBuilder(*C).createBranchWeights(1, 100000));
|
||||
|
@ -33,7 +33,7 @@ entry:
|
||||
; CHECK0-NOT: call void @__sanitizer_cov_module_init(
|
||||
|
||||
; CHECK1-LABEL: define void @foo
|
||||
; CHECK1: %0 = load atomic i8* @__sancov_gen_cov_foo monotonic, align 1
|
||||
; CHECK1: %0 = load atomic i8* @__sancov_gen_cov_foo monotonic, align 1, !nosanitize
|
||||
; CHECK1: %1 = icmp eq i8 0, %0
|
||||
; CHECK1: br i1 %1, label %2, label %3
|
||||
; CHECK1: call void @__sanitizer_cov(i8*{{.*}})
|
||||
|
Loading…
Reference in New Issue
Block a user