[lld] 3cecf17 - [ELF] Refactor merge-* tests

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Nov 23 12:46:40 PST 2024


Author: Fangrui Song
Date: 2024-11-23T12:46:35-08:00
New Revision: 3cecf17065919da0a7fa9b38f37592e5462c2f85

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

LOG: [ELF] Refactor merge-* tests

Added: 
    lld/test/ELF/merge-addr.s

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

Removed: 
    lld/test/ELF/merge-relocatable.s
    lld/test/ELF/merge-shared-str.s
    lld/test/ELF/merge-shared.s
    lld/test/ELF/merge-string.s
    lld/test/ELF/merge-to-non-alloc.s


################################################################################
diff  --git a/lld/test/ELF/merge-addr.s b/lld/test/ELF/merge-addr.s
new file mode 100644
index 00000000000000..b36619788083b3
--- /dev/null
+++ b/lld/test/ELF/merge-addr.s
@@ -0,0 +1,63 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
+# RUN: ld.lld %t.o -o %t.so -shared --section-start cst4=0x800 --section-start str=0x1000
+# RUN: llvm-readelf -r -S %t.so | FileCheck %s
+# RUN: llvm-objdump -s %t.so | FileCheck %s --check-prefix=OBJDUMP
+
+# RUN: ld.lld %t.o -o %t0.so -O0 -shared --section-start cst4=0x800 --section-start str=0x1000
+# RUN: llvm-objdump -s %t0.so | FileCheck %s --check-prefix=OBJDUMP0
+# RUN: ld.lld %t.o -o %t2.so -O2 -shared --section-start cst4=0x800 --section-start str=0x1000
+# RUN: llvm-objdump -s %t2.so | FileCheck %s --check-prefix=OBJDUMP2
+
+# CHECK:       Name              Type            Address          Off    Size   ES Flg Lk Inf Al
+# CHECK:       cst4              PROGBITS        0000000000000800 000800 000004 04  AM  0   0  1
+# CHECK-NEXT:  str               PROGBITS        0000000000001000 001000 000009 01 AMS  0   0  1
+
+# CHECK:      Relocation section '.rela.dyn'
+# CHECK-NEXT:     Offset             Info             Type               Symbol's Value  Symbol's Name + Addend
+# CHECK-NEXT:                                    R_X86_64_RELATIVE                         802
+# CHECK-NEXT:                                    R_X86_64_RELATIVE                         1000
+# CHECK-NEXT:                                    R_X86_64_RELATIVE                         1006
+# CHECK-NEXT:                                    R_X86_64_RELATIVE                         1002
+# CHECK-EMPTY:
+
+# OBJDUMP:      Contents of section str:
+# OBJDUMP-NEXT: 1000 61006162 63006263 00                 a.abc.bc.
+# OBJDUMP:      Contents of section .data:
+# OBJDUMP-NEXT:       00000000 00000000 00000000 00000000  ................
+# OBJDUMP-NEXT:       00000000 00000000                    ........
+# OBJDUMP:      Contents of section .bar:
+# OBJDUMP-NEXT:  0000 00080000 00000000 00080000 00000000  ................
+
+# OBJDUMP0:      Contents of section cst4:
+# OBJDUMP0-NEXT:  0800 2a000000 2a000000                    *...*...
+# OBJDUMP0-NEXT: Contents of section str:
+# OBJDUMP0-NEXT:  1000 61626300 61006263 00626300           abc.a.bc.bc.
+
+# OBJDUMP2:      Contents of section cst4:
+# OBJDUMP2-NEXT:  0800 2a000000                             *...
+# OBJDUMP2-NEXT: Contents of section str:
+# OBJDUMP2-NEXT:  1000 61626300 6100                        abc.a.
+
+.section cst4,"aM", at progbits,4
+.long 42
+.long 42
+
+.section str,"aMS", at progbits,1
+abc:
+.asciz "abc"
+a:
+.asciz "a"
+bc:
+.asciz "bc"
+.asciz "bc"
+
+.data
+.quad cst4 + 6
+.quad a
+.quad bc
+.quad abc
+
+.section .bar
+.quad cst4
+.quad cst4 + 4

diff  --git a/lld/test/ELF/merge-reloc.s b/lld/test/ELF/merge-reloc.s
index a343d5679b58e2..044fef5ab4f26a 100644
--- a/lld/test/ELF/merge-reloc.s
+++ b/lld/test/ELF/merge-reloc.s
@@ -1,91 +1,57 @@
 # REQUIRES: x86
 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-# RUN: ld.lld %t.o -r -o %t-rel
-# RUN: llvm-readobj -S --section-data %t-rel | FileCheck %s
+# RUN: ld.lld %t.o -r -o %t.ro
+# RUN: llvm-readelf -S %t.ro | FileCheck %s
+# RUN: llvm-objdump -s %t.ro | FileCheck %s --check-prefix=OBJDUMP
 
-# When linker generates a relocatable object it does string merging in the same
-# way as for regular link. It should keep SHF_MERGE flag and set proper sh_entsize
-# value so that final link can perform the final merging optimization.
+# RUN: ld.lld %t.o -o %t
+# RUN: llvm-readelf -S %t | FileCheck %s --check-prefix=CHECK-PDE
 
-# CHECK:      Section {
-# CHECK:        Index:
-# CHECK:        Name: .rodata.1 (
-# CHECK-NEXT:   Type: SHT_PROGBITS
-# CHECK-NEXT:   Flags [
-# CHECK-NEXT:     SHF_ALLOC
-# CHECK-NEXT:     SHF_MERGE
-# CHECK-NEXT:   ]
-# CHECK-NEXT:   Address:
-# CHECK-NEXT:   Offset:
-# CHECK-NEXT:   Size: 4
-# CHECK-NEXT:   Link: 0
-# CHECK-NEXT:   Info: 0
-# CHECK-NEXT:   AddressAlignment: 4
-# CHECK-NEXT:   EntrySize: 4
-# CHECK-NEXT:   SectionData (
-# CHECK-NEXT:     0000: 42000000
-# CHECK-NEXT:   )
-# CHECK-NEXT: }
-# CHECK:      Section {
-# CHECK:        Index:
-# CHECK:        Name: .rodata.2 (
-# CHECK-NEXT:   Type: SHT_PROGBITS
-# CHECK-NEXT:   Flags [
-# CHECK-NEXT:     SHF_ALLOC
-# CHECK-NEXT:     SHF_MERGE
-# CHECK-NEXT:   ]
-# CHECK-NEXT:   Address:
-# CHECK-NEXT:   Offset:
-# CHECK-NEXT:   Size: 8
-# CHECK-NEXT:   Link: 0
-# CHECK-NEXT:   Info: 0
-# CHECK-NEXT:   AddressAlignment: 8
-# CHECK-NEXT:   EntrySize: 8
-# CHECK-NEXT:   SectionData (
-# CHECK-NEXT:     0000: 42000000 42000000
-# CHECK-NEXT:   )
-# CHECK-NEXT: }
-# CHECK:      Section {
-# CHECK:        Index:
-# CHECK:        Name: .data
-# CHECK-NEXT:   Type: SHT_PROGBITS
-# CHECK-NEXT:   Flags [
-# CHECK-NEXT:     SHF_ALLOC
-# CHECK-NEXT:     SHF_WRITE
-# CHECK-NEXT:   ]
-# CHECK-NEXT:   Address:
-# CHECK-NEXT:   Offset:
-# CHECK-NEXT:   Size: 16
-# CHECK-NEXT:   Link: 0
-# CHECK-NEXT:   Info: 0
-# CHECK-NEXT:   AddressAlignment: 1
-# CHECK-NEXT:   EntrySize: 0
-# CHECK-NEXT:   SectionData (
-# CHECK-NEXT:     0000: 42000000 42000000 42000000 42000000
-# CHECK-NEXT:   )
-# CHECK-NEXT: }
+# CHECK:       [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
+# CHECK-NEXT:  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
+# CHECK-NEXT:  [ 1] .text             PROGBITS        0000000000000000 000040 000000 00  AX  0   0  4
+# CHECK-NEXT:  [ 2] .rodata.1         PROGBITS        0000000000000000 000040 000004 04  AM  0   0  4
+# CHECK-NEXT:  [ 3] .rodata.2         PROGBITS        0000000000000000 000048 000008 08  AM  0   0  8
+# CHECK-NEXT:  [ 4] .rodata.cst8      PROGBITS        0000000000000000 000050 000010 00  AM  0   0  1
+# CHECK-NEXT:  [ 5] .rela.rodata.cst8 RELA            0000000000000000 000068 000030 18   I  9   4  8
+# CHECK-NEXT:  [ 6] .cst4             PROGBITS        0000000000000000 000060 000008 00  AM  0   0  1
+# CHECK-NEXT:  [ 7] .rela.cst4        RELA            0000000000000000 000098 000030 18   I  9   6  8
+
+# OBJDUMP:      Contents of section .rodata.1:
+# OBJDUMP-NEXT:  0000 42000000                             B...
+# OBJDUMP-NEXT: Contents of section .rodata.2:
+# OBJDUMP-NEXT:  0000 42000000 42000000                    B...B...
+# OBJDUMP-NEXT: Contents of section .rodata.cst8:
+# OBJDUMP-NEXT:  0000 00000000 00000000 00000000 00000000  ................
+# OBJDUMP:      Contents of section .cst4:
+# OBJDUMP-NEXT:  0000 00000000 00000000                    ........
+
+# CHECK-PDE: [ 2] .cst4             PROGBITS        0000000000200140 000140 000008 00  AM  0   0  1
 
-        .section        .rodata.1,"aM", at progbits,4
-        .align  4
-        .global foo
 foo:
-        .long   0x42
-        .long   0x42
-        .long   0x42
 
-        .section        .rodata.2,"aM", at progbits,8
-        .align  8
-        .global bar
-bar:
-        .long   0x42
-        .long   0x42
-        .long   0x42
-        .long   0x42
+.section        .rodata.1,"aM", at progbits,4
+.align  4
+.long 0x42
+.long 0x42
+.long 0x42
+
+.section        .rodata.2,"aM", at progbits,8
+.align  8
+.long   0x42
+.long   0x42
+.long   0x42
+.long   0x42
+
+## Test that we keep a SHT_REL[A] section which relocates a SHF_MERGE section
+## in -r mode. The relocated SHF_MERGE section is handled as non-mergeable.
+.section .rodata.cst8,"aM", at progbits,8,unique,0
+.quad foo
+
+.section .rodata.cst8,"aM", at progbits,8,unique,1
+.quad foo
 
-        .data
-        .global gar
-zed:
-        .long   0x42
-        .long   0x42
-        .long   0x42
-        .long   0x42
+.section .cst4,"aM", at progbits,4,unique,0
+.long foo
+.section .cst4,"aM", at progbits,4,unique,1
+.long foo

diff  --git a/lld/test/ELF/merge-relocatable.s b/lld/test/ELF/merge-relocatable.s
deleted file mode 100644
index d376f4ca0b4227..00000000000000
--- a/lld/test/ELF/merge-relocatable.s
+++ /dev/null
@@ -1,23 +0,0 @@
-# REQUIRES: x86
-
-## Test that we keep a SHT_REL[A] section which relocates a SHF_MERGE section
-## in -r mode. The relocated SHF_MERGE section is handled as non-mergeable.
-
-# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
-# RUN: ld.lld -r %t.o -o %t
-# RUN: llvm-readobj -S %t | FileCheck %s
-
-# CHECK:     Name: .rodata.cst8
-# CHECK-NOT: }
-# CHECK:     Size: 16
-# CHECK:     Name: .rela.rodata.cst8
-# CHECK-NOT: }
-# CHECK:     Size: 48
-
-foo:
-
-.section .rodata.cst8,"aM", at progbits,8,unique,0
-.quad foo
-
-.section .rodata.cst8,"aM", at progbits,8,unique,1
-.quad foo

diff  --git a/lld/test/ELF/merge-shared-str.s b/lld/test/ELF/merge-shared-str.s
deleted file mode 100644
index 9ecdd64e973100..00000000000000
--- a/lld/test/ELF/merge-shared-str.s
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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 -O3
-// RUN: llvm-readobj -r -S %t.so | FileCheck %s
-
-
-        .section        foo,"aMS", at progbits,1
-        .asciz "bar"
-        .asciz "ar"
-
-        .data
-        .quad foo + 4
-
-
-// CHECK:      Name: foo
-// CHECK-NEXT: Type: SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT:   SHF_ALLOC
-// CHECK-NEXT:   SHF_MERGE
-// CHECK-NEXT:   SHF_STRINGS
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address: 0x260
-
-// CHECK:      Relocations [
-// CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
-// CHECK-NEXT:     0x{{.*}} R_X86_64_RELATIVE - 0x261
-// CHECK-NEXT:   }
-// CHECK-NEXT: ]

diff  --git a/lld/test/ELF/merge-shared.s b/lld/test/ELF/merge-shared.s
deleted file mode 100644
index 12cb738c1077ef..00000000000000
--- a/lld/test/ELF/merge-shared.s
+++ /dev/null
@@ -1,26 +0,0 @@
-// 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 -r -S %t.so | FileCheck %s
-
-	.section	foo,"aM", at progbits,4
-        .long 42
-        .long 42
-
-        .data
-        .quad foo + 6
-
-
-// CHECK:      Name: foo
-// CHECK-NEXT: Type: SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT:   SHF_ALLOC
-// CHECK-NEXT:   SHF_MERGE
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address: 0x260
-
-// CHECK:      Relocations [
-// CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
-// CHECK-NEXT:     0x{{.*}} R_X86_64_RELATIVE - 0x262
-// CHECK-NEXT:   }
-// CHECK-NEXT: ]

diff  --git a/lld/test/ELF/merge-string.s b/lld/test/ELF/merge-string.s
deleted file mode 100644
index 549195d5cf8058..00000000000000
--- a/lld/test/ELF/merge-string.s
+++ /dev/null
@@ -1,105 +0,0 @@
-// REQUIRES: x86
-// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-// RUN: ld.lld -O 2 %t.o -o %t.so -shared
-// RUN: llvm-readobj -S --section-data --symbols %t.so | FileCheck %s
-// RUN: ld.lld -O 1 %t.o -o %t.so -shared
-// RUN: llvm-readobj -S --section-data --symbols %t.so | FileCheck --check-prefix=NOTAIL %s
-// RUN: ld.lld -O 0 %t.o -o %t.so -shared
-// RUN: llvm-readobj -S --section-data --symbols %t.so | FileCheck --check-prefix=NOMERGE %s
-
-        .section        .rodata1,"aMS", at progbits,1
-        .asciz  "abc"
-foo:
-        .ascii  "a"
-bar:
-        .asciz  "bc"
-        .asciz  "bc"
-
-        .section        .rodata2,"aMS", at progbits,2
-        .p2align  1
-zed:
-        .short  20
-        .short  0
-
-// CHECK:      Name:    .rodata1
-// CHECK-NEXT: Type:    SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT:   SHF_ALLOC
-// CHECK-NEXT:   SHF_MERGE
-// CHECK-NEXT:   SHF_STRINGS
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address: 0x20D
-// CHECK-NEXT: Offset: 0x20D
-// CHECK-NEXT: Size:    4
-// CHECK-NEXT: Link: 0
-// CHECK-NEXT: Info: 0
-// CHECK-NEXT: AddressAlignment: 1
-// CHECK-NEXT: EntrySize: 1
-// CHECK-NEXT: SectionData (
-// CHECK-NEXT:   0000: 61626300                             |abc.|
-// CHECK-NEXT: )
-
-// NOTAIL:      Name:    .rodata1
-// NOTAIL-NEXT: Type:    SHT_PROGBITS
-// NOTAIL-NEXT: Flags [
-// NOTAIL-NEXT:   SHF_ALLOC
-// NOTAIL-NEXT:   SHF_MERGE
-// NOTAIL-NEXT:   SHF_STRINGS
-// NOTAIL-NEXT: ]
-// NOTAIL-NEXT: Address: 0x20D
-// NOTAIL-NEXT: Offset: 0x20D
-// NOTAIL-NEXT: Size:    7
-// NOTAIL-NEXT: Link: 0
-// NOTAIL-NEXT: Info: 0
-// NOTAIL-NEXT: AddressAlignment: 1
-// NOTAIL-NEXT: EntrySize: 1
-// NOTAIL-NEXT: SectionData (
-// NOTAIL-NEXT:   0000: 61626300 626300                     |abc.bc.|
-// NOTAIL-NEXT: )
-
-// NOMERGE:      Name:    .rodata1
-// NOMERGE-NEXT: Type:    SHT_PROGBITS
-// NOMERGE-NEXT: Flags [
-// NOMERGE-NEXT:   SHF_ALLOC
-// NOMERGE-NEXT:   SHF_MERGE
-// NOMERGE-NEXT:   SHF_STRINGS
-// NOMERGE-NEXT: ]
-// NOMERGE-NEXT: Address: 0x20D
-// NOMERGE-NEXT: Offset: 0x20D
-// NOMERGE-NEXT: Size:    11
-// NOMERGE-NEXT: Link: 0
-// NOMERGE-NEXT: Info: 0
-// NOMERGE-NEXT: AddressAlignment: 1
-// NOMERGE-NEXT: EntrySize: 1
-// NOMERGE-NEXT: SectionData (
-// NOMERGE-NEXT:   0000: 61626300 61626300 626300 |abc.abc.bc.|
-// NOMERGE-NEXT: )
-
-// CHECK:      Name: .rodata2
-// CHECK-NEXT: Type: SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT:   SHF_ALLOC
-// CHECK-NEXT:   SHF_MERGE
-// CHECK-NEXT:   SHF_STRINGS
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address: 0x212
-// CHECK-NEXT: Offset: 0x212
-// CHECK-NEXT: Size: 4
-// CHECK-NEXT: Link: 0
-// CHECK-NEXT: Info: 0
-// CHECK-NEXT: AddressAlignment: 2
-// CHECK-NEXT: EntrySize: 2
-// CHECK-NEXT: SectionData (
-// CHECK-NEXT:   0000: 14000000                             |....|
-// CHECK-NEXT: )
-
-
-// CHECK:      Name:    foo
-// CHECK-NEXT: Value: 0x20D
-
-// CHECK:      Name:    bar
-// CHECK-NEXT: Value: 0x20E
-
-// CHECK:      Name: zed
-// CHECK-NEXT: Value: 0x212
-// CHECK-NEXT: Size: 0

diff  --git a/lld/test/ELF/merge-to-non-alloc.s b/lld/test/ELF/merge-to-non-alloc.s
deleted file mode 100644
index 17e826ed5bb0cb..00000000000000
--- a/lld/test/ELF/merge-to-non-alloc.s
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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 -S --section-data --symbols %t.so | FileCheck %s
-
-// CHECK:      Name: .bar
-// CHECK-NEXT: Type: SHT_PROGBITS
-// CHECK-NEXT: Flags [
-// CHECK-NEXT: ]
-// CHECK-NEXT: Address:
-// CHECK-NEXT: Offset:
-// CHECK-NEXT: Size: 16
-// CHECK-NEXT: Link:
-// CHECK-NEXT: Info:
-// CHECK-NEXT: AddressAlignment:
-// CHECK-NEXT: EntrySize:
-// CHECK-NEXT: SectionData (
-// CHECK-NEXT:   0000: 10020000 00000000 18020000 00000000  |
-// CHECK-NEXT: )
-
-// CHECK:      Name: foo
-// CHECK-NEXT: Value: 0x210
-
-        .section        .foo,"aM", at progbits,4
-        .align  4
-        .global foo
-        .hidden foo
-foo:
-        .long   0x42
-
-        .section .bar
-        .quad foo
-        .quad foo + 8


        


More information about the llvm-commits mailing list