aboutsummaryrefslogtreecommitdiff
path: root/archivers
diff options
context:
space:
mode:
authorMax Brazhnikov <makc@FreeBSD.org>2022-04-18 11:40:48 +0000
committerMax Brazhnikov <makc@FreeBSD.org>2022-04-22 15:27:46 +0000
commit93a0e053b7f8dd451ae4b4ac377f20a45e8df188 (patch)
treeafe20e41e3a47caeea69bec26ab2d70c0450a8c6 /archivers
parent8691a46b4456391c3df6566f8ecd1208201f5e8f (diff)
downloadports-93a0e053b7f8dd451ae4b4ac377f20a45e8df188.tar.gz
ports-93a0e053b7f8dd451ae4b4ac377f20a45e8df188.zip
archivers/7-zip: fix build on armv6/armv7
- Extend HWCAP detection patch to use correct auxvals on armv6/armv7. - Disable optimised AES, CRC, SHA-1, and SHA-256 kernels on armv6/armv7 as they don't build with base clang. PR: 263244 Submitted by: Robert Clausecker (cherry picked from commit 96151ece4c41ec9a060a5347704f1a51323dd57f)
Diffstat (limited to 'archivers')
-rw-r--r--archivers/7-zip/Makefile5
-rw-r--r--archivers/7-zip/files/patch-C_7zCrc.c11
-rw-r--r--archivers/7-zip/files/patch-C_Aes.c11
-rw-r--r--archivers/7-zip/files/patch-C_AesOpt.c38
-rw-r--r--archivers/7-zip/files/patch-C_CpuArch.c26
-rw-r--r--archivers/7-zip/files/patch-C_Sha1Opt.c11
-rw-r--r--archivers/7-zip/files/patch-C_Sha256Opt.c11
7 files changed, 104 insertions, 9 deletions
diff --git a/archivers/7-zip/Makefile b/archivers/7-zip/Makefile
index 549bd0fb3868..eeccb82cee65 100644
--- a/archivers/7-zip/Makefile
+++ b/archivers/7-zip/Makefile
@@ -30,6 +30,11 @@ CFLAGS_aarch64?= -march=armv8-a+crc+crypto
NO_WRKSUBDIR= yes
BUILD_WRKSRC= ${WRKSRC}/CPP/7zip/Bundles/Alone2
DOS2UNIX_FILES= C/CpuArch.c \
+ C/7zCrc.c \
+ C/Aes.c \
+ C/AesOpt.c \
+ C/Sha1Opt.c \
+ C/Sha256Opt.c \
CPP/7zip/7zip_gcc.mak \
CPP/7zip/var_gcc.mak \
CPP/Windows/SystemInfo.cpp
diff --git a/archivers/7-zip/files/patch-C_7zCrc.c b/archivers/7-zip/files/patch-C_7zCrc.c
new file mode 100644
index 000000000000..085636273a14
--- /dev/null
+++ b/archivers/7-zip/files/patch-C_7zCrc.c
@@ -0,0 +1,11 @@
+--- C/7zCrc.c.orig 2022-04-12 15:58:06 UTC
++++ C/7zCrc.c
+@@ -71,7 +71,7 @@ UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *
+
+ #ifdef MY_CPU_LE
+
+-#if defined(MY_CPU_ARM_OR_ARM64)
++#if defined(MY_CPU_ARM64)
+
+ // #pragma message("ARM*")
+
diff --git a/archivers/7-zip/files/patch-C_Aes.c b/archivers/7-zip/files/patch-C_Aes.c
new file mode 100644
index 000000000000..5c7f45168933
--- /dev/null
+++ b/archivers/7-zip/files/patch-C_Aes.c
@@ -0,0 +1,11 @@
+--- C/Aes.c.orig 2022-04-12 15:57:33 UTC
++++ C/Aes.c
+@@ -55,7 +55,7 @@ static Byte InvS[256];
+
+ #ifdef MY_CPU_X86_OR_AMD64
+ #define USE_HW_AES
+-#elif defined(MY_CPU_ARM_OR_ARM64) && defined(MY_CPU_LE)
++#elif defined(MY_CPU_ARM) && defined(MY_CPU_LE)
+ #if defined(__clang__)
+ #if (__clang_major__ >= 8) // fix that check
+ #define USE_HW_AES
diff --git a/archivers/7-zip/files/patch-C_AesOpt.c b/archivers/7-zip/files/patch-C_AesOpt.c
new file mode 100644
index 000000000000..6366058533f0
--- /dev/null
+++ b/archivers/7-zip/files/patch-C_AesOpt.c
@@ -0,0 +1,38 @@
+--- C/AesOpt.c.orig 2022-04-12 15:59:22 UTC
++++ C/AesOpt.c
+@@ -506,7 +506,7 @@ VAES_COMPAT_STUB (AesCtr_Code_HW)
+ #endif // ! USE_INTEL_VAES
+
+
+-#elif defined(MY_CPU_ARM_OR_ARM64) && defined(MY_CPU_LE)
++#elif defined(MY_CPU_ARM64) && defined(MY_CPU_LE)
+
+ #if defined(__clang__)
+ #if (__clang_major__ >= 8) // fix that check
+@@ -773,4 +773,25 @@ AES_FUNC_START2 (AesCtr_Code_HW)
+
+ #endif // USE_HW_AES
+
+-#endif // MY_CPU_ARM_OR_ARM64
++#else
++
++/* no USE_HW_AES */
++
++#pragma message("AES HW_SW stub was used")
++
++#define AES_TYPE_keys UInt32
++#define AES_TYPE_data Byte
++
++#define AES_FUNC_START(name) \
++ void MY_FAST_CALL name(UInt32 *p, Byte *data, size_t numBlocks) \
++
++#define AES_COMPAT_STUB(name) \
++ AES_FUNC_START(name); \
++ AES_FUNC_START(name ## _HW) \
++ { name(p, data, numBlocks); }
++
++AES_COMPAT_STUB (AesCbc_Encode)
++AES_COMPAT_STUB (AesCbc_Decode)
++AES_COMPAT_STUB (AesCtr_Code)
++
++#endif
diff --git a/archivers/7-zip/files/patch-C_CpuArch.c b/archivers/7-zip/files/patch-C_CpuArch.c
index 579b684d4337..be204095f526 100644
--- a/archivers/7-zip/files/patch-C_CpuArch.c
+++ b/archivers/7-zip/files/patch-C_CpuArch.c
@@ -1,30 +1,38 @@
--- C/CpuArch.c.orig 2021-12-12 14:45:15 UTC
+++ C/CpuArch.c
-@@ -417,6 +417,23 @@ BoolInt CPU_IsSupported_AES (void) { return APPLE_CRYP
+@@ -417,6 +417,31 @@ BoolInt CPU_IsSupported_AES (void) { return APPLE_CRYP
#include <sys/auxv.h>
+#if defined(__FreeBSD__)
-+static UInt64 get_hwcap() {
++static unsigned long get_hwcap(int aux) {
+ unsigned long hwcap;
-+ if(elf_aux_info(AT_HWCAP, &hwcap, sizeof(unsigned long)) != 0) {
-+ return(0);
++ if (elf_aux_info(aux, &hwcap, sizeof hwcap) != 0) {
++ return 0;
+ }
+ return hwcap;
+}
+
-+BoolInt CPU_IsSupported_CRC32(void) { return get_hwcap() & HWCAP_CRC32; }
++#ifdef MY_CPU_ARM64
++BoolInt CPU_IsSupported_CRC32(void) { return get_hwcap(AT_HWCAP) & HWCAP_CRC32; }
+BoolInt CPU_IsSupported_NEON(void) { return 1; }
-+BoolInt CPU_IsSupported_SHA1(void){ return get_hwcap() & HWCAP_SHA1; }
-+BoolInt CPU_IsSupported_SHA2(void) { return get_hwcap() & HWCAP_SHA2; }
-+BoolInt CPU_IsSupported_AES(void) { return get_hwcap() & HWCAP_AES; }
++BoolInt CPU_IsSupported_SHA1(void){ return get_hwcap(AT_HWCAP) & HWCAP_SHA1; }
++BoolInt CPU_IsSupported_SHA2(void) { return get_hwcap(AT_HWCAP) & HWCAP_SHA2; }
++BoolInt CPU_IsSupported_AES(void) { return get_hwcap(AT_HWCAP) & HWCAP_AES; }
++#else /* MY_CPU_ARM */
++BoolInt CPU_IsSupported_CRC32(void) { return get_hwcap(AT_HWCAP2) & HWCAP2_CRC32; }
++BoolInt CPU_IsSupported_NEON(void) { return get_hwcap(AT_HWCAP) & HWCAP_NEON; }
++BoolInt CPU_IsSupported_SHA1(void){ return get_hwcap(AT_HWCAP2) & HWCAP2_SHA1; }
++BoolInt CPU_IsSupported_SHA2(void) { return get_hwcap(AT_HWCAP2) & HWCAP2_SHA2; }
++BoolInt CPU_IsSupported_AES(void) { return get_hwcap(AT_HWCAP2) & HWCAP2_AES; }
++#endif
+
+#else // __FreeBSD__
+
#define USE_HWCAP
#ifdef USE_HWCAP
-@@ -450,6 +467,7 @@ MY_HWCAP_CHECK_FUNC (SHA1)
+@@ -450,6 +475,7 @@ MY_HWCAP_CHECK_FUNC (SHA1)
MY_HWCAP_CHECK_FUNC (SHA2)
MY_HWCAP_CHECK_FUNC (AES)
diff --git a/archivers/7-zip/files/patch-C_Sha1Opt.c b/archivers/7-zip/files/patch-C_Sha1Opt.c
new file mode 100644
index 000000000000..335ae642521d
--- /dev/null
+++ b/archivers/7-zip/files/patch-C_Sha1Opt.c
@@ -0,0 +1,11 @@
+--- C/Sha1Opt.c.orig 2022-04-12 16:00:26 UTC
++++ C/Sha1Opt.c
+@@ -212,7 +212,7 @@ void MY_FAST_CALL Sha1_UpdateBlocks_HW(UInt32 state[5]
+
+ #endif // USE_HW_SHA
+
+-#elif defined(MY_CPU_ARM_OR_ARM64)
++#elif defined(MY_CPU_ARM64)
+
+ #if defined(__clang__)
+ #if (__clang_major__ >= 8) // fix that check
diff --git a/archivers/7-zip/files/patch-C_Sha256Opt.c b/archivers/7-zip/files/patch-C_Sha256Opt.c
new file mode 100644
index 000000000000..3e1eaa16fe61
--- /dev/null
+++ b/archivers/7-zip/files/patch-C_Sha256Opt.c
@@ -0,0 +1,11 @@
+--- C/Sha256Opt.c.orig 2022-04-12 16:00:07 UTC
++++ C/Sha256Opt.c
+@@ -212,7 +212,7 @@ void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[
+
+ #endif // USE_HW_SHA
+
+-#elif defined(MY_CPU_ARM_OR_ARM64)
++#elif defined(MY_CPU_ARM64)
+
+ #if defined(__clang__)
+ #if (__clang_major__ >= 8) // fix that check