annotate lld/test/ELF/arm-thumb-blx.s @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents c4bab56944e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // REQUIRES: arm
anatofuz
parents:
diff changeset
2 // RUN: llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t
anatofuz
parents:
diff changeset
3 // RUN: llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi %S/Inputs/arm-thumb-blx-targets.s -o %ttarget
anatofuz
parents:
diff changeset
4 // RUN: echo "SECTIONS { \
anatofuz
parents:
diff changeset
5 // RUN: .R_ARM_CALL24_callee1 : { *(.R_ARM_CALL24_callee_low) } \
anatofuz
parents:
diff changeset
6 // RUN: .R_ARM_CALL24_callee2 : { *(.R_ARM_CALL24_callee_thumb_low) } \
anatofuz
parents:
diff changeset
7 // RUN: .caller : { *(.text) } \
anatofuz
parents:
diff changeset
8 // RUN: .R_ARM_CALL24_callee3 : { *(.R_ARM_CALL24_callee_high) } \
anatofuz
parents:
diff changeset
9 // RUN: .R_ARM_CALL24_callee4 : { *(.R_ARM_CALL24_callee_thumb_high) } } " > %t.script
anatofuz
parents:
diff changeset
10 // RUN: ld.lld --script %t.script %t %ttarget -o %t2
236
c4bab56944e8 LLVM 16
kono
parents: 173
diff changeset
11 // RUN: llvm-objdump -d %t2 | FileCheck %s
150
anatofuz
parents:
diff changeset
12 // Test BLX instruction is chosen for Thumb BL/BLX instruction and ARM callee
anatofuz
parents:
diff changeset
13 // 2 byte nops are used to test the pc-rounding behaviour. As a BLX from a
anatofuz
parents:
diff changeset
14 // 2 byte aligned destination is defined as Align(PC,4) + immediate:00
anatofuz
parents:
diff changeset
15 // FIXME: llvm-mc has problems assembling BLX unless the destination is
anatofuz
parents:
diff changeset
16 // external. The targets of the BL and BLX instructions are in arm-thumb-blx-target.s
anatofuz
parents:
diff changeset
17 .syntax unified
anatofuz
parents:
diff changeset
18 .section .text, "ax",%progbits
anatofuz
parents:
diff changeset
19 .thumb
anatofuz
parents:
diff changeset
20 .globl _start
anatofuz
parents:
diff changeset
21 .balign 0x10000
anatofuz
parents:
diff changeset
22 .type _start,%function
anatofuz
parents:
diff changeset
23 _start:
anatofuz
parents:
diff changeset
24 blx callee_low
anatofuz
parents:
diff changeset
25 nop
anatofuz
parents:
diff changeset
26 bl callee_low
anatofuz
parents:
diff changeset
27 nop
anatofuz
parents:
diff changeset
28 blx callee_high
anatofuz
parents:
diff changeset
29 nop
anatofuz
parents:
diff changeset
30 bl callee_high
anatofuz
parents:
diff changeset
31 nop
anatofuz
parents:
diff changeset
32 blx blx_far
anatofuz
parents:
diff changeset
33 nop
anatofuz
parents:
diff changeset
34 bl blx_far
anatofuz
parents:
diff changeset
35 nop
anatofuz
parents:
diff changeset
36 // Expect BLX to thumb target to be written out as a BL
anatofuz
parents:
diff changeset
37 blx callee_thumb_low
anatofuz
parents:
diff changeset
38 nop
anatofuz
parents:
diff changeset
39 blx callee_thumb_high
anatofuz
parents:
diff changeset
40 bx lr
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 // CHECK: Disassembly of section .R_ARM_CALL24_callee1:
anatofuz
parents:
diff changeset
43 // CHECK-EMPTY:
anatofuz
parents:
diff changeset
44 // CHECK-NEXT-ARM: callee_low:
anatofuz
parents:
diff changeset
45 // CHECK-NEXT-ARM: b4: 1e ff 2f e1 bx lr
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 // CHECK: Disassembly of section .R_ARM_CALL24_callee2:
anatofuz
parents:
diff changeset
48 // CHECK-EMPTY:
anatofuz
parents:
diff changeset
49 // CHECK-NEXT-THUMB: callee_thumb_low:
anatofuz
parents:
diff changeset
50 // CHECK-NEXT-THUMB: 100: 70 47 bx lr
anatofuz
parents:
diff changeset
51
anatofuz
parents:
diff changeset
52 // CHECK: Disassembly of section .caller:
anatofuz
parents:
diff changeset
53 // CHECK-EMPTY:
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
54 // CHECK: <_start>:
150
anatofuz
parents:
diff changeset
55 // Align(0x10000,4) - 0xff50 (65360) + 4 = 0xb4 = callee_low
anatofuz
parents:
diff changeset
56 // CHECK-NEXT-THUMB: 10000: f0 f7 58 e8 blx #-65360
anatofuz
parents:
diff changeset
57 // CHECK-NEXT-THUMB: 10004: 00 bf nop
anatofuz
parents:
diff changeset
58 // Align(0x10006,4) - 0xff54 (65364) + 4 = 0xb4 = callee_low
anatofuz
parents:
diff changeset
59 // CHECK-NEXT-THUMB: 10006: f0 f7 56 e8 blx #-65364
anatofuz
parents:
diff changeset
60 // CHECK-NEXT-THUMB: 1000a: 00 bf nop
anatofuz
parents:
diff changeset
61 // Align(0x1000c,4) + 0xf0 (240) + 4 = 0x10100 = callee_high
anatofuz
parents:
diff changeset
62 // CHECK-NEXT-THUMB: 1000c: 00 f0 78 e8 blx #240
anatofuz
parents:
diff changeset
63 // CHECK-NEXT-THUMB: 10010: 00 bf nop
anatofuz
parents:
diff changeset
64 // Align(0x10012,4) + 0xec (236) + 4 = 0x10100 = callee_high
anatofuz
parents:
diff changeset
65 // CHECK-NEXT-THUMB: 10012: 00 f0 76 e8 blx #236
anatofuz
parents:
diff changeset
66 // CHECK-NEXT-THUMB: 10016: 00 bf nop
anatofuz
parents:
diff changeset
67 // Align(0x10018,4) + 0xfffffc (16777212) = 0x1010018 = blx_far
anatofuz
parents:
diff changeset
68 // CHECK-NEXT-THUMB: 10018: ff f3 fe c7 blx #16777212
anatofuz
parents:
diff changeset
69 // CHECK-NEXT-THUMB: 1001c: 00 bf nop
anatofuz
parents:
diff changeset
70 // Align(0x1001e,4) + 0xfffff8 (16777208) = 0x1010018 = blx_far
anatofuz
parents:
diff changeset
71 // CHECK-NEXT-THUMB: 1001e: ff f3 fc c7 blx #16777208
anatofuz
parents:
diff changeset
72 // CHECK-NEXT-THUMB: 10022: 00 bf nop
anatofuz
parents:
diff changeset
73 // 10024 - 0xff28 (65320) + 4 = 0x100 = callee_thumb_low
anatofuz
parents:
diff changeset
74 // CHECK-NEXT-THUMB: 10024: f0 f7 6c f8 bl #-65320
anatofuz
parents:
diff changeset
75 // CHECK-NEXT-THUMB: 10028: 00 bf nop
anatofuz
parents:
diff changeset
76 // 1002a + 0x1d2 (466) + 4 = 0x10200 = callee_thumb_high
anatofuz
parents:
diff changeset
77 // CHECK-NEXT-THUMB: 1002a: 00 f0 e9 f8 bl #466
anatofuz
parents:
diff changeset
78 // CHECK-NEXT-THUMB: 1002e: 70 47 bx lr
anatofuz
parents:
diff changeset
79
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 // CHECK: Disassembly of section .R_ARM_CALL24_callee3:
anatofuz
parents:
diff changeset
82 // CHECK-EMPTY:
anatofuz
parents:
diff changeset
83 // CHECK-NEXT-ARM: callee_high:
anatofuz
parents:
diff changeset
84 // CHECK-NEXT-ARM: 10100: 1e ff 2f e1 bx lr
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 // CHECK: Disassembly of section .R_ARM_CALL24_callee4:
anatofuz
parents:
diff changeset
87 // CHECK-EMPTY:
anatofuz
parents:
diff changeset
88 // CHECK-NEXT-THUMB:callee_thumb_high:
anatofuz
parents:
diff changeset
89 // CHECK-NEXT-THUMB: 10200: 70 47 bx lr