mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-24 00:45:52 +00:00
- bsd-user: Handle FreeBSD sysctl hw.pagesizes (by returning only
getpagesize() for now); this fixes rtld on head after r264346 that now uses the sysctl. - Bump PORTREVISION.
This commit is contained in:
parent
f4f46a920e
commit
db7bde8a7e
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=353030
@ -3,7 +3,7 @@
|
||||
|
||||
PORTNAME= qemu
|
||||
PORTVERSION= 2.0.0
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= emulators
|
||||
MASTER_SITES= http://wiki.qemu.org/download/:release \
|
||||
LOCAL/nox:snapshot
|
||||
@ -63,6 +63,7 @@ EXTRA_PATCHES+= ${FILESDIR}/extra-patch-bsd-user-syscall.c
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-sysctl-hw-availpages
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-sysctl-0oldlen
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-bsd-user-mmap.c
|
||||
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-sysctl-hw-pagesizes
|
||||
.endif
|
||||
|
||||
CONFIGURE_ARGS+= --extra-ldflags=-L${LOCALBASE}/lib
|
||||
|
53
emulators/qemu-devel/files/extra-patch-sysctl-hw-pagesizes
Normal file
53
emulators/qemu-devel/files/extra-patch-sysctl-hw-pagesizes
Normal file
@ -0,0 +1,53 @@
|
||||
From nox Mon Sep 17 00:00:00 2001
|
||||
From: Juergen Lock <nox@jelal.kn-bremen.de>
|
||||
Date: 05 May 2014 00:54:00 +0200
|
||||
Subject: Handle bsd-user FreeBSD hw.pagesizes sysctl
|
||||
|
||||
hw.pagesizes is defined as OID_AUTO so the mib can change; find out
|
||||
it's value at the first hw.* sysctl syscall.
|
||||
Handle it by returning only getpagesize() for now.
|
||||
|
||||
Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de>
|
||||
|
||||
--- a/bsd-user/freebsd/os-sys.c
|
||||
+++ b/bsd-user/freebsd/os-sys.c
|
||||
@@ -227,6 +227,7 @@ abi_long do_freebsd_sysctl(CPUArchState
|
||||
default:
|
||||
{
|
||||
static int oid_hw_availpages;
|
||||
+ static int oid_hw_pagesizes;
|
||||
|
||||
if (!oid_hw_availpages) {
|
||||
int real_oid[CTL_MAXNAME+2];
|
||||
@@ -235,6 +236,13 @@ abi_long do_freebsd_sysctl(CPUArchState
|
||||
if (sysctlnametomib("hw.availpages", real_oid, &len) >= 0)
|
||||
oid_hw_availpages = real_oid[1];
|
||||
}
|
||||
+ if (!oid_hw_pagesizes) {
|
||||
+ int real_oid[CTL_MAXNAME+2];
|
||||
+ size_t len = sizeof(real_oid) / sizeof(int);
|
||||
+
|
||||
+ if (sysctlnametomib("hw.pagesizes", real_oid, &len) >= 0)
|
||||
+ oid_hw_pagesizes = real_oid[1];
|
||||
+ }
|
||||
|
||||
if (oid_hw_availpages && snamep[1] == oid_hw_availpages) {
|
||||
long lvalue;
|
||||
@@ -252,6 +260,17 @@ abi_long do_freebsd_sysctl(CPUArchState
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
+
|
||||
+ if (oid_hw_pagesizes && snamep[1] == oid_hw_pagesizes) {
|
||||
+ // XXX some targets do superpages now too... */
|
||||
+ if (oldlen) {
|
||||
+ (*(abi_ulong *)holdp) = tswapal((abi_ulong)getpagesize());
|
||||
+ ((abi_ulong *)holdp)[1] = 0;
|
||||
+ }
|
||||
+ holdlen = sizeof(abi_ulong) * 2;
|
||||
+ ret = 0;
|
||||
+ goto out;
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user