1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-19 00:13:33 +00:00

emulators/qemu40: Apply upstream fix for cacheline detection on big endian

Backport qemu 5ca156cfde0f3821f15988619e51cf3cda99aaa6, which fixes
cacheline detection on big-endian to use the correct sized variable to
store the sysctl result.

Fixes "Assertion failed: ((isize & (isize - 1)) == 0)" on BE platforms.

Reviewed by:	bofh, pkubaj
Approved by:	pkubaj
Obtained from:	qemu
MFH:		2020Q2 (blanket: runtime fix)
Differential Revision:	https://reviews.freebsd.org/D23246
This commit is contained in:
Brandon Bergren 2020-06-04 17:27:43 +00:00
parent 4689b10a13
commit 7af2c5b975
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=537912
2 changed files with 42 additions and 1 deletions

View File

@ -3,7 +3,7 @@
PORTNAME= qemu
PORTVERSION= 4.0.1
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= emulators
MASTER_SITES= https://download.qemu.org/
PKGNAMESUFFIX= 40

View File

@ -0,0 +1,41 @@
--- util/cacheinfo.c.orig 2019-10-17 15:17:44.000000000 -0500
+++ util/cacheinfo.c 2020-01-17 21:13:29.459470000 -0600
@@ -65,25 +65,28 @@ static void sys_cache_info(int *isize, int *dsize)
g_free(buf);
}
-#elif defined(__APPLE__) \
- || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#elif defined(__APPLE__)
# include <sys/sysctl.h>
-# if defined(__APPLE__)
-# define SYSCTL_CACHELINE_NAME "hw.cachelinesize"
-# else
-# define SYSCTL_CACHELINE_NAME "machdep.cacheline_size"
-# endif
-
static void sys_cache_info(int *isize, int *dsize)
{
/* There's only a single sysctl for both I/D cache line sizes. */
long size;
size_t len = sizeof(size);
- if (!sysctlbyname(SYSCTL_CACHELINE_NAME, &size, &len, NULL, 0)) {
+ if (!sysctlbyname("hw.cachelinesize", &size, &len, NULL, 0)) {
*isize = *dsize = size;
}
}
-
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+# include <sys/sysctl.h>
+static void sys_cache_info(int *isize, int *dsize)
+{
+ /* There's only a single sysctl for both I/D cache line sizes. */
+ int size;
+ size_t len = sizeof(size);
+ if (!sysctlbyname("machdep.cacheline_size", &size, &len, NULL, 0)) {
+ *isize = *dsize = size;
+ }
+}
#else
/* POSIX */