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());
|
IRBuilder<> IRB(I.getNextNode());
|
||||||
Type *ShadowTy = getShadowTy(&I);
|
Type *ShadowTy = getShadowTy(&I);
|
||||||
Value *Addr = I.getPointerOperand();
|
Value *Addr = I.getPointerOperand();
|
||||||
if (PropagateShadow) {
|
if (PropagateShadow && !I.getMetadata("nosanitize")) {
|
||||||
Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
|
Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
|
||||||
setShadow(&I,
|
setShadow(&I,
|
||||||
IRB.CreateAlignedLoad(ShadowPtr, I.getAlignment(), "_msld"));
|
IRB.CreateAlignedLoad(ShadowPtr, I.getAlignment(), "_msld"));
|
||||||
|
@ -166,7 +166,8 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
|
|||||||
bool SanitizerCoverageModule::runOnFunction(Function &F) {
|
bool SanitizerCoverageModule::runOnFunction(Function &F) {
|
||||||
if (F.empty()) return false;
|
if (F.empty()) return false;
|
||||||
// For now instrument only functions that will also be asan-instrumented.
|
// 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;
|
return false;
|
||||||
if (CoverageLevel >= 3)
|
if (CoverageLevel >= 3)
|
||||||
SplitAllCriticalEdges(F, this);
|
SplitAllCriticalEdges(F, this);
|
||||||
@ -273,6 +274,8 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F,
|
|||||||
LoadInst *Load = IRB.CreateLoad(Guard);
|
LoadInst *Load = IRB.CreateLoad(Guard);
|
||||||
Load->setAtomic(Monotonic);
|
Load->setAtomic(Monotonic);
|
||||||
Load->setAlignment(1);
|
Load->setAlignment(1);
|
||||||
|
Load->setMetadata(F.getParent()->getMDKindID("nosanitize"),
|
||||||
|
MDNode::get(*C, ArrayRef<llvm::Value *>()));
|
||||||
Value *Cmp = IRB.CreateICmpEQ(Constant::getNullValue(Int8Ty), Load);
|
Value *Cmp = IRB.CreateICmpEQ(Constant::getNullValue(Int8Ty), Load);
|
||||||
Instruction *Ins = SplitBlockAndInsertIfThen(
|
Instruction *Ins = SplitBlockAndInsertIfThen(
|
||||||
Cmp, IP, false, MDBuilder(*C).createBranchWeights(1, 100000));
|
Cmp, IP, false, MDBuilder(*C).createBranchWeights(1, 100000));
|
||||||
|
@ -33,7 +33,7 @@ entry:
|
|||||||
; CHECK0-NOT: call void @__sanitizer_cov_module_init(
|
; CHECK0-NOT: call void @__sanitizer_cov_module_init(
|
||||||
|
|
||||||
; CHECK1-LABEL: define void @foo
|
; 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: %1 = icmp eq i8 0, %0
|
||||||
; CHECK1: br i1 %1, label %2, label %3
|
; CHECK1: br i1 %1, label %2, label %3
|
||||||
; CHECK1: call void @__sanitizer_cov(i8*{{.*}})
|
; CHECK1: call void @__sanitizer_cov(i8*{{.*}})
|
||||||
|
Loading…
Reference in New Issue
Block a user