2 // RUN
: rm
-rf
%t && split-file
%s
%t
3 // RUN
: llvm-mc
-arm-add-build-attributes
-filetype
=obj
-triple
=armv4t-none-linux-gnueabi
%t/a.s
-o
%t/a.o
4 // RUN
: ld.lld
%t/a.o
--script
%t/far.lds
-o
%t/a-far
5 // RUN
: llvm-objdump
--no-print-imm-hex
-d
--no-show-raw-insn
--triple
=armv4t-none-linux-gnueabi
%t/a-far | FileCheck
%s
--check-prefixes
=FAR
6 // RUN
: ld.lld
%t/a.o
--script
%t/near.lds
-o
%t/a-near
7 // RUN
: llvm-objdump
--no-print-imm-hex
-d
--no-show-raw-insn
--triple
=armv4t-none-linux-gnueabi
%t/a-near | FileCheck
%s
--check-prefixes
=NEAR
8 // RUN
: ld.lld
%t/a.o
-pie
--script
%t/far.lds
-o
%t/a-far-pie
9 // RUN
: llvm-objdump
--no-print-imm-hex
-d
--no-show-raw-insn
--triple
=armv4t-none-linux-gnueabi
%t/a-far-pie | FileCheck
%s
--check-prefixes
=FAR-PIE
10 // RUN
: ld.lld
%t/a.o
-pie
--script
%t/near.lds
-o
%t/a-near-pie
11 // RUN
: llvm-objdump
--no-print-imm-hex
-d
--no-show-raw-insn
--triple
=armv4t-none-linux-gnueabi
%t/a-near-pie | FileCheck
%s
--check-prefixes
=NEAR
13 /// On Armv4T there is no blx instruction so long branch
/exchange looks slightly
21 .section .low, "ax", %progbits
24 .type _start,%function
32 .type thumb_start,%function
38 // FAR-LABEL
: <_start
>:
39 // FAR-NEXT
: 1000000: bl 0x1000010 <__ARMv5LongLdrPcThunk_target
> @ imm
= #8
42 // FAR-LABEL
: <thumb_start
>:
43 // FAR-NEXT
: 1000008: bl 0x1000018 <__Thumbv4ABSLongThunk_thumb_target
> @ imm
= #12
45 // FAR-NEXT
: bmi
0xffffba @ imm
= #-88
47 // FAR-NEXT
: <__ARMv5LongLdrPcThunk_target
>:
48 // FAR-NEXT
: 1000010: ldr pc
, [pc
, #-4] @ 0x1000014 <__ARMv5LongLdrPcThunk_target+0x4>
51 // FAR-NEXT
: 1000014: 00 00 00 06 .word 0x06000000
53 // FAR-NEXT
: <__Thumbv4ABSLongThunk_thumb_target
>:
54 // FAR-NEXT
: 1000018: bx pc
55 // FAR-NEXT
: b 0x1000018 <__Thumbv4ABSLongThunk_thumb_target
> @ imm
= #-6
58 // FAR-NEXT
: 100001c
: ldr
r12, [pc
] @
0x1000024 <__Thumbv4ABSLongThunk_thumb_target+
0xc>
62 // FAR-NEXT
: 1000024: 05 00 00 06 .word 0x06000005
64 // FAR-PIE-LABEL
: <_start
>:
65 // FAR-PIE-NEXT
: 1000000: bl 0x1000010 <__ARMv4PILongThunk_target
> @ imm
= #8
66 // FAR-PIE-NEXT
: bx
lr
68 // FAR-PIE-NEXT
: <thumb_start
>:
69 // FAR-PIE-NEXT
: 1000008: bl 0x100001c <__Thumbv4PILongThunk_thumb_target
> @ imm
= #16
70 // FAR-PIE-NEXT
: bx
lr
71 // FAR-PIE-NEXT
: bmi
0xffffba @ imm
= #-88
73 // FAR-PIE-NEXT
: <__ARMv4PILongThunk_target
>:
74 // FAR-PIE-NEXT
: 1000010: ldr
r12, [pc
] @
0x1000018 <__ARMv4PILongThunk_target+
0x8>
75 // FAR-PIE-NEXT
: add pc
, pc
, r12
77 // FAR-PIE-NEXT
: <$d
>:
78 // FAR-PIE-NEXT
: 1000018: e4 ff ff
04 .word 0x04ffffe4
80 // FAR-PIE-NEXT
: <__Thumbv4PILongThunk_thumb_target
>:
81 // FAR-PIE-NEXT
: 100001c
: bx pc
82 // FAR-PIE-NEXT
: b 0x100001c <__Thumbv4PILongThunk_thumb_target
> @ imm
= #-6
84 // FAR-PIE-NEXT
: <$
a>:
85 // FAR-PIE-NEXT
: 1000020: ldr
r12, [pc
, #4] @ 0x100002c <__Thumbv4PILongThunk_thumb_target+0x10>
86 // FAR-PIE-NEXT
: add r12, pc
, r12
87 // FAR-PIE-NEXT
: bx
r12
89 // FAR-PIE-NEXT
: <$d
>:
90 // FAR-PIE-NEXT
: 100002c
: d9 ff ff
04 .word 0x04ffffd9
92 // NEAR-LABEL
: <_start
>:
93 // NEAR-NEXT
: 1000000: bl 0x100000c <thumb_start+
0x4> @ imm
= #4
96 // NEAR-LABEL
: <thumb_start
>:
97 // NEAR-NEXT
: 1000008: bl 0x1000012 <thumb_target
> @ imm
= #6
100 .section .high, "ax", %progbits
103 .type target,%function
109 .type thumb_target,%function
113 // FAR-LABEL
: <target
>:
114 // FAR-NEXT
: 6000000: bx
lr
116 // FAR-LABEL
: <thumb_target
>:
117 // FAR-NEXT
: 6000004: bx
lr
119 // FAR-PIE-LABEL
: <target
>:
120 // FAR-PIE-NEXT
: 6000000: bx
lr
122 // FAR-PIE-LABEL
: <thumb_target
>:
123 // FAR-PIE-NEXT
: 6000004: bx
lr
125 // NEAR-LABEL
: <target
>:
126 // NEAR-LABEL
: 100000e
: bx
lr
128 // NEAR-NEXT
: <thumb_target
>:
129 // NEAR-NEXT
: 1000012: bx
lr
135 .low 0x01000000 : { *(.low) }
136 .high 0x06000000 : { *(.high) }
142 .all 0x01000000 : { *(.low) *(.high) }