summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2017-10-06 21:48:39 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2017-10-06 21:48:39 +0000
commitaccab5908d4137f8e49ae653d14d37ea46132f28 (patch)
treed6cae097be98f857f181a5798104761c9d4071eb
parent40bd97af348b2f6d45dae469c4a206aed5bd41fa (diff)
downloadbcm5719-llvm-accab5908d4137f8e49ae653d14d37ea46132f28.tar.gz
bcm5719-llvm-accab5908d4137f8e49ae653d14d37ea46132f28.zip
Revert r315114, "ELF: Export preempted symbols even if there is a dynamic list."
For some reason the symbols get emitted in the wrong order on one of the buildbots: http://bb9.pgr.jp/#builders/15/builds/180 llvm-svn: 315116
-rw-r--r--lld/ELF/Driver.cpp12
-rw-r--r--lld/ELF/SymbolTable.cpp2
-rw-r--r--lld/test/ELF/gc-sections-shared.s9
3 files changed, 12 insertions, 11 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index c259a172084..0a003ee6225 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -790,8 +790,18 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
readDynamicList(*Buffer);
for (auto *Arg : Args.filtered(OPT_export_dynamic_symbol))
- Config->DynamicList.push_back(
+ Config->VersionScriptGlobals.push_back(
{Arg->getValue(), /*IsExternCpp*/ false, /*HasWildcard*/ false});
+
+ // Dynamic lists are a simplified linker script that doesn't need the
+ // "global:" and implicitly ends with a "local:*". Set the variables
+ // needed to simulate that.
+ if (Args.hasArg(OPT_dynamic_list) ||
+ Args.hasArg(OPT_export_dynamic_symbol)) {
+ Config->ExportDynamic = true;
+ if (!Config->Shared)
+ Config->DefaultSymbolVersion = VER_NDX_LOCAL;
+ }
}
if (auto *Arg = Args.getLastArg(OPT_version_script))
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 2f90043d3ba..2564c677fe4 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -733,7 +733,7 @@ void SymbolTable::handleDynamicList() {
for (SymbolBody *B : Syms) {
if (!Config->Shared)
- B->symbol()->ExportDynamic = true;
+ B->symbol()->VersionId = VER_NDX_GLOBAL;
else if (B->symbol()->includeInDynsym())
B->IsPreemptible = true;
}
diff --git a/lld/test/ELF/gc-sections-shared.s b/lld/test/ELF/gc-sections-shared.s
index ffb4219e832..efb21faee6b 100644
--- a/lld/test/ELF/gc-sections-shared.s
+++ b/lld/test/ELF/gc-sections-shared.s
@@ -19,15 +19,6 @@
# 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