[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