Skip to content

Commit d34cb47

Browse files
committed
aarch64: use adrp + add instead of adr to avoid link time error: relocation overflow in R_AARCH64_ADR_PREL_LO21, see #152 for more detail
1 parent 0850c01 commit d34cb47

File tree

18 files changed

+86
-43
lines changed

18 files changed

+86
-43
lines changed

md5_mb/aarch64/md5_mb_sve.S

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ md5_mb_sve_max_lanes:
109109
mov tmpw,total_lanes,lsl 6
110110
sub databuf,abcd_buf,tmp
111111
mov sp,databuf
112-
adr md5key_adr,MD5_CONST_KEYS
112+
adrp md5key_adr,MD5_CONST_KEYS
113+
add md5key_adr,md5key_adr,:lo12:MD5_CONST_KEYS
113114
whilelo p0.s,wzr,total_lanes
114115
mov src,job_vec
115116
mov dst,abcd_buf

mh_sha1/aarch64/mh_sha1_block_ce.S

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,8 @@ start_loop:
160160
mov msg_adr,input_data
161161
lane_loop:
162162
mov offs,64
163-
adr key_adr,KEY_0
163+
adrp key_adr,KEY_0
164+
add key_adr,key_adr,:lo12:KEY_0
164165
//load msg 0
165166
ld4 {lane0_msg_0_v.S-lane3_msg_0_v.S}[0],[msg_adr],offs
166167
ld4 {lane0_msg_0_v.S-lane3_msg_0_v.S}[1],[msg_adr],offs
@@ -252,23 +253,26 @@ lane_loop:
252253
sha1_4_rounds sha1c,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0
253254

254255

255-
adr key_adr,KEY_1
256+
adrp key_adr,KEY_1
257+
add key_adr,key_adr,:lo12:KEY_1
256258
ldr key_q,[key_adr]
257259
sha1_4_rounds sha1c,msg_2,msg_3,msg_0,msg_1,abcd,e0,tmp0,e1,tmp1 /* rounds 12-15 */
258260
sha1_4_rounds sha1c,msg_3,msg_0,msg_1,msg_2,abcd,e1,tmp1,e0,tmp0
259261
sha1_4_rounds sha1p,msg_0,msg_1,msg_2,msg_3,abcd,e0,tmp0,e1,tmp1 /* rounds 20-23 */
260262
sha1_4_rounds sha1p,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0
261263
sha1_4_rounds sha1p,msg_2,msg_3,msg_0,msg_1,abcd,e0,tmp0,e1,tmp1
262264

263-
adr key_adr,KEY_2
265+
adrp key_adr,KEY_2
266+
add key_adr,key_adr,:lo12:KEY_2
264267
ldr key_q,[key_adr]
265268
sha1_4_rounds sha1p,msg_3,msg_0,msg_1,msg_2,abcd,e1,tmp1,e0,tmp0
266269
sha1_4_rounds sha1p,msg_0,msg_1,msg_2,msg_3,abcd,e0,tmp0,e1,tmp1 /* rounds 36-39 */
267270
sha1_4_rounds sha1m,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0
268271
sha1_4_rounds sha1m,msg_2,msg_3,msg_0,msg_1,abcd,e0,tmp0,e1,tmp1
269272
sha1_4_rounds sha1m,msg_3,msg_0,msg_1,msg_2,abcd,e1,tmp1,e0,tmp0
270273

271-
adr key_adr,KEY_3
274+
adrp key_adr,KEY_3
275+
add key_adr,key_adr,:lo12:KEY_3
272276
ldr key_q,[key_adr]
273277
sha1_4_rounds sha1m,msg_0,msg_1,msg_2,msg_3,abcd,e0,tmp0,e1,tmp1 /* rounds 52-55 */
274278
sha1_4_rounds sha1m,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0

mh_sha1/aarch64/mh_sha1_block_sve.S

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@
217217
and data_buf,data_buf,#-64
218218
mov sp,data_buf
219219
mov lane_offset,0
220-
adr sha1key_adr, SHA1KEY
220+
adrp sha1key_adr, SHA1KEY
221+
add sha1key_adr, sha1key_adr, :lo12:SHA1KEY
221222
.seg_loops\sve2_flag\():
222223
mov block_ptr,input_data
223224
mov ctr,num_blocks

mh_sha1/aarch64/sha1_asimd_common.S

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,22 +228,26 @@
228228
mov vDD.16B, VD.16B
229229
mov vEE.16B, VE.16B
230230

231-
adr sha1key_adr, KEY_0
231+
adrp sha1key_adr, KEY_0
232+
add sha1key_adr, sha1key_adr, :lo12:KEY_0
232233
ld1 {VK.4s}, [sha1key_adr]
233234
exec_steps 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
234235

235236
// 20 ~ 39
236-
adr sha1key_adr, KEY_1
237+
adrp sha1key_adr, KEY_1
238+
add sha1key_adr, sha1key_adr, :lo12:KEY_1
237239
ld1 {VK.4s}, [sha1key_adr]
238240
exec_steps 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
239241

240242
// 40 ~ 59
241-
adr sha1key_adr, KEY_2
243+
adrp sha1key_adr, KEY_2
244+
add sha1key_adr, sha1key_adr, :lo12:KEY_2
242245
ld1 {VK.4s}, [sha1key_adr]
243246
exec_steps 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
244247

245248
// 60 ~ 79
246-
adr sha1key_adr, KEY_3
249+
adrp sha1key_adr, KEY_3
250+
add sha1key_adr, sha1key_adr, :lo12:KEY_3
247251
ld1 {VK.4s}, [sha1key_adr]
248252
exec_steps 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
249253

mh_sha1_murmur3_x64_128/aarch64/mh_sha1_murmur3_block_asimd.S

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,17 @@ mh_sha1_murmur3_block_asimd:
134134
mov mur_data, input_data
135135
ldr mur_hash1, [mur_digest]
136136
ldr mur_hash2, [mur_digest, 8]
137-
adr mur_c1, C1
137+
adrp mur_c1, C1
138+
add mur_c1, mur_c1, :lo12:C1
138139
ldr mur_c1, [mur_c1]
139-
adr mur_c2, C2
140+
adrp mur_c2, C2
141+
add mur_c2, mur_c2, :lo12:C2
140142
ldr mur_c2, [mur_c2]
141-
adr tmp, N1
143+
adrp tmp, N1
144+
add tmp, tmp, :lo12:N1
142145
ldr mur_n1_w, [tmp]
143-
adr tmp, N2
146+
adrp tmp, N2
147+
add tmp, tmp, :lo12:N2
144148
ldr mur_n2_w, [tmp]
145149

146150
mov mh_segs, #0

mh_sha1_murmur3_x64_128/aarch64/mh_sha1_murmur3_block_ce.S

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,17 @@ mh_sha1_murmur3_block_ce:
216216
mov mur_data, input_data
217217
ldr mur_hash1, [mur_digest]
218218
ldr mur_hash2, [mur_digest, 8]
219-
adr mur_c1, C1
219+
adrp mur_c1, C1
220+
add mur_c1, mur_c1, :lo12:C1
220221
ldr mur_c1, [mur_c1]
221-
adr mur_c2, C2
222+
adrp mur_c2, C2
223+
add mur_c2, mur_c2, :lo12:C2
222224
ldr mur_c2, [mur_c2]
223-
adr tmp0_adr, N1
225+
adrp tmp0_adr, N1
226+
add tmp0_adr, tmp0_adr, :lo12:N1
224227
ldr mur_n1_w, [tmp0_adr]
225-
adr tmp0_adr, N2
228+
adrp tmp0_adr, N2
229+
add tmp0_adr, tmp0_adr, :lo12:N2
226230
ldr mur_n2_w, [tmp0_adr]
227231

228232
mov tmp0_adr,frame_buffer
@@ -234,7 +238,8 @@ start_loop:
234238
mov msg_adr,input_data
235239
lane_loop:
236240
mov offs,64
237-
adr key_adr,KEY_0
241+
adrp key_adr,KEY_0
242+
add key_adr,key_adr,:lo12:KEY_0
238243
// load msg 0
239244
ld4 {lane0_msg_0_v.S-lane3_msg_0_v.S}[0],[msg_adr],offs
240245
ld4 {lane0_msg_0_v.S-lane3_msg_0_v.S}[1],[msg_adr],offs
@@ -326,23 +331,26 @@ lane_loop:
326331
sha1_4_rounds sha1c,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0
327332

328333

329-
adr key_adr,KEY_1
334+
adrp key_adr,KEY_1
335+
add key_adr,key_adr,:lo12:KEY_1
330336
ldr key_q,[key_adr]
331337
sha1_4_rounds sha1c,msg_2,msg_3,msg_0,msg_1,abcd,e0,tmp0,e1,tmp1 /* rounds 12-15 */
332338
sha1_4_rounds sha1c,msg_3,msg_0,msg_1,msg_2,abcd,e1,tmp1,e0,tmp0
333339
sha1_4_rounds sha1p,msg_0,msg_1,msg_2,msg_3,abcd,e0,tmp0,e1,tmp1 /* rounds 20-23 */
334340
sha1_4_rounds sha1p,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0
335341
sha1_4_rounds sha1p,msg_2,msg_3,msg_0,msg_1,abcd,e0,tmp0,e1,tmp1
336342

337-
adr key_adr,KEY_2
343+
adrp key_adr,KEY_2
344+
add key_adr,key_adr,:lo12:KEY_2
338345
ldr key_q,[key_adr]
339346
sha1_4_rounds sha1p,msg_3,msg_0,msg_1,msg_2,abcd,e1,tmp1,e0,tmp0
340347
sha1_4_rounds sha1p,msg_0,msg_1,msg_2,msg_3,abcd,e0,tmp0,e1,tmp1 /* rounds 36-39 */
341348
sha1_4_rounds sha1m,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0
342349
sha1_4_rounds sha1m,msg_2,msg_3,msg_0,msg_1,abcd,e0,tmp0,e1,tmp1
343350
sha1_4_rounds sha1m,msg_3,msg_0,msg_1,msg_2,abcd,e1,tmp1,e0,tmp0
344351

345-
adr key_adr,KEY_3
352+
adrp key_adr,KEY_3
353+
add key_adr,key_adr,:lo12:KEY_3
346354
ldr key_q,[key_adr]
347355
sha1_4_rounds sha1m,msg_0,msg_1,msg_2,msg_3,abcd,e0,tmp0,e1,tmp1 /* rounds 52-55 */
348356
sha1_4_rounds sha1m,msg_1,msg_2,msg_3,msg_0,abcd,e1,tmp1,e0,tmp0

mh_sha1_murmur3_x64_128/aarch64/sha1_asimd_common.S

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,22 +230,26 @@
230230
mov vDD.16B, VD.16B
231231
mov vEE.16B, VE.16B
232232

233-
adr sha1key_adr, KEY_0
233+
adrp sha1key_adr, KEY_0
234+
add sha1key_adr, sha1key_adr, :lo12:KEY_0
234235
ld1 {VK.4s}, [sha1key_adr]
235236
exec_steps 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
236237

237238
// 20 ~ 39
238-
adr sha1key_adr, KEY_1
239+
adrp sha1key_adr, KEY_1
240+
add sha1key_adr, sha1key_adr, :lo12:KEY_1
239241
ld1 {VK.4s}, [sha1key_adr]
240242
exec_steps 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
241243

242244
// 40 ~ 59
243-
adr sha1key_adr, KEY_2
245+
adrp sha1key_adr, KEY_2
246+
add sha1key_adr, sha1key_adr, :lo12:KEY_2
244247
ld1 {VK.4s}, [sha1key_adr]
245248
exec_steps 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
246249

247250
// 60 ~ 79
248-
adr sha1key_adr, KEY_3
251+
adrp sha1key_adr, KEY_3
252+
add sha1key_adr, sha1key_adr, :lo12:KEY_3
249253
ld1 {VK.4s}, [sha1key_adr]
250254
exec_steps 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
251255

sha1_mb/aarch64/sha1_aarch64_x1.S

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,22 +245,26 @@ sha1_aarch64_x1:
245245

246246
load_word_at 0
247247

248-
adr sha1key_adr, KEY_0
248+
adrp sha1key_adr, KEY_0
249+
add sha1key_adr, sha1key_adr, :lo12:KEY_0
249250
ldr WK, [sha1key_adr]
250251
exec_steps 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
251252

252253
// 20 ~ 39
253-
adr sha1key_adr, KEY_1
254+
adrp sha1key_adr, KEY_1
255+
add sha1key_adr, sha1key_adr, :lo12:KEY_1
254256
ldr WK, [sha1key_adr]
255257
exec_steps 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
256258

257259
// 40 ~ 59
258-
adr sha1key_adr, KEY_2
260+
adrp sha1key_adr, KEY_2
261+
add sha1key_adr, sha1key_adr, :lo12:KEY_2
259262
ldr WK, [sha1key_adr]
260263
exec_steps 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
261264

262265
// 60 ~ 79
263-
adr sha1key_adr, KEY_3
266+
adrp sha1key_adr, KEY_3
267+
add sha1key_adr, sha1key_adr, :lo12:KEY_3
264268
ldr WK, [sha1key_adr]
265269
exec_steps 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
266270

sha1_mb/aarch64/sha1_asimd_common.S

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,22 +228,26 @@
228228
mov vDD.16B, VD.16B
229229
mov vEE.16B, VE.16B
230230

231-
adr sha1key_adr, KEY_0
231+
adrp sha1key_adr, KEY_0
232+
add sha1key_adr, sha1key_adr, :lo12:KEY_0
232233
ld1 {VK.4s}, [sha1key_adr]
233234
exec_steps 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
234235

235236
// 20 ~ 39
236-
adr sha1key_adr, KEY_1
237+
adrp sha1key_adr, KEY_1
238+
add sha1key_adr, sha1key_adr, :lo12:KEY_1
237239
ld1 {VK.4s}, [sha1key_adr]
238240
exec_steps 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
239241

240242
// 40 ~ 59
241-
adr sha1key_adr, KEY_2
243+
adrp sha1key_adr, KEY_2
244+
add sha1key_adr, sha1key_adr, :lo12:KEY_2
242245
ld1 {VK.4s}, [sha1key_adr]
243246
exec_steps 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
244247

245248
// 60 ~ 79
246-
adr sha1key_adr, KEY_3
249+
adrp sha1key_adr, KEY_3
250+
add sha1key_adr, sha1key_adr, :lo12:KEY_3
247251
ld1 {VK.4s}, [sha1key_adr]
248252
exec_steps 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
249253

sha1_mb/aarch64/sha1_mb_x1_ce.S

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ sha1_mb_ce_x1:
100100
ldr data, [job]
101101
ldr abcd_q, [job, 64]
102102
ldr e0_s, [job, 80]
103-
adr tmp, KEY
103+
adrp tmp, KEY
104+
add tmp, tmp, :lo12:KEY
104105
ld1 {key_0_v.4s-key_3_v.4s},[tmp]
105106

106107
start_loop:

0 commit comments

Comments
 (0)