]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/arm-mov-relocs.s
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / ELF / arm-mov-relocs.s
1 // REQUIRES: arm
2 // RUN: llvm-mc -filetype=obj -triple=armv7a-unknown-linux-gnueabi %s -o %t
3 // RUN: ld.lld %t -o %t2
4 // RUN: llvm-objdump -d %t2 -triple=armv7a-unknown-linux-gnueabi | FileCheck %s
5 // RUN: llvm-mc -filetype=obj -triple=thumbv7a-unknown-linux-gnueabi %s -o %t3
6 // RUN: ld.lld %t3 -o %t4
7 // RUN: llvm-objdump -d %t4 -triple=thumbv7a-unknown-linux-gnueabi | FileCheck %s
8
9 // Test the R_ARM_MOVW_ABS_NC and R_ARM_MOVT_ABS relocations as well as
10 // the R_ARM_THM_MOVW_ABS_NC and R_ARM_THM_MOVT_ABS relocations.
11  .syntax unified
12  .globl _start
13 _start:
14  .section .R_ARM_MOVW_ABS_NC, "ax",%progbits
15  movw r0, :lower16:label
16  movw r1, :lower16:label1
17  movw r2, :lower16:label2 + 4
18  movw r3, :lower16:label3
19  movw r4, :lower16:label3 + 4
20 // CHECK: Disassembly of section .R_ARM_MOVW_ABS_NC
21 // CHECK: movw  r0, #0
22 // CHECK: movw  r1, #4
23 // CHECK: movw  r2, #12
24 // CHECK: movw  r3, #65532
25 // CHECK: movw  r4, #0
26  .section .R_ARM_MOVT_ABS, "ax",%progbits
27  movt r0, :upper16:label
28  movt r1, :upper16:label1
29  movt r2, :upper16:label2 + 4
30  movt r3, :upper16:label3
31  movt r4, :upper16:label3 + 4
32 // CHECK: Disassembly of section .R_ARM_MOVT_ABS
33 // CHECK: movt  r0, #2
34 // CHECK: movt  r1, #2
35 // CHECK: movt  r2, #2
36 // CHECK: movt  r3, #2
37 // CHECK: movt  r4, #3
38
39 .section .R_ARM_MOVW_PREL_NC, "ax",%progbits
40  movw r0, :lower16:label - .
41  movw r1, :lower16:label1 - .
42  movw r2, :lower16:label2 + 4 - .
43  movw r3, :lower16:label3 - .
44  movw r4, :lower16:label3 + 0x103c - .
45 // 0x20000 - 0x11028 = :lower16:0xefd8 (61400)
46 // CHECK: 11028:  {{.*}}     movw    r0, #61400
47 // 0x20004 = 0x1102c = :lower16:0xefd8 (61400)
48 // CHECK: 1102c:  {{.*}}     movw    r1, #61400
49 // 0x20008 - 0x11030 + 4 = :lower16:0xefdc (61404)
50 // CHECK: 11030:  {{.*}}     movw    r2, #61404
51 // 0x2fffc - 0x11034 = :lower16:0x1efc8 (61384)
52 // CHECK: 11034:  {{.*}}     movw    r3, #61384
53 // 0x2fffc - 0x11038 +0x103c :lower16:0x20000 (0)
54 // CHECK: 11038:  {{.*}}     movw    r4, #0
55
56 .section .R_ARM_MOVT_PREL, "ax",%progbits
57  movt r0, :upper16:label - .
58  movt r1, :upper16:label1 - .
59  movt r2, :upper16:label2 + 0x4 - .
60  movt r3, :upper16:label3 - .
61  movt r4, :upper16:label3 + 0x1050 - .
62 // 0x20000 - 0x1103c = :upper16:0xefc4  = 0
63 // CHECK: 1103c:  {{.*}}     movt    r0, #0
64 // 0x20004 - 0x11040 = :upper16:0xefc0 = 0
65 // CHECK: 11040:  {{.*}}     movt    r1, #0
66 // 0x20008 - 0x11044 + 4 = :upper16:0xefc8 = 0
67 // CHECK: 11044:  {{.*}}     movt    r2, #0
68 // 0x2fffc - 0x11048 = :upper16:0x1efb4 = 1
69 // CHECK: 11048:  {{.*}}     movt    r3, #1
70 // 0x2fffc - 0x1104c + 0x1050 = :upper16:0x20000 = 2
71 // CHECK: 1104c:  {{.*}}     movt    r4, #2
72  .section .destination, "aw",%progbits
73  .balign 65536
74 // 0x20000
75 label:
76  .word 0
77 // 0x20004
78 label1:
79  .word 1
80 // 0x20008
81 label2:
82  .word 2
83 // Test label3 is immediately below 2^16 alignment boundary
84  .space 65536 - 16
85 // 0x2fffc
86 label3:
87  .word 3
88 // label3 + 4 is on a 2^16 alignment boundary
89  .word 4