diff options
| -rw-r--r-- | lld/ELF/Config.h | 1 | ||||
| -rw-r--r-- | lld/ELF/ScriptParser.cpp | 17 | ||||
| -rw-r--r-- | lld/ELF/SymbolTable.cpp | 19 | ||||
| -rw-r--r-- | lld/ELF/SymbolTable.h | 2 | ||||
| -rw-r--r-- | lld/ELF/Writer.cpp | 5 | ||||
| -rw-r--r-- | lld/test/ELF/dynamic-list-preempt.s | 65 |
6 files changed, 4 insertions, 105 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index 59745cd0817..45c9565e210 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -104,7 +104,6 @@ struct Configuration { std::vector<llvm::StringRef> SearchPaths; std::vector<llvm::StringRef> SymbolOrderingFile; std::vector<llvm::StringRef> Undefined; - std::vector<SymbolVersion> DynamicList; std::vector<SymbolVersion> VersionScriptGlobals; std::vector<SymbolVersion> VersionScriptLocals; std::vector<uint8_t> BuildIdVector; diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index 6f0dd879a2d..fdeeafd39fc 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -175,22 +175,9 @@ static ExprValue bitOr(ExprValue A, ExprValue B) { void ScriptParser::readDynamicList() { expect("{"); - std::vector<SymbolVersion> Locals; - std::vector<SymbolVersion> Globals; - std::tie(Locals, Globals) = readSymbols(); - expect(";"); - - if (!atEOF()) { + readAnonymousDeclaration(); + if (!atEOF()) setError("EOF expected, but got " + next()); - return; - } - if (!Locals.empty()) { - setError("\"local:\" scope not supported in --dynamic-list"); - return; - } - - for (SymbolVersion V : Globals) - Config->DynamicList.push_back(V); } void ScriptParser::readVersionScript() { diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index 9962b2554e0..ec8ae5d75bb 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -680,24 +680,6 @@ void SymbolTable::handleAnonymousVersion() { assignWildcardVersion(Ver, VER_NDX_LOCAL); } -// Handles -dynamic-list. -void SymbolTable::handleDynamicList() { - for (SymbolVersion &Ver : Config->DynamicList) { - std::vector<SymbolBody *> Syms; - if (Ver.HasWildcard) - Syms = findByVersion(Ver); - else - Syms = findAllByVersion(Ver); - - for (SymbolBody *B : Syms) { - if (!Config->Shared) - B->symbol()->VersionId = VER_NDX_GLOBAL; - else if (B->symbol()->includeInDynsym()) - B->IsPreemptible = true; - } - } -} - // Set symbol versions to symbols. This function handles patterns // containing no wildcard characters. void SymbolTable::assignExactVersion(SymbolVersion Ver, uint16_t VersionId, @@ -747,7 +729,6 @@ void SymbolTable::assignWildcardVersion(SymbolVersion Ver, uint16_t VersionId) { void SymbolTable::scanVersionScript() { // Handle edge cases first. handleAnonymousVersion(); - handleDynamicList(); // Now we have version definitions, so we need to set version ids to symbols. // Each version definition has a glob pattern, and all symbols that match diff --git a/lld/ELF/SymbolTable.h b/lld/ELF/SymbolTable.h index 6c094073e6c..3127cd66690 100644 --- a/lld/ELF/SymbolTable.h +++ b/lld/ELF/SymbolTable.h @@ -90,8 +90,6 @@ public: void trace(StringRef Name); - void handleDynamicList(); - private: std::vector<SymbolBody *> findByVersion(SymbolVersion Ver); std::vector<SymbolBody *> findAllByVersion(SymbolVersion Ver); diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index e61efb39ca6..e12de224c15 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1219,9 +1219,8 @@ template <class ELFT> void Writer<ELFT>::finalizeSections() { applySynthetic({In<ELFT>::EhFrame}, [](SyntheticSection *SS) { SS->finalizeContents(); }); - if (Config->DynamicList.empty()) - for (Symbol *S : Symtab->getSymbols()) - S->body()->IsPreemptible = computeIsPreemptible(*S->body()); + for (Symbol *S : Symtab->getSymbols()) + S->body()->IsPreemptible = computeIsPreemptible(*S->body()); // Scan relocations. This must be done after every symbol is declared so that // we can correctly decide if a dynamic relocation is needed. diff --git a/lld/test/ELF/dynamic-list-preempt.s b/lld/test/ELF/dynamic-list-preempt.s deleted file mode 100644 index 487aa9fa106..00000000000 --- a/lld/test/ELF/dynamic-list-preempt.s +++ /dev/null @@ -1,65 +0,0 @@ -# REQUIRES: x86 - -# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o -# RUN: echo "{ foo; zed; };" > %t.list -# RUN: echo "{ global: foo; bar; local: *; };" > %t.vers -# RUN: ld.lld -fatal-warnings -dynamic-list %t.list -version-script %t.vers -shared %t.o -o %t.so -# RUN: llvm-readobj -r %t.so | FileCheck --check-prefix=RELOCS %s -# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck --check-prefix=DYNSYMS %s - -# RELOCS: Relocations [ -# RELOCS-NEXT: Section ({{.*}}) .rela.plt { -# RELOCS-NEXT: R_X86_64_JUMP_SLOT foo 0x0 -# RELOCS-NEXT: } -# RELOCS-NEXT: ] - -# DYNSYMS: DynamicSymbols [ -# DYNSYMS-NEXT: Symbol { -# DYNSYMS-NEXT: Name: @ (0) -# DYNSYMS-NEXT: Value: 0x0 -# DYNSYMS-NEXT: Size: 0 -# DYNSYMS-NEXT: Binding: Local -# DYNSYMS-NEXT: Type: None -# DYNSYMS-NEXT: Other: 0 -# DYNSYMS-NEXT: Section: Undefined -# DYNSYMS-NEXT: } -# DYNSYMS-NEXT: Symbol { -# DYNSYMS-NEXT: Name: bar@ -# DYNSYMS-NEXT: Value: -# DYNSYMS-NEXT: Size: -# DYNSYMS-NEXT: Binding: Global -# DYNSYMS-NEXT: Type: -# DYNSYMS-NEXT: Other: -# DYNSYMS-NEXT: Section: -# DYNSYMS-NEXT: } -# DYNSYMS-NEXT: Symbol { -# DYNSYMS-NEXT: Name: foo@ -# DYNSYMS-NEXT: Value: -# DYNSYMS-NEXT: Size: -# DYNSYMS-NEXT: Binding: Global -# DYNSYMS-NEXT: Type: -# DYNSYMS-NEXT: Other: -# DYNSYMS-NEXT: Section: -# DYNSYMS-NEXT: } -# DYNSYMS-NEXT: ] - - .globl foo -foo: - ret - - .globl bar -bar: - ret - - .globl baz -baz: - ret - - .globl zed -zed: - ret - - call foo@PLT - call bar@PLT - call baz@PLT - call zed@PLT |

