[PATCH] D37574: [ELF] - Do not merge sections from SHT_GROUP when -relocatable

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 15 03:52:25 PDT 2017


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

- Original version of patch was silly. Rui, will you be ok with this version ?


https://reviews.llvm.org/D37574

Files:
  ELF/OutputSections.cpp
  test/ELF/relocatable-comdat2.s


Index: test/ELF/relocatable-comdat2.s
===================================================================
--- test/ELF/relocatable-comdat2.s
+++ test/ELF/relocatable-comdat2.s
@@ -0,0 +1,28 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+# RUN: ld.lld -r %t.o -o %t
+# RUN: llvm-readobj -elf-section-groups %t | FileCheck %s
+
+# CHECK:      Groups {
+# CHECK-NEXT:   Group {
+# CHECK-NEXT:     Name: .group
+# CHECK-NEXT:     Index: 2
+# CHECK-NEXT:     Type: COMDAT
+# CHECK-NEXT:     Signature: bar
+# CHECK-NEXT:     Section(s) in group [
+# CHECK-NEXT:       .foo (3)
+# CHECK-NEXT:     ]
+# CHECK-NEXT:   }
+# CHECK-NEXT:   Group {
+# CHECK-NEXT:     Name: .group
+# CHECK-NEXT:     Index: 4
+# CHECK-NEXT:     Type: COMDAT
+# CHECK-NEXT:     Signature: zed
+# CHECK-NEXT:     Section(s) in group [
+# CHECK-NEXT:       .foo (5)
+# CHECK-NEXT:     ]
+# CHECK-NEXT:   }
+# CHECK-NEXT: }
+
+.section .foo,"axG", at progbits,bar,comdat
+.section .foo,"axG", at progbits,zed,comdat
Index: ELF/OutputSections.cpp
===================================================================
--- ELF/OutputSections.cpp
+++ ELF/OutputSections.cpp
@@ -212,7 +212,9 @@
   // dedup'ed section groups by their signatures. For the -r, we want to pass
   // through all SHT_GROUP sections without merging them because merging them
   // creates broken section contents.
-  if (IS->Type == SHT_GROUP) {
+  // We also do not merge any SHF_GROUP sections because otherwise we
+  // end up with multiple SHT_GROUPs containing the same output section.
+  if (IS->Type == SHT_GROUP || (IS->Flags & SHF_GROUP)) {
     OutputSection *Out = nullptr;
     addInputSec(IS, OutsecName, Out);
     return;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37574.115390.patch
Type: text/x-patch
Size: 1708 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170915/4d35c425/attachment.bin>


More information about the llvm-commits mailing list