summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2016-09-16 13:30:18 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2016-09-16 13:30:18 +0000
commitceae630c9b6f2f3ef9534efc733109ea1007de06 (patch)
treedc92127a2b29d1e3e39796af33087783f1f83015
parent227825346ee49f140ebd67037805118c7f169c5f (diff)
downloadbcm5719-llvm-ceae630c9b6f2f3ef9534efc733109ea1007de06.tar.gz
bcm5719-llvm-ceae630c9b6f2f3ef9534efc733109ea1007de06.zip
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 llvm-svn: 281723
-rw-r--r--lld/ELF/LinkerScript.cpp78
-rw-r--r--lld/ELF/LinkerScript.h4
-rw-r--r--lld/test/ELF/linkerscript/Inputs/exclude-multiple1.s8
-rw-r--r--lld/test/ELF/linkerscript/Inputs/exclude-multiple2.s8
-rw-r--r--lld/test/ELF/linkerscript/exclude-multiple.s28
5 files changed, 26 insertions, 100 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 71fa4cb8e0d..f58f4d736b7 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -104,10 +104,10 @@ bool LinkerScript<ELFT>::shouldKeep(InputSectionBase<ELFT> *S) {
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<InputSectionBase<ELFT> *> Sections,
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);
-
- if (Re.match("COMMON"))
- Ret.push_back(CommonInputSection<ELFT>::X);
- }
- }
- }
+ 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 (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(StringRef FilePattern) {
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::readInputSectionDescription(StringRef Tok) {
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);
diff --git a/lld/ELF/LinkerScript.h b/lld/ELF/LinkerScript.h
index f906d8ceda1..0503df65b0e 100644
--- a/lld/ELF/LinkerScript.h
+++ b/lld/ELF/LinkerScript.h
@@ -105,8 +105,8 @@ struct InputSectionDescription : BaseCommand {
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 {
diff --git a/lld/test/ELF/linkerscript/Inputs/exclude-multiple1.s b/lld/test/ELF/linkerscript/Inputs/exclude-multiple1.s
deleted file mode 100644
index 1e0f741df40..00000000000
--- a/lld/test/ELF/linkerscript/Inputs/exclude-multiple1.s
+++ /dev/null
@@ -1,8 +0,0 @@
-.section .foo.1,"a"
- .quad 4
-
-.section .foo.2,"a"
- .quad 5
-
-.section .foo.3,"a"
- .quad 6
diff --git a/lld/test/ELF/linkerscript/Inputs/exclude-multiple2.s b/lld/test/ELF/linkerscript/Inputs/exclude-multiple2.s
deleted file mode 100644
index 60f790fa235..00000000000
--- a/lld/test/ELF/linkerscript/Inputs/exclude-multiple2.s
+++ /dev/null
@@ -1,8 +0,0 @@
-.section .foo.1,"a"
- .quad 7
-
-.section .foo.2,"a"
- .quad 8
-
-.section .foo.3,"a"
- .quad 9
diff --git a/lld/test/ELF/linkerscript/exclude-multiple.s b/lld/test/ELF/linkerscript/exclude-multiple.s
deleted file mode 100644
index 24c7f2faeea..00000000000
--- a/lld/test/ELF/linkerscript/exclude-multiple.s
+++ /dev/null
@@ -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
OpenPOWER on IntegriCloud