aboutsummaryrefslogtreecommitdiffstats
path: root/ELF/LinkerScript.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-01-06 20:14:02 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-01-06 20:14:02 +0000
commitc09ce7fd2d62d85dcdf370f4bef732380fca4f1b (patch)
treedd5cf05b9ae703e6fb816b9663d4a0c903e0c2c6 /ELF/LinkerScript.cpp
parent5d4d137132d719d0d20d119375b205d6a2c721ee (diff)
downloadsrc-c09ce7fd2d62d85dcdf370f4bef732380fca4f1b.tar.gz
src-c09ce7fd2d62d85dcdf370f4bef732380fca4f1b.zip
Vendor import of lld trunk r291274:vendor/lld/lld-trunk-r291274
Notes
Notes: svn path=/vendor/lld/dist/; revision=311540 svn path=/vendor/lld/lld-trunk-r291274/; revision=311541; tag=vendor/lld/lld-trunk-r291274
Diffstat (limited to 'ELF/LinkerScript.cpp')
-rw-r--r--ELF/LinkerScript.cpp32
1 files changed, 1 insertions, 31 deletions
diff --git a/ELF/LinkerScript.cpp b/ELF/LinkerScript.cpp
index 5057b57a4a54..ccc1059949db 100644
--- a/ELF/LinkerScript.cpp
+++ b/ELF/LinkerScript.cpp
@@ -264,42 +264,12 @@ LinkerScript<ELFT>::createInputSectionList(OutputSectionCommand &OutCmd) {
}
template <class ELFT>
-static SectionKey<ELFT::Is64Bits> createKey(InputSectionBase<ELFT> *C,
- StringRef OutsecName) {
- // When using linker script the merge rules are different.
- // Unfortunately, linker scripts are name based. This means that expressions
- // like *(.foo*) can refer to multiple input sections that would normally be
- // placed in different output sections. We cannot put them in different
- // output sections or we would produce wrong results for
- // start = .; *(.foo.*) end = .; *(.bar)
- // and a mapping of .foo1 and .bar1 to one section and .foo2 and .bar2 to
- // another. The problem is that there is no way to layout those output
- // sections such that the .foo sections are the only thing between the
- // start and end symbols.
-
- // An extra annoyance is that we cannot simply disable merging of the contents
- // of SHF_MERGE sections, but our implementation requires one output section
- // per "kind" (string or not, which size/aligment).
- // Fortunately, creating symbols in the middle of a merge section is not
- // supported by bfd or gold, so we can just create multiple section in that
- // case.
- typedef typename ELFT::uint uintX_t;
- uintX_t Flags = C->Flags & (SHF_MERGE | SHF_STRINGS);
-
- uintX_t Alignment = 0;
- if (isa<MergeInputSection<ELFT>>(C))
- Alignment = std::max<uintX_t>(C->Alignment, C->Entsize);
-
- return SectionKey<ELFT::Is64Bits>{OutsecName, /*Type*/ 0, Flags, Alignment};
-}
-
-template <class ELFT>
void LinkerScript<ELFT>::addSection(OutputSectionFactory<ELFT> &Factory,
InputSectionBase<ELFT> *Sec,
StringRef Name) {
OutputSectionBase *OutSec;
bool IsNew;
- std::tie(OutSec, IsNew) = Factory.create(createKey(Sec, Name), Sec);
+ std::tie(OutSec, IsNew) = Factory.create(Sec, Name);
if (IsNew)
OutputSections->push_back(OutSec);
OutSec->addSection(Sec);