Upload Tizen:Base source
[external/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         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
121         .section zero, "x"
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
131         .section alpha, "x"
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
145         .section beta, "x"
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