The diff below should enable aarch64 hardware crypto support in
security/gnutls.
The regression test results are the same before and after on my
OverDrive 1000 (cpu0: CRC32,SHA2,SHA1,AES+PMULL,ASID16).
(3 failures, 2 of which are due to unportable diff(1) options...)
ok?
Index: Makefile
===================================================================
RCS file: /cvs/ports/security/gnutls/Makefile,v
retrieving revision 1.173
diff -u -p -r1.173 Makefile
--- Makefile 18 Mar 2022 23:22:23 -0000 1.173
+++ Makefile 2 Apr 2022 23:56:35 -0000
@@ -2,6 +2,7 @@ COMMENT= GNU Transport Layer Security l
V= 3.7.4
DISTNAME= gnutls-${V}
+REVISION= 0
EXTRACT_SUFX= .tar.xz
CATEGORIES= security
Index: patches/patch-lib_accelerated_aarch64_aarch64-common_c
===================================================================
RCS file: patches/patch-lib_accelerated_aarch64_aarch64-common_c
diff -N patches/patch-lib_accelerated_aarch64_aarch64-common_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-lib_accelerated_aarch64_aarch64-common_c 2 Apr 2022
23:56:35 -0000
@@ -0,0 +1,42 @@
+Index: lib/accelerated/aarch64/aarch64-common.c
+
+Enable aarch64 hardware crypto support.
+
+--- lib/accelerated/aarch64/aarch64-common.c.orig
++++ lib/accelerated/aarch64/aarch64-common.c
+@@ -41,6 +41,10 @@
+ # ifdef AT_HWCAP
+ # define USE_AUXVAL
+ # endif
++#elif defined(__OpenBSD__)
++# include <sys/sysctl.h>
++# include <machine/cpu.h>
++# include <machine/armreg.h>
+ #endif
+
+ #if defined(__GNUC__)
+@@ -93,6 +97,24 @@ static void discover_caps(unsigned int *caps)
+ if (c & HWCAP_SHA2)
+ *caps |= ARMV8_SHA256;
+ if (c & HWCAP_SHA512)
++ *caps |= ARMV8_SHA512;
++#elif defined(__OpenBSD__)
++ const int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
++ uint64_t isar0;
++ size_t len = sizeof(isar0);
++
++ *caps |= ARMV7_NEON;
++ if (sysctl(isar0_mib, 2, &isar0, &len, NULL, 0) < 0)
++ return;
++ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_BASE)
++ *caps |= ARMV8_AES;
++ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_PMULL)
++ *caps |= ARMV8_PMULL;
++ if (ID_AA64ISAR0_SHA1(isar0) >= ID_AA64ISAR0_SHA1_BASE)
++ *caps |= ARMV8_SHA1;
++ if (ID_AA64ISAR0_SHA2(isar0) >= ID_AA64ISAR0_SHA2_BASE)
++ *caps |= ARMV8_SHA256;
++ if (ID_AA64ISAR0_SHA2(isar0) >= ID_AA64ISAR0_SHA2_512)
+ *caps |= ARMV8_SHA512;
+ #endif
+ }
--
Christian "naddy" Weisgerber [email protected]