]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/ppc64-relocs.s
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / ELF / ppc64-relocs.s
1 # REQUIRES: ppc
2
3 # RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t
4 # RUN: ld.lld %t -o %t2
5 # RUN: llvm-objdump -D %t2 | FileCheck %s --check-prefix=DATALE
6 # RUN: llvm-objdump -D %t2 | FileCheck %s
7
8 # RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t
9 # RUN: ld.lld %t -o %t2
10 # RUN: llvm-objdump -D %t2 | FileCheck %s --check-prefix=DATABE
11 # RUN: llvm-objdump -D %t2 | FileCheck %s
12
13 .text
14 .global _start
15 _start:
16 .Lfoo:
17         li      0,1
18         li      3,42
19         sc
20
21 .section        .rodata,"a",@progbits
22         .p2align        2
23 .LJTI0_0:
24         .long   .LBB0_2-.LJTI0_0
25
26 .section        .toc,"aw",@progbits
27 .L1:
28 .quad           22, 37, 89, 47
29 .LC0:
30         .tc .LJTI0_0[TC],.LJTI0_0
31
32 .section .R_PPC64_TOC16_LO_DS,"ax",@progbits
33 .globl .FR_PPC64_TOC16_LO_DS
34 .FR_PPC64_TOC16_LO_DS:
35   ld 1, .L1@toc@l(2)
36
37 # CHECK: Disassembly of section .R_PPC64_TOC16_LO_DS:
38 # CHECK: .FR_PPC64_TOC16_LO_DS:
39 # CHECK: 1001000c:       {{.*}}     ld 1, -32768(2)
40
41 .section .R_PPC64_TOC16_LO,"ax",@progbits
42 .globl .FR_PPC64_TOC16_LO
43 .FR_PPC64_TOC16_LO:
44   addi  1, 2, .L1@toc@l
45
46 # CHECK: Disassembly of section .R_PPC64_TOC16_LO:
47 # CHECK: .FR_PPC64_TOC16_LO:
48 # CHECK: 10010010: {{.*}} addi 1, 2, -32768
49
50 .section .R_PPC64_TOC16_HI,"ax",@progbits
51 .globl .FR_PPC64_TOC16_HI
52 .FR_PPC64_TOC16_HI:
53   addis 1, 2, .L1@toc@h
54
55 # CHECK: Disassembly of section .R_PPC64_TOC16_HI:
56 # CHECK: .FR_PPC64_TOC16_HI:
57 # CHECK: 10010014: {{.*}} addis 1, 2, -1
58
59 .section .R_PPC64_TOC16_HA,"ax",@progbits
60 .globl .FR_PPC64_TOC16_HA
61 .FR_PPC64_TOC16_HA:
62   addis 1, 2, .L1@toc@ha
63
64 # CHECK: Disassembly of section .R_PPC64_TOC16_HA:
65 # CHECK: .FR_PPC64_TOC16_HA:
66 # CHECK: 10010018: {{.*}} addis 1, 2, 0
67
68 .section .R_PPC64_REL24,"ax",@progbits
69 .globl .FR_PPC64_REL24
70 .FR_PPC64_REL24:
71   b .Lfoox
72 .section .R_PPC64_REL24_2,"ax",@progbits
73 .Lfoox:
74
75 # CHECK: Disassembly of section .R_PPC64_REL24:
76 # CHECK: .FR_PPC64_REL24:
77 # CHECK: 1001001c: {{.*}} b .+4
78
79 .section .R_PPC64_ADDR16_LO,"ax",@progbits
80 .globl .FR_PPC64_ADDR16_LO
81 .FR_PPC64_ADDR16_LO:
82   li 1, .Lfoo@l
83
84 # CHECK: Disassembly of section .R_PPC64_ADDR16_LO:
85 # CHECK: .FR_PPC64_ADDR16_LO:
86 # CHECK: 10010020: {{.*}} li 1, 0
87
88 .section .R_PPC64_ADDR16_HI,"ax",@progbits
89 .globl .FR_PPC64_ADDR16_HI
90 .FR_PPC64_ADDR16_HI:
91   li 1, .Lfoo@h
92
93 # CHECK: Disassembly of section .R_PPC64_ADDR16_HI:
94 # CHECK: .FR_PPC64_ADDR16_HI:
95 # CHECK: 10010024: {{.*}} li 1, 4097
96
97 .section .R_PPC64_ADDR16_HA,"ax",@progbits
98 .globl .FR_PPC64_ADDR16_HA
99 .FR_PPC64_ADDR16_HA:
100   li 1, .Lfoo@ha
101
102 # CHECK: Disassembly of section .R_PPC64_ADDR16_HA:
103 # CHECK: .FR_PPC64_ADDR16_HA:
104 # CHECK: 10010028: {{.*}} li 1, 4097
105
106 .section .R_PPC64_ADDR16_HIGHER,"ax",@progbits
107 .globl .FR_PPC64_ADDR16_HIGHER
108 .FR_PPC64_ADDR16_HIGHER:
109   li 1, .Lfoo@higher
110
111 # CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHER:
112 # CHECK: .FR_PPC64_ADDR16_HIGHER:
113 # CHECK: 1001002c: {{.*}} li 1, 0
114
115 .section .R_PPC64_ADDR16_HIGHERA,"ax",@progbits
116 .globl .FR_PPC64_ADDR16_HIGHERA
117 .FR_PPC64_ADDR16_HIGHERA:
118   li 1, .Lfoo@highera
119
120 # CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHERA:
121 # CHECK: .FR_PPC64_ADDR16_HIGHERA:
122 # CHECK: 10010030: {{.*}} li 1, 0
123
124 .section .R_PPC64_ADDR16_HIGHEST,"ax",@progbits
125 .globl .FR_PPC64_ADDR16_HIGHEST
126 .FR_PPC64_ADDR16_HIGHEST:
127   li 1, .Lfoo@highest
128
129 # CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHEST:
130 # CHECK: .FR_PPC64_ADDR16_HIGHEST:
131 # CHECK: 10010034: {{.*}} li 1, 0
132
133 .section .R_PPC64_ADDR16_HIGHESTA,"ax",@progbits
134 .globl .FR_PPC64_ADDR16_HIGHESTA
135 .FR_PPC64_ADDR16_HIGHESTA:
136   li 1, .Lfoo@highesta
137
138 # CHECK: Disassembly of section .R_PPC64_ADDR16_HIGHESTA:
139 # CHECK: .FR_PPC64_ADDR16_HIGHESTA:
140 # CHECK: 10010038: {{.*}} li 1, 0
141
142 .section  .R_PPC64_REL32, "ax",@progbits
143 .globl .FR_PPC64_REL32
144 .FR_PPC64_REL32:
145   addis 5, 2, .LC0@toc@ha
146   ld 5, .LC0@toc@l(5)
147 .LBB0_2:
148   add 3, 3, 4
149
150 # DATALE: Disassembly of section .rodata:
151 # DATALE: .rodata:
152 # DATALE: 10000190: b4 fe 00 00
153
154 # DATABE: Disassembly of section .rodata:
155 # DATABE: .rodata:
156 # DATABE: 10000190: 00 00 fe b4
157
158 # Address of rodata + value stored at rodata entry
159 # should equal address of LBB0_2.
160 # 0x10000190 + 0xfeb4 = 0x10010044
161 # CHECK: Disassembly of section .R_PPC64_REL32:
162 # CHECK: .FR_PPC64_REL32:
163 # CHECK: 1001003c: {{.*}} addis 5, 2, 0
164 # CHECK: 10010040: {{.*}} ld 5, -32736(5)
165 # CHECK: 10010044: {{.*}} add 3, 3, 4
166
167 .section .R_PPC64_REL64, "ax",@progbits
168 .globl  .FR_PPC64_REL64
169 .FR_PPC64_REL64:
170         .cfi_startproc
171         .cfi_personality 148, __foo
172         li 0, 1
173         li 3, 55
174         sc
175         .cfi_endproc
176 __foo:
177   li 3,0
178
179 # Check that address of eh_frame entry + value stored
180 # should equal the address of foo. Since it is not aligned,
181 # the entry is not stored exactly at 100001a8. It starts at
182 # address 0x100001aa and has the value 0xfeaa.
183 # 0x100001aa + 0xfeaa = 0x10010054
184 # DATALE: Disassembly of section .eh_frame:
185 # DATALE: .eh_frame:
186 # DATALE: 100001a8: {{.*}} aa fe
187
188 # DATABE: Disassembly of section .eh_frame:
189 # DATABE: .eh_frame:
190 # DATABE: 100001b0: fe aa {{.*}}
191
192 # CHECK: __foo
193 # CHECK-NEXT: 10010054: {{.*}} li 3, 0