Skip to content

Commit

Permalink
[BOLT] Ignore duplicate global symbols
Browse files Browse the repository at this point in the history
We noticed some binaries with duplicated global symbol
entries (same name, address and size). Ignore them as it is possibly a
bug in the linker, and continue processing, unless the symbol has a
different size or address.

Reviewed By: #bolt, maksfb

Differential Revision: https://reviews.llvm.org/D136122
  • Loading branch information
rafaelauler committed Oct 19, 2022
1 parent 925be4e commit c0d954a
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion bolt/lib/Rewrite/RewriteInstance.cpp
Expand Up @@ -966,7 +966,19 @@ void RewriteInstance::discoverFileObjects() {
if (Name.empty()) {
UniqueName = "ANONYMOUS." + std::to_string(AnonymousId++);
} else if (cantFail(Symbol.getFlags()) & SymbolRef::SF_Global) {
assert(!BC->getBinaryDataByName(Name) && "global name not unique");
if (const BinaryData *BD = BC->getBinaryDataByName(Name)) {
if (BD->getSize() == ELFSymbolRef(Symbol).getSize() &&
BD->getAddress() == Address) {
if (opts::Verbosity > 1)
errs() << "BOLT-WARNING: ignoring duplicate global symbol " << Name
<< "\n";
// Ignore duplicate entry - possibly a bug in the linker
continue;
}
errs() << "BOLT-ERROR: bad input binary, global symbol \"" << Name
<< "\" is not unique\n";
exit(1);
}
UniqueName = Name;
} else {
// If we have a local file name, we should create 2 variants for the
Expand Down

0 comments on commit c0d954a

Please sign in to comment.