diff --git a/lld/test/ELF/merge-sym-gc.s b/lld/test/ELF/merge-sym-gc.s new file mode 100644 --- /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",@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 --- 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",@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