Why Is registerName Executed Twice for a Symbol?
Closed this issue · 1 comments
CcWeapon commented
In bolt/lib/Rewrite/RewriteInstance.cpp::RewriteInstance::discoverFileObjects,I find there are 2 registerName() for a symbol。
Is the first registerName redundant?
if (PreviousFunction && PreviousFunction->containsAddress(Address) &&
PreviousFunction->getAddress() != Address) {
if (PreviousFunction->isSymbolValidInScope(Symbol, SymbolSize)) {
if (opts::Verbosity >= 1)
outs() << "BOLT-INFO: skipping possibly another entry for function "
<< *PreviousFunction << " : " << UniqueName << '\n';
} else {
outs() << "BOLT-INFO: using " << UniqueName << " as another entry to "
<< "function " << *PreviousFunction << '\n';
registerName(0);
PreviousFunction->addEntryPointAtOffset(Address -
PreviousFunction->getAddress());
// Remove the symbol from FileSymRefs so that we can skip it from
// in the future.
auto SI = FileSymRefs.find(Address);
assert(SI != FileSymRefs.end() && "symbol expected to be present");
assert(SI->second == Symbol && "wrong symbol found");
FileSymRefs.erase(SI);
}
registerName(SymbolSize);
continue;
}
maksfb commented
Thanks for pointing this out. Indeed, there was no reason for calling the function twice.