Give preempting symbols precedence over linker script.

llvm-svn: 289212
This commit is contained in:
Rafael Espindola 2016-12-09 14:12:02 +00:00
parent 0546e845c0
commit 6239ce6889
2 changed files with 14 additions and 1 deletions

View File

@ -423,8 +423,12 @@ void SymbolTable<ELFT>::addShared(SharedFile<ELFT> *F, StringRef Name,
std::tie(S, WasInserted) =
insert(Name, Sym.getType(), STV_DEFAULT, /*CanOmitFromDynSym*/ true, F);
// Make sure we preempt DSO symbols with default visibility.
if (Sym.getVisibility() == STV_DEFAULT)
if (Sym.getVisibility() == STV_DEFAULT) {
S->ExportDynamic = true;
// Exporting preempting symbols takes precedence over linker scripts.
if (S->VersionId == VER_NDX_LOCAL)
S->VersionId = VER_NDX_GLOBAL;
}
if (WasInserted || isa<Undefined>(S->body())) {
replaceBody<SharedSymbol<ELFT>>(S, F, Name, Sym, Verdef);
if (!S->isWeak())

View File

@ -19,6 +19,15 @@
# CHECK-NEXT: Section: Undefined (0x0)
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name: bar
# CHECK-NEXT: Value:
# CHECK-NEXT: Size:
# CHECK-NEXT: Binding: Global
# CHECK-NEXT: Type:
# CHECK-NEXT: Other:
# CHECK-NEXT: Section: .text
# CHECK-NEXT: }
# CHECK-NEXT: Symbol {
# CHECK-NEXT: Name: bar2
# CHECK-NEXT: Value:
# CHECK-NEXT: Size: