[lld] r281723 - Reverted r281721 ("[ELF] - Linkerscript: implement EXCLUDE_FILE in the middle of a input section description.").

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 16 06:30:18 PDT 2016


Author: grimar
Date: Fri Sep 16 08:30:18 2016
New Revision: 281723

URL: http://llvm.org/viewvc/llvm-project?rev=281723&view=rev
Log:
Reverted r281721 ("[ELF] - Linkerscript: implement EXCLUDE_FILE in the middle of a input section description.").

It broke build bot:
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/27508

Removed:
    lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple1.s
    lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple2.s
    lld/trunk/test/ELF/linkerscript/exclude-multiple.s
Modified:
    lld/trunk/ELF/LinkerScript.cpp
    lld/trunk/ELF/LinkerScript.h

Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=281723&r1=281722&r2=281723&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Fri Sep 16 08:30:18 2016
@@ -104,10 +104,10 @@ bool LinkerScript<ELFT>::shouldKeep(Inpu
   return false;
 }
 
-static bool fileMatches(const llvm::Regex &FileRe,
-                        const llvm::Regex &ExcludedFileRe, StringRef Filename) {
-  return const_cast<Regex &>(FileRe).match(Filename) &&
-         !const_cast<Regex &>(ExcludedFileRe).match(Filename);
+static bool fileMatches(const InputSectionDescription *Desc,
+                        StringRef Filename) {
+  return const_cast<Regex &>(Desc->FileRe).match(Filename) &&
+         !const_cast<Regex &>(Desc->ExcludedFileRe).match(Filename);
 }
 
 static bool comparePriority(InputSectionData *A, InputSectionData *B) {
@@ -155,21 +155,17 @@ static bool matchConstraints(ArrayRef<In
 template <class ELFT>
 std::vector<InputSectionBase<ELFT> *>
 LinkerScript<ELFT>::getInputSections(const InputSectionDescription *I) {
+  const Regex &Re = I->SectionRe;
   std::vector<InputSectionBase<ELFT> *> Ret;
-  for (const std::pair<llvm::Regex, llvm::Regex> &V : I->SectionsVec) {
-    for (ObjectFile<ELFT> *F : Symtab<ELFT>::X->getObjectFiles()) {
-      if (fileMatches(I->FileRe, V.first, sys::path::filename(F->getName()))) {
-
-        Regex &Re = const_cast<Regex &>(V.second);
-        for (InputSectionBase<ELFT> *S : F->getSections())
-          if (!isDiscarded(S) && !S->OutSec && Re.match(S->Name))
-            Ret.push_back(S);
+  for (ObjectFile<ELFT> *F : Symtab<ELFT>::X->getObjectFiles())
+    if (fileMatches(I, sys::path::filename(F->getName())))
+      for (InputSectionBase<ELFT> *S : F->getSections())
+        if (!isDiscarded(S) && !S->OutSec &&
+            const_cast<Regex &>(Re).match(S->Name))
+          Ret.push_back(S);
 
-        if (Re.match("COMMON"))
-          Ret.push_back(CommonInputSection<ELFT>::X);
-      }
-    }
-  }
+  if (const_cast<Regex &>(Re).match("COMMON"))
+    Ret.push_back(CommonInputSection<ELFT>::X);
   return Ret;
 }
 
@@ -691,7 +687,6 @@ private:
   std::vector<StringRef> readOutputSectionPhdrs();
   InputSectionDescription *readInputSectionDescription(StringRef Tok);
   Regex readFilePatterns();
-  void readSectionExcludes(InputSectionDescription *Cmd);
   InputSectionDescription *readInputSectionRules(StringRef FilePattern);
   unsigned readPhdrType();
   SortKind readSortKind();
@@ -986,41 +981,17 @@ SortKind ScriptParser::readSortKind() {
   return SortNone;
 }
 
-// Method reads a list of sequence of excluded files and section globs given in
-// a following form: ((EXCLUDE_FILE(file_pattern+))? section_pattern+)+
-// Example: *(.foo.1 EXCLUDE_FILE (*a.o) .foo.2 EXCLUDE_FILE (*b.o) .foo.3)
-void ScriptParser::readSectionExcludes(InputSectionDescription *Cmd) {
-  llvm::Regex ExcludeFileRe;
-  std::vector<StringRef> V;
-
-  while (!Error) {
-    if (skip(")")) {
-      Cmd->SectionsVec.push_back(
-          {std::move(ExcludeFileRe), compileGlobPatterns(V)});
-      return;
-    }
-
-    if (skip("EXCLUDE_FILE")) {
-      if (!V.empty()) {
-        Cmd->SectionsVec.push_back(
-            {std::move(ExcludeFileRe), compileGlobPatterns(V)});
-        V.clear();
-      }
-
-      expect("(");
-      ExcludeFileRe = readFilePatterns();
-      continue;
-    }
-
-    V.push_back(next());
-  }
-}
-
 InputSectionDescription *
 ScriptParser::readInputSectionRules(StringRef FilePattern) {
   auto *Cmd = new InputSectionDescription(FilePattern);
   expect("(");
 
+  // Read EXCLUDE_FILE().
+  if (skip("EXCLUDE_FILE")) {
+    expect("(");
+    Cmd->ExcludedFileRe = readFilePatterns();
+  }
+
   // Read SORT().
   if (SortKind K1 = readSortKind()) {
     Cmd->SortOuter = K1;
@@ -1028,16 +999,16 @@ ScriptParser::readInputSectionRules(Stri
     if (SortKind K2 = readSortKind()) {
       Cmd->SortInner = K2;
       expect("(");
-      Cmd->SectionsVec.push_back({llvm::Regex(), readFilePatterns()});
+      Cmd->SectionRe = readFilePatterns();
       expect(")");
     } else {
-      Cmd->SectionsVec.push_back({llvm::Regex(), readFilePatterns()});
+      Cmd->SectionRe = readFilePatterns();
     }
     expect(")");
     return Cmd;
   }
 
-  readSectionExcludes(Cmd);
+  Cmd->SectionRe = readFilePatterns();
   return Cmd;
 }
 
@@ -1050,8 +1021,7 @@ ScriptParser::readInputSectionDescriptio
     StringRef FilePattern = next();
     InputSectionDescription *Cmd = readInputSectionRules(FilePattern);
     expect(")");
-    for (std::pair<llvm::Regex, llvm::Regex> &Regex : Cmd->SectionsVec)
-      Opt.KeptSections.push_back(&Regex.second);
+    Opt.KeptSections.push_back(&Cmd->SectionRe);
     return Cmd;
   }
   return readInputSectionRules(Tok);

Modified: lld/trunk/ELF/LinkerScript.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.h?rev=281723&r1=281722&r2=281723&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.h (original)
+++ lld/trunk/ELF/LinkerScript.h Fri Sep 16 08:30:18 2016
@@ -105,8 +105,8 @@ struct InputSectionDescription : BaseCom
   llvm::Regex FileRe;
   SortKind SortOuter = SortNone;
   SortKind SortInner = SortNone;
-  // Pairs of section regex and files excluded.
-  std::vector<std::pair<llvm::Regex, llvm::Regex>> SectionsVec;
+  llvm::Regex ExcludedFileRe;
+  llvm::Regex SectionRe;
 };
 
 struct AssertCommand : BaseCommand {

Removed: lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple1.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple1.s?rev=281722&view=auto
==============================================================================
--- lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple1.s (original)
+++ lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple1.s (removed)
@@ -1,8 +0,0 @@
-.section .foo.1,"a"
- .quad 4
-
-.section .foo.2,"a"
- .quad 5
-
-.section .foo.3,"a"
- .quad 6

Removed: lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple2.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple2.s?rev=281722&view=auto
==============================================================================
--- lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple2.s (original)
+++ lld/trunk/test/ELF/linkerscript/Inputs/exclude-multiple2.s (removed)
@@ -1,8 +0,0 @@
-.section .foo.1,"a"
- .quad 7
-
-.section .foo.2,"a"
- .quad 8
-
-.section .foo.3,"a"
- .quad 9

Removed: lld/trunk/test/ELF/linkerscript/exclude-multiple.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/exclude-multiple.s?rev=281722&view=auto
==============================================================================
--- lld/trunk/test/ELF/linkerscript/exclude-multiple.s (original)
+++ lld/trunk/test/ELF/linkerscript/exclude-multiple.s (removed)
@@ -1,28 +0,0 @@
-# REQUIRES: x86
-# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %tfile1.o
-# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/exclude-multiple1.s -o %tfile2.o
-# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/exclude-multiple2.s -o %tfile3.o
-# RUN: echo "SECTIONS { \
-# RUN:   .foo : { *(.foo.1 EXCLUDE_FILE (*file1.o) .foo.2 EXCLUDE_FILE (*file2.o) .foo.3) } \
-# RUN:  }" > %t1.script
-# RUN: ld.lld -script %t1.script %tfile1.o %tfile2.o %tfile3.o -o %t1.o
-# RUN: llvm-objdump -s %t1.o | FileCheck %s
-
-# CHECK:      Contents of section .foo:
-# CHECK-NEXT:  0120 01000000 00000000 04000000 00000000
-# CHECK-NEXT:  0130 07000000 00000000 05000000 00000000
-# CHECK-NEXT:  0140 08000000 00000000 03000000 00000000
-# CHECK-NEXT:  0150 09000000 00000000
-# CHECK-NEXT: Contents of section .foo.2:
-# CHECK-NEXT:  0158 02000000 00000000
-# CHECK-NEXT: Contents of section .foo.3:
-# CHECK-NEXT:  0160 06000000 00000000
-
-.section .foo.1,"a"
- .quad 1
-
-.section .foo.2,"a"
- .quad 2
-
-.section .foo.3,"a"
- .quad 3




More information about the llvm-commits mailing list