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
126one_group_needed_alu_pc:
127one_group_needed_ldrs_pc:
128one_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
136one_group_needed_alu_sb:
137one_group_needed_ldr_sb:
138one_group_needed_ldrs_sb:
139one_group_needed_ldc_sb:
140	.word 1				@ Offset 0xc
141	.fill 0xeef0 - 16, 1, 0
142two_groups_needed_alu_sb:
143two_groups_needed_ldr_sb:
144two_groups_needed_ldrs_sb:
145two_groups_needed_ldc_sb:
146	.word 2				@ Offset 0xeef0
147	.fill 0xffeef0 - 0xeef0 - 4, 1, 0
148three_groups_needed_alu_sb:
149three_groups_needed_ldr_sb:
150three_groups_needed_ldrs_sb:
151three_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
158two_groups_needed_alu_pc:
159two_groups_needed_ldr_pc:
160two_groups_needed_ldrs_pc:
161two_groups_needed_ldc_pc:
162	mov	r0, #0
163
164@ We will place the section beta at 0xffeef0.
165
166	.section beta, "x"
167
168three_groups_needed_alu_pc:
169three_groups_needed_ldr_pc:
170three_groups_needed_ldrs_pc:
171three_groups_needed_ldc_pc:
172	mov	r0, #0
173
174