[lld] r312771 - Revert "Revert "Revert r311468: If --dynamic-list is given, only those symbols are preemptible""
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 7 18:09:52 PDT 2017
Author: rafael
Date: Thu Sep 7 18:09:52 2017
New Revision: 312771
URL: http://llvm.org/viewvc/llvm-project?rev=312771&view=rev
Log:
Revert "Revert "Revert r311468: If --dynamic-list is given, only those symbols are preemptible""
This reverts commit r312757.
Evgenii Stepanov reports that it broke some tests.
Removed:
lld/trunk/test/ELF/dynamic-list-preempt.s
Modified:
lld/trunk/ELF/Config.h
lld/trunk/ELF/ScriptParser.cpp
lld/trunk/ELF/SymbolTable.cpp
lld/trunk/ELF/SymbolTable.h
lld/trunk/ELF/Writer.cpp
Modified: lld/trunk/ELF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=312771&r1=312770&r2=312771&view=diff
==============================================================================
--- lld/trunk/ELF/Config.h (original)
+++ lld/trunk/ELF/Config.h Thu Sep 7 18:09:52 2017
@@ -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;
Modified: lld/trunk/ELF/ScriptParser.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ScriptParser.cpp?rev=312771&r1=312770&r2=312771&view=diff
==============================================================================
--- lld/trunk/ELF/ScriptParser.cpp (original)
+++ lld/trunk/ELF/ScriptParser.cpp Thu Sep 7 18:09:52 2017
@@ -180,22 +180,9 @@ static ExprValue bitOr(ExprValue A, Expr
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() {
Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=312771&r1=312770&r2=312771&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Thu Sep 7 18:09:52 2017
@@ -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(
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
Modified: lld/trunk/ELF/SymbolTable.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.h?rev=312771&r1=312770&r2=312771&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.h (original)
+++ lld/trunk/ELF/SymbolTable.h Thu Sep 7 18:09:52 2017
@@ -90,8 +90,6 @@ public:
void trace(StringRef Name);
- void handleDynamicList();
-
private:
std::vector<SymbolBody *> findByVersion(SymbolVersion Ver);
std::vector<SymbolBody *> findAllByVersion(SymbolVersion Ver);
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=312771&r1=312770&r2=312771&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Thu Sep 7 18:09:52 2017
@@ -1294,9 +1294,8 @@ template <class ELFT> void Writer<ELFT>:
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.
Removed: lld/trunk/test/ELF/dynamic-list-preempt.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/dynamic-list-preempt.s?rev=312770&view=auto
==============================================================================
--- lld/trunk/test/ELF/dynamic-list-preempt.s (original)
+++ lld/trunk/test/ELF/dynamic-list-preempt.s (removed)
@@ -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 at PLT
- call bar at PLT
- call baz at PLT
- call zed at PLT
More information about the llvm-commits
mailing list