PR ld/15787
[platform/upstream/binutils.git] / ld / testsuite / ld-arm / group-relocs.s
1 @ Tests for group relocations.
2 @
3 @ Beware when editing this file: it is carefully crafted so that
4 @ specific PC- and SB-relative offsets arise.
5 @
6 @ Note that the gas tests have already checked that group relocations are
7 @ handled in the same way for local and external symbols.
8
9 @ We will place .text at 0x8000.
10
11         .text
12         .globl _start
13
14 _start:
15         @ ALU, PC-relative
16
17         @ Instructions start at .text + 0x0
18         add     r0, r15, #:pc_g0:(one_group_needed_alu_pc)
19
20         @ Instructions start at .text + 0x4
21         add     r0, r15, #:pc_g0_nc:(two_groups_needed_alu_pc)
22         add     r0, r0, #:pc_g1:(two_groups_needed_alu_pc + 4)
23
24         @ Instructions start at .text + 0xc
25         add     r0, r15, #:pc_g0_nc:(three_groups_needed_alu_pc)
26         add     r0, r0, #:pc_g1_nc:(three_groups_needed_alu_pc + 4)
27         add     r0, r0, #:pc_g2:(three_groups_needed_alu_pc + 8)
28
29         @ ALU, SB-relative
30
31         @ Instructions start at .text + 0x18
32         add     r0, r0, #:sb_g0:(one_group_needed_alu_sb)
33
34         @ Instructions start at .text + 0x1c
35         add     r0, r0, #:sb_g0_nc:(two_groups_needed_alu_sb)
36         add     r0, r0, #:sb_g1:(two_groups_needed_alu_sb)
37
38         @ Instructions start at .text + 0x24
39         add     r0, r0, #:sb_g0_nc:(three_groups_needed_alu_sb)
40         add     r0, r0, #:sb_g1_nc:(three_groups_needed_alu_sb)
41         add     r0, r0, #:sb_g2:(three_groups_needed_alu_sb)
42
43         @ LDR, PC-relative
44
45         @ Instructions start at .text + 0x30
46         add     r0, pc, #:pc_g0_nc:(two_groups_needed_ldr_pc)
47         ldr     r1, [r0, #:pc_g1:(two_groups_needed_ldr_pc + 4)]
48
49         @ Instructions start at .text + 0x38
50         add     r0, pc, #:pc_g0_nc:(three_groups_needed_ldr_pc)
51         add     r0, r0, #:pc_g1_nc:(three_groups_needed_ldr_pc + 4)
52         ldr     r1, [r0, #:pc_g2:(three_groups_needed_ldr_pc + 8)]
53
54         @ LDR, SB-relative
55
56         @ Instructions start at .text + 0x44
57         ldr     r1, [r0, #:sb_g0:(one_group_needed_ldr_sb)]
58
59         @ Instructions start at .text + 0x48
60         add     r0, r0, #:sb_g0_nc:(two_groups_needed_ldr_sb)
61         ldr     r1, [r0, #:sb_g1:(two_groups_needed_ldr_sb)]
62
63         @ Instructions start at .text + 0x50
64         add     r0, r0, #:sb_g0_nc:(three_groups_needed_ldr_sb)
65         add     r0, r0, #:sb_g1_nc:(three_groups_needed_ldr_sb)
66         ldr     r1, [r0, #:sb_g2:(three_groups_needed_ldr_sb)]
67
68         @ LDRS, PC-relative
69
70         @ Instructions start at .text + 0x5c
71         ldrd    r2, [pc, #:pc_g0:(one_group_needed_ldrs_pc)]
72
73         @ Instructions start at .text + 0x60
74         add     r0, pc, #:pc_g0_nc:(two_groups_needed_ldrs_pc)
75         ldrd    r2, [r0, #:pc_g1:(two_groups_needed_ldrs_pc + 4)]
76
77         @ Instructions start at .text + 0x68
78         add     r0, pc, #:pc_g0_nc:(three_groups_needed_ldrs_pc)
79         add     r0, r0, #:pc_g1_nc:(three_groups_needed_ldrs_pc + 4)
80         ldrd    r2, [r0, #:pc_g2:(three_groups_needed_ldrs_pc + 8)]
81
82         @ LDRS, SB-relative
83
84         @ Instructions start at .text + 0x74
85         ldrd    r2, [r0, #:sb_g0:(one_group_needed_ldrs_sb)]
86
87         @ Instructions start at .text + 0x78
88         add     r0, r0, #:sb_g0_nc:(two_groups_needed_ldrs_sb)
89         ldrd    r2, [r0, #:sb_g1:(two_groups_needed_ldrs_sb)]
90
91         @ Instructions start at .text + 0x80
92         add     r0, r0, #:sb_g0_nc:(three_groups_needed_ldrs_sb)
93         add     r0, r0, #:sb_g1_nc:(three_groups_needed_ldrs_sb)
94         ldrd    r2, [r0, #:sb_g2:(three_groups_needed_ldrs_sb)]
95
96         @ LDC, PC-relative
97
98         @ Instructions start at .text + 0x8c
99         ldc     0, c0, [pc, #:pc_g0:(one_group_needed_ldc_pc)]
100
101         @ Instructions start at .text + 0x90
102         add     r0, pc, #:pc_g0_nc:(two_groups_needed_ldc_pc)
103         ldc     0, c0, [r0, #:pc_g1:(two_groups_needed_ldc_pc + 4)]
104
105         @ Instructions start at .text + 0x98
106         add     r0, pc, #:pc_g0_nc:(three_groups_needed_ldc_pc)
107         add     r0, r0, #:pc_g1_nc:(three_groups_needed_ldc_pc + 4)
108         ldc     0, c0, [r0, #:pc_g2:(three_groups_needed_ldc_pc + 8)]
109
110         @ LDC, SB-relative
111
112         @ Instructions start at .text + 0xa4
113         ldc     0, c0, [r0, #:sb_g0:(one_group_needed_ldc_sb)]
114
115         @ Instructions start at .text + 0xa8
116         add     r0, r0, #:sb_g0_nc:(two_groups_needed_ldc_sb)
117         ldc     0, c0, [r0, #:sb_g1:(two_groups_needed_ldc_sb)]
118
119         @ Instructions start at .text + 0xb0
120         add     r0, r0, #:sb_g0_nc:(three_groups_needed_ldc_sb)
121         add     r0, r0, #:sb_g1_nc:(three_groups_needed_ldc_sb)
122         ldc     0, c0, [r0, #:sb_g2:(three_groups_needed_ldc_sb)]
123
124 @ This point in the file is .text + 0xbc.
125
126 one_group_needed_alu_pc:
127 one_group_needed_ldrs_pc:
128 one_group_needed_ldc_pc:
129         mov     r0, #0
130
131 @ We will place the section .data at 0x03000000
132
133         .data
134
135         .word 0, 0, 0
136 one_group_needed_alu_sb:
137 one_group_needed_ldr_sb:
138 one_group_needed_ldrs_sb:
139 one_group_needed_ldc_sb:
140         .word 1                         @ Offset 0xc
141         .fill 0xeef0 - 16, 1, 0
142 two_groups_needed_alu_sb:
143 two_groups_needed_ldr_sb:
144 two_groups_needed_ldrs_sb:
145 two_groups_needed_ldc_sb:
146         .word 2                         @ Offset 0xeef0
147         .fill 0xffeef0 - 0xeef0 - 4, 1, 0
148 three_groups_needed_alu_sb:
149 three_groups_needed_ldr_sb:
150 three_groups_needed_ldrs_sb:
151 three_groups_needed_ldc_sb:
152         .word 3                         @ Offset 0xffeef0
153
154 @ We will place the section alpha at 0xeef0.
155
156         .section alpha, "x"
157
158 two_groups_needed_alu_pc:
159 two_groups_needed_ldr_pc:
160 two_groups_needed_ldrs_pc:
161 two_groups_needed_ldc_pc:
162         mov     r0, #0
163
164 @ We will place the section beta at 0xffeef0.
165
166         .section beta, "x"
167
168 three_groups_needed_alu_pc:
169 three_groups_needed_ldr_pc:
170 three_groups_needed_ldrs_pc:
171 three_groups_needed_ldc_pc:
172         mov     r0, #0
173