[memprof] Remove an unused using directive (#117004)
[llvm-project.git] / lld / test / ELF / armv8-thumb-plt-reloc.s
blob5b6e4b5fdd139b937342473621c6f63928fa0cf7
1 // REQUIRES: arm
2 // RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=thumbv8-none-linux-gnueabi --arch=thumb --mcpu=cortex-m33 %p/Inputs/arm-plt-reloc.s -o %t1.o
3 // RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=thumbv8-none-linux-gnueabi --arch=thumb --mcpu=cortex-m33 %s -o %t2.o
4 // RUN: ld.lld %t1.o %t2.o -o %t
5 // RUN: llvm-objdump --no-print-imm-hex -d %t | FileCheck %s
6 // RUN: ld.lld -shared %t1.o %t2.o -o %t.so
7 // RUN: llvm-objdump --no-print-imm-hex -d %t.so | FileCheck --check-prefix=DSO %s
8 // RUN: llvm-readelf -S -r %t.so | FileCheck -check-prefix=DSOREL %s
10 // RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=thumbv8-none-linux-gnueabi --arch=thumbeb --mcpu=cortex-m33 %p/Inputs/arm-plt-reloc.s -o %t1.be.o
11 // RUN: llvm-mc -filetype=obj -arm-add-build-attributes -triple=thumbv8-none-linux-gnueabi --arch=thumbeb --mcpu=cortex-m33 %s -o %t2.be.o
12 // RUN: ld.lld %t1.be.o %t2.be.o -o %t.be
13 // RUN: llvm-objdump --no-print-imm-hex -d %t.be | FileCheck %s
14 // RUN: ld.lld -shared %t1.be.o %t2.be.o -o %t.so.be
15 // RUN: llvm-objdump --no-print-imm-hex -d %t.so.be | FileCheck --check-prefix=DSO %s
16 // RUN: llvm-readelf -S -r %t.so.be | FileCheck -check-prefix=DSOREL %s
18 // RUN: ld.lld --be8 %t1.be.o %t2.be.o -o %t.be
19 // RUN: llvm-objdump --no-print-imm-hex -d %t.be | FileCheck %s
20 // RUN: ld.lld --be8 -shared %t1.be.o %t2.be.o -o %t.so.be
21 // RUN: llvm-objdump --no-print-imm-hex -d %t.so.be | FileCheck --check-prefix=DSO %s
22 // RUN: llvm-readelf -S -r %t.so.be | FileCheck -check-prefix=DSOREL %s
24 /// Test PLT entry generation
25 .text
26 .align 2
27 .globl _start
28 .type _start,%function
29 _start:
30 bl func1
31 bl func2
32 bl func3
33 b.w func1
34 b.w func2
35 b.w func3
36 beq.w func1
37 beq.w func2
38 beq.w func3
40 /// Executable, expect no PLT
41 // CHECK: Disassembly of section .text:
42 // CHECK-EMPTY:
43 // CHECK-NEXT: <func1>:
44 // CHECK-NEXT: bx lr
45 // CHECK: <func2>:
46 // CHECK-NEXT: bx lr
47 // CHECK: <func3>:
48 // CHECK-NEXT: bx lr
49 // CHECK-NEXT: d4d4
50 // CHECK: <_start>:
51 // CHECK-NEXT: bl {{.*}} <func1>
52 // CHECK-NEXT: bl {{.*}} <func2>
53 // CHECK-NEXT: bl {{.*}} <func3>
54 // CHECK-NEXT: b.w {{.*}} <func1>
55 // CHECK-NEXT: b.w {{.*}} <func2>
56 // CHECK-NEXT: b.w {{.*}} <func3>
57 // CHECK-NEXT: beq.w {{.*}} <func1>
58 // CHECK-NEXT: beq.w {{.*}} <func2>
59 // CHECK-NEXT: beq.w {{.*}} <func3>
61 // DSO: Disassembly of section .text:
62 // DSO-EMPTY:
63 // DSO-NEXT: <func1>:
64 // DSO-NEXT: bx lr
65 // DSO: <func2>:
66 // DSO-NEXT: bx lr
67 // DSO: <func3>:
68 // DSO-NEXT: bx lr
69 // DSO-NEXT: d4d4
70 // DSO: <_start>:
71 /// 0x10260 = PLT func1
72 // DSO-NEXT: bl 0x10260
73 /// 0x10270 = PLT func2
74 // DSO-NEXT: bl 0x10270
75 /// 0x10280 = PLT func3
76 // DSO-NEXT: bl 0x10280
77 /// 0x10260 = PLT func1
78 // DSO-NEXT: b.w 0x10260
79 /// 0x10270 = PLT func2
80 // DSO-NEXT: b.w 0x10270
81 /// 0x10280 = PLT func3
82 // DSO-NEXT: b.w 0x10280
83 /// 0x10260 = PLT func1
84 // DSO-NEXT: beq.w 0x10260
85 /// 0x10270 = PLT func2
86 // DSO-NEXT: beq.w 0x10270
87 /// 0x10280 = PLT func3
88 // DSO-NEXT: beq.w 0x10280
89 // DSO: Disassembly of section .plt:
90 // DSO-EMPTY:
91 // DSO-NEXT: 10240 <.plt>:
92 // DSO-NEXT: push {lr}
93 // DSO-NEXT: ldr.w lr, [pc, #8]
94 // DSO-NEXT: add lr, pc
95 // DSO-NEXT: ldr pc, [lr, #8]!
96 /// 0x20098 = .got.plt (0x302D8) - pc (0x10238 = .plt + 8) - 8
97 // DSO-NEXT: .word 0x00020098
98 // DSO-NEXT: .word 0xd4d4d4d4
99 // DSO-NEXT: .word 0xd4d4d4d4
100 // DSO-NEXT: .word 0xd4d4d4d4
101 // DSO-NEXT: .word 0xd4d4d4d4
103 /// 136 + 2 << 16 + 0x1026c = 0x302f4 = got entry 1
104 // DSO-NEXT: 10260: f240 0c88 movw r12, #136
105 // DSO-NEXT: f2c0 0c02 movt r12, #2
106 // DSO-NEXT: 44fc add r12, pc
107 // DSO-NEXT: f8dc f000 ldr.w pc, [r12]
108 // DSO-NEXT: e7fc b 0x1026a
109 /// 124 + 2 << 16 + 0x1027c = 0x302f8 = got entry 2
110 // DSO-NEXT: 10270: f240 0c7c movw r12, #124
111 // DSO-NEXT: f2c0 0c02 movt r12, #2
112 // DSO-NEXT: 44fc add r12, pc
113 // DSO-NEXT: f8dc f000 ldr.w pc, [r12]
114 // DSO-NEXT: e7fc b 0x1027a
115 /// 112 + 2 << 16 + 0x1028c = 0x302fc = got entry 3
116 // DSO-NEXT: 10280: f240 0c70 movw r12, #112
117 // DSO-NEXT: f2c0 0c02 movt r12, #2
118 // DSO-NEXT: 44fc add r12, pc
119 // DSO-NEXT: f8dc f000 ldr.w pc, [r12]
120 // DSO-NEXT: e7fc b 0x1028a
122 // DSOREL: .got.plt PROGBITS 000302e8 {{.*}} 000018 00 WA 0 0 4
123 // DSOREL: Relocation section '.rel.plt'
124 // DSOREL: 000302f4 {{.*}} R_ARM_JUMP_SLOT {{.*}} func1
125 // DSOREL: 000302f8 {{.*}} R_ARM_JUMP_SLOT {{.*}} func2
126 // DSOREL: 000302fc {{.*}} R_ARM_JUMP_SLOT {{.*}} func3