[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
Wed Aug 26 02:29:41 PDT 2020


jhenderson updated this revision to Diff 287883.
jhenderson edited the summary of this revision.
jhenderson added a comment.

- Rename merge-gc-sym.s to merge-sym-gc.s since it is a parallel test to merge-sym.s.
- Fixed merge-sym.s. The bar and foo symbols seem to get reordered. Their order doesn't matter, so to make the test robust, I have switched to use llvm-readelf (for single-line symbol descriptions) and CHECK-DAG.
- Whilst updating merge-sym.s, I also took the chance to remove the hard-coded address values, making the test more robust.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86543/new/

https://reviews.llvm.org/D86543

Files:
  lld/test/ELF/merge-sym-gc.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
@@ -1,21 +1,21 @@
 // REQUIRES: x86
 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
 // RUN: ld.lld %t.o -o %t.so -shared
-// RUN: llvm-readobj --symbols -S %t.so | FileCheck %s
+// RUN: llvm-readelf --symbols -S %t.so | FileCheck %s
 
         .section        .rodata.cst4,"aM", at progbits,4
         .short 0
 foo:
         .short 42
 
+        .short 0
+bar:
+        .short 42
 
-// CHECK:      Name: .rodata
-// CHECK-NEXT: Type: SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT:   SHF_ALLOC
-// CHECK-NEXT:   SHF_MERGE
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address: 0x20D
+// CHECK:      Name              Type            Address        Off     Size    ES Flg
+// CHECK:      .rodata           SHT_PROGBITS    [[#%x, ADDR:]] [[#%x]] [[#%x]] 04  AM{{ }}
 
-// CHECK:      Name: foo
-// CHECK-NEXT: Value: 0x20F
+// CHECK:      Symbol table '.symtab' contains {{.*}} entries:
+// CHECK-NEXT:    Num:    Value        Size   Type   Bind   Vis    Ndx    Name
+// CHECK-DAG:  {{.*}}: {{0*}}[[#ADDR]] {{.+}} {{.+}} {{.+}} {{.+}} {{.+}} foo
+// CHECK-DAG:  {{.*}}: {{0*}}[[#ADDR]] {{.+}} {{.+}} {{.+}} {{.+}} {{.+}} bar
Index: lld/test/ELF/merge-sym-gc.s
===================================================================
--- /dev/null
+++ lld/test/ELF/merge-sym-gc.s
@@ -0,0 +1,50 @@
+# 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 .merge1,"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
+c3: ## Unreferenced. In third fragment (due to being at end of section).
+    ## Kept by c1 reference.
+
+.section .merge2,"aM", at progbits,4
+d:
+  .long 2
+  .long 2
+e: ## Unreferenced. Discarded, since at end of unreferenced piece at end
+   ## of section.
+
+.data
+.global _start
+_start:
+    .quad a2
+    .quad c1
+    .quad d
+
+# CHECK:      .merge1 PROGBITS [[# %x, ADDR1:]]
+# CHECK:      .merge2 PROGBITS [[# %x, ADDR2:]]
+
+# CHECK:      Symbol table '.symtab' contains 8 entries:
+# CHECK-NEXT:   Num:    Value           {{.*}} Ndx Name
+# CHECK-NEXT:     0:                    {{.*}} UND{{ *$}}
+# CHECK-NEXT:     1: {{0*}}[[#ADDR1]]   {{.*}}     a1
+# CHECK-NEXT:     2: {{0*}}[[#ADDR1+2]] {{.*}}     a2
+# CHECK-NEXT:     3: {{0*}}[[#ADDR1]]   {{.*}}     c1
+# CHECK-NEXT:     4: {{0*}}[[#ADDR1+2]] {{.*}}     c2
+# CHECK-NEXT:     5: {{0*}}[[#ADDR1+4]] {{.*}}     c2
+# CHECK-NEXT:     6: {{0*}}[[#ADDR2]]   {{.*}}     d
+# CHECK-NEXT:     7:                    {{.*}}     _start


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


More information about the llvm-commits mailing list