This is a backport of kettenis's diff. Most of it applied with a few offsets. I had to hand-apply two or three hunks due to whitespace noise.
The only real changes are the hunks containing __ILP32__ which were needed to make it link. They are part of the diff to OpenSSL 3, which came from https://github.com/openssl/openssl/pull/8256 which was never backported. If this goes in, I'll also take care of sslscan similar to postfix. Tests pass apart from one unrelated failure that has been around for a while: ../test/recipes/90-test_shlibload.t ................ Dubious, test returned 9 (wstat 2304, 0x900) Failed 9/10 subtests Index: Makefile =================================================================== RCS file: /cvs/ports/security/openssl/1.1/Makefile,v retrieving revision 1.46 diff -u -p -r1.46 Makefile --- Makefile 9 Jan 2023 17:27:50 -0000 1.46 +++ Makefile 14 Jan 2023 15:38:45 -0000 @@ -3,7 +3,7 @@ PORTROACH= limit:^1\.1\.[0-9][a-z] skipb V= 1.1.1s PKGSPEC= openssl->=1.1.0v0,<1.2v0 EPOCH= 0 -REVISION= 1 +REVISION= 2 SHLIBVER= 11.6 SHARED_LIBS= crypto ${SHLIBVER} \ @@ -35,7 +35,9 @@ MAN_PREFIX= @man lib/eopenssl11/man INSTALL_TARGET+= install_man_docs .endif +.if ${MACHINE_ARCH} != arch64 USE_NOEXECONLY= Yes +.endif # install to unusual directory name - this port is *not* intended to be # picked up by configure scripts without explicitly CPPFLAGS/LDFLAGS. Index: patches/patch-Configurations_10-main_conf =================================================================== RCS file: /cvs/ports/security/openssl/1.1/patches/patch-Configurations_10-main_conf,v retrieving revision 1.5 diff -u -p -r1.5 patch-Configurations_10-main_conf --- patches/patch-Configurations_10-main_conf 11 Mar 2022 19:53:36 -0000 1.5 +++ patches/patch-Configurations_10-main_conf 14 Jan 2023 15:38:45 -0000 @@ -1,7 +1,7 @@ Index: Configurations/10-main.conf --- Configurations/10-main.conf.orig +++ Configurations/10-main.conf -@@ -958,6 +958,7 @@ my %targets = ( +@@ -965,6 +965,7 @@ my %targets = ( }, "BSD-x86-elf" => { inherit_from => [ "BSD-x86" ], Index: patches/patch-crypto_aes_asm_aesv8-armx_pl =================================================================== RCS file: patches/patch-crypto_aes_asm_aesv8-armx_pl diff -N patches/patch-crypto_aes_asm_aesv8-armx_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_aes_asm_aesv8-armx_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,27 @@ +Index: crypto/aes/asm/aesv8-armx.pl +--- crypto/aes/asm/aesv8-armx.pl.orig ++++ crypto/aes/asm/aesv8-armx.pl +@@ -79,11 +79,13 @@ my ($zero,$rcon,$mask,$in0,$in1,$tmp,$key)= + + + $code.=<<___; ++.rodata + .align 5 + .Lrcon: + .long 0x01,0x01,0x01,0x01 + .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat + .long 0x1b,0x1b,0x1b,0x1b ++.previous + + .globl ${prefix}_set_encrypt_key + .type ${prefix}_set_encrypt_key,%function +@@ -109,7 +111,8 @@ $code.=<<___; + tst $bits,#0x3f + b.ne .Lenc_key_abort + +- adr $ptr,.Lrcon ++ adrp $ptr,.Lrcon ++ add $ptr,$ptr,:lo12:.Lrcon + cmp $bits,#192 + + veor $zero,$zero,$zero Index: patches/patch-crypto_aes_asm_vpaes-armv8_pl =================================================================== RCS file: patches/patch-crypto_aes_asm_vpaes-armv8_pl diff -N patches/patch-crypto_aes_asm_vpaes-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_aes_asm_vpaes-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,150 @@ +Index: crypto/aes/asm/vpaes-armv8.pl +--- crypto/aes/asm/vpaes-armv8.pl.orig ++++ crypto/aes/asm/vpaes-armv8.pl +@@ -49,7 +49,7 @@ open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; + + $code.=<<___; +-.text ++.rodata + + .type _vpaes_consts,%object + .align 7 // totally strategic alignment +@@ -140,6 +140,9 @@ _vpaes_consts: + .asciz "Vector Permutation AES for ARMv8, Mike Hamburg (Stanford University)" + .size _vpaes_consts,.-_vpaes_consts + .align 6 ++ ++.text ++ + ___ + + { +@@ -159,7 +162,8 @@ $code.=<<___; + .type _vpaes_encrypt_preheat,%function + .align 4 + _vpaes_encrypt_preheat: +- adr x10, .Lk_inv ++ adrp x10, .Lk_inv ++ add x10, x10, :lo12:.Lk_inv + movi v17.16b, #0x0f + ld1 {v18.2d-v19.2d}, [x10],#32 // .Lk_inv + ld1 {v20.2d-v23.2d}, [x10],#64 // .Lk_ipt, .Lk_sbo +@@ -187,7 +191,9 @@ _vpaes_encrypt_preheat: + _vpaes_encrypt_core: + mov x9, $key + ldr w8, [$key,#240] // pull rounds +- adr x11, .Lk_mc_forward+16 ++ adrp x11, .Lk_mc_forward ++ add x11, x11, :lo12:.Lk_mc_forward ++ add x11, x11, #16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 +@@ -274,7 +280,9 @@ vpaes_encrypt: + _vpaes_encrypt_2x: + mov x9, $key + ldr w8, [$key,#240] // pull rounds +- adr x11, .Lk_mc_forward+16 ++ adrp x11, .Lk_mc_forward ++ add x11, x11, :lo12:.Lk_mc_forward ++ add x11, x11, #16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 +@@ -377,9 +385,11 @@ _vpaes_encrypt_2x: + .type _vpaes_decrypt_preheat,%function + .align 4 + _vpaes_decrypt_preheat: +- adr x10, .Lk_inv ++ adrp x10, .Lk_inv ++ add x10, x10, :lo12:.Lk_inv + movi v17.16b, #0x0f +- adr x11, .Lk_dipt ++ adrp x11, .Lk_dipt ++ add x11, x11, :lo12:.Lk_dipt + ld1 {v18.2d-v19.2d}, [x10],#32 // .Lk_inv + ld1 {v20.2d-v23.2d}, [x11],#64 // .Lk_dipt, .Lk_dsbo + ld1 {v24.2d-v27.2d}, [x11],#64 // .Lk_dsb9, .Lk_dsbd +@@ -401,10 +411,13 @@ _vpaes_decrypt_core: + // vmovdqa .Lk_dipt(%rip), %xmm2 # iptlo + lsl x11, x8, #4 // mov %rax, %r11; shl \$4, %r11 + eor x11, x11, #0x30 // xor \$0x30, %r11 +- adr x10, .Lk_sr ++ adrp x10, .Lk_sr ++ add x10, x10, :lo12:.Lk_sr + and x11, x11, #0x30 // and \$0x30, %r11 + add x11, x11, x10 +- adr x10, .Lk_mc_forward+48 ++ adrp x10, .Lk_mc_forward ++ add x10, x10, :lo12:.Lk_mc_forward ++ add x10, x10, #48 + + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm4 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 +@@ -512,10 +525,13 @@ _vpaes_decrypt_2x: + // vmovdqa .Lk_dipt(%rip), %xmm2 # iptlo + lsl x11, x8, #4 // mov %rax, %r11; shl \$4, %r11 + eor x11, x11, #0x30 // xor \$0x30, %r11 +- adr x10, .Lk_sr ++ adrp x10, .Lk_sr ++ add x10, x10, :lo12:.Lk_sr + and x11, x11, #0x30 // and \$0x30, %r11 + add x11, x11, x10 +- adr x10, .Lk_mc_forward+48 ++ adrp x10, .Lk_mc_forward ++ add x10, x10, :lo12:.Lk_mc_forward ++ add x10, x10, #48 + + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm4 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 +@@ -651,14 +667,18 @@ $code.=<<___; + .type _vpaes_key_preheat,%function + .align 4 + _vpaes_key_preheat: +- adr x10, .Lk_inv ++ adrp x10, .Lk_inv ++ add x10, x10, :lo12:.Lk_inv + movi v16.16b, #0x5b // .Lk_s63 +- adr x11, .Lk_sb1 ++ adrp x11, .Lk_sb1 ++ add x11, x11, :lo12:.Lk_sb1 + movi v17.16b, #0x0f // .Lk_s0F + ld1 {v18.2d-v21.2d}, [x10] // .Lk_inv, .Lk_ipt +- adr x10, .Lk_dksd ++ adrp x10, .Lk_dksd ++ add x10, x10, :lo12:.Lk_dksd + ld1 {v22.2d-v23.2d}, [x11] // .Lk_sb1 +- adr x11, .Lk_mc_forward ++ adrp x11, .Lk_mc_forward ++ add x11, x11, :lo12:.Lk_mc_forward + ld1 {v24.2d-v27.2d}, [x10],#64 // .Lk_dksd, .Lk_dksb + ld1 {v28.2d-v31.2d}, [x10],#64 // .Lk_dkse, .Lk_dks9 + ld1 {v8.2d}, [x10] // .Lk_rcon +@@ -682,7 +702,8 @@ _vpaes_schedule_core: + bl _vpaes_schedule_transform + mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7 + +- adr x10, .Lk_sr // lea .Lk_sr(%rip),%r10 ++ adrp x10, .Lk_sr // lea .Lk_sr(%rip),%r10 ++ add x10, x10, :lo12:.Lk_sr + add x8, x8, x10 + cbnz $dir, .Lschedule_am_decrypting + +@@ -808,12 +829,14 @@ _vpaes_schedule_core: + .align 4 + .Lschedule_mangle_last: + // schedule last round key from xmm0 +- adr x11, .Lk_deskew // lea .Lk_deskew(%rip),%r11 # prepare to deskew ++ adrp x11, .Lk_deskew // lea .Lk_deskew(%rip),%r11 # prepare to deskew ++ add x11, x11, :lo12:.Lk_deskew + cbnz $dir, .Lschedule_mangle_last_dec + + // encrypting + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1 +- adr x11, .Lk_opt // lea .Lk_opt(%rip), %r11 # prepare to output transform ++ adrp x11, .Lk_opt // lea .Lk_opt(%rip), %r11 # prepare to output transform ++ add x11, x11, :lo12:.Lk_opt + add $out, $out, #32 // add \$32, %rdx + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute + Index: patches/patch-crypto_bn_asm_armv8-mont_pl =================================================================== RCS file: patches/patch-crypto_bn_asm_armv8-mont_pl diff -N patches/patch-crypto_bn_asm_armv8-mont_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_bn_asm_armv8-mont_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,11 @@ +Index: crypto/bn/asm/armv8-mont.pl +--- crypto/bn/asm/armv8-mont.pl.orig ++++ crypto/bn/asm/armv8-mont.pl +@@ -1505,6 +1505,7 @@ __bn_mul4x_mont: + ___ + } + $code.=<<___; ++.rodata + .asciz "Montgomery Multiplication for ARMv8, CRYPTOGAMS by <appro\@openssl.org>" + .align 4 + ___ Index: patches/patch-crypto_chacha_asm_chacha-armv8_pl =================================================================== RCS file: patches/patch-crypto_chacha_asm_chacha-armv8_pl diff -N patches/patch-crypto_chacha_asm_chacha-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_chacha_asm_chacha-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,51 @@ +Index: crypto/chacha/asm/chacha-armv8.pl +--- crypto/chacha/asm/chacha-armv8.pl.orig ++++ crypto/chacha/asm/chacha-armv8.pl +@@ -122,7 +122,7 @@ my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$ + $code.=<<___; + #include "arm_arch.h" + +-.text ++.rodata + + .extern OPENSSL_armcap_P + .hidden OPENSSL_armcap_P +@@ -140,6 +140,8 @@ $code.=<<___; + #endif + .asciz "ChaCha20 for ARMv8, CRYPTOGAMS by <appro\@openssl.org>" + ++.text ++ + .globl ChaCha20_ctr32 + .type ChaCha20_ctr32,%function + .align 5 +@@ -162,7 +164,8 @@ ChaCha20_ctr32: + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + +- adr @x[0],.Lsigma ++ adrp @x[0],.Lsigma ++ add @x[0],@x[0],:lo12:.Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] +@@ -385,7 +388,8 @@ ChaCha20_neon: + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + +- adr @x[0],.Lsigma ++ adrp @x[0],.Lsigma ++ add @x[0],@x[0],:lo12:.Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] +@@ -707,7 +711,8 @@ ChaCha20_512_neon: + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + +- adr @x[0],.Lsigma ++ adrp @x[0],.Lsigma ++ add @x[0],@x[0],:lo12:.Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] Index: patches/patch-crypto_ec_asm_ecp_nistz256-armv8_pl =================================================================== RCS file: patches/patch-crypto_ec_asm_ecp_nistz256-armv8_pl diff -N patches/patch-crypto_ec_asm_ecp_nistz256-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_ec_asm_ecp_nistz256-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,233 @@ +Index: crypto/ec/asm/ecp_nistz256-armv8.pl +--- crypto/ec/asm/ecp_nistz256-armv8.pl.orig ++++ crypto/ec/asm/ecp_nistz256-armv8.pl +@@ -52,7 +52,7 @@ my ($acc6,$acc7)=($ap,$bp); # used in __ecp_nistz256_s + $code.=<<___; + #include "arm_arch.h" + +-.text ++.rodata + ___ + ######################################################################## + # Convert ecp_nistz256_table.c to layout expected by ecp_nistz_gather_w7 +@@ -114,6 +114,8 @@ $code.=<<___; + .quad 0xccd1c8aaee00bc4f + .asciz "ECP_NISTZ256 for ARMv8, CRYPTOGAMS by <appro\@openssl.org>" + ++.text ++ + // void ecp_nistz256_to_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); + .globl ecp_nistz256_to_mont + .type ecp_nistz256_to_mont,%function +@@ -124,12 +126,16 @@ ecp_nistz256_to_mont: + add x29,sp,#0 + stp x19,x20,[sp,#16] + +- ldr $bi,.LRR // bp[0] ++ adrp $bi,.LRR ++ ldr $bi,[$bi,:lo12:.LRR] // bp[0] + ldp $a0,$a1,[$ap] + ldp $a2,$a3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 +- adr $bp,.LRR // &bp[0] ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] ++ adrp $bp,.LRR // &bp[0] ++ add $bp,$bp,:lo12:.LRR + + bl __ecp_nistz256_mul_mont + +@@ -152,9 +158,12 @@ ecp_nistz256_from_mont: + mov $bi,#1 // bp[0] + ldp $a0,$a1,[$ap] + ldp $a2,$a3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 +- adr $bp,.Lone // &bp[0] ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] ++ adrp $bp,.Lone // &bp[0] ++ add $bp,$bp,:lo12:.Lone + + bl __ecp_nistz256_mul_mont + +@@ -178,8 +187,10 @@ ecp_nistz256_mul_mont: + ldr $bi,[$bp] // bp[0] + ldp $a0,$a1,[$ap] + ldp $a2,$a3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + bl __ecp_nistz256_mul_mont + +@@ -201,8 +212,10 @@ ecp_nistz256_sqr_mont: + + ldp $a0,$a1,[$ap] + ldp $a2,$a3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + bl __ecp_nistz256_sqr_mont + +@@ -226,8 +239,10 @@ ecp_nistz256_add: + ldp $t0,$t1,[$bp] + ldp $acc2,$acc3,[$ap,#16] + ldp $t2,$t3,[$bp,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + bl __ecp_nistz256_add + +@@ -247,8 +262,10 @@ ecp_nistz256_div_by_2: + + ldp $acc0,$acc1,[$ap] + ldp $acc2,$acc3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + bl __ecp_nistz256_div_by_2 + +@@ -268,8 +285,10 @@ ecp_nistz256_mul_by_2: + + ldp $acc0,$acc1,[$ap] + ldp $acc2,$acc3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + mov $t0,$acc0 + mov $t1,$acc1 + mov $t2,$acc2 +@@ -293,8 +312,10 @@ ecp_nistz256_mul_by_3: + + ldp $acc0,$acc1,[$ap] + ldp $acc2,$acc3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + mov $t0,$acc0 + mov $t1,$acc1 + mov $t2,$acc2 +@@ -330,8 +351,10 @@ ecp_nistz256_sub: + + ldp $acc0,$acc1,[$ap] + ldp $acc2,$acc3,[$ap,#16] +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + bl __ecp_nistz256_sub_from + +@@ -354,8 +377,10 @@ ecp_nistz256_neg: + mov $acc1,xzr + mov $acc2,xzr + mov $acc3,xzr +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + bl __ecp_nistz256_sub_from + +@@ -733,9 +758,11 @@ ecp_nistz256_point_double: + mov $rp_real,$rp + ldp $acc2,$acc3,[$ap,#48] + mov $ap_real,$ap +- ldr $poly1,.Lpoly+8 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] + mov $t0,$acc0 +- ldr $poly3,.Lpoly+24 ++ ldr $poly3,[$poly3,#24] + mov $t1,$acc1 + ldp $a0,$a1,[$ap_real,#64] // forward load for p256_sqr_mont + mov $t2,$acc2 +@@ -894,8 +921,10 @@ ecp_nistz256_point_add: + mov $rp_real,$rp + mov $ap_real,$ap + mov $bp_real,$bp +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + orr $t0,$a0,$a1 + orr $t2,$a2,$a3 + orr $in2infty,$t0,$t2 +@@ -1148,8 +1177,10 @@ ecp_nistz256_point_add_affine: + mov $rp_real,$rp + mov $ap_real,$ap + mov $bp_real,$bp +- ldr $poly1,.Lpoly+8 +- ldr $poly3,.Lpoly+24 ++ adrp $poly3,.Lpoly ++ add $poly3,$poly3,:lo12:.Lpoly ++ ldr $poly1,[$poly3,#8] ++ ldr $poly3,[$poly3,#24] + + ldp $a0,$a1,[$ap,#64] // in1_z + ldp $a2,$a3,[$ap,#64+16] +@@ -1300,7 +1331,9 @@ $code.=<<___; + stp $acc2,$acc3,[$rp_real,#$i+16] + ___ + $code.=<<___ if ($i == 0); +- adr $bp_real,.Lone_mont-64 ++ adrp $bp_real,.Lone_mont ++ add $bp,$bp,:lo12:.Lone_mont ++ sub $bp,$bp,#64 + ___ + } + $code.=<<___; +@@ -1349,7 +1382,8 @@ ecp_nistz256_ord_mul_mont: + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + +- adr $ordk,.Lord ++ adrp $ordk,.Lord ++ add $ordk,$ordk,:lo12:.Lord + ldr $bi,[$bp] // bp[0] + ldp $a0,$a1,[$ap] + ldp $a2,$a3,[$ap,#16] +@@ -1490,7 +1524,8 @@ ecp_nistz256_ord_sqr_mont: + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + +- adr $ordk,.Lord ++ adrp $ordk,.Lord ++ add $ordk,$ordk,:lo12:.Lord + ldp $a0,$a1,[$ap] + ldp $a2,$a3,[$ap,#16] + Index: patches/patch-crypto_modes_asm_ghashv8-armx_pl =================================================================== RCS file: patches/patch-crypto_modes_asm_ghashv8-armx_pl diff -N patches/patch-crypto_modes_asm_ghashv8-armx_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_modes_asm_ghashv8-armx_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,11 @@ +Index: crypto/modes/asm/ghashv8-armx.pl +--- crypto/modes/asm/ghashv8-armx.pl.orig ++++ crypto/modes/asm/ghashv8-armx.pl +@@ -698,6 +698,7 @@ ___ + } + + $code.=<<___; ++.rodata + .asciz "GHASH for ARMv8, CRYPTOGAMS by <appro\@openssl.org>" + .align 2 + #endif Index: patches/patch-crypto_poly1305_asm_poly1305-armv8_pl =================================================================== RCS file: patches/patch-crypto_poly1305_asm_poly1305-armv8_pl diff -N patches/patch-crypto_poly1305_asm_poly1305-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_poly1305_asm_poly1305-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,52 @@ +Index: crypto/poly1305/asm/poly1305-armv8.pl +--- crypto/poly1305/asm/poly1305-armv8.pl.orig ++++ crypto/poly1305/asm/poly1305-armv8.pl +@@ -75,17 +75,12 @@ poly1305_init: + csel x0,xzr,x0,eq + b.eq .Lno_key + +-#ifdef __ILP32__ +- ldrsw $t1,.LOPENSSL_armcap_P +-#else +- ldr $t1,.LOPENSSL_armcap_P +-#endif +- adr $t0,.LOPENSSL_armcap_P ++ adrp x17,OPENSSL_armcap_P ++ ldr w17,[x17,#:lo12:OPENSSL_armcap_P] + + ldp $r0,$r1,[$inp] // load key + mov $s1,#0xfffffffc0fffffff + movk $s1,#0x0fff,lsl#48 +- ldr w17,[$t0,$t1] + #ifdef __ARMEB__ + rev $r0,$r0 // flip bytes + rev $r1,$r1 +@@ -430,7 +425,8 @@ poly1305_blocks_neon: + ldr x30,[sp,#8] + + add $in2,$inp,#32 +- adr $zeros,.Lzeros ++ adrp $zeros,.Lzeros ++ add $zeros,$zeros,:lo12:.Lzeros + subs $len,$len,#64 + csel $in2,$zeros,$in2,lo + +@@ -442,7 +438,8 @@ poly1305_blocks_neon: + .align 4 + .Leven_neon: + add $in2,$inp,#32 +- adr $zeros,.Lzeros ++ adrp $zeros,.Lzeros ++ add $zeros,$zeros,:lo12:.Lzeros + subs $len,$len,#64 + csel $in2,$zeros,$in2,lo + +@@ -920,6 +917,8 @@ poly1305_emit_neon: + + ret + .size poly1305_emit_neon,.-poly1305_emit_neon ++ ++.rodata + + .align 5 + .Lzeros: Index: patches/patch-crypto_sha_asm_keccak1600-armv8_pl =================================================================== RCS file: patches/patch-crypto_sha_asm_keccak1600-armv8_pl diff -N patches/patch-crypto_sha_asm_keccak1600-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_sha_asm_keccak1600-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,45 @@ +Index: crypto/sha/asm/keccak1600-armv8.pl +--- crypto/sha/asm/keccak1600-armv8.pl.orig ++++ crypto/sha/asm/keccak1600-armv8.pl +@@ -76,7 +76,7 @@ my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 18, 2, 61, 56, 14 ]); + + $code.=<<___; +-.text ++.rodata + + .align 8 // strategic alignment and padding that allows to use + // address value as loop termination condition... +@@ -117,10 +117,13 @@ my @A = map([ "x$_", "x".($_+1), "x".($_+2), "x".($_+3 + my @C = map("x$_", (26,27,28,30)); + + $code.=<<___; ++.text ++ + .type KeccakF1600_int,%function + .align 5 + KeccakF1600_int: +- adr $C[2],iotas ++ adrp $C[2],iotas ++ add $C[2],$C[2],:lo12:iotas + .inst 0xd503233f // paciasp + stp $C[2],x30,[sp,#16] // 32 bytes on top are mine + b .Loop +@@ -547,7 +550,8 @@ $code.=<<___; + .align 5 + KeccakF1600_ce: + mov x9,#12 +- adr x10,iotas ++ adrp x10,iotas ++ add x10,x10,:lo12:iotas + b .Loop_ce + .align 4 + .Loop_ce: +@@ -849,6 +853,7 @@ SHA3_squeeze_cext: + ___ + } }}} + $code.=<<___; ++.rodata + .asciz "Keccak-1600 absorb and squeeze for ARMv8, CRYPTOGAMS by <appro\@openssl.org>" + ___ + Index: patches/patch-crypto_sha_asm_sha1-armv8_pl =================================================================== RCS file: patches/patch-crypto_sha_asm_sha1-armv8_pl diff -N patches/patch-crypto_sha_asm_sha1-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_sha_asm_sha1-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,40 @@ +Index: crypto/sha/asm/sha1-armv8.pl +--- crypto/sha/asm/sha1-armv8.pl.orig ++++ crypto/sha/asm/sha1-armv8.pl +@@ -181,14 +181,8 @@ $code.=<<___; + .type sha1_block_data_order,%function + .align 6 + sha1_block_data_order: +-#ifdef __ILP32__ +- ldrsw x16,.LOPENSSL_armcap_P +-#else +- ldr x16,.LOPENSSL_armcap_P +-#endif +- adr x17,.LOPENSSL_armcap_P +- add x16,x16,x17 +- ldr w16,[x16] ++ adrp x16,OPENSSL_armcap_P ++ ldr w16,[x16,#:lo12:OPENSSL_armcap_P] + tst w16,#ARMV8_SHA1 + b.ne .Lv8_entry + +@@ -256,7 +250,8 @@ sha1_block_armv8: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + +- adr x4,.Lconst ++ adrp x4,.Lconst ++ add x4,x4,:lo12:.Lconst + eor $E,$E,$E + ld1.32 {$ABCD},[$ctx],#16 + ld1.32 {$E}[0],[$ctx] +@@ -316,6 +311,9 @@ $code.=<<___; + ldr x29,[sp],#16 + ret + .size sha1_block_armv8,.-sha1_block_armv8 ++ ++.rodata ++ + .align 6 + .Lconst: + .long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19 Index: patches/patch-crypto_sha_asm_sha512-armv8_pl =================================================================== RCS file: patches/patch-crypto_sha_asm_sha512-armv8_pl diff -N patches/patch-crypto_sha_asm_sha512-armv8_pl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-crypto_sha_asm_sha512-armv8_pl 14 Jan 2023 15:38:45 -0000 @@ -0,0 +1,78 @@ +Index: crypto/sha/asm/sha512-armv8.pl +--- crypto/sha/asm/sha512-armv8.pl.orig ++++ crypto/sha/asm/sha512-armv8.pl +@@ -199,14 +199,8 @@ $code.=<<___; + .align 6 + $func: + #ifndef __KERNEL__ +-# ifdef __ILP32__ +- ldrsw x16,.LOPENSSL_armcap_P +-# else +- ldr x16,.LOPENSSL_armcap_P +-# endif +- adr x17,.LOPENSSL_armcap_P +- add x16,x16,x17 +- ldr w16,[x16] ++ adrp x16,OPENSSL_armcap_P ++ ldr w16,[x16,#:lo12:OPENSSL_armcap_P] + ___ + $code.=<<___ if ($SZ==4); + tst w16,#ARMV8_SHA256 +@@ -236,7 +230,8 @@ $code.=<<___; + ldp $E,$F,[$ctx,#4*$SZ] + add $num,$inp,$num,lsl#`log(16*$SZ)/log(2)` // end of input + ldp $G,$H,[$ctx,#6*$SZ] +- adr $Ktbl,.LK$BITS ++ adrp $Ktbl,.LK$BITS ++ add $Ktbl,$Ktbl,:lo12:.LK$BITS + stp $ctx,$num,[x29,#96] + + .Loop: +@@ -286,6 +281,8 @@ $code.=<<___; + ret + .size $func,.-$func + ++.rodata ++ + .align 6 + .type .LK$BITS,%object + .LK$BITS: +@@ -365,6 +362,8 @@ $code.=<<___; + #endif + .asciz "SHA$BITS block transform for ARMv8, CRYPTOGAMS by <appro\@openssl.org>" + .align 2 ++ ++.text + ___ + + if ($SZ==4) { +@@ -385,7 +384,8 @@ sha256_block_armv8: + add x29,sp,#0 + + ld1.32 {$ABCD,$EFGH},[$ctx] +- adr $Ktbl,.LK256 ++ adrp $Ktbl,.LK256 ++ add $Ktbl,$Ktbl,:lo12:.LK256 + + .Loop_hw: + ld1 {@MSG[0]-@MSG[3]},[$inp],#64 +@@ -648,7 +648,8 @@ sha256_block_neon: + mov x29, sp + sub sp,sp,#16*4 + +- adr $Ktbl,.LK256 ++ adrp $Ktbl,.LK256 ++ add $Ktbl,$Ktbl,:lo12:.LK256 + add $num,$inp,$num,lsl#6 // len to point at the end of inp + + ld1.8 {@X[0]},[$inp], #16 +@@ -761,7 +762,8 @@ sha512_block_armv8: + ld1 {@MSG[4]-@MSG[7]},[$inp],#64 + + ld1.64 {@H[0]-@H[3]},[$ctx] // load context +- adr $Ktbl,.LK512 ++ adrp $Ktbl,.LK512 ++ add $Ktbl,$Ktbl,:lo12:.LK512 + + rev64 @MSG[0],@MSG[0] + rev64 @MSG[1],@MSG[1]