diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2017-10-06 21:48:39 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2017-10-06 21:48:39 +0000 |
| commit | accab5908d4137f8e49ae653d14d37ea46132f28 (patch) | |
| tree | d6cae097be98f857f181a5798104761c9d4071eb | |
| parent | 40bd97af348b2f6d45dae469c4a206aed5bd41fa (diff) | |
| download | bcm5719-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.cpp | 12 | ||||
| -rw-r--r-- | lld/ELF/SymbolTable.cpp | 2 | ||||
| -rw-r--r-- | lld/test/ELF/gc-sections-shared.s | 9 |
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: |

