xref: /llvm-project/llvm/test/MC/ARM/pcrel-arm-ldr-imm8-relocs.s (revision 6e3b2cb46ef5b9d9d28ed337491ee7da7b296616)
1@ RUN: llvm-mc -filetype=obj -triple=armv7 %s -o %t
2@ RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=ARM
3@ RUN: llvm-objdump -d --triple=armv7 %t | FileCheck %s --check-prefix=ARM_ADDEND
4@ RUN: llvm-mc -filetype=obj --triple=armebv7-unknown-unknown %s -o %t
5@ RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=ARM
6@ RUN: llvm-objdump -d --triple=armebv7-unknown-unknown %t | FileCheck %s --check-prefix=ARM_ADDEND
7
8@ ARM: R_ARM_LDRS_PC_G0
9@ ARM: R_ARM_LDRS_PC_G0
10@ ARM: R_ARM_LDRS_PC_G0
11@ ARM: R_ARM_LDRS_PC_G0
12@ ARM: R_ARM_LDRS_PC_G0
13@ ARM: R_ARM_LDRS_PC_G0
14@ ARM: R_ARM_LDRS_PC_G0
15
16// The value format is decimal in these specific cases, but it's hex for other
17// ldr instructions. These checks are valid for both formats.
18
19@ ARM_ADDEND: r0, [pc, #-{{(0x)?}}8]
20@ ARM_ADDEND: r0, [pc, #-{{(0x)?}}8]
21@ ARM_ADDEND: r0, [pc, #-{{(0x)?}}8]
22@ ARM_ADDEND: r0, [pc, #-{{16|0x10}}]
23@ ARM_ADDEND: r0, [pc, #-{{16|0x10}}]
24@ ARM_ADDEND: r0, [pc]
25@ ARM_ADDEND: r0, r1, [pc]
26
27    .arm
28    .section .text.bar, "ax"
29    .balign 4
30    .global bar
31    .type bar, %function
32bar:
33    ldrh r0, foo
34    ldrsb r0, foo
35    ldrsh r0, foo
36    ldrh r0, just_after-8
37    ldrsb r0, just_after-8
38    ldrsh r0, foo+8
39    ldrd r0,r1, foo+8
40    bx lr
41
42    .section .data.foo, "a", %progbits
43    .balign 4
44    .global foo
45foo:
46    .word 0x11223344, 0x55667788
47just_after:
48    .word 0x9900aabb, 0xccddeeff
49