[lld] r311497 - Revert r311468: If --dynamic-list is given, only those symbols are preemptible

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 7 14:50:06 PDT 2017


Do you still have the URL?

If not would you be OK with me committing this again and watching the
bots?

Thanks,
Rafael

Rui Ueyama via llvm-commits <llvm-commits at lists.llvm.org> writes:

> Author: ruiu
> Date: Tue Aug 22 14:54:58 2017
> New Revision: 311497
>
> URL: http://llvm.org/viewvc/llvm-project?rev=311497&view=rev
> Log:
> Revert r311468: If --dynamic-list is given, only those symbols are preemptible
>
> This reverts commit r311468 because it broke some CFI bots.
>
> 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=311497&r1=311496&r2=311497&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Config.h (original)
> +++ lld/trunk/ELF/Config.h Tue Aug 22 14:54:58 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=311497&r1=311496&r2=311497&view=diff
> ==============================================================================
> --- lld/trunk/ELF/ScriptParser.cpp (original)
> +++ lld/trunk/ELF/ScriptParser.cpp Tue Aug 22 14:54:58 2017
> @@ -175,22 +175,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=311497&r1=311496&r2=311497&view=diff
> ==============================================================================
> --- lld/trunk/ELF/SymbolTable.cpp (original)
> +++ lld/trunk/ELF/SymbolTable.cpp Tue Aug 22 14:54:58 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=311497&r1=311496&r2=311497&view=diff
> ==============================================================================
> --- lld/trunk/ELF/SymbolTable.h (original)
> +++ lld/trunk/ELF/SymbolTable.h Tue Aug 22 14:54:58 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=311497&r1=311496&r2=311497&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Writer.cpp (original)
> +++ lld/trunk/ELF/Writer.cpp Tue Aug 22 14:54:58 2017
> @@ -1219,9 +1219,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=311496&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
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list