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
|