| Index: src/IceASanInstrumentation.cpp
|
| diff --git a/src/IceASanInstrumentation.cpp b/src/IceASanInstrumentation.cpp
|
| index e7c531bdec2030f062926a6246affa827c8a5d0b..3978706a1ab5a13c123de5d1677838b09c81aa9b 100644
|
| --- a/src/IceASanInstrumentation.cpp
|
| +++ b/src/IceASanInstrumentation.cpp
|
| @@ -363,6 +363,24 @@ void ASanInstrumentation::instrumentCall(LoweringContext &Context,
|
|
|
| void ASanInstrumentation::instrumentLoad(LoweringContext &Context,
|
| InstLoad *Instr) {
|
| + Operand *Src = Instr->getSourceAddress();
|
| + if (auto *Reloc = llvm::dyn_cast<ConstantRelocatable>(Src)) {
|
| + std::string SrcName = Reloc->getName().toStringOrEmpty();
|
| + assert(!SrcName.empty());
|
| + StringMap::const_iterator SrcSub = FuncSubstitutions.find(SrcName);
|
| + if (SrcSub != FuncSubstitutions.end()) {
|
| + auto *NewSrc = ConstantRelocatable::create(
|
| + Ctx, Reloc->getType(),
|
| + RelocatableTuple(Reloc->getOffset(), RelocOffsetArray(0),
|
| + Ctx->getGlobalString(SrcSub->second),
|
| + Reloc->getEmitString()));
|
| + auto *NewLoad = InstLoad::create(Context.getNode()->getCfg(),
|
| + Instr->getDest(), NewSrc);
|
| + Instr->setDeleted();
|
| + Context.insert(NewLoad);
|
| + Instr = NewLoad;
|
| + }
|
| + }
|
| Constant *Func =
|
| Ctx->getConstantExternSym(Ctx->getGlobalString("__asan_check_load"));
|
| instrumentAccess(Context, Instr->getSourceAddress(),
|
|
|