[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
Mon Sep 18 03:18:16 PDT 2017
grimar updated this revision to Diff 115616.
grimar added a comment.
- Addressed review comments.
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,35 @@
+# 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 -s %t | FileCheck %s
+
+## Check .foo was not merged.
+# CHECK: Sections [
+# CHECK: Name: .foo
+# CHECK: Name: .foo
+# CHECK: Name: .foo
+
+# 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
+.section .foo,"ax", at progbits
Index: ELF/OutputSections.cpp
===================================================================
--- ELF/OutputSections.cpp
+++ ELF/OutputSections.cpp
@@ -256,7 +256,11 @@
// 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 with any others. If we would do
+ // that we either end up with multiple SHT_GROUP sections containing the
+ // same output section or with situation when SHF_GROUP section is merged with
+ // regular section with the same name. Both cases are semantically incorrect.
+ if (IS->Type == SHT_GROUP || (IS->Flags & SHF_GROUP)) {
addSection(IS, OutsecName, nullptr);
return;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37574.115616.patch
Type: text/x-patch
Size: 2011 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170918/6caf5059/attachment.bin>
More information about the llvm-commits
mailing list