> Date: Sat, 14 Jan 2023 16:56:32 +0100
> From: Theo Buehler <[email protected]>
>
> 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
Looks good to me. You didn't remove the .LOPENSSL_armcap_P bits
furter up in the files that are part of that __ILP32__ stuff. But
that doesn't really matter.
> 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]
>