2 // RUN
: llvm-mc
-g
--triple
=armv7a-linux-gnueabihf
-arm-add-build-attributes
-filetype
=obj
-o
%t.o
%s
3 /// Use
--threads
=1 to keep emitted warnings across sections sequential.
4 // RUN
: ld.lld
%t.o
-o
%t --threads
=1 2>&1 | FileCheck
%s
--check-prefix
=WARN
5 // RUN
: llvm-objdump
--no-show-raw-insn
-d
%t | FileCheck
%s
8 .section .arm_target, "ax", %progbits
12 .type arm_func_with_explicit_notype, %notype
13 arm_func_with_explicit_notype
:
16 .section .thumb_target, "ax", %progbits
19 thumb_func_with_notype
:
20 .type thumb_func_with_explicit_notype, %notype
21 thumb_func_with_explicit_notype
:
24 /// All the symbols that are targets of the branch relocations do
not have
25 /// type STT_FUNC. LLD should
not insert interworking thunks as non STT_FUNC
26 /// symbols have no state information
, the ABI assumes the user has manually
27 /// done the interworking. For the
BL and BLX instructions LLD should
28 /// preserve the original instruction instead of writing out the correct one
29 /// for the assumed state at the target.
30 /// LLD will warn for the
BL and BLX cases where the behavior has changed
32 .section .arm_caller, "ax", %progbits
38 b arm_func_with_notype
39 b arm_func_with_explicit_notype
41 b thumb_func_with_notype
42 b thumb_func_with_explicit_notype
44 bl arm_func_with_notype
45 bl arm_func_with_explicit_notype
47 bl thumb_func_with_notype
48 bl thumb_func_with_explicit_notype
49 // WARN
: {{.*}}.o:(.arm_caller+0x30): branch and link relocation: R_ARM_CALL to STT_SECTION symbol .arm_target ; interworking not performed; {{.*}}.s:[[#@LINE+1]]
51 // WARN
: {{.*}}.o:(.arm_caller+0x34): branch and link relocation: R_ARM_CALL to non STT_FUNC symbol: arm_func_with_notype interworking not performed; consider using directive '.type arm_func_with_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
52 blx arm_func_with_notype
53 // WARN
: {{.*}}.o:(.arm_caller+0x38): branch and link relocation: R_ARM_CALL to non STT_FUNC symbol: arm_func_with_explicit_notype interworking not performed; consider using directive '.type arm_func_with_explicit_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
54 blx arm_func_with_explicit_notype
55 // WARN
: {{.*}}.o:(.arm_caller+0x3c): branch and link relocation: R_ARM_CALL to STT_SECTION symbol .thumb_target ; interworking not performed; {{.*}}.s:[[#@LINE+1]]
57 // WARN
: {{.*}}.o:(.arm_caller+0x40): branch and link relocation: R_ARM_CALL to non STT_FUNC symbol: thumb_func_with_notype interworking not performed; consider using directive '.type thumb_func_with_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
58 blx thumb_func_with_notype
59 // WARN
: {{.*}}.o:(.arm_caller+0x44): branch and link relocation: R_ARM_CALL to non STT_FUNC symbol: thumb_func_with_explicit_notype interworking not performed; consider using directive '.type thumb_func_with_explicit_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
60 blx thumb_func_with_explicit_notype
62 .section .thumb_caller, "ax", %progbits
68 b.w arm_func_with_notype
69 b.w arm_func_with_explicit_notype
71 b.w thumb_func_with_notype
72 b.w thumb_func_with_explicit_notype
74 beq.w arm_func_with_notype
75 beq.w arm_func_with_explicit_notype
77 beq.w thumb_func_with_notype
78 beq.w thumb_func_with_explicit_notype
79 // WARN
: {{.*}}.o:(.thumb_caller+0x30): branch and link relocation: R_ARM_THM_CALL to STT_SECTION symbol .arm_target ; interworking not performed; {{.*}}.s:[[#@LINE+1]]
81 // WARN
: {{.*}}.o:(.thumb_caller+0x34): branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: arm_func_with_notype interworking not performed; consider using directive '.type arm_func_with_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
82 bl arm_func_with_notype
83 // WARN
: {{.*}}.o:(.thumb_caller+0x38): branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: arm_func_with_explicit_notype interworking not performed; consider using directive '.type arm_func_with_explicit_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
84 bl arm_func_with_explicit_notype
85 // WARN
: {{.*}}.o:(.thumb_caller+0x3c): branch and link relocation: R_ARM_THM_CALL to STT_SECTION symbol .thumb_target ; interworking not performed; {{.*}}.s:[[#@LINE+1]]
87 // WARN
: {{.*}}.o:(.thumb_caller+0x40): branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: thumb_func_with_notype interworking not performed; consider using directive '.type thumb_func_with_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
88 bl thumb_func_with_notype
89 // {{.*}}.o:(.thumb_caller+0x44): branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: thumb_func_with_explicit_notype interworking not performed; consider using directive '.type thumb_func_with_explicit_notype, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required; {{.*}}.s:[[#@LINE+1]]
90 bl thumb_func_with_explicit_notype
92 blx arm_func_with_notype
93 blx arm_func_with_explicit_notype
95 blx thumb_func_with_notype
96 blx thumb_func_with_explicit_notype
98 // CHECK
: 00021008 <_start
>:
99 // CHECK-NEXT
: 21008: b 0x21000 <arm_func_with_notype
>
100 // CHECK-NEXT
: 2100c
: b 0x21000 <arm_func_with_notype
>
101 // CHECK-NEXT
: 21010: b 0x21000 <arm_func_with_notype
>
102 // CHECK-NEXT
: 21014: b 0x21004 <thumb_func_with_notype
>
103 // CHECK-NEXT
: 21018: b 0x21004 <thumb_func_with_notype
>
104 // CHECK-NEXT
: 2101c
: b 0x21004 <thumb_func_with_notype
>
105 // CHECK-NEXT
: 21020: bl 0x21000 <arm_func_with_notype
>
106 // CHECK-NEXT
: 21024: bl 0x21000 <arm_func_with_notype
>
107 // CHECK-NEXT
: 21028: bl 0x21000 <arm_func_with_notype
>
108 // CHECK-NEXT
: 2102c
: bl 0x21004 <thumb_func_with_notype
>
109 // CHECK-NEXT
: 21030: bl 0x21004 <thumb_func_with_notype
>
110 // CHECK-NEXT
: 21034: bl 0x21004 <thumb_func_with_notype
>
111 // CHECK-NEXT
: 21038: blx
0x21000 <arm_func_with_notype
>
112 // CHECK-NEXT
: 2103c
: blx
0x21000 <arm_func_with_notype
>
113 // CHECK-NEXT
: 21040: blx
0x21000 <arm_func_with_notype
>
114 // CHECK-NEXT
: 21044: blx
0x21004 <thumb_func_with_notype
>
115 // CHECK-NEXT
: 21048: blx
0x21004 <thumb_func_with_notype
>
116 // CHECK-NEXT
: 2104c
: blx
0x21004 <thumb_func_with_notype
>
118 // CHECK
: 00021050 <thumb_caller
>:
119 // CHECK-NEXT
: 21050: b.w
0x21000 <arm_func_with_notype
>
120 // CHECK-NEXT
: 21054: b.w
0x21000 <arm_func_with_notype
>
121 // CHECK-NEXT
: 21058: b.w
0x21000 <arm_func_with_notype
>
122 // CHECK-NEXT
: 2105c
: b.w
0x21004 <thumb_func_with_notype
>
123 // CHECK-NEXT
: 21060: b.w
0x21004 <thumb_func_with_notype
>
124 // CHECK-NEXT
: 21064: b.w
0x21004 <thumb_func_with_notype
>
125 // CHECK-NEXT
: 21068: beq.w
0x21000 <arm_func_with_notype
>
126 // CHECK-NEXT
: 2106c
: beq.w
0x21000 <arm_func_with_notype
>
127 // CHECK-NEXT
: 21070: beq.w
0x21000 <arm_func_with_notype
>
128 // CHECK-NEXT
: 21074: beq.w
0x21004 <thumb_func_with_notype
>
129 // CHECK-NEXT
: 21078: beq.w
0x21004 <thumb_func_with_notype
>
130 // CHECK-NEXT
: 2107c
: beq.w
0x21004 <thumb_func_with_notype
>
131 // CHECK-NEXT
: 21080: bl 0x21000 <arm_func_with_notype
>
132 // CHECK-NEXT
: 21084: bl 0x21000 <arm_func_with_notype
>
133 // CHECK-NEXT
: 21088: bl 0x21000 <arm_func_with_notype
>
134 // CHECK-NEXT
: 2108c
: bl 0x21004 <thumb_func_with_notype
>
135 // CHECK-NEXT
: 21090: bl 0x21004 <thumb_func_with_notype
>
136 // CHECK-NEXT
: 21094: bl 0x21004 <thumb_func_with_notype
>
137 // CHECK-NEXT
: 21098: blx
0x21000 <arm_func_with_notype
>
138 // CHECK-NEXT
: 2109c
: blx
0x21000 <arm_func_with_notype
>
139 // CHECK-NEXT
: 210a0
: blx
0x21000 <arm_func_with_notype
>
140 // CHECK-NEXT
: 210a4
: blx
0x21004 <thumb_func_with_notype
>
141 // CHECK-NEXT
: 210a8
: blx
0x21004 <thumb_func_with_notype
>
142 // CHECK-NEXT
: 210ac
: blx
0x21004 <thumb_func_with_notype
>