[lld] r291908 - [ELF] - Move the addition of synthetics from addPredefinedSections()

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 13 08:18:15 PST 2017


Author: grimar
Date: Fri Jan 13 10:18:15 2017
New Revision: 291908

URL: http://llvm.org/viewvc/llvm-project?rev=291908&view=rev
Log:
[ELF] - Move the addition of synthetics from addPredefinedSections()

These were 3 last synthetics that were added in addPredefinedSections() instead
of createSyntheticSections(). Now it is possible to move addition to correct common place.

Also patch fixes testcase which discards .shstrtab, by restricting doing that.

Differential revision: https://reviews.llvm.org/D28561

Modified:
    lld/trunk/ELF/Writer.cpp
    lld/trunk/test/ELF/linkerscript/sections.s

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=291908&r1=291907&r2=291908&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Fri Jan 13 10:18:15 2017
@@ -119,6 +119,8 @@ StringRef elf::getOutputSectionName(Stri
 }
 
 template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) {
+  if (IS == In<ELFT>::ShStrTab)
+    error("discarding .shstrtab section is not allowed");
   if (!Config->PrintGcSections)
     return;
   errs() << "removing unused section from '" << IS->Name << "' in file '"
@@ -377,6 +379,12 @@ template <class ELFT> void Writer<ELFT>:
     In<ELFT>::EhFrameHdr = make<EhFrameHeader<ELFT>>();
     Symtab<ELFT>::X->Sections.push_back(In<ELFT>::EhFrameHdr);
   }
+
+  if (In<ELFT>::SymTab)
+    Symtab<ELFT>::X->Sections.push_back(In<ELFT>::SymTab);
+  Symtab<ELFT>::X->Sections.push_back(In<ELFT>::ShStrTab);
+  if (In<ELFT>::StrTab)
+    Symtab<ELFT>::X->Sections.push_back(In<ELFT>::StrTab);
 }
 
 template <class ELFT>
@@ -1089,10 +1097,6 @@ template <class ELFT> void Writer<ELFT>:
   auto OS = dyn_cast_or_null<OutputSection<ELFT>>(findSection(".ARM.exidx"));
   if (OS && !OS->Sections.empty() && !Config->Relocatable)
     OS->addSection(make<ARMExidxSentinelSection<ELFT>>());
-
-  addInputSec(In<ELFT>::SymTab);
-  addInputSec(In<ELFT>::ShStrTab);
-  addInputSec(In<ELFT>::StrTab);
 }
 
 // The linker is expected to define SECNAME_start and SECNAME_end

Modified: lld/trunk/test/ELF/linkerscript/sections.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/sections.s?rev=291908&r1=291907&r2=291908&view=diff
==============================================================================
--- lld/trunk/test/ELF/linkerscript/sections.s (original)
+++ lld/trunk/test/ELF/linkerscript/sections.s Fri Jan 13 10:18:15 2017
@@ -66,22 +66,11 @@
 # SEC-SWAP-NAMES: 7 .shstrtab     0000003b {{[0-9a-f]*}}
 # SEC-SWAP-NAMES: 8 .strtab       00000008 {{[0-9a-f]*}}
 
-# .shstrtab from the input object file is discarded.
-# RUN: echo "SECTIONS { \
-# RUN:          /DISCARD/ : { *(.shstrtab) } }" > %t.script
-# RUN: ld.lld -o %t5 --script %t.script %t
-# RUN: llvm-objdump -section-headers %t5 | \
+# Attemp to discard .shstrtab section.
+# RUN: echo "SECTIONS { /DISCARD/ : { *(.shstrtab) } }" > %t.script
+# RUN: not ld.lld -o %t5 --script %t.script %t 2>&1 | \
 # RUN:   FileCheck -check-prefix=SEC-DISCARD %s
-
-#             Idx Name          Size
-# SEC-DISCARD: 1 .text         0000000e {{[0-9a-f]*}} TEXT DATA
-# SEC-DISCARD: 2 .data         00000020 {{[0-9a-f]*}} DATA
-# SEC-DISCARD: 3 other         00000003 {{[0-9a-f]*}} DATA
-# SEC-DISCARD: 4 .bss          00000002 {{[0-9a-f]*}} BSS
-# SEC-DISCARD: 5 .comment      00000008 {{[0-9a-f]*}}
-# SEC-DISCARD: 6 .symtab       00000030 {{[0-9a-f]*}}
-# SEC-DISCARD: 7 .shstrtab     0000003b {{[0-9a-f]*}}
-# SEC-DISCARD: 8 .strtab       00000008 {{[0-9a-f]*}}
+# SEC-DISCARD: discarding .shstrtab section is not allowed
 
 # Multiple SECTIONS command specifying additional input section descriptions
 # for the same output section description - input sections are merged into




More information about the llvm-commits mailing list