Commit | Line | Data |
---|---|---|
4962c51a MS |
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 | add r0, r0, #:sb_g0:(one_group_needed_alu_sb) | |
32 | ||
33 | add r0, r15, #:sb_g0_nc:(two_groups_needed_alu_sb) | |
34 | add r0, r0, #:sb_g1:(two_groups_needed_alu_sb) | |
35 | ||
36 | add r0, r0, #:sb_g0_nc:(three_groups_needed_alu_sb) | |
37 | add r0, r0, #:sb_g1_nc:(three_groups_needed_alu_sb) | |
38 | add r0, r0, #:sb_g2:(three_groups_needed_alu_sb) | |
39 | ||
40 | @ LDR, PC-relative | |
41 | ||
42 | @ Instructions start at .text + 0x30 | |
43 | add r0, r0, #:pc_g0_nc:(two_groups_needed_ldr_pc) | |
44 | ldr r1, [r0, #:pc_g1:(two_groups_needed_ldr_pc + 4)] | |
45 | ||
46 | @ Instructions start at .text + 0x38 | |
47 | add r0, r0, #:pc_g0_nc:(three_groups_needed_ldr_pc) | |
48 | add r0, r0, #:pc_g1_nc:(three_groups_needed_ldr_pc + 4) | |
49 | ldr r1, [r0, #:pc_g2:(three_groups_needed_ldr_pc + 8)] | |
50 | ||
51 | @ LDR, SB-relative | |
52 | ||
53 | ldr r1, [r0, #:sb_g0:(one_group_needed_ldr_sb)] | |
54 | ||
55 | add r0, r0, #:sb_g0_nc:(two_groups_needed_ldr_sb) | |
56 | ldr r1, [r0, #:sb_g1:(two_groups_needed_ldr_sb)] | |
57 | ||
58 | add r0, r0, #:sb_g0_nc:(three_groups_needed_ldr_sb) | |
59 | add r0, r0, #:sb_g1_nc:(three_groups_needed_ldr_sb) | |
60 | ldr r1, [r0, #:sb_g2:(three_groups_needed_ldr_sb)] | |
61 | ||
62 | @ LDRS, PC-relative | |
63 | ||
64 | @ Instructions start at .text + 0x5c | |
65 | ldrd r2, [r0, #:pc_g0:(one_group_needed_ldrs_pc)] | |
66 | ||
67 | @ Instructions start at .text + 0x60 | |
68 | add r0, r0, #:pc_g0_nc:(two_groups_needed_ldrs_pc) | |
69 | ldrd r2, [r0, #:pc_g1:(two_groups_needed_ldrs_pc + 4)] | |
70 | ||
71 | @ Instructions start at .text + 0x68 | |
72 | add r0, r0, #:pc_g0_nc:(three_groups_needed_ldrs_pc) | |
73 | add r0, r0, #:pc_g1_nc:(three_groups_needed_ldrs_pc + 4) | |
74 | ldrd r2, [r0, #:pc_g2:(three_groups_needed_ldrs_pc + 8)] | |
75 | ||
76 | @ LDRS, SB-relative | |
77 | ||
78 | ldrd r2, [r0, #:sb_g0:(one_group_needed_ldrs_sb)] | |
79 | ||
80 | add r0, r0, #:sb_g0_nc:(two_groups_needed_ldrs_sb) | |
81 | ldrd r2, [r0, #:sb_g1:(two_groups_needed_ldrs_sb)] | |
82 | ||
83 | add r0, r0, #:sb_g0_nc:(three_groups_needed_ldrs_sb) | |
84 | add r0, r0, #:sb_g1_nc:(three_groups_needed_ldrs_sb) | |
85 | ldrd r2, [r0, #:sb_g2:(three_groups_needed_ldrs_sb)] | |
86 | ||
87 | @ LDC, PC-relative | |
88 | ||
89 | @ Instructions start at .text + 0x8c | |
90 | ldc 0, c0, [r0, #:pc_g0:(one_group_needed_ldc_pc)] | |
91 | ||
92 | @ Instructions start at .text + 0x90 | |
93 | add r0, r0, #:pc_g0_nc:(two_groups_needed_ldc_pc) | |
94 | ldc 0, c0, [r0, #:pc_g1:(two_groups_needed_ldc_pc + 4)] | |
95 | ||
96 | @ Instructions start at .text + 0x98 | |
97 | add r0, r0, #:pc_g0_nc:(three_groups_needed_ldc_pc) | |
98 | add r0, r0, #:pc_g1_nc:(three_groups_needed_ldc_pc + 4) | |
99 | ldc 0, c0, [r0, #:pc_g2:(three_groups_needed_ldc_pc + 8)] | |
100 | ||
101 | @ LDC, SB-relative | |
102 | ||
103 | ldc 0, c0, [r0, #:sb_g0:(one_group_needed_ldc_sb)] | |
104 | ||
105 | add r0, r0, #:sb_g0_nc:(two_groups_needed_ldc_sb) | |
106 | ldc 0, c0, [r0, #:sb_g1:(two_groups_needed_ldc_sb)] | |
107 | ||
108 | add r0, r0, #:sb_g0_nc:(three_groups_needed_ldc_sb) | |
109 | add r0, r0, #:sb_g1_nc:(three_groups_needed_ldc_sb) | |
110 | ldc 0, c0, [r0, #:sb_g2:(three_groups_needed_ldc_sb)] | |
111 | ||
112 | @ This point in the file is .text + 0xbc. | |
113 | ||
114 | one_group_needed_alu_pc: | |
115 | one_group_needed_ldrs_pc: | |
116 | one_group_needed_ldc_pc: | |
117 | mov r0, #0 | |
118 | ||
119 | @ We will place the section zero at 0x0. | |
120 | ||
c9ee9c4c | 121 | .section zero, "x" |
4962c51a MS |
122 | |
123 | one_group_needed_alu_sb: | |
124 | one_group_needed_ldr_sb: | |
125 | one_group_needed_ldrs_sb: | |
126 | one_group_needed_ldc_sb: | |
127 | mov r0, #0 | |
128 | ||
129 | @ We will place the section alpha at 0xeef0. | |
130 | ||
c9ee9c4c | 131 | .section alpha, "x" |
4962c51a MS |
132 | |
133 | two_groups_needed_alu_sb: | |
134 | two_groups_needed_ldr_sb: | |
135 | two_groups_needed_ldrs_sb: | |
136 | two_groups_needed_ldc_sb: | |
137 | two_groups_needed_alu_pc: | |
138 | two_groups_needed_ldr_pc: | |
139 | two_groups_needed_ldrs_pc: | |
140 | two_groups_needed_ldc_pc: | |
141 | mov r0, #0 | |
142 | ||
143 | @ We will place the section beta at 0xffeef0. | |
144 | ||
c9ee9c4c | 145 | .section beta, "x" |
4962c51a MS |
146 | |
147 | three_groups_needed_alu_sb: | |
148 | three_groups_needed_ldr_sb: | |
149 | three_groups_needed_ldrs_sb: | |
150 | three_groups_needed_ldc_sb: | |
151 | three_groups_needed_alu_pc: | |
152 | three_groups_needed_ldr_pc: | |
153 | three_groups_needed_ldrs_pc: | |
154 | three_groups_needed_ldc_pc: | |
155 | mov r0, #0 | |
156 |