diff options
author | 2024-04-30 08:56:00 -0500 | |
---|---|---|
committer | 2024-04-30 08:56:00 -0500 | |
commit | 421499853acb201ed5615ec332081d377a77a71b (patch) | |
tree | 39d0025011ea4e4f3f4e3ff643b40bc5bdd2b911 | |
parent | patches/e2fsprogs: update for 1.47.0 (diff) | |
download | genkernel-421499853acb201ed5615ec332081d377a77a71b.tar.gz genkernel-421499853acb201ed5615ec332081d377a77a71b.tar.bz2 genkernel-421499853acb201ed5615ec332081d377a77a71b.zip |
patches/libgcrypt: update for 1.10.3
Signed-off-by: Ben Kohler <bkohler@gentoo.org>
6 files changed, 692 insertions, 0 deletions
diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch new file mode 100644 index 0000000..daa1bba --- /dev/null +++ b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-hppa.patch @@ -0,0 +1,110 @@ +https://bugs.gentoo.org/925284 +https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=75e9bcccb69a9dea67d90840bd295bbd1749cea3 + +From 75e9bcccb69a9dea67d90840bd295bbd1749cea3 Mon Sep 17 00:00:00 2001 +From: NIIBE Yutaka <gniibe@fsij.org> +Date: Mon, 4 Mar 2024 09:00:59 +0900 +Subject: [PATCH] mpi: Fix ECC computation on hppa. + +* mpi/ec-inline.h [__hppa] (ADD4_LIMB32, SUB4_LIMB32): New. +* mpi/longlong.h [__hppa] (add_ssaaaa, sub_ddmmss): Add __CLOBBER_CC. + +-- + +Cherry-pick master commit of: + b757f4130af987bdfc769b754b6e9e27882c349c + +GnuPG-bug-id: 7022 +Signed-off-by: NIIBE Yutaka <gniibe@fsij.org> +--- + mpi/ec-inline.h | 40 ++++++++++++++++++++++++++++++++++++++++ + mpi/longlong.h | 12 ++++++------ + 2 files changed, 46 insertions(+), 6 deletions(-) + +diff --git a/mpi/ec-inline.h b/mpi/ec-inline.h +index 0ffdf8eb..c24d5352 100644 +--- a/mpi/ec-inline.h ++++ b/mpi/ec-inline.h +@@ -921,6 +921,46 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + + #endif /* HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS */ + ++#if defined (__hppa) && __GNUC__ >= 4 ++#define ADD4_LIMB32(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \ ++ __asm__ ("add %7,%11,%3\n\t" \ ++ "addc %6,%10,%2\n\t" \ ++ "addc %5,%9,%1\n\t" \ ++ "addc %4,%8,%0" \ ++ : "=r" (A3), \ ++ "=&r" (A2), \ ++ "=&r" (A1), \ ++ "=&r" (A0) \ ++ : "rM" ((mpi_limb_t)(B3)), \ ++ "rM" ((mpi_limb_t)(B2)), \ ++ "rM" ((mpi_limb_t)(B1)), \ ++ "rM" ((mpi_limb_t)(B0)), \ ++ "rM" ((mpi_limb_t)(C3)), \ ++ "rM" ((mpi_limb_t)(C2)), \ ++ "rM" ((mpi_limb_t)(C1)), \ ++ "rM" ((mpi_limb_t)(C0)) \ ++ : "cc") ++ ++#define SUB4_LIMB32(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \ ++ __asm__ ("sub %7,%11,%3\n\t" \ ++ "subb %6,%10,%2\n\t" \ ++ "subb %5,%9,%1\n\t" \ ++ "subb %4,%8,%0\n\t" \ ++ : "=r" (A3), \ ++ "=&r" (A2), \ ++ "=&r" (A1), \ ++ "=&r" (A0) \ ++ : "rM" ((mpi_limb_t)(B3)), \ ++ "rM" ((mpi_limb_t)(B2)), \ ++ "rM" ((mpi_limb_t)(B1)), \ ++ "rM" ((mpi_limb_t)(B0)), \ ++ "rM" ((mpi_limb_t)(C3)), \ ++ "rM" ((mpi_limb_t)(C2)), \ ++ "rM" ((mpi_limb_t)(C1)), \ ++ "rM" ((mpi_limb_t)(C0)) \ ++ : "cc") ++ ++#endif /* __hppa */ + + /* Common 32-bit arch addition/subtraction macros. */ + +diff --git a/mpi/longlong.h b/mpi/longlong.h +index c299534c..1ab70e7e 100644 +--- a/mpi/longlong.h ++++ b/mpi/longlong.h +@@ -394,23 +394,23 @@ extern UDItype __udiv_qrnnd (); + ***************************************/ + #if defined (__hppa) && W_TYPE_SIZE == 32 + # define add_ssaaaa(sh, sl, ah, al, bh, bl) \ +- __asm__ (" add %4,%5,%1\n" \ +- " addc %2,%3,%0" \ ++ __asm__ ("add %4,%5,%1\n\t" \ ++ "addc %2,%3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%rM" ((USItype)(ah)), \ + "rM" ((USItype)(bh)), \ + "%rM" ((USItype)(al)), \ +- "rM" ((USItype)(bl))) ++ "rM" ((USItype)(bl)) __CLOBBER_CC) + # define sub_ddmmss(sh, sl, ah, al, bh, bl) \ +- __asm__ (" sub %4,%5,%1\n" \ +- " subb %2,%3,%0" \ ++ __asm__ ("sub %4,%5,%1\n\t" \ ++ "subb %2,%3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "rM" ((USItype)(ah)), \ + "rM" ((USItype)(bh)), \ + "rM" ((USItype)(al)), \ +- "rM" ((USItype)(bl))) ++ "rM" ((USItype)(bl)) __CLOBBER_CC) + # if defined (_PA_RISC1_1) + # define umul_ppmm(wh, wl, u, v) \ + do { \ +-- +2.30.2 diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86-refactor.patch b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86-refactor.patch new file mode 100644 index 0000000..5271506 --- /dev/null +++ b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86-refactor.patch @@ -0,0 +1,428 @@ +https://bugs.gentoo.org/915060 +https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=07f0563d325c6589ca1560525d3b22291feec227 + +From 07f0563d325c6589ca1560525d3b22291feec227 Mon Sep 17 00:00:00 2001 +From: Jussi Kivilinna <jussi.kivilinna@iki.fi> +Date: Tue, 19 Dec 2023 20:23:47 +0200 +Subject: [PATCH] mpi/ec-inline: refactor i386 assembly to reduce register + usage + +* mpi/ec-inline.h [__i386__] (ADD2_LIMB32_CARRY_OUT) +(ADD2_LIMB32_CARRY_IN_OUT, ADD2_LIB32_CARRY_IN, SUB2_LIMB32_CARRY_OUT) +(SUB2_LIMB32_CARRY_IN_OUT, SUB2_LIB32_CARRY_IN, ADD8_LIMB32) +(ADD10_LIMB32, ADD14_LIMB32, SUB8_LIMB32, SUB10_LIMB32) +(SUB14_LIMB32): New. +[__i386__] (ADD4_LIMB32, ADD6_LIMB32, SUB4_LIMB32, SUB6_LIMB32): Rewrite +to use new *_CARRY_* macros. +[BYTES_PER_MPI_LIMB == 4] (ADD4_LIMB64): Use ADD8_LIMB32 if available. +[BYTES_PER_MPI_LIMB == 4] (ADD5_LIMB64): Use ADD10_LIMB32 if available. +[BYTES_PER_MPI_LIMB == 4] (ADD7_LIMB64): Use ADD14_LIMB32 if available. +[BYTES_PER_MPI_LIMB == 4] (SUB4_LIMB64): Use SUB8_LIMB32 if available. +[BYTES_PER_MPI_LIMB == 4] (SUB5_LIMB64): Use SUB10_LIMB32 if available. +[BYTES_PER_MPI_LIMB == 4] (SUB7_LIMB64): Use SUB14_LIMB32 if available. +-- + +Cherry pick of master commit: + 956f1ed4ec6ead59dc56f574f943f1fe25dac723 + +This commit reduces number register operands and register pressure +at i386 assembly used in `ec-nist.c` NIST-P192, P224, P256, and P384. +Performance stays relatively same, with P192 being ~2% slower +than before and P384 being ~5% faster. + +GnuPG-bug-id: T6892 +Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi> +--- + mpi/ec-inline.h | 327 +++++++++++++++++++++++++++++++++--------------- + 1 file changed, 229 insertions(+), 98 deletions(-) + +diff --git a/mpi/ec-inline.h b/mpi/ec-inline.h +index a07826e3..0ffdf8eb 100644 +--- a/mpi/ec-inline.h ++++ b/mpi/ec-inline.h +@@ -641,116 +641,192 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + /* i386 addition/subtraction helpers. */ + #if defined (__i386__) && defined(HAVE_CPU_ARCH_X86) && __GNUC__ >= 4 + +-#define ADD4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) \ +- __asm__ ("addl %11, %3\n" \ +- "adcl %10, %2\n" \ +- "adcl %9, %1\n" \ +- "adcl %8, %0\n" \ +- : "=r" (a3), \ +- "=&r" (a2), \ ++#define ADD2_LIMB32_CARRY_OUT(carry, a1, a0, b1, b0, c1, c0) \ ++ __asm__ ("addl %7, %2\n" \ ++ "adcl %6, %1\n" \ ++ "sbbl %0, %0\n" \ ++ : "=r" (carry), \ + "=&r" (a1), \ + "=&r" (a0) \ +- : "0" ((mpi_limb_t)(b3)), \ +- "1" ((mpi_limb_t)(b2)), \ +- "2" ((mpi_limb_t)(b1)), \ +- "3" ((mpi_limb_t)(b0)), \ +- "g" ((mpi_limb_t)(c3)), \ +- "g" ((mpi_limb_t)(c2)), \ +- "g" ((mpi_limb_t)(c1)), \ +- "g" ((mpi_limb_t)(c0)) \ ++ : "0" ((mpi_limb_t)(0)), \ ++ "1" ((mpi_limb_t)(b1)), \ ++ "2" ((mpi_limb_t)(b0)), \ ++ "re" ((mpi_limb_t)(c1)), \ ++ "re" ((mpi_limb_t)(c0)) \ + : "cc") + ++#define ADD2_LIMB32_CARRY_IN_OUT(a1, a0, b1, b0, c1, c0, carry) \ ++ __asm__ ("addl $1, %0\n" \ ++ "adcl %7, %2\n" \ ++ "adcl %6, %1\n" \ ++ "sbbl %0, %0\n" \ ++ : "=r" (carry), \ ++ "=&r" (a1), \ ++ "=&r" (a0) \ ++ : "0" ((mpi_limb_t)(carry)), \ ++ "1" ((mpi_limb_t)(b1)), \ ++ "2" ((mpi_limb_t)(b0)), \ ++ "re" ((mpi_limb_t)(c1)), \ ++ "re" ((mpi_limb_t)(c0)) \ ++ : "cc") ++ ++#define ADD2_LIMB32_CARRY_IN(a1, a0, b1, b0, c1, c0, carry) \ ++ __asm__ ("addl $1, %2\n" \ ++ "adcl %7, %1\n" \ ++ "adcl %6, %0\n" \ ++ : "=r" (a1), \ ++ "=&r" (a0), \ ++ "=&g" (carry) \ ++ : "0" ((mpi_limb_t)(b1)), \ ++ "1" ((mpi_limb_t)(b0)), \ ++ "2" ((mpi_limb_t)(carry)), \ ++ "re" ((mpi_limb_t)(c1)), \ ++ "re" ((mpi_limb_t)(c0)) \ ++ : "cc") ++ ++#define ADD4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry4_32; \ ++ ADD2_LIMB32_CARRY_OUT(__carry4_32, a1, a0, b1, b0, c1, c0); \ ++ ADD2_LIMB32_CARRY_IN(a3, a2, b3, b2, c3, c2, __carry4_32); \ ++ } while (0) ++ + #define ADD6_LIMB32(a5, a4, a3, a2, a1, a0, b5, b4, b3, b2, b1, b0, \ + c5, c4, c3, c2, c1, c0) do { \ + mpi_limb_t __carry6_32; \ +- __asm__ ("addl %10, %3\n" \ +- "adcl %9, %2\n" \ +- "adcl %8, %1\n" \ +- "sbbl %0, %0\n" \ +- : "=r" (__carry6_32), \ +- "=&r" (a2), \ +- "=&r" (a1), \ +- "=&r" (a0) \ +- : "0" ((mpi_limb_t)(0)), \ +- "1" ((mpi_limb_t)(b2)), \ +- "2" ((mpi_limb_t)(b1)), \ +- "3" ((mpi_limb_t)(b0)), \ +- "g" ((mpi_limb_t)(c2)), \ +- "g" ((mpi_limb_t)(c1)), \ +- "g" ((mpi_limb_t)(c0)) \ +- : "cc"); \ +- __asm__ ("addl $1, %3\n" \ +- "adcl %10, %2\n" \ +- "adcl %9, %1\n" \ +- "adcl %8, %0\n" \ +- : "=r" (a5), \ +- "=&r" (a4), \ +- "=&r" (a3), \ +- "=&r" (__carry6_32) \ +- : "0" ((mpi_limb_t)(b5)), \ +- "1" ((mpi_limb_t)(b4)), \ +- "2" ((mpi_limb_t)(b3)), \ +- "3" ((mpi_limb_t)(__carry6_32)), \ +- "g" ((mpi_limb_t)(c5)), \ +- "g" ((mpi_limb_t)(c4)), \ +- "g" ((mpi_limb_t)(c3)) \ +- : "cc"); \ ++ ADD2_LIMB32_CARRY_OUT(__carry6_32, a1, a0, b1, b0, c1, c0); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry6_32); \ ++ ADD2_LIMB32_CARRY_IN(a5, a4, b5, b4, c5, c4, __carry6_32); \ ++ } while (0) ++ ++#define ADD8_LIMB32(a7, a6, a5, a4, a3, a2, a1, a0, \ ++ b7, b6, b5, b4, b3, b2, b1, b0, \ ++ c7, c6, c5, c4, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry8_32; \ ++ ADD2_LIMB32_CARRY_OUT(__carry8_32, a1, a0, b1, b0, c1, c0); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry8_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry8_32); \ ++ ADD2_LIMB32_CARRY_IN(a7, a6, b7, b6, c7, c6, __carry8_32); \ + } while (0) + +-#define SUB4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) \ +- __asm__ ("subl %11, %3\n" \ +- "sbbl %10, %2\n" \ +- "sbbl %9, %1\n" \ +- "sbbl %8, %0\n" \ +- : "=r" (a3), \ +- "=&r" (a2), \ ++#define ADD10_LIMB32(a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, \ ++ b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, \ ++ c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry10_32; \ ++ ADD2_LIMB32_CARRY_OUT(__carry10_32, a1, a0, b1, b0, c1, c0); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry10_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry10_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry10_32); \ ++ ADD2_LIMB32_CARRY_IN(a9, a8, b9, b8, c9, c8, __carry10_32); \ ++ } while (0) ++ ++#define ADD14_LIMB32(a13, a12, a11, a10, a9, a8, a7, \ ++ a6, a5, a4, a3, a2, a1, a0, \ ++ b13, b12, b11, b10, b9, b8, b7, \ ++ b6, b5, b4, b3, b2, b1, b0, \ ++ c13, c12, c11, c10, c9, c8, c7, \ ++ c6, c5, c4, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry14_32; \ ++ ADD2_LIMB32_CARRY_OUT(__carry14_32, a1, a0, b1, b0, c1, c0); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry14_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry14_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry14_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a9, a8, b9, b8, c9, c8, __carry14_32); \ ++ ADD2_LIMB32_CARRY_IN_OUT(a11, a10, b11, b10, c11, c10, __carry14_32); \ ++ ADD2_LIMB32_CARRY_IN(a13, a12, b13, b12, c13, c12, __carry14_32); \ ++ } while (0) ++ ++#define SUB2_LIMB32_CARRY_OUT(carry, a1, a0, b1, b0, c1, c0) \ ++ __asm__ ("subl %7, %2\n" \ ++ "sbbl %6, %1\n" \ ++ "sbbl %0, %0\n" \ ++ : "=r" (carry), \ + "=&r" (a1), \ + "=&r" (a0) \ +- : "0" ((mpi_limb_t)(b3)), \ +- "1" ((mpi_limb_t)(b2)), \ +- "2" ((mpi_limb_t)(b1)), \ +- "3" ((mpi_limb_t)(b0)), \ +- "g" ((mpi_limb_t)(c3)), \ +- "g" ((mpi_limb_t)(c2)), \ +- "g" ((mpi_limb_t)(c1)), \ +- "g" ((mpi_limb_t)(c0)) \ ++ : "0" ((mpi_limb_t)(0)), \ ++ "1" ((mpi_limb_t)(b1)), \ ++ "2" ((mpi_limb_t)(b0)), \ ++ "re" ((mpi_limb_t)(c1)), \ ++ "re" ((mpi_limb_t)(c0)) \ ++ : "cc") ++ ++#define SUB2_LIMB32_CARRY_IN_OUT(a1, a0, b1, b0, c1, c0, carry) \ ++ __asm__ ("addl $1, %0\n" \ ++ "sbbl %7, %2\n" \ ++ "sbbl %6, %1\n" \ ++ "sbbl %0, %0\n" \ ++ : "=r" (carry), \ ++ "=&r" (a1), \ ++ "=&r" (a0) \ ++ : "0" ((mpi_limb_t)(carry)), \ ++ "1" ((mpi_limb_t)(b1)), \ ++ "2" ((mpi_limb_t)(b0)), \ ++ "re" ((mpi_limb_t)(c1)), \ ++ "re" ((mpi_limb_t)(c0)) \ ++ : "cc") ++ ++#define SUB2_LIMB32_CARRY_IN(a1, a0, b1, b0, c1, c0, carry) \ ++ __asm__ ("addl $1, %2\n" \ ++ "sbbl %7, %1\n" \ ++ "sbbl %6, %0\n" \ ++ : "=r" (a1), \ ++ "=&r" (a0), \ ++ "=&g" (carry) \ ++ : "0" ((mpi_limb_t)(b1)), \ ++ "1" ((mpi_limb_t)(b0)), \ ++ "2" ((mpi_limb_t)(carry)), \ ++ "re" ((mpi_limb_t)(c1)), \ ++ "re" ((mpi_limb_t)(c0)) \ + : "cc") + ++#define SUB4_LIMB32(a3, a2, a1, a0, b3, b2, b1, b0, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry4_32; \ ++ SUB2_LIMB32_CARRY_OUT(__carry4_32, a1, a0, b1, b0, c1, c0); \ ++ SUB2_LIMB32_CARRY_IN(a3, a2, b3, b2, c3, c2, __carry4_32); \ ++ } while (0) ++ + #define SUB6_LIMB32(a5, a4, a3, a2, a1, a0, b5, b4, b3, b2, b1, b0, \ + c5, c4, c3, c2, c1, c0) do { \ +- mpi_limb_t __borrow6_32; \ +- __asm__ ("subl %10, %3\n" \ +- "sbbl %9, %2\n" \ +- "sbbl %8, %1\n" \ +- "sbbl %0, %0\n" \ +- : "=r" (__borrow6_32), \ +- "=&r" (a2), \ +- "=&r" (a1), \ +- "=&r" (a0) \ +- : "0" ((mpi_limb_t)(0)), \ +- "1" ((mpi_limb_t)(b2)), \ +- "2" ((mpi_limb_t)(b1)), \ +- "3" ((mpi_limb_t)(b0)), \ +- "g" ((mpi_limb_t)(c2)), \ +- "g" ((mpi_limb_t)(c1)), \ +- "g" ((mpi_limb_t)(c0)) \ +- : "cc"); \ +- __asm__ ("addl $1, %3\n" \ +- "sbbl %10, %2\n" \ +- "sbbl %9, %1\n" \ +- "sbbl %8, %0\n" \ +- : "=r" (a5), \ +- "=&r" (a4), \ +- "=&r" (a3), \ +- "=&r" (__borrow6_32) \ +- : "0" ((mpi_limb_t)(b5)), \ +- "1" ((mpi_limb_t)(b4)), \ +- "2" ((mpi_limb_t)(b3)), \ +- "3" ((mpi_limb_t)(__borrow6_32)), \ +- "g" ((mpi_limb_t)(c5)), \ +- "g" ((mpi_limb_t)(c4)), \ +- "g" ((mpi_limb_t)(c3)) \ +- : "cc"); \ ++ mpi_limb_t __carry6_32; \ ++ SUB2_LIMB32_CARRY_OUT(__carry6_32, a1, a0, b1, b0, c1, c0); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry6_32); \ ++ SUB2_LIMB32_CARRY_IN(a5, a4, b5, b4, c5, c4, __carry6_32); \ ++ } while (0) ++ ++#define SUB8_LIMB32(a7, a6, a5, a4, a3, a2, a1, a0, \ ++ b7, b6, b5, b4, b3, b2, b1, b0, \ ++ c7, c6, c5, c4, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry8_32; \ ++ SUB2_LIMB32_CARRY_OUT(__carry8_32, a1, a0, b1, b0, c1, c0); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry8_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry8_32); \ ++ SUB2_LIMB32_CARRY_IN(a7, a6, b7, b6, c7, c6, __carry8_32); \ ++ } while (0) ++ ++#define SUB10_LIMB32(a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, \ ++ b9, b8, b7, b6, b5, b4, b3, b2, b1, b0, \ ++ c9, c8, c7, c6, c5, c4, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry10_32; \ ++ SUB2_LIMB32_CARRY_OUT(__carry10_32, a1, a0, b1, b0, c1, c0); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry10_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry10_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry10_32); \ ++ SUB2_LIMB32_CARRY_IN(a9, a8, b9, b8, c9, c8, __carry10_32); \ ++ } while (0) ++ ++#define SUB14_LIMB32(a13, a12, a11, a10, a9, a8, a7, \ ++ a6, a5, a4, a3, a2, a1, a0, \ ++ b13, b12, b11, b10, b9, b8, b7, \ ++ b6, b5, b4, b3, b2, b1, b0, \ ++ c13, c12, c11, c10, c9, c8, c7, \ ++ c6, c5, c4, c3, c2, c1, c0) do { \ ++ mpi_limb_t __carry14_32; \ ++ SUB2_LIMB32_CARRY_OUT(__carry14_32, a1, a0, b1, b0, c1, c0); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a3, a2, b3, b2, c3, c2, __carry14_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a5, a4, b5, b4, c5, c4, __carry14_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a7, a6, b7, b6, c7, c6, __carry14_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a9, a8, b9, b8, c9, c8, __carry14_32); \ ++ SUB2_LIMB32_CARRY_IN_OUT(a11, a10, b11, b10, c11, c10, __carry14_32); \ ++ SUB2_LIMB32_CARRY_IN(a13, a12, b13, b12, c13, c12, __carry14_32); \ + } while (0) + + #endif /* __i386__ */ +@@ -820,7 +896,6 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + "Ir" ((mpi_limb_t)(C0)) \ + : "cc") + +- + #define SUB6_LIMB32(A5, A4, A3, A2, A1, A0, B5, B4, B3, B2, B1, B0, \ + C5, C4, C3, C2, C1, C0) do { \ + mpi_limb_t __borrow6_32; \ +@@ -875,7 +950,13 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo) + #endif + +-#if defined(ADD6_LIMB32) ++#if defined(ADD8_LIMB32) ++/* A[0..3] = B[0..3] + C[0..3] */ ++#define ADD4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \ ++ ADD8_LIMB32(A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, \ ++ B3.hi, B3.lo, B2.hi, B2.lo, B1.hi, B1.lo, B0.hi, B0.lo, \ ++ C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo) ++#elif defined(ADD6_LIMB32) + /* A[0..3] = B[0..3] + C[0..3] */ + #define ADD4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) do { \ + mpi_limb_t __carry4; \ +@@ -888,6 +969,28 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + } while (0) + #endif + ++#if defined(ADD10_LIMB32) ++/* A[0..4] = B[0..4] + C[0..4] */ ++#define ADD5_LIMB64(A4, A3, A2, A1, A0, B4, B3, B2, B1, B0, \ ++ C4, C3, C2, C1, C0) \ ++ ADD10_LIMB32(A4.hi, A4.lo, A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, \ ++ A0.hi, A0.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \ ++ B1.hi, B1.lo, B0.hi, B0.lo, C4.hi, C4.lo, C3.hi, C3.lo, \ ++ C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo) ++#endif ++ ++#if defined(ADD14_LIMB32) ++/* A[0..6] = B[0..6] + C[0..6] */ ++#define ADD7_LIMB64(A6, A5, A4, A3, A2, A1, A0, B6, B5, B4, B3, B2, B1, B0, \ ++ C6, C5, C4, C3, C2, C1, C0) \ ++ ADD14_LIMB32(A6.hi, A6.lo, A5.hi, A5.lo, A4.hi, A4.lo, A3.hi, A3.lo, \ ++ A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, B6.hi, B6.lo, \ ++ B5.hi, B5.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \ ++ B1.hi, B1.lo, B0.hi, B0.lo, C6.hi, C6.lo, C5.hi, C5.lo, \ ++ C4.hi, C4.lo, C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, \ ++ C0.hi, C0.lo) ++#endif ++ + #if defined(SUB4_LIMB32) + /* A[0..1] = B[0..1] - C[0..1] */ + #define SUB2_LIMB64(A1, A0, B1, B0, C1, C0) \ +@@ -914,7 +1017,13 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo) + #endif + +-#if defined(SUB6_LIMB32) ++#if defined(SUB8_LIMB32) ++/* A[0..3] = B[0..3] - C[0..3] */ ++#define SUB4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) \ ++ SUB8_LIMB32(A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, \ ++ B3.hi, B3.lo, B2.hi, B2.lo, B1.hi, B1.lo, B0.hi, B0.lo, \ ++ C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo) ++#elif defined(SUB6_LIMB32) + /* A[0..3] = B[0..3] - C[0..3] */ + #define SUB4_LIMB64(A3, A2, A1, A0, B3, B2, B1, B0, C3, C2, C1, C0) do { \ + mpi_limb_t __borrow4; \ +@@ -927,6 +1036,28 @@ LIMB64_HILO(mpi_limb_t hi, mpi_limb_t lo) + } while (0) + #endif + ++#if defined(SUB10_LIMB32) ++/* A[0..4] = B[0..4] - C[0..4] */ ++#define SUB5_LIMB64(A4, A3, A2, A1, A0, B4, B3, B2, B1, B0, \ ++ C4, C3, C2, C1, C0) \ ++ SUB10_LIMB32(A4.hi, A4.lo, A3.hi, A3.lo, A2.hi, A2.lo, A1.hi, A1.lo, \ ++ A0.hi, A0.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \ ++ B1.hi, B1.lo, B0.hi, B0.lo, C4.hi, C4.lo, C3.hi, C3.lo, \ ++ C2.hi, C2.lo, C1.hi, C1.lo, C0.hi, C0.lo) ++#endif ++ ++#if defined(SUB14_LIMB32) ++/* A[0..6] = B[0..6] - C[0..6] */ ++#define SUB7_LIMB64(A6, A5, A4, A3, A2, A1, A0, B6, B5, B4, B3, B2, B1, B0, \ ++ C6, C5, C4, C3, C2, C1, C0) \ ++ SUB14_LIMB32(A6.hi, A6.lo, A5.hi, A5.lo, A4.hi, A4.lo, A3.hi, A3.lo, \ ++ A2.hi, A2.lo, A1.hi, A1.lo, A0.hi, A0.lo, B6.hi, B6.lo, \ ++ B5.hi, B5.lo, B4.hi, B4.lo, B3.hi, B3.lo, B2.hi, B2.lo, \ ++ B1.hi, B1.lo, B0.hi, B0.lo, C6.hi, C6.lo, C5.hi, C5.lo, \ ++ C4.hi, C4.lo, C3.hi, C3.lo, C2.hi, C2.lo, C1.hi, C1.lo, \ ++ C0.hi, C0.lo) ++#endif ++ + #endif /* BYTES_PER_MPI_LIMB == 4 */ + + +-- +2.30.2 diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch new file mode 100644 index 0000000..51ea004 --- /dev/null +++ b/patches/libgcrypt/1.10.3/libgcrypt-1.10.3-x86.patch @@ -0,0 +1,94 @@ +https://bugs.gentoo.org/915060 +https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=commit;h=08b88b4012f7837736b8d29a3689ce3fff2a10c8 + +From 08b88b4012f7837736b8d29a3689ce3fff2a10c8 Mon Sep 17 00:00:00 2001 +From: Jussi Kivilinna <jussi.kivilinna@iki.fi> +Date: Sat, 16 Dec 2023 19:50:23 +0200 +Subject: [PATCH] mpi/ec-nist: fix for -Og build failure on i386 + +* mpi/ec-nist.c (_gcry_mpi_ec_nist256_mod) +(_gcry_mpi_ec_nist384_mod): Load p_mult constant with carry offset +to stack. +-- + +Cherry pick master commit of: + 90097bd2f41c217dc5c666570e5680f432cf92d3 + +Patch fixes compilation error on i386 with -Og optimization level. + +In file included from ../../mpi/ec-nist.c:34: +../../mpi/ec-nist.c: In function '_gcry_mpi_ec_nist256_mod': +../../mpi/ec-inline.h:701:3: error: 'asm' operand has impossible constraints + 701 | __asm__ ("subl %11, %3\n" \ + | ^~~~~~~ +../../mpi/ec-inline.h:894:9: note: in expansion of macro 'SUB4_LIMB32' + 894 | SUB4_LIMB32(A1.hi, A1.lo, A0.hi, A0.lo, \ + | ^~~~~~~~~~~ +../../mpi/ec-inline.h:1009:5: note: in expansion of macro 'SUB2_LIMB64' + 1009 | SUB2_LIMB64(A4, A3, B4, B3, C4, C3); \ + | ^~~~~~~~~~~ +../../mpi/ec-nist.c:474:3: note: in expansion of macro 'SUB5_LIMB64' + 474 | SUB5_LIMB64 (s[4], s[3], s[2], s[1], s[0], + | ^~~~~~~~~~~ + +Appears that in problematic function, too many registers end up being +allocated for addressing and there is not enough register left for +asm input/output (4 registers needed for this block). Problem can be +workaround by reducing needed addressing registers by pushing +`p_mult[carry + ...]` values to stack. On other compiler flag levels +and architectures, compiler should be able to optimize away this +extra copying and have not effect on performance. + +GnuPG-bug-id: T6892 +Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi> +--- + mpi/ec-nist.c | 23 ++++++++++++++++------- + 1 file changed, 16 insertions(+), 7 deletions(-) + +diff --git a/mpi/ec-nist.c b/mpi/ec-nist.c +index f792405c..559d02d9 100644 +--- a/mpi/ec-nist.c ++++ b/mpi/ec-nist.c +@@ -471,11 +471,15 @@ _gcry_mpi_ec_nist256_mod (gcry_mpi_t w, mpi_ec_t ctx) + + carry = LO32_LIMB64(s[4]); + ++ /* Load values to stack to ease register pressure on i386. */ ++ e[0] = p_mult[carry + 4][0]; ++ e[1] = p_mult[carry + 4][1]; ++ e[2] = p_mult[carry + 4][2]; ++ e[3] = p_mult[carry + 4][3]; ++ e[4] = p_mult[carry + 4][4]; + SUB5_LIMB64 (s[4], s[3], s[2], s[1], s[0], + s[4], s[3], s[2], s[1], s[0], +- p_mult[carry + 4][4], p_mult[carry + 4][3], +- p_mult[carry + 4][2], p_mult[carry + 4][1], +- p_mult[carry + 4][0]); ++ e[4], e[3], e[2], e[1], e[0]); + + /* Add 1*P */ + ADD5_LIMB64 (d[4], d[3], d[2], d[1], d[0], +@@ -749,12 +753,17 @@ _gcry_mpi_ec_nist384_mod (gcry_mpi_t w, mpi_ec_t ctx) + + carry = LO32_LIMB64(s[6]); + ++ /* Load values to stack to ease register pressure on i386. */ ++ x[0] = p_mult[carry + 3][0]; ++ x[1] = p_mult[carry + 3][1]; ++ x[2] = p_mult[carry + 3][2]; ++ x[3] = p_mult[carry + 3][3]; ++ x[4] = p_mult[carry + 3][4]; ++ x[5] = p_mult[carry + 3][5]; ++ x[6] = p_mult[carry + 3][6]; + SUB7_LIMB64 (s[6], s[5], s[4], s[3], s[2], s[1], s[0], + s[6], s[5], s[4], s[3], s[2], s[1], s[0], +- p_mult[carry + 3][6], p_mult[carry + 3][5], +- p_mult[carry + 3][4], p_mult[carry + 3][3], +- p_mult[carry + 3][2], p_mult[carry + 3][1], +- p_mult[carry + 3][0]); ++ x[6], x[5], x[4], x[3], x[2], x[1], x[0]); + + ADD7_LIMB64 (d[6], d[5], d[4], d[3], d[2], d[1], d[0], + s[6], s[5], s[4], s[3], s[2], s[1], s[0], +-- +2.30.2 diff --git a/patches/libgcrypt/1.10.3/libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch b/patches/libgcrypt/1.10.3/libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch new file mode 100644 index 0000000..738eac1 --- /dev/null +++ b/patches/libgcrypt/1.10.3/libgcrypt-1.9.4-no-fgrep-libgcrypt-config.patch @@ -0,0 +1,21 @@ +https://bugs.gentoo.org/868384 +--- a/src/libgcrypt-config.in ++++ b/src/libgcrypt-config.in +@@ -154,7 +154,7 @@ if test "$echo_cflags" = "yes"; then + + tmp="" + for i in $includes $cflags_final; do +- if echo "$tmp" | fgrep -v -- "$i" >/dev/null; then ++ if echo "$tmp" | grep -F -v -- "$i" >/dev/null; then + tmp="$tmp $i" + fi + done +@@ -178,7 +178,7 @@ if test "$echo_libs" = "yes"; then + + tmp="" + for i in $libdirs $libs_final; do +- if echo "$tmp" | fgrep -v -- "$i" >/dev/null; then ++ if echo "$tmp" | grep -F -v -- "$i" >/dev/null; then + tmp="$tmp $i" + fi + done diff --git a/patches/libgcrypt/1.10.3/libgcrypt-multilib-syspath.patch b/patches/libgcrypt/1.10.3/libgcrypt-multilib-syspath.patch new file mode 100644 index 0000000..7859851 --- /dev/null +++ b/patches/libgcrypt/1.10.3/libgcrypt-multilib-syspath.patch @@ -0,0 +1,23 @@ +diff --git a/src/libgcrypt-config.in b/src/libgcrypt-config.in +index c052638..4c8ddc3 100644 +--- a/src/libgcrypt-config.in ++++ b/src/libgcrypt-config.in +@@ -154,9 +154,12 @@ if test "$echo_libs" = "yes"; then + libs_final="$libs" + + # Set up `libdirs'. +- if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/lib"; then +- libdirs="-L$libdir" +- fi ++ case "$libdir" in ++ /usr/lib|/usr/lib64|/lib|/lib64) ;; ++ *) ++ libdirs="-L$libdir" ++ ;; ++ esac + + # Set up `libs_final'. + libs_final="$libs_final $gpg_error_libs" +-- +1.7.6.1 + diff --git a/patches/libgcrypt/1.10.3/libgcrypt-powerpc-darwin.patch b/patches/libgcrypt/1.10.3/libgcrypt-powerpc-darwin.patch new file mode 100644 index 0000000..f1c7cf9 --- /dev/null +++ b/patches/libgcrypt/1.10.3/libgcrypt-powerpc-darwin.patch @@ -0,0 +1,16 @@ +Drop guard for CPU detection, configure won't get this wrong, and this +check fails on some PPC platforms where these guards aren't set (due to +different kernel/libc). + +--- a/src/hwf-ppc.c ++++ b/src/hwf-ppc.c +@@ -33,9 +33,6 @@ + #include "g10lib.h" + #include "hwf-common.h" + +-#if !defined (__powerpc__) && !defined (__powerpc64__) +-# error Module build for wrong CPU. +-#endif + + + #if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ELF_AUX_INFO) && \ |