[lld] [ARM][LLD] Rewrite thunk tests to make output smaller [NFC] (PR #202551)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 9 02:09:07 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lld-elf

Author: Peter Smith (smithp35)

<details>
<summary>Changes</summary>

Some thunk tests can leave large relocatable objects and executables around. In some cases it is possible to alter the linker script to make the output smaller. These changes have been separated out as they have more substantial changes to CHECK lines.

Related to #<!-- -->202261

---
Full diff: https://github.com/llvm/llvm-project/pull/202551.diff


2 Files Affected:

- (modified) lld/test/ELF/arm-branch-undef-weak-plt-thunk.s (+44-23) 
- (modified) lld/test/ELF/arm-thumb-plt-range-thunk-os.s (+64-80) 


``````````diff
diff --git a/lld/test/ELF/arm-branch-undef-weak-plt-thunk.s b/lld/test/ELF/arm-branch-undef-weak-plt-thunk.s
index 22a7d9f4b5025..4d09a4a1ef0ff 100644
--- a/lld/test/ELF/arm-branch-undef-weak-plt-thunk.s
+++ b/lld/test/ELF/arm-branch-undef-weak-plt-thunk.s
@@ -1,13 +1,32 @@
 // REQUIRES: arm
-// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-shared.s -o %t1.o
-// RUN: ld.lld %t1.o --shared -soname=t1.so -o %t1.so
-// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o
-// RUN: ld.lld %t.o %t1.so -o %t
-// RUN: llvm-objdump --no-print-imm-hex -d --triple=armv7a-none-linux-gnueabi --start-address=0x201e4 --stop-address=0x20204 %t | FileCheck %s
+// RUN: rm -rf %t && split-file %s %t && cd %t
+// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv7a-none-linux-gnueabi shared.s -o shared.o
+// RUN: ld.lld shared.o --shared -soname=t1.so -o shared.so
+// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=armv7a-none-linux-gnueabi a.s -o a.o
+// RUN: ld.lld a.o shared.so --script a.lds -o exe
+// RUN: llvm-objdump --no-show-raw-insn -d --triple=armv7a-none-linux-gnueabi exe | FileCheck %s
 
 /// When we are dynamic linking, undefined weak references have a PLT entry so
 /// we must create a thunk for the branch to the PLT entry.
 
+//--- a.lds
+SECTIONS {
+	.text 0x2000000 : AT(0x2000000) { *(.text) }
+	.plt  0x4000100 : AT(0x4000100) { *(.plt) }
+}
+//--- shared.s
+
+.syntax unified
+ .global bar2
+ .type bar2, %function
+bar2:
+
+ .global zed2
+ .type zed2, %function
+zed2:
+
+//--- a.s
+
  .text
  .globl bar2
  .weak undefined_weak_we_expect_a_plt_entry_for
@@ -16,21 +35,23 @@ _start:
  .type _start, %function
  b undefined_weak_we_expect_a_plt_entry_for
  bl bar2
-/// Create 32 Mb gap between the call to the weak reference and the PLT so that
-/// the b and bl need a range-extension thunk.
- .section .text.1, "ax", %progbits
- .space 32 * 1024 * 1024
-
-// CHECK: Disassembly of section .text:
-// CHECK-EMPTY:
-// CHECK-NEXT: <_start>:
-// CHECK-NEXT:    201e4:       ea000000        b       0x201ec <__ARMv7ABSLongThunk_undefined_weak_we_expect_a_plt_entry_for>
-// CHECK-NEXT:    201e8:       eb000002        bl      0x201f8 <__ARMv7ABSLongThunk_bar2>
-// CHECK: <__ARMv7ABSLongThunk_undefined_weak_we_expect_a_plt_entry_for>:
-// CHECK-NEXT:    201ec:        e300c240        movw    r12, #576
-// CHECK-NEXT:    201f0:        e340c202        movt    r12, #514
-// CHECK-NEXT:    201f4:        e12fff1c        bx      r12
-// CHECK: <__ARMv7ABSLongThunk_bar2>:
-// CHECK-NEXT:    201f8:        e300c230        movw    r12, #560
-// CHECK-NEXT:    201fc:        e340c202        movt    r12, #514
-// CHECK-NEXT:    20200:        e12fff1c        bx      r12
+
+// CHECK-LABEL: <_start>:
+// CHECK-NEXT: 2000000: b  0x2000008 <__ARMv7ABSLongThunk_undefined_weak_we_expect_a_plt_entry_for>
+// CHECK-NEXT:          bl 0x2000014 <__ARMv7ABSLongThunk_bar2>
+
+// CHECK-LABEL: <__ARMv7ABSLongThunk_undefined_weak_we_expect_a_plt_entry_for>:
+// CHECK-NEXT: 2000008: movw    r12, #0x130
+// CHECK-NEXT:          movt    r12, #0x400
+// CHECK-NEXT:          bx      r12
+
+// CHECK-LABEL: <__ARMv7ABSLongThunk_bar2>:
+// CHECK-NEXT: 2000014: movw    r12, #0x120
+// CHECK-NEXT:          movt    r12, #0x400
+// CHECK-NEXT:          bx      r12
+
+// CHECK-LABEL:<bar2 at plt>:
+// CHECK-NEXT: 4000120: add     r12, pc, #0, #12
+
+// CHECK-LABEL: <undefined_weak_we_expect_a_plt_entry_for at plt>:
+// CHECK-NEXT: 4000130: add     r12, pc, #0, #12
diff --git a/lld/test/ELF/arm-thumb-plt-range-thunk-os.s b/lld/test/ELF/arm-thumb-plt-range-thunk-os.s
index 945cef6d4b4d5..1857373699c8b 100644
--- a/lld/test/ELF/arm-thumb-plt-range-thunk-os.s
+++ b/lld/test/ELF/arm-thumb-plt-range-thunk-os.s
@@ -1,13 +1,20 @@
 // REQUIRES: arm
-// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t
-// RUN: ld.lld %t --shared --icf=all -o %t.so
-// The output file is large, most of it zeroes. We dissassemble only the
-// parts we need to speed up the test and avoid a large output file
-// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x2000000 --stop-address=0x2000018 | FileCheck --check-prefix=CHECK1 %s
-// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x2800004 --stop-address=0x2800034 | FileCheck --check-prefix=CHECK2 %s
-// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x4000000 --stop-address=0x4000010 | FileCheck --check-prefix=CHECK3 %s
-// RUN: llvm-objdump --no-print-imm-hex -d %t.so --start-address=0x4000010 --stop-address=0x4000100 --triple=armv7a-linux-gnueabihf | FileCheck --check-prefix=CHECK4 %s
-// RUN: rm %t.so
+// RUN: rm -rf %t && split-file %s %t && cd %t
+// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi a.s -o a.o
+// RUN: ld.lld a.o --shared --icf=all -o a.so --script=a.lds --print-map --print-icf-sections
+// RUN: llvm-objdump --no-show-raw-insn --no-print-imm-hex -d a.so | FileCheck %s
+// RUN: rm a.so
+
+//--- a.lds
+SECTIONS {
+  .dynsym 0x1ff0000 : AT(0x1ff0000) { *(.dynsym) }
+  .text.1 0x2000000 : AT(0x2000000) { *(.text) *(.text.1) }
+  .text.2 0x4000000 : AT(0x4000000) { *(.text.2) *(.text.expect.icf) }
+  .plt : { *(.plt) }
+}
+
+//--- a.s
+
  .syntax unified
  .thumb
 
@@ -34,83 +41,60 @@ preemptible:
  bl far_preemptible
  bl far_nonpreemptible
  bl far_nonpreemptible_alias
- bx lr
-// CHECK1: Disassembly of section .text:
-// CHECK1-EMPTY:
-// CHECK1-NEXT: <sym1>:
-// CHECK1-NEXT:  2000000:       f000 d800       bl      0x2800004 <__ThumbV7PILongThunk_elsewhere>
-// CHECK1-NEXT:  2000004:       f000 d804       bl      0x2800010 <__ThumbV7PILongThunk_preemptible>
-// CHECK1-NEXT:  2000008:       4770    bx      lr
-// CHECK1: <preemptible>:
-// CHECK1-NEXT:  200000a:       f000 d807       bl      0x280001c <__ThumbV7PILongThunk_far_preemptible>
-// CHECK1-NEXT:  200000e:       f000 d80b       bl      0x2800028 <__ThumbV7PILongThunk_far_nonpreemptible>
-// CHECK1-NEXT:  2000012:       f000 d809       bl      0x2800028 <__ThumbV7PILongThunk_far_nonpreemptible>
-// CHECK1-NEXT:  2000016:       4770    bx      lr
+bx lr
+
+// CHECK-LABEL: <sym1>:
+// CHECK-NEXT: 2000000: bl 0x2000018 <__ThumbV7PILongThunk_elsewhere>
+// CHECK-NEXT:          bl 0x2000024 <__ThumbV7PILongThunk_preemptible>
+// CHECK-NEXT:          bx lr
+
+// CHECK-LABEL: <preemptible>:
+// CHECK-NEXT: 200000a: bl 0x2000030 <__ThumbV7PILongThunk_far_preemptible>
+// CHECK-NEXT:          bl 0x200003c <__ThumbV7PILongThunk_far_nonpreemptible>
+// CHECK-NEXT:          bl 0x200003c <__ThumbV7PILongThunk_far_nonpreemptible>
+// CHECK-NEXT:          bx lr
+
+// CHECK-LABEL: <__ThumbV7PILongThunk_elsewhere>:
+// CHECK-NEXT: 2000018: movw    r12, #12
+// CHECK-NEXT:          movt    r12, #512
+// CHECK-NEXT:          add     r12, pc
+// CHECK-NEXT:          bx      r12
+
+// CHECK-LABEL: <__ThumbV7PILongThunk_preemptible>:
+// CHECK-NEXT: 2000024: movw    r12, #16
+// CHECK-NEXT:          movt    r12, #512
+// CHECK-NEXT:          add     r12, pc
+// CHECK-NEXT:          bx      r12
+
+// CHECK-LABEL: <__ThumbV7PILongThunk_far_preemptible>:
+// CHECK-NEXT: 2000030: movw    r12, #20
+// CHECK-NEXT:          movt    r12, #512
+// CHECK-NEXT:          add     r12, pc
+// CHECK-NEXT:          bx      r12
+
+// CHECK-LABEL: <__ThumbV7PILongThunk_far_nonpreemptible>:
+// CHECK-NEXT: 200003c: movw    r12, #65465
+// CHECK-NEXT:          movt    r12, #511
+// CHECK-NEXT:          add     r12, pc
+// CHECK-NEXT:          bx      r12
 
  .section .text.2, "ax", %progbits
- .balign 0x0800000
- bx lr
-// CHECK2: <__ThumbV7PILongThunk_elsewhere>:
-// CHECK2-NEXT:  2800004:       f240 0c20       movw    r12, #32
-// CHECK2-NEXT:  2800008:       f2c0 1c80       movt    r12, #384
-// CHECK2-NEXT:  280000c:       44fc    add     r12, pc
-// CHECK2-NEXT:  280000e:       4760    bx      r12
-// CHECK2: <__ThumbV7PILongThunk_preemptible>:
-// CHECK2-NEXT:  2800010:       f240 0c24       movw    r12, #36
-// CHECK2-NEXT:  2800014:       f2c0 1c80       movt    r12, #384
-// CHECK2-NEXT:  2800018:       44fc    add     r12, pc
-// CHECK2-NEXT:  280001a:       4760    bx      r12
-// CHECK2: <__ThumbV7PILongThunk_far_preemptible>:
-// CHECK2-NEXT:  280001c:       f240 0c28       movw    r12, #40
-// CHECK2-NEXT:  2800020:       f2c0 1c80       movt    r12, #384
-// CHECK2-NEXT:  2800024:       44fc    add     r12, pc
-// CHECK2-NEXT:  2800026:       4760    bx      r12
-// CHECK2: <__ThumbV7PILongThunk_far_nonpreemptible>:
-// CHECK2-NEXT:  2800028:       f64f 7ccd       movw    r12, #65485
-// CHECK2-NEXT:  280002c:       f2c0 1c7f       movt    r12, #383
-// CHECK2-NEXT:  2800030:       44fc    add     r12, pc
-// CHECK2-NEXT:  2800032:       4760    bx      r12
-
- .section .text.3, "ax", %progbits
-.balign 0x2000000
 far_preemptible:
 far_nonpreemptible:
  bl elsewhere
 
- .section .text.4, "ax", %progbits
-.balign 0x2000000
+ .section .text.expect.icf, "ax", %progbits
 far_nonpreemptible_alias:
  bl elsewhere
 
-// CHECK3: <far_preemptible>:
-// CHECK3:  4000000:       f000 e816       blx     0x4000030
-
-// CHECK4: Disassembly of section .plt:
-// CHECK4-EMPTY:
-// CHECK4-NEXT: <.plt>:
-// CHECK4-NEXT:  4000010:	e52de004    	str	lr, [sp, #-4]!
-// CHECK4-NEXT:  4000014:	e28fe600    	add	lr, pc, #0, #12
-// CHECK4-NEXT:  4000018:	e28eea20    	add	lr, lr, #32
-// CHECK4-NEXT:  400001c:	e5bef0a4    	ldr	pc, [lr, #164]!
-// CHECK4-NEXT:  4000020:	d4 d4 d4 d4 	.word	0xd4d4d4d4
-// CHECK4-NEXT:  4000024:	d4 d4 d4 d4 	.word	0xd4d4d4d4
-// CHECK4-NEXT:  4000028:	d4 d4 d4 d4 	.word	0xd4d4d4d4
-// CHECK4-NEXT:  400002c:	d4 d4 d4 d4 	.word	0xd4d4d4d4
-// CHECK4-EMPTY:
-// CHECK4-NEXT: <elsewhere at plt>:
-// CHECK4-NEXT:  4000030:	e28fc600    	add	r12, pc, #0, #12
-// CHECK4-NEXT:  4000034:	e28cca20    	add	r12, r12, #32
-// CHECK4-NEXT:  4000038:	e5bcf08c    	ldr	pc, [r12, #140]!
-// CHECK4-NEXT:  400003c:	d4 d4 d4 d4 	.word	0xd4d4d4d4
-// CHECK4-EMPTY:
-// CHECK4-NEXT: <preemptible at plt>:
-// CHECK4-NEXT:  4000040:	e28fc600    	add	r12, pc, #0, #12
-// CHECK4-NEXT:  4000044:	e28cca20    	add	r12, r12, #32
-// CHECK4-NEXT:  4000048:	e5bcf080    	ldr	pc, [r12, #128]!
-// CHECK4-NEXT:  400004c:	d4 d4 d4 d4 	.word	0xd4d4d4d4
-// CHECK4-EMPTY:
-// CHECK4-NEXT: <far_preemptible at plt>:
-// CHECK4-NEXT:  4000050:	e28fc600    	add	r12, pc, #0, #12
-// CHECK4-NEXT:  4000054:	e28cca20    	add	r12, r12, #32
-// CHECK4-NEXT:  4000058:	e5bcf074    	ldr	pc, [r12, #116]!
-// CHECK4-NEXT:  400005c:	d4 d4 d4 d4 	.word	0xd4d4d4d4
+// CHECK-LABEL: <far_preemptible>:
+// CHECK-NEXT:  4000000:         blx     0x4000030 <elsewhere at plt>
+
+// CHECK-LABEL: <elsewhere at plt>:
+// CHECK-NEXT:  4000030:          add     r12, pc, #0, #12
+
+// CHECK-LABEL: <preemptible at plt>:
+// CHECK-NEXT:  4000040:          add     r12, pc, #0, #12
+
+// CHECK-LABEL: <far_preemptible at plt>:
+// CHECK-NEXT:  4000050:          add     r12, pc, #0, #12

``````````

</details>


https://github.com/llvm/llvm-project/pull/202551


More information about the llvm-commits mailing list