[lld] d2385f6 - [lld][ELF][test] Expand testing of symbols in mergeable sections

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 27 02:39:37 PDT 2020


Author: James Henderson
Date: 2020-08-27T10:38:42+01:00
New Revision: d2385f6d2f1bea4e4913ae3bc3948590e8d9f6c3

URL: https://github.com/llvm/llvm-project/commit/d2385f6d2f1bea4e4913ae3bc3948590e8d9f6c3
DIFF: https://github.com/llvm/llvm-project/commit/d2385f6d2f1bea4e4913ae3bc3948590e8d9f6c3.diff

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

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.

Reviewed by: grimar, MaskRay

Differential Revision: https://reviews.llvm.org/D86543

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

Modified: 
    lld/test/ELF/merge-sym.s

Removed: 
    


################################################################################
diff  --git a/lld/test/ELF/merge-sym-gc.s b/lld/test/ELF/merge-sym-gc.s
new file mode 100644
index 000000000000..4f83179cc75b
--- /dev/null
+++ b/lld/test/ELF/merge-sym-gc.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

diff  --git a/lld/test/ELF/merge-sym.s b/lld/test/ELF/merge-sym.s
index 27ae3e048e20..6449ef731057 100644
--- a/lld/test/ELF/merge-sym.s
+++ b/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        {{.*}} ES Flg
+// CHECK:      .rodata PROGBITS [[#%x, ADDR:]] {{.*}} 04  AM{{ }}
 
-// CHECK:      Name: foo
-// CHECK-NEXT: Value: 0x20F
+// CHECK:      Symbol table '.symtab' contains {{.*}} entries:
+// CHECK-NEXT:    Num:    Value          {{.*}} Name
+// CHECK-DAG:  {{.*}}: {{0*}}[[#ADDR+2]] {{.*}} foo
+// CHECK-DAG:  {{.*}}: {{0*}}[[#ADDR+2]] {{.*}} bar


        


More information about the llvm-commits mailing list