File: reloc-insn.s

package info (click to toggle)
binutils-avr 2.26.20160125%2BAtmel3.6.2-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 365,552 kB
  • sloc: ansic: 2,480,046; asm: 892,807; exp: 188,218; cpp: 133,829; makefile: 63,886; sh: 32,212; yacc: 26,783; lisp: 16,709; xml: 7,490; perl: 6,449; python: 4,555; ada: 4,318; pascal: 3,174; lex: 2,250; cs: 879; sed: 334; f90: 298; awk: 168; objc: 134; java: 73; fortran: 43
file content (214 lines) | stat: -rw-r--r-- 4,460 bytes parent folder | download | duplicates (27)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
// Test file for AArch64 GAS -- instructions with relocation operators.

func:
	// BFD_RELOC_AARCH64_MOVW_G0
	// immediate
	movz	x0,#:abs_g0:u12

	// BFD_RELOC_AARCH64_MOVW_G0_S
	// immediate
	movz	x0,#:abs_g0_s:s12
	
	// BFD_RELOC_AARCH64_MOVW_G1
	// immediate
	movz	x1,#:abs_g1:u32
	movk	x1,#:abs_g0_nc:u32
	
	// BFD_RELOC_AARCH64_MOVW_G1_S
	// immediate
	movz	x1,#:abs_g1_s:s12
	movk	x1,#:abs_g0_nc:s12
	
	// BFD_RELOC_AARCH64_MOVW_G2
	// immediate
	movz	x1,#:abs_g2:u48
	movk	x1,#:abs_g1_nc:u48
	movk	x1,#:abs_g0_nc:u48
	
	// local data (section relative)
	movz	x1,#:abs_g2:ldata
	movk	x1,#:abs_g1_nc:ldata
	movk	x1,#:abs_g0_nc:ldata
	
	// external data
	movz	x1,#:abs_g2:xdata
	movk	x1,#:abs_g1_nc:xdata
	movk	x1,#:abs_g0_nc:xdata
	
	// BFD_RELOC_AARCH64_MOVW_G2_S
	// immediate
	movz	x1,#:abs_g2_s:s12
	movk	x1,#:abs_g1_nc:s12
	movk	x1,#:abs_g0_nc:s12

	// BFD_RELOC_AARCH64_MOVW_G3
	// immediate
	movz	x1,#:abs_g3:s12
	movk	x1,#:abs_g2_nc:s12
	movk	x1,#:abs_g1_nc:s12
	movk	x1,#:abs_g0_nc:s12
	
	movz	x1,#:abs_g3:u64
	movk	x1,#:abs_g2_nc:u64
	movk	x1,#:abs_g1_nc:u64
	movk	x1,#:abs_g0_nc:u64
	
	// BFD_RELOC_AARCH64_LD_LO19_PCREL
	ldr	x0,llit
	ldr	x1,ldata
	ldr	x2,xdata+12

	// BFD_RELOC_AARCH64_ADR_LO21_PCREL
	//  AARCH64 ADR instruction, holding a simple 21 bit pc-relative byte offset.
	adr	x0,llit
	adr	x1,ldata
	adr	x2,ldata+4088
	adr	x3,xlit
	adr	x4,xdata+16
	adr	x5,xdata+4088
	
	// BFD_RELOC_AARCH64_ADR_HI21_PCREL
	adrp	x0,llit
	adrp	x1,ldata
	adrp	x2,ldata+4088
	adrp	x3,xlit
	adrp	x4,xdata+16
	adrp	x5,xdata+4088
	
	// BFD_RELOC_AARCH64_ADR_HI21_PCREL
	adrp	x0,:pg_hi21:llit
	adrp	x1,:pg_hi21:ldata
	adrp	x2,:pg_hi21:ldata+4088
	adrp	x3,:pg_hi21:xlit
	adrp	x4,:pg_hi21:xdata+16
	adrp	x5,:pg_hi21:xdata+4088

	// BFD_RELOC_AARCH64_ADD_LO12
	add	x0,x0,#:lo12:llit
	add	x1,x1,#:lo12:ldata
	add	x2,x2,#:lo12:ldata+4088
	add	x3,x3,#:lo12:xlit
	add	x4,x4,#:lo12:xdata+16
	add	x5,x5,#:lo12:xdata+4088
	add	x6,x6,u12
	
	// BFD_RELOC_AARCH64_LDST8_LO12
	ldrb	w0, [x0, #:lo12:llit]
	ldrb	w1, [x1, #:lo12:ldata]
	ldrb	w2, [x2, #:lo12:ldata+4088]
	ldrb	w3, [x3, #:lo12:xlit]
	ldrb	w4, [x4, #:lo12:xdata+16]
	ldrb	w5, [x5, #:lo12:xdata+4088]
	ldrb	w6, [x6, u12]

	// BFD_RELOC_AARCH64_TSTBR14
	tbz	x0,#0,lab
	tbz	x1,#63,xlab
	tbnz	x2,#8,lab
	tbnz	x2,#47,xlab
	
	// BFD_RELOC_AARCH64_BRANCH19
	b.eq	lab
	b.eq	xlab

	// BFD_RELOC_AARCH64_COMPARE19
	cbz	x0,lab
	cbnz	x30,xlab

	// BFD_RELOC_AARCH64_JUMP26
	b	lab
	b	xlab

	// BFD_RELOC_AARCH64_CALL26
	bl	lab
	bl	xlab
	
	// BFD_RELOC_AARCH64_MOVW_IMM
	movz	x0, #0x1234, lsl #48
	movk	x0, #0x5678, lsl #32
	movk	x0, #0x9abc, lsl #16
	movk	x0, #0xdef0, lsl #0

	movz	x0, (u64>>48)&0xffff, lsl #48
	movk	x0, (u64>>32)&0xffff, lsl #32
	movk	x0, (u64>>16)&0xffff, lsl #16
	movk	x0, (u64>>0)&0xffff, lsl #0
	
	// BFD_RELOC_AARCH64_BIT_IMM
	orr	x0,x0,bit1
	and	x0,x0,bit2
	and	w0,w0,bit2
	
	// BFD_RELOC_AARCH64_ADD_U12
	add	x0,x0,s12
	add	x0,x0,u12
	sub	x0,x0,s12
	sub	x0,x0,u12

	// BFD_RELOC_AARCH64_EXC_U16
	svc	u16

	// BFD_RELOC_AARCH64_LDST_I9
	//  Signed 9-bit byte offset for load/store single item with writeback options.
	//  Used internally by the AARCH64 assembler and not (currently)
	//  written to any object files.
	ldr	x0,[x1],#s9
	ldr	x0,[x1,#s9]!

	// No writeback, but a negative offset should cause this
	// to be converted to a LDST_I9 relocation
	ldr	x0,[x1,#s9]

	// BFD_RELOC_AARCH64_LDST_U12
	//  Unsigned 12-bit byte offset for load/store single item without options.
	//  Used internally by the AARCH64 assembler and not (currently)
	//  written to any object files.
	ldr	x0,[x1,#(u12*8)]

	// BFD_RELOC_AARCH64_LDST16_LO12
	ldrh	w0, [x0, #:lo12:llit]
	// BFD_RELOC_AARCH64_LDST32_LO12
	ldr	w1, [x1, #:lo12:ldata]
	// BFD_RELOC_AARCH64_LDST64_LO12
	ldr	x2, [x2, #:lo12:ldata+4088]
	// BFD_RELOC_AARCH64_LDST128_LO12
	ldr	q3, [x3, #:lo12:xlit]

	// BFD_RELOC_AARCH64_LDST64_LO12
	prfm	pstl1keep, [x7, #:lo12:ldata+4100]

	// BFD_RELOC_AARCH64_GOT_LD_PREL19
	ldr	x0, :got:cdata
	ldrb	w1, [x0]
	
	ret
	
	// BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15
	ldr	x28, [x13, #:gotpage_lo15:dummy]
	// BFD_RELOC_AARCH64_LD64_GOTOFF_LO15
	ldr	x0, [x0, #:gotoff_lo15:dummy]

llit:	.word	0xdeadf00d
	
lab:	
		
	.data
	.align 8
	
dummy:	.xword  0
	
ldata:	.xword	0x1122334455667788
	.space	8184
	
.set u8, 248
.set s9, -256
.set s12, -2048	
.set u12, 4095
.set u16, 65535
.set u32, 0x12345678
.set u48, 0xaabbccddeeff
.set u64, 0xfedcba9876543210
.set bit1,0xf000000000000000
.set bit2,~0xf

.comm	cdata,1,8