> Date: Sat, 14 Jan 2023 16:56:32 +0100
> From: Theo Buehler <t...@theobuehler.org>
> 
> 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]
> 

Reply via email to