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
28 .type _start,%function
40 /// Executable
, expect no PLT
41 // CHECK
: Disassembly of section
.text:
43 // CHECK-NEXT
: <func1
>:
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:
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:
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