git: 3951881016b7 - main - sysutils/cpuid2cpuflags: make the port build and work on ARM
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 17 May 2022 07:53:43 UTC
The branch main has been updated by danfe:
URL: https://cgit.FreeBSD.org/ports/commit/?id=3951881016b76468ed9e558b26e23ab3d2a4d3db
commit 3951881016b76468ed9e558b26e23ab3d2a4d3db
Author: Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2022-05-17 07:53:14 +0000
Commit: Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2022-05-17 07:53:14 +0000
sysutils/cpuid2cpuflags: make the port build and work on ARM
- Replace getauxval(3), a non-standard glibc extension, with
our native elf_aux_info(3) call
- Return features supported by the specific machine processor
architecture (uname -p) rather than the hardware platform
(uname -m), because the latter is too vague on FreeBSD/arm
PR: 258445
Reported by: pkg-fallout
---
sysutils/cpuid2cpuflags/files/patch-src_hwcap.c | 48 +++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/sysutils/cpuid2cpuflags/files/patch-src_hwcap.c b/sysutils/cpuid2cpuflags/files/patch-src_hwcap.c
new file mode 100644
index 000000000000..89c88e4f92b8
--- /dev/null
+++ b/sysutils/cpuid2cpuflags/files/patch-src_hwcap.c
@@ -0,0 +1,48 @@
+--- src/hwcap.c.orig 2020-07-13 17:14:55 UTC
++++ src/hwcap.c
+@@ -14,13 +14,19 @@
+ #ifdef HAVE_SYS_AUXV_H
+ # include <sys/auxv.h>
+ #endif
++#ifdef __FreeBSD__
++#include <sys/sysctl.h>
++#else
+ #include <sys/utsname.h>
+-
+-#ifndef __linux__
+-# error "Platform not supported (only Linux supported at the moment)"
+ #endif
++
+ #ifndef HAVE_GETAUXVAL
+-# error "Platform not supported (no getauxval())"
++static unsigned long getauxval(int aux)
++{
++ unsigned long auxval = 0;
++ elf_aux_info(aux, &auxval, sizeof(auxval));
++ return auxval;
++}
+ #endif
+
+ #include "hwcap.h"
+@@ -53,9 +59,21 @@ unsigned long get_hwcap2()
+ */
+ char* get_uname_machine()
+ {
++#ifdef __FreeBSD__
++ /**
++ * Contrary to this code expectation, on FreeBSD/arm, `uname -m'
++ * is always `arm', so we return more unique `uname -p' instead.
++ */
++ int mib[] = { CTL_HW, HW_MACHINE_ARCH };
++ static char buf[48];
++ size_t len = sizeof(buf);
++ if (sysctl(mib, 2, &buf, &len, NULL, 0) == 0)
++ return buf;
++#else
+ static struct utsname uname_res;
+ if (uname(&uname_res) != -1)
+ return uname_res.machine;
++#endif
+ else
+ return NULL;
+ }