[PATCH] D28561: [ELF] - Move the addition of synthetics from addPredefinedSections()

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 13 03:53:17 PST 2017


grimar updated this revision to Diff 84277.
grimar added a comment.

- Discarding .shstrtab is restricted.


https://reviews.llvm.org/D28561

Files:
  ELF/Writer.cpp
  test/ELF/linkerscript/sections.s


Index: test/ELF/linkerscript/sections.s
===================================================================
--- test/ELF/linkerscript/sections.s
+++ test/ELF/linkerscript/sections.s
@@ -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
Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -119,6 +119,8 @@
 }
 
 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 @@
     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 @@
   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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28561.84277.patch
Type: text/x-patch
Size: 2739 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170113/adc9b262/attachment.bin>


More information about the llvm-commits mailing list