1// REQUIRES: arm
2// RUN: llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t
3// RUN: echo "SECTIONS { \
4// RUN:          . = SIZEOF_HEADERS; \
5// RUN:          .R_ARM_PC11_1 : { *(.R_ARM_PC11_1) } \
6// RUN:          .caller : { *(.caller) } \
7// RUN:          .R_ARM_PC11_2 : { *(.R_ARM_PC11_2) } \
8// RUN:          .text : { *(.text) } } " > %t.script
9// RUN: ld.lld --script %t.script %t %S/Inputs/arm-thumb-narrow-branch.o -o %t2
10// RUN: llvm-objdump -d --triple=thumbv7a-none-linux-gnueabi %t2 | FileCheck %s
11
12// Test the R_ARM_PC11 relocation which is used with the narrow encoding of B.N
13// the source of these relocations is a binary file arm-thumb-narrow-branch.o
14// which has been assembled with the GNU assembler as llvm-mc doesn't emit it
15// as the range of +-2048 bytes is too small to be practically useful for out
16// of section branches.
17 .syntax unified
18
19.global callee_low_far
20.type callee_low_far,%function
21callee_low_far = 0x809
22
23 .section .R_ARM_PC11_1,"ax",%progbits
24 .thumb
25 .balign 0x1000
26 .type callee_low,%function
27 .globl callee_low
28callee_low:
29 bx lr
30
31 .text
32 .align 2
33 .thumb
34 .globl _start
35 .type _start, %function
36_start:
37 bl callers
38 bx lr
39
40 .section .R_ARM_PC11_2,"ax",%progbits
41 .thumb
42 .align 2
43 .type callee_high,%function
44 .globl callee_high
45callee_high:
46 bx lr
47
48.global callee_high_far
49.type callee_high_far,%function
50callee_high_far = 0x180d
51
52// CHECK: Disassembly of section .R_ARM_PC11_1:
53// CHECK-EMPTY:
54// CHECK-NEXT: <callee_low>:
55// CHECK-NEXT:    1000:       70 47   bx      lr
56// CHECK-EMPTY:
57// CHECK-NEXT: Disassembly of section .caller:
58// CHECK-EMPTY:
59// CHECK-NEXT: <callers>:
60/// callee_low_far = 0x809
61// CHECK-NEXT:    1004:       00 e4   b       0x808
62// CHECK-NEXT:    1006:       fb e7   b       0x1000 <callee_low>
63// CHECK-NEXT:    1008:       02 e0   b       0x1010 <callee_high>
64/// callee_high_far = 0x180d
65// CHECK-NEXT:    100a:       ff e3   b       0x180c
66// CHECK-NEXT:    100c:       70 47   bx      lr
67// CHECK-NEXT:    100e:       00 bf   nop
68// CHECK-EMPTY:
69// CHECK-NEXT: Disassembly of section .R_ARM_PC11_2:
70// CHECK-EMPTY:
71// CHECK-NEXT: <callee_high>:
72// CHECK-NEXT:    1010:       70 47   bx      lr
73// CHECK-EMPTY:
74// CHECK-NEXT: Disassembly of section .text:
75// CHECK-EMPTY:
76// CHECK-NEXT: <_start>:
77// CHECK-NEXT:    1014:       ff f7 f6 ff     bl      0x1004 <callers>
78// CHECK-NEXT:    1018:       70 47   bx      lr
79