From f8812df237fae40ac9737fc303e05512207f52de Mon Sep 17 00:00:00 2001 From: skmpz Date: Fri, 30 Apr 2021 08:42:26 +0300 Subject: [PATCH] libgcrypt: update to 1.9.3. --- .../hwf-x86-fix-wrong-operand-type.patch | 46 +++++++++++++++++++ srcpkgs/libgcrypt/template | 5 +- 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 srcpkgs/libgcrypt/patches/hwf-x86-fix-wrong-operand-type.patch diff --git a/srcpkgs/libgcrypt/patches/hwf-x86-fix-wrong-operand-type.patch b/srcpkgs/libgcrypt/patches/hwf-x86-fix-wrong-operand-type.patch new file mode 100644 index 000000000000..51165dcb0022 --- /dev/null +++ b/srcpkgs/libgcrypt/patches/hwf-x86-fix-wrong-operand-type.patch @@ -0,0 +1,46 @@ +From ec87511d9cd2dc31434e939b6351d74a38d4ceaa Mon Sep 17 00:00:00 2001 +From: Jussi Kivilinna +Date: Wed, 28 Apr 2021 19:19:15 +0300 +Subject: [PATCH] hwf-x86: fix use of wrong operand type + +* src/hwf-x86.c (get_cpuid): Use xchg for swapping %ebx back +and forth between operand register. +-- + +HW feature routine was giving wrong results with certain compiler & +compiler flag combinations on i386. Issue was that "=g" operand was +used which caused problem if compiler allocated %ebx register for +this operand. CPUID assembly block attempts to save %ebx as in older +GCC versions this register was fixed for GOT pointer use and could +not be modified otherwise (could not be used as operand or clobber). + +Reported-by: Iru Cai +Signed-off-by: Jussi Kivilinna +--- + src/hwf-x86.c | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/src/hwf-x86.c b/src/hwf-x86.c +index 91e4c411e..a1aa02e78 100644 +--- a/src/hwf-x86.c ++++ b/src/hwf-x86.c +@@ -83,14 +83,12 @@ get_cpuid(unsigned int in, unsigned int *eax, unsigned int *ebx, + unsigned int regs[4]; + + asm volatile +- ("movl %%ebx, %%edi\n\t" /* Save GOT register. */ +- "xorl %%ebx, %%ebx\n\t" ++ ("xchgl %%ebx, %1\n\t" /* Save GOT register. */ + "cpuid\n\t" +- "movl %%ebx, %1\n\t" +- "movl %%edi, %%ebx\n\t" /* Restore GOT register. */ +- : "=a" (regs[0]), "=g" (regs[1]), "=c" (regs[2]), "=d" (regs[3]) +- : "0" (in), "2" (0), "3" (0) +- : "cc", "edi" ++ "xchgl %%ebx, %1\n\t" /* Restore GOT register. */ ++ : "=a" (regs[0]), "=D" (regs[1]), "=c" (regs[2]), "=d" (regs[3]) ++ : "0" (in), "1" (0), "2" (0), "3" (0) ++ : "cc" + ); + + if (eax) diff --git a/srcpkgs/libgcrypt/template b/srcpkgs/libgcrypt/template index da057a81fd85..3a6032d6cc6c 100644 --- a/srcpkgs/libgcrypt/template +++ b/srcpkgs/libgcrypt/template @@ -1,6 +1,6 @@ # Template file for 'libgcrypt' pkgname=libgcrypt -version=1.9.2 +version=1.9.3 revision=1 build_style=gnu-configure configure_args="--enable-static --without-capabilities" @@ -10,7 +10,8 @@ maintainer="skmpz " license="LGPL-2.1-or-later" homepage="https://www.gnupg.org" distfiles="https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-${version}.tar.bz2" -checksum=b2c10d091513b271e47177274607b1ffba3d95b188bbfa8797f948aec9053c5a +checksum=97ebe4f94e2f7e35b752194ce15a0f3c66324e0ff6af26659bbfb5ff2ec328fd +patch_args="-Np1" if [ "$CROSS_BUILD" ]; then configure_args+=" ac_cv_sys_symbol_underscore=no"