summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-12-09 14:12:02 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-12-09 14:12:02 +0000
commit6239ce6889b7c51726ba6be0c84f3aaf2932fce1 (patch)
tree913df8d667658912744d20d98207932d0c19abe8
parent0546e845c06275e0d232203eedec9b94e9528c44 (diff)
downloadbcm5719-llvm-6239ce6889b7c51726ba6be0c84f3aaf2932fce1.tar.gz
bcm5719-llvm-6239ce6889b7c51726ba6be0c84f3aaf2932fce1.zip
Give preempting symbols precedence over linker script.
llvm-svn: 289212
-rw-r--r--lld/ELF/SymbolTable.cpp6
-rw-r--r--lld/test/ELF/gc-sections-shared.s9
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:
OpenPOWER on IntegriCloud