Skip to content

Commit 01be0de

Browse files
committed
[ASan] Add metadata to renamed instructions so ASan doesn't use the incorrect name
1 parent f9d6d46 commit 01be0de

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

llvm/lib/IR/ValueSymbolTable.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ ValueName *ValueSymbolTable::createValueName(StringRef Name, Value *V) {
123123
}
124124

125125
// Otherwise, there is a naming conflict. Rename this value.
126+
// If we are renaming an instruction, ASan needs to know for it to serialize properly
127+
if(auto* I = dyn_cast<Instruction>(V)){
128+
MDString* trueNameMetadata = MDString::get(V->getContext(), Name);
129+
llvm::MDTuple* tuple = llvm::MDTuple::get(V->getContext(), trueNameMetadata);
130+
I->setMetadata("OriginalName", tuple);
131+
}
126132
SmallString<256> UniqueName(Name.begin(), Name.end());
127133
return makeUniqueName(V, UniqueName);
128134
}

llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3430,7 +3430,12 @@ void FunctionStackPoisoner::processStaticAllocas() {
34303430
SmallVector<ASanStackVariableDescription, 16> SVD;
34313431
SVD.reserve(AllocaVec.size());
34323432
for (AllocaInst *AI : AllocaVec) {
3433-
ASanStackVariableDescription D = {AI->getName().data(),
3433+
std::string Name = AI->getName().data();
3434+
if(AI->hasMetadata("OriginalName")){
3435+
MDTuple* tuple = dyn_cast<MDTuple>(AI->getMetadata("OriginalName"));
3436+
Name = dyn_cast<MDString>(tuple->getOperand(0))->getString();
3437+
}
3438+
ASanStackVariableDescription D = {Name.c_str(),
34343439
ASan.getAllocaSizeInBytes(*AI),
34353440
0,
34363441
AI->getAlign().value(),

0 commit comments

Comments
 (0)