[PATCH] D86543: [lld][ELF][test] Expand testing of symbols in mergeable sections

James Henderson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 25 08:04:02 PDT 2020


jhenderson created this revision.
jhenderson added reviewers: grimar, ruiu, MaskRay.
Herald added a subscriber: emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.
jhenderson requested review of this revision.

Whilst reviewing some internal testing, I noticed a couple of holes in coverage of mergeable sections containing symbols. This patch addresses these holes:

1. Show that mid-piece symbols have their values updated properly when pieces are merged.
2. Show the behaviour of symbols in mergeable pieces when --gc-sections is enabled.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D86543

Files:
  lld/test/ELF/merge-gc-sym.s
  lld/test/ELF/merge-sym.s


Index: lld/test/ELF/merge-sym.s
===================================================================
--- lld/test/ELF/merge-sym.s
+++ lld/test/ELF/merge-sym.s
@@ -8,6 +8,9 @@
 foo:
         .short 42
 
+        .short 0
+bar:
+        .short 42
 
 // CHECK:      Name: .rodata
 // CHECK-NEXT: Type: SHT_PROGBITS
@@ -19,3 +22,5 @@
 
 // CHECK:      Name: foo
 // CHECK-NEXT: Value: 0x20F
+// CHECK:      Name: bar
+// CHECK-NEXT: Value: 0x20F
Index: lld/test/ELF/merge-gc-sym.s
===================================================================
--- /dev/null
+++ lld/test/ELF/merge-gc-sym.s
@@ -0,0 +1,37 @@
+# REQUIRES: x86
+## Show how symbols in GCed mergeable pieces behave.
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
+# RUN: ld.lld --gc-sections %t.o -o %t.elf
+# RUN: llvm-readelf %t.elf --sections --syms | FileCheck %s
+
+.section .rodata.merge,"aM", at progbits,4
+a1: ## Unreferenced. In first fragment, kept by a2 reference.
+    .short 1
+a2: ## Referenced.
+    .short 1
+b1: ## Unreferenced. Discarded as second fragment is unreferenced.
+    .short 1
+b2: ## Unreferenced. Discarded as second fragment is unreferenced.
+    .short 1
+c1: ## Referenced.
+    .short 1
+c2: ## Unreferenced. In third fragment, kept by c1 reference.
+    .short 1
+
+.data
+.global _start
+_start:
+    .quad a2
+    .quad c1
+
+# CHECK:      .rodata PROGBITS [[# %x, ADDR:]]
+
+# CHECK:      Symbol table '.symtab' contains 6 entries:
+# CHECK-NEXT:   Num:    Value          {{.*}} Ndx Name
+# CHECK-NEXT:     0:                   {{.*}} UND{{ *$}}
+# CHECK-NEXT:     1: {{0*}}[[#ADDR]]   {{.*}}     a1
+# CHECK-NEXT:     2: {{0*}}[[#ADDR+2]] {{.*}}     a2
+# CHECK-NEXT:     3: {{0*}}[[#ADDR]]   {{.*}}     c1
+# CHECK-NEXT:     4: {{0*}}[[#ADDR+2]] {{.*}}     c2
+# CHECK-NEXT:     5:                   {{.*}}     _start


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86543.287668.patch
Type: text/x-patch
Size: 1839 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200825/22297493/attachment.bin>


More information about the llvm-commits mailing list