diff options
author | van Hauser <vh@thc.org> | 2020-04-08 12:52:14 +0200 |
---|---|---|
committer | van Hauser <vh@thc.org> | 2020-04-09 10:23:37 +0200 |
commit | 1d1f575b5c1c40e26cc9e183bbc526e5dc1bd4cf (patch) | |
tree | f2b405207a063e88d78884939dc084768526fbcb /llvm_mode/afl-llvm-pass.so.cc | |
parent | ecdffa03f811748f096d4ecdf9d6f2e0f6e5cd51 (diff) | |
download | afl++-1d1f575b5c1c40e26cc9e183bbc526e5dc1bd4cf.tar.gz |
add missing piece for CTX coverage
Diffstat (limited to 'llvm_mode/afl-llvm-pass.so.cc')
-rw-r--r-- | llvm_mode/afl-llvm-pass.so.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm_mode/afl-llvm-pass.so.cc b/llvm_mode/afl-llvm-pass.so.cc index 31d00fec..058ab71f 100644 --- a/llvm_mode/afl-llvm-pass.so.cc +++ b/llvm_mode/afl-llvm-pass.so.cc @@ -682,6 +682,22 @@ bool AFLCoverage::runOnModule(Module &M) { } + // in CTX mode we have to restore the original context for the caller - + // she might be calling other functions which need the correct CTX + if (ctx_str) { + + Instruction *Inst = BB.getTerminator(); + if (isa<ReturnInst>(Inst) || isa<ResumeInst>(Inst)) { + + IRBuilder<> Post_IRB(Inst); + StoreInst * RestoreCtx = Post_IRB.CreateStore(PrevCtx, AFLContext); + RestoreCtx->setMetadata(M.getMDKindID("nosanitize"), + MDNode::get(C, None)); + + } + + } + inst_blocks++; } |