diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-12-09 14:12:02 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-12-09 14:12:02 +0000 |
commit | 6239ce6889b7c51726ba6be0c84f3aaf2932fce1 (patch) | |
tree | 913df8d667658912744d20d98207932d0c19abe8 | |
parent | 0546e845c06275e0d232203eedec9b94e9528c44 (diff) | |
download | bcm5719-llvm-6239ce6889b7c51726ba6be0c84f3aaf2932fce1.tar.gz bcm5719-llvm-6239ce6889b7c51726ba6be0c84f3aaf2932fce1.zip |
Give preempting symbols precedence over linker script.
llvm-svn: 289212
-rw-r--r-- | lld/ELF/SymbolTable.cpp | 6 | ||||
-rw-r--r-- | lld/test/ELF/gc-sections-shared.s | 9 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index 25e435d9e58..de6960b1779 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -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()) diff --git a/lld/test/ELF/gc-sections-shared.s b/lld/test/ELF/gc-sections-shared.s index a88f2b44347..f1ac9cd345d 100644 --- a/lld/test/ELF/gc-sections-shared.s +++ b/lld/test/ELF/gc-sections-shared.s @@ -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: |