diff options
author | Bernhard Froehlich <decke@FreeBSD.org> | 2013-01-03 13:37:12 +0000 |
---|---|---|
committer | Bernhard Froehlich <decke@FreeBSD.org> | 2013-01-03 13:37:12 +0000 |
commit | c99eac3bb883533949aa4699f3c272c5e7114d13 (patch) | |
tree | d3a0541d3b7981ce5b5583f38da42bca7033df6e /emulators | |
parent | d40af8285da4ef6f5fdc46981077f20729c9b12d (diff) | |
download | freebsd-ports-c99eac3bb883533949aa4699f3c272c5e7114d13.zip |
- Update to 4.1.24
- Fix building with libxslt newer than 1.1.26
Obtained from: https://www.virtualbox.org/ticket/10940
Diffstat (limited to 'emulators')
30 files changed, 1490 insertions, 284 deletions
diff --git a/emulators/virtualbox-ose-kmod-legacy/Makefile b/emulators/virtualbox-ose-kmod-legacy/Makefile index f4d035e86647..e56799e3a8a1 100644 --- a/emulators/virtualbox-ose-kmod-legacy/Makefile +++ b/emulators/virtualbox-ose-kmod-legacy/Makefile @@ -1,12 +1,8 @@ -# New ports collection makefile for: virtualbox-ose-kmod-legacy -# Date created: 2009-09-21 -# Whom: Bernhard Froehlich <decke@bluelife.at> -# +# Created by: Bernhard Froehlich <decke@bluelife.at> # $FreeBSD$ -# PORTNAME= virtualbox-ose -DISTVERSION= 4.0.16 +DISTVERSION= 4.1.24 CATEGORIES= emulators kld MASTER_SITES= http://download.virtualbox.org/virtualbox/${DISTVERSION}/ \ http://tmp.chruetertee.ch/ \ @@ -25,9 +21,10 @@ BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm \ kmk:${PORTSDIR}/devel/kBuild UNIQUENAME= ${PORTNAME}${PKGNAMESUFFIX} -WRKSRC= ${WRKDIR}/VirtualBox-${PORTVERSION}_OSE +WRKSRC= ${WRKDIR}/VirtualBox-${PORTVERSION} USE_RC_SUBR= vboxnet ONLY_FOR_ARCHS= i386 amd64 +FETCH_ARGS= -pRr USE_BZIP2= yes HAS_CONFIGURE= yes @@ -37,7 +34,6 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --nofatal \ --build-headless CONFLICTS= bcc-[0-9]* -CONFLICTS_BUILD= kBuild-devel-[0-9]* CONFLICTS_INSTALL= virtualbox-ose-kmod-[3,4]* virtualbox-ose-kmod-devel-[3,4]* OPTIONS_DEFINE= DEBUG VIMAGE @@ -56,9 +52,15 @@ KMK_BUILDTYPE= release KMK_CONFIG= VBOX_LIBPATH_X11=${LOCALBASE} VBOX_FREEBSD_SRC=${SRC_BASE}/sys KMK_FLAGS= HostDrivers-src vboxdrv-mod VBoxNetFlt-src VBoxNetAdp-src +MAKE_FLAGS= SYSDIR=${SRC_BASE}/sys + .if ${PORT_OPTIONS:MDEBUG} KMK_FLAGS+= BUILD_TYPE=debug KMK_BUILDTYPE= debug +MAKE_FLAGS+= DEBUG_FLAGS="-O1 -g" +PLIST_SUB+= WITH_DEBUG="" +.else +PLIST_SUB+= WITH_DEBUG="@comment " .endif .if ${ARCH} == i386 @@ -73,6 +75,10 @@ IGNORE= requires kernel sources .include <bsd.port.pre.mk> +.if ${OSVERSION} < 802000 +BROKEN= Does not compile on FreeBSD < 8.2 +.endif + .if ${OSVERSION} < 800500 && !empty(PORT_OPTIONS:MVIMAGE) IGNORE= newer kernel is required to build with VIMAGE .endif @@ -96,13 +102,18 @@ pre-build: do-build: cd ${WRKSRC} && ${SH} env.sh && cd ${WRKSRC}/src/VBox/HostDrivers && ${KMK_CONFIG} ${LOCALBASE}/bin/kmk ${KMK_FLAGS} - cd ${VBOX_BIN} && make SYSDIR=${SRC_BASE}/sys + cd ${VBOX_BIN} && make ${MAKE_FLAGS} do-install: ${MKDIR} ${KMODDIR} ${INSTALL_KLD} ${VBOX_BIN}/vboxdrv/vboxdrv.ko ${KMODDIR} ${INSTALL_KLD} ${VBOX_BIN}/vboxnetadp/vboxnetadp.ko ${KMODDIR} ${INSTALL_KLD} ${VBOX_BIN}/vboxnetflt/vboxnetflt.ko ${KMODDIR} +.if ${PORT_OPTIONS:MDEBUG} + ${INSTALL_KLD} ${VBOX_BIN}/vboxdrv/vboxdrv.ko.symbols ${KMODDIR} + ${INSTALL_KLD} ${VBOX_BIN}/vboxnetadp/vboxnetadp.ko.symbols ${KMODDIR} + ${INSTALL_KLD} ${VBOX_BIN}/vboxnetflt/vboxnetflt.ko.symbols ${KMODDIR} +.endif @/usr/sbin/kldxref ${KMODDIR} .include <bsd.port.post.mk> diff --git a/emulators/virtualbox-ose-kmod-legacy/distinfo b/emulators/virtualbox-ose-kmod-legacy/distinfo index c43dcee8c56e..f19872868d76 100644 --- a/emulators/virtualbox-ose-kmod-legacy/distinfo +++ b/emulators/virtualbox-ose-kmod-legacy/distinfo @@ -1,2 +1,2 @@ -SHA256 (VirtualBox-4.0.16.tar.bz2) = d6c165cc41063cb8eb8283606b712904cae180000171fb1f833b7eaada633c77 -SIZE (VirtualBox-4.0.16.tar.bz2) = 70042175 +SHA256 (VirtualBox-4.1.24.tar.bz2) = 74008b8e8942045668c1b7d06b0a4bb5fe8464066e343e3a2e1ba30b94ce8a7f +SIZE (VirtualBox-4.1.24.tar.bz2) = 74612732 diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-Makefile b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-Makefile new file mode 100644 index 000000000000..821c767192e1 --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-Makefile @@ -0,0 +1,16 @@ +This patch adds support for VIMAGE to VBoxNetAdp and thus +also fixes that panic. + +Submitted by: Mikolaj Golub <trociny at freebsd.org> +--- src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile 2012-03-13 15:15:44.000000000 +0200 ++++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/Makefile 2012-04-01 13:27:16.000000000 +0300 +@@ -18,7 +18,7 @@ + + KMOD = vboxnetadp + +-CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING ++CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -Iinclude -I. -Ir0drv -w -DVBOX_WITH_HARDENING -DVIMAGE + + .if (${MACHINE_ARCH} == "i386") + CFLAGS += -DRT_ARCH_X86 +diff -rpu VirtualBox-4.1.10.orig/src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c VirtualBox-4.1.10/src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c new file mode 100644 index 000000000000..aa64625d47af --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c @@ -0,0 +1,54 @@ +This patch adds support for VIMAGE to VBoxNetAdp and thus +also fixes that panic. + +Submitted by: Mikolaj Golub <trociny at freebsd.org> +--- src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c.orig 2012-06-20 15:17:03.000000000 +0200 ++++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c 2012-07-25 18:30:13.695891353 +0200 +@@ -68,6 +68,22 @@ + #define VBOXNETADP_OS_SPECFIC 1 + #include "../VBoxNetAdpInternal.h" + ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 800500 ++# include <sys/jail.h> ++# include <net/vnet.h> ++ ++# define VBOXCURVNET_SET(arg) CURVNET_SET_QUIET(arg) ++# define VBOXCURVNET_SET_FROM_UCRED() VBOXCURVNET_SET(CRED_TO_VNET(curthread->td_ucred)) ++# define VBOXCURVNET_RESTORE() CURVNET_RESTORE() ++ ++#else /* !defined(__FreeBSD_version) || __FreeBSD_version < 800500 */ ++ ++# define VBOXCURVNET_SET(arg) ++# define VBOXCURVNET_SET_FROM_UCRED() ++# define VBOXCURVNET_RESTORE() ++ ++#endif /* !defined(__FreeBSD_version) || __FreeBSD_version < 800500 */ ++ + static int VBoxNetAdpFreeBSDCtrlioctl(struct cdev *, u_long, caddr_t, int flags, + struct thread *); + static struct cdevsw vboxnetadp_cdevsw = +@@ -260,6 +276,7 @@ + { + struct ifnet *ifp; + ++ VBOXCURVNET_SET_FROM_UCRED(); + ifp = if_alloc(IFT_ETHER); + if (ifp == NULL) + return VERR_NO_MEMORY; +@@ -279,6 +296,7 @@ + + strncpy(pThis->szName, ifp->if_xname, VBOXNETADP_MAX_NAME_LEN); + pThis->u.s.ifp = ifp; ++ VBOXCURVNET_RESTORE(); + return 0; + } + +@@ -287,6 +305,8 @@ + struct ifnet *ifp; + + ifp = pThis->u.s.ifp; ++ VBOXCURVNET_SET(ifp->if_vnet); + ether_ifdetach(ifp); + if_free(ifp); ++ VBOXCURVNET_RESTORE(); + } diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c new file mode 100644 index 000000000000..185931e4f504 --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c @@ -0,0 +1,31 @@ +The attached patch fixes a kernel crash on FreeBSD 10-CURRENT hosts +with VIMAGE enabled when a VM is powered off. + +Submitted by: Mikolaj Golub <trociny at freebsd.org> +--- src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2012-03-13 15:15:44.000000000 +0200 ++++ src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2012-04-01 13:43:02.000000000 +0300 +@@ -651,13 +651,13 @@ bool vboxNetFltOsMaybeRediscovered(PVBOX + ng_rmnode_self(pThis->u.s.node); + pThis->u.s.node = NULL; + } ++ VBOXCURVNET_RESTORE(); + + if (ifp0 != NULL) + { + vboxNetFltOsDeleteInstance(pThis); + vboxNetFltOsInitInstance(pThis, NULL); + } +- VBOXCURVNET_RESTORE(); + + return !ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost); + } +@@ -671,8 +671,10 @@ void vboxNetFltOsDeleteInstance(PVBOXNET + mtx_destroy(&pThis->u.s.inq.ifq_mtx); + mtx_destroy(&pThis->u.s.outq.ifq_mtx); + ++ VBOXCURVNET_SET_FROM_UCRED(); + if (pThis->u.s.node != NULL) + ng_rmnode_self(pThis->u.s.node); ++ VBOXCURVNET_RESTORE(); + pThis->u.s.node = NULL; + } diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c index 91bacd4eef20..92017090571b 100644 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c @@ -1,64 +1,893 @@ -Remove explicit initialization of m->flags and m->oflags because per -default vm_phys_alloc_contig() already initializes the page as unmanaged. -Chase move of PG_UNMANAGED flag from m->flags to m->oflags and renaming -to VPO_UNMANAGED for an additional assert. - -Reviewed by: kib -See: http://svnweb.freebsd.org/base?view=revision&revision=224746 ---- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2011-11-04 07:19:54.000000000 -0400 -+++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2011-11-29 18:13:32.000000000 -0500 -@@ -391,12 +391,18 @@ - - static void rtR0MemObjFreeBSDPhysPageInit(vm_page_t pPage, vm_pindex_t iPage) - { -+#if __FreeBSD_version <= 1000000 - pPage->wire_count = 1; - pPage->pindex = iPage; - pPage->act_count = 0; -- pPage->oflags = 0; -- pPage->flags = PG_UNMANAGED; - atomic_add_int(&cnt.v_wire_count, 1); +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2012-12-19 20:51:59.000000000 +0100 ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2012-12-20 11:57:20.999850739 +0100 +@@ -5,6 +5,7 @@ + + /* + * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net> ++ * Copyright (c) 2011 Andriy Gapon <avg@FreeBSD.org> + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation +@@ -54,23 +55,8 @@ + /** The core structure. */ + RTR0MEMOBJINTERNAL Core; + /** Type dependent data */ +- union +- { +- /** Non physical memory allocations */ +- struct +- { +- /** The VM object associated with the allocation. */ +- vm_object_t pObject; +- } NonPhys; +- /** Physical memory allocations */ +- struct +- { +- /** Number of pages */ +- uint32_t cPages; +- /** Array of pages - variable */ +- vm_page_t apPages[1]; +- } Phys; +- } u; ++ /** The VM object associated with the allocation. */ ++ vm_object_t pObject; + } RTR0MEMOBJFREEBSD, *PRTR0MEMOBJFREEBSD; + + +@@ -125,25 +111,14 @@ + + switch (pMemFreeBSD->Core.enmType) + { +- case RTR0MEMOBJTYPE_CONT: +- contigfree(pMemFreeBSD->Core.pv, pMemFreeBSD->Core.cb, M_IPRTMOBJ); +- break; +- + case RTR0MEMOBJTYPE_PAGE: ++ case RTR0MEMOBJTYPE_LOW: ++ case RTR0MEMOBJTYPE_CONT: + { + rc = vm_map_remove(kernel_map, + (vm_offset_t)pMemFreeBSD->Core.pv, + (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); + AssertMsg(rc == KERN_SUCCESS, ("%#x", rc)); +- +- vm_page_lock_queues(); +- for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) +- { +- vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; +- vm_page_unwire(pPage, 0); +- vm_page_free(pPage); +- } +- vm_page_unlock_queues(); + break; + } + +@@ -165,8 +140,8 @@ + case RTR0MEMOBJTYPE_RES_VIRT: + { + vm_map_t pMap = kernel_map; +- if (pMemFreeBSD->Core.u.Lock.R0Process != NIL_RTR0PROCESS) +- pMap = &((struct proc *)pMemFreeBSD->Core.u.Lock.R0Process)->p_vmspace->vm_map; ++ if (pMemFreeBSD->Core.u.ResVirt.R0Process != NIL_RTR0PROCESS) ++ pMap = &((struct proc *)pMemFreeBSD->Core.u.ResVirt.R0Process)->p_vmspace->vm_map; + rc = vm_map_remove(pMap, + (vm_offset_t)pMemFreeBSD->Core.pv, + (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); +@@ -180,7 +155,6 @@ + + if (pMemFreeBSD->Core.u.Mapping.R0Process != NIL_RTR0PROCESS) + pMap = &((struct proc *)pMemFreeBSD->Core.u.Mapping.R0Process)->p_vmspace->vm_map; +- + rc = vm_map_remove(pMap, + (vm_offset_t)pMemFreeBSD->Core.pv, + (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); +@@ -191,26 +165,24 @@ + case RTR0MEMOBJTYPE_PHYS: + case RTR0MEMOBJTYPE_PHYS_NC: + { ++ VM_OBJECT_LOCK(pMemFreeBSD->pObject); ++ vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); ++#if __FreeBSD_version < 900000 ++ /* See http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html */ + vm_page_lock_queues(); +- for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) ++#endif ++ for (vm_page_t pPage = vm_page_find_least(pMemFreeBSD->pObject, 0); ++ pPage != NULL; ++ pPage = vm_page_next(pPage)) + { +- vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; + vm_page_unwire(pPage, 0); +- vm_page_free(pPage); + } + vm_page_unlock_queues(); ++ VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); ++ vm_object_deallocate(pMemFreeBSD->pObject); + break; + } + +-#ifdef USE_KMEM_ALLOC_ATTR +- case RTR0MEMOBJTYPE_LOW: +- { +- kmem_free(kernel_map, (vm_offset_t)pMemFreeBSD->Core.pv, pMemFreeBSD->Core.cb); +- break; +- } +-#else +- case RTR0MEMOBJTYPE_LOW: /* unused */ +-#endif + default: + AssertMsgFailed(("enmType=%d\n", pMemFreeBSD->Core.enmType)); + return VERR_INTERNAL_ERROR; +@@ -220,183 +192,185 @@ + } + + +-DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) +-{ +- int rc; +- size_t cPages = cb >> PAGE_SHIFT; +- +- /* create the object. */ +- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJFREEBSD, u.Phys.apPages[cPages]), +- RTR0MEMOBJTYPE_PAGE, NULL, cb); +- if (!pMemFreeBSD) +- return VERR_NO_MEMORY; +- +- pMemFreeBSD->u.Phys.cPages = cPages; ++static vm_page_t FreeBSDContigPhysAllocHelper(vm_object_t pObject, vm_pindex_t iPIndex, ++ u_long cPages, vm_paddr_t VmPhysAddrHigh, ++ u_long uAlignment, bool fWire) ++{ ++ vm_page_t pPages; ++ int tries = 0; ++#if __FreeBSD_version > 1000000 ++ int flags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY; + -+#if __FreeBSD_version >= 900040 -+ Assert(pPage->oflags & VPO_UNMANAGED != 0); ++ if (fWire) ++ flags |= VM_ALLOC_WIRED; ++ while (1) ++ { ++ VM_OBJECT_LOCK(pObject); ++ pPages = vm_page_alloc_contig(pObject, iPIndex, flags, cPages, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); ++ VM_OBJECT_UNLOCK(pObject); ++ if (pPages || tries >= 1) ++ break; ++ vm_pageout_grow_cache(tries, 0, VmPhysAddrHigh); ++ tries++; ++ } ++ return pPages; +#else -+ Assert(pPage->flags & PG_UNMANAGED != 0); + +- vm_offset_t MapAddress = vm_map_min(kernel_map); +- rc = vm_map_find(kernel_map, /* map */ +- NULL, /* object */ +- 0, /* offset */ +- &MapAddress, /* addr (IN/OUT) */ +- cb, /* length */ +- TRUE, /* find_space */ +- fExecutable /* protection */ +- ? VM_PROT_ALL +- : VM_PROT_RW, +- VM_PROT_ALL, /* max(_prot) */ +- 0); /* cow (copy-on-write) */ +- if (rc == KERN_SUCCESS) ++ while (1) + { +- rc = VINF_SUCCESS; +- +- for (size_t iPage = 0; iPage < cPages; iPage++) ++ pPages = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); ++ if (pPages || tries >= 1) ++ break; ++ vm_contig_grow_cache(tries, 0, VmPhysAddrHigh); ++ tries++; ++ } ++ if (!pPages) ++ return pPages; ++ VM_OBJECT_LOCK(pObject); ++ for (vm_pindex_t iPage = 0; iPage < cPages; iPage++) ++ { ++ vm_page_t pPage = pPages + iPage; ++ vm_page_insert(pPage, pObject, iPIndex + iPage); ++ pPage->valid = VM_PAGE_BITS_ALL; ++ if (fWire) + { +- vm_page_t pPage; ++ pPage->wire_count = 1; ++ atomic_add_int(&cnt.v_wire_count, 1); ++ } ++ } ++ VM_OBJECT_UNLOCK(pObject); ++ return pPages; +#endif ++} + +- pPage = vm_page_alloc(NULL, iPage, +- VM_ALLOC_SYSTEM | +- VM_ALLOC_WIRED | VM_ALLOC_NOOBJ); ++static int FreeBSDPhysAllocHelper(vm_object_t pObject, u_long cPages, ++ vm_paddr_t VmPhysAddrHigh, u_long uAlignment, ++ bool fContiguous, bool fWire) ++{ ++ if (fContiguous) ++ { ++ if (FreeBSDContigPhysAllocHelper(pObject, 0, cPages, VmPhysAddrHigh, uAlignment, fWire) != NULL) ++ return VINF_SUCCESS; ++ else ++ return VERR_NO_MEMORY; ++ } + +- if (!pPage) ++ for (vm_pindex_t iPage = 0; iPage < cPages; iPage++) ++ { ++ vm_page_t pPage = FreeBSDContigPhysAllocHelper(pObject, iPage, 1, VmPhysAddrHigh, uAlignment, fWire); ++ if (!pPage) ++ { ++ /* Free all allocated pages */ ++ VM_OBJECT_LOCK(pObject); ++ while (iPage-- > 0) + { +- /* +- * Out of pages +- * Remove already allocated pages +- */ +- while (iPage-- > 0) +- { +- pPage = pMemFreeBSD->u.Phys.apPages[iPage]; +- vm_page_lock_queues(); ++ pPage = vm_page_lookup(pObject, iPage); ++#if __FreeBSD_version < 900000 ++ vm_page_lock_queues(); +#endif ++ if (fWire) + vm_page_unwire(pPage, 0); +- vm_page_free(pPage); +- vm_page_unlock_queues(); +- } +- rc = VERR_NO_MEMORY; +- break; ++ vm_page_free(pPage); ++ vm_page_unlock_queues(); + } +- +- pPage->valid = VM_PAGE_BITS_ALL; +- pMemFreeBSD->u.Phys.apPages[iPage] = pPage; ++ VM_OBJECT_UNLOCK(pObject); ++ return VERR_NO_MEMORY; + } ++ } ++ return VINF_SUCCESS; ++} + +- if (rc == VINF_SUCCESS) +- { +- vm_offset_t AddressDst = MapAddress; ++static int FreeBSDAllocHelper(PRTR0MEMOBJFREEBSD pMemFreeBSD, bool fExecutable, ++ vm_paddr_t VmPhysAddrHigh, bool fContiguous) ++{ ++ int rc; ++ size_t cPages = atop(pMemFreeBSD->Core.cb); + +- for (size_t iPage = 0; iPage < cPages; iPage++) +- { +- vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; ++ pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, cPages); ++ vm_offset_t MapAddress = vm_map_min(kernel_map); + +- MY_PMAP_ENTER(kernel_map->pmap, AddressDst, pPage, +- fExecutable +- ? VM_PROT_ALL +- : VM_PROT_RW, +- TRUE); ++ // no additional object reference for auto-deallocation upon unmapping ++ rc = vm_map_find(kernel_map, pMemFreeBSD->pObject, 0, ++ &MapAddress, pMemFreeBSD->Core.cb, VMFS_ANY_SPACE, ++ fExecutable ? VM_PROT_ALL : VM_PROT_RW, VM_PROT_ALL, 0); + +- AddressDst += PAGE_SIZE; +- } ++ if (rc == KERN_SUCCESS) ++ { ++ rc = FreeBSDPhysAllocHelper(pMemFreeBSD->pObject, cPages, VmPhysAddrHigh, PAGE_SIZE, fContiguous, false); ++ if (RT_SUCCESS(rc)) ++ { ++ vm_map_wire(kernel_map, MapAddress, MapAddress + pMemFreeBSD->Core.cb, VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES); + + /* Store start address */ + pMemFreeBSD->Core.pv = (void *)MapAddress; +- *ppMem = &pMemFreeBSD->Core; + return VINF_SUCCESS; + } +- } +- rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ + +- rtR0MemObjDelete(&pMemFreeBSD->Core); ++ vm_map_remove(kernel_map, MapAddress, MapAddress + pMemFreeBSD->Core.cb); ++ } ++ else ++ { ++ rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ ++ vm_object_deallocate(pMemFreeBSD->pObject); ++ } + return rc; + } + +- +-DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) ++DECLHIDDEN(int) rtR0MemObjNativeAllocPage(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) + { +-#ifdef USE_KMEM_ALLOC_ATTR +- /* +- * Use kmem_alloc_attr, fExectuable is not needed because the +- * memory will be executable by default +- */ +- NOREF(fExecutable); +- +- /* create the object. */ +- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_LOW, NULL, cb); ++ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), ++ RTR0MEMOBJTYPE_PAGE, NULL, cb); + if (!pMemFreeBSD) + return VERR_NO_MEMORY; + +- pMemFreeBSD->Core.pv = (void *)kmem_alloc_attr(kernel_map, /* Kernel */ +- cb, /* Amount */ +- M_ZERO, /* Zero memory */ +- 0, /* Low physical address */ +- _4G - PAGE_SIZE, /* Highest physical address */ +- VM_MEMATTR_DEFAULT); /* Default memory attributes */ +- if (!pMemFreeBSD->Core.pv) +- return VERR_NO_MEMORY; +- +- *ppMem = &pMemFreeBSD->Core; +- +- return VINF_SUCCESS; +-#else +- /* +- * Try a Alloc first and see if we get luck, if not try contigmalloc. +- * Might wish to try find our own pages or something later if this +- * turns into a problemspot on AMD64 boxes. +- */ +- int rc = rtR0MemObjNativeAllocPage(ppMem, cb, fExecutable); +- if (RT_SUCCESS(rc)) ++ int rc = FreeBSDAllocHelper(pMemFreeBSD, fExecutable, ~(vm_paddr_t)0, false); ++ if (RT_FAILURE(rc)) + { +- size_t iPage = cb >> PAGE_SHIFT; +- while (iPage-- > 0) +- if (rtR0MemObjNativeGetPagePhysAddr(*ppMem, iPage) > (_4G - PAGE_SIZE)) +- { +- RTR0MemObjFree(*ppMem, false); +- *ppMem = NULL; +- rc = VERR_NO_MEMORY; +- break; +- } ++ rtR0MemObjDelete(&pMemFreeBSD->Core); ++ return rc; + } +- if (RT_FAILURE(rc)) +- rc = rtR0MemObjNativeAllocCont(ppMem, cb, fExecutable); ++ ++ *ppMem = &pMemFreeBSD->Core; + return rc; +-#endif } -@@ -408,6 +414,9 @@ - int rc = VINF_SUCCESS; - uint32_t cPages = cb >> PAGE_SHIFT; +-DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) ++DECLHIDDEN(int) rtR0MemObjNativeAllocLow(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) + { +- /* create the object. */ +- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_CONT, NULL, cb); ++ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), ++ RTR0MEMOBJTYPE_LOW, NULL, cb); + if (!pMemFreeBSD) + return VERR_NO_MEMORY; + +- /* do the allocation. */ +- pMemFreeBSD->Core.pv = contigmalloc(cb, /* size */ +- M_IPRTMOBJ, /* type */ +- M_NOWAIT | M_ZERO, /* flags */ +- 0, /* lowest physical address*/ +- _4G-1, /* highest physical address */ +- PAGE_SIZE, /* alignment. */ +- 0); /* boundary */ +- if (pMemFreeBSD->Core.pv) ++ int rc = FreeBSDAllocHelper(pMemFreeBSD, fExecutable, _4G - 1, false); ++ if (RT_FAILURE(rc)) + { +- pMemFreeBSD->Core.u.Cont.Phys = vtophys(pMemFreeBSD->Core.pv); +- *ppMem = &pMemFreeBSD->Core; +- return VINF_SUCCESS; ++ rtR0MemObjDelete(&pMemFreeBSD->Core); ++ return rc; + } + +- NOREF(fExecutable); +- rtR0MemObjDelete(&pMemFreeBSD->Core); +- return VERR_NO_MEMORY; ++ *ppMem = &pMemFreeBSD->Core; ++ return rc; + } + + +-static void rtR0MemObjFreeBSDPhysPageInit(vm_page_t pPage, vm_pindex_t iPage) ++DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable) + { +- pPage->wire_count = 1; +- pPage->pindex = iPage; +- pPage->act_count = 0; +- pPage->oflags = 0; +- pPage->flags = PG_UNMANAGED; +- atomic_add_int(&cnt.v_wire_count, 1); ++ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), ++ RTR0MEMOBJTYPE_CONT, NULL, cb); ++ if (!pMemFreeBSD) ++ return VERR_NO_MEMORY; ++ ++ int rc = FreeBSDAllocHelper(pMemFreeBSD, fExecutable, _4G - 1, true); ++ if (RT_FAILURE(rc)) ++ { ++ rtR0MemObjDelete(&pMemFreeBSD->Core); ++ return rc; ++ } ++ ++ pMemFreeBSD->Core.u.Cont.Phys = vtophys(pMemFreeBSD->Core.pv); ++ *ppMem = &pMemFreeBSD->Core; ++ return rc; + } + + +@@ -405,69 +379,36 @@ + RTHCPHYS PhysHighest, size_t uAlignment, + bool fContiguous) + { +- int rc = VINF_SUCCESS; +- uint32_t cPages = cb >> PAGE_SHIFT; ++ uint32_t cPages = atop(cb); vm_paddr_t VmPhysAddrHigh; -+#if __FreeBSD_version >= 1000001 -+ int pFlags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED; -+#endif /* create the object. */ - PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJFREEBSD, u.Phys.apPages[cPages]), -@@ -424,7 +433,11 @@ +- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(RT_OFFSETOF(RTR0MEMOBJFREEBSD, u.Phys.apPages[cPages]), ++ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), + enmType, NULL, cb); + if (!pMemFreeBSD) + return VERR_NO_MEMORY; + +- pMemFreeBSD->u.Phys.cPages = cPages; ++ pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, atop(cb)); - if (fContiguous) + if (PhysHighest != NIL_RTHCPHYS) + VmPhysAddrHigh = PhysHighest; + else + VmPhysAddrHigh = ~(vm_paddr_t)0; + +- if (fContiguous) +- { +- vm_page_t pPage = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); +- +- if (pPage) +- for (uint32_t iPage = 0; iPage < cPages; iPage++) +- { +- rtR0MemObjFreeBSDPhysPageInit(&pPage[iPage], iPage); +- pMemFreeBSD->u.Phys.apPages[iPage] = &pPage[iPage]; +- } +- else +- rc = VERR_NO_MEMORY; +- } +- else +- { +- /* Allocate page by page */ +- for (uint32_t iPage = 0; iPage < cPages; iPage++) +- { +- vm_page_t pPage = vm_phys_alloc_contig(1, 0, VmPhysAddrHigh, uAlignment, 0); +- +- if (!pPage) +- { +- /* Free all allocated pages */ +- while (iPage-- > 0) +- { +- pPage = pMemFreeBSD->u.Phys.apPages[iPage]; +- vm_page_lock_queues(); +- vm_page_unwire(pPage, 0); +- vm_page_free(pPage); +- vm_page_unlock_queues(); +- } +- rc = VERR_NO_MEMORY; +- break; +- } +- rtR0MemObjFreeBSDPhysPageInit(pPage, iPage); +- pMemFreeBSD->u.Phys.apPages[iPage] = pPage; +- } +- } ++ int rc = FreeBSDPhysAllocHelper(pMemFreeBSD->pObject, cPages, VmPhysAddrHigh, uAlignment, fContiguous, true); + +- if (RT_FAILURE(rc)) ++ if (RT_FAILURE(rc)) { ++ vm_object_deallocate(pMemFreeBSD->pObject); + rtR0MemObjDelete(&pMemFreeBSD->Core); ++ } + else { -+#if __FreeBSD_version >= 1000001 -+ vm_page_t pPage = vm_page_alloc_contig(NULL, 0, pFlags, cPages, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); -+#else - vm_page_t pPage = vm_phys_alloc_contig(cPages, 0, VmPhysAddrHigh, uAlignment, 0); -+#endif +- if (enmType == RTR0MEMOBJTYPE_PHYS) ++ if (fContiguous) + { +- pMemFreeBSD->Core.u.Phys.PhysBase = VM_PAGE_TO_PHYS(pMemFreeBSD->u.Phys.apPages[0]); ++ Assert(enmType == RTR0MEMOBJTYPE_PHYS); ++ VM_OBJECT_LOCK(pMemFreeBSD->pObject); ++ pMemFreeBSD->Core.u.Phys.PhysBase = VM_PAGE_TO_PHYS(vm_page_find_least(pMemFreeBSD->pObject, 0)); ++ VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); + pMemFreeBSD->Core.u.Phys.fAllocated = true; + } + +@@ -480,42 +421,13 @@ + + DECLHIDDEN(int) rtR0MemObjNativeAllocPhys(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, size_t uAlignment) + { +-#if 1 + return rtR0MemObjFreeBSDAllocPhysPages(ppMem, RTR0MEMOBJTYPE_PHYS, cb, PhysHighest, uAlignment, true); +-#else +- /* create the object. */ +- PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_CONT, NULL, cb); +- if (!pMemFreeBSD) +- return VERR_NO_MEMORY; +- +- /* do the allocation. */ +- pMemFreeBSD->Core.pv = contigmalloc(cb, /* size */ +- M_IPRTMOBJ, /* type */ +- M_NOWAIT | M_ZERO, /* flags */ +- 0, /* lowest physical address*/ +- _4G-1, /* highest physical address */ +- uAlignment, /* alignment. */ +- 0); /* boundary */ +- if (pMemFreeBSD->Core.pv) +- { +- pMemFreeBSD->Core.u.Cont.Phys = vtophys(pMemFreeBSD->Core.pv); +- *ppMem = &pMemFreeBSD->Core; +- return VINF_SUCCESS; +- } +- +- rtR0MemObjDelete(&pMemFreeBSD->Core); +- return VERR_NO_MEMORY; +-#endif + } + + + DECLHIDDEN(int) rtR0MemObjNativeAllocPhysNC(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest) + { +-#if 1 + return rtR0MemObjFreeBSDAllocPhysPages(ppMem, RTR0MEMOBJTYPE_PHYS_NC, cb, PhysHighest, PAGE_SIZE, false); +-#else +- return VERR_NOT_SUPPORTED; +-#endif + } + - if (pPage) - for (uint32_t iPage = 0; iPage < cPages; iPage++) -@@ -440,7 +453,11 @@ - /* Allocate page by page */ - for (uint32_t iPage = 0; iPage < cPages; iPage++) +@@ -625,49 +537,41 @@ + if (!pMemFreeBSD) + return VERR_NO_MEMORY; + +- /* +- * Allocate an empty VM object and map it into the requested map. +- */ +- pMemFreeBSD->u.NonPhys.pObject = vm_object_allocate(OBJT_DEFAULT, cb >> PAGE_SHIFT); +- if (pMemFreeBSD->u.NonPhys.pObject) ++ vm_offset_t MapAddress = pvFixed != (void *)-1 ++ ? (vm_offset_t)pvFixed ++ : vm_map_min(pMap); ++ if (pvFixed != (void *)-1) ++ vm_map_remove(pMap, ++ MapAddress, ++ MapAddress + cb); ++ ++ rc = vm_map_find(pMap, /* map */ ++ NULL, /* object */ ++ 0, /* offset */ ++ &MapAddress, /* addr (IN/OUT) */ ++ cb, /* length */ ++ pvFixed == (void *)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, ++ /* find_space */ ++ VM_PROT_NONE, /* protection */ ++ VM_PROT_ALL, /* max(_prot) ?? */ ++ 0); /* cow (copy-on-write) */ ++ if (rc == KERN_SUCCESS) + { +- vm_offset_t MapAddress = pvFixed != (void *)-1 +- ? (vm_offset_t)pvFixed +- : vm_map_min(pMap); +- if (pvFixed != (void *)-1) +- vm_map_remove(pMap, +- MapAddress, +- MapAddress + cb); +- +- rc = vm_map_find(pMap, /* map */ +- pMemFreeBSD->u.NonPhys.pObject, /* object */ +- 0, /* offset */ +- &MapAddress, /* addr (IN/OUT) */ +- cb, /* length */ +- pvFixed == (void *)-1, /* find_space */ +- VM_PROT_NONE, /* protection */ +- VM_PROT_ALL, /* max(_prot) ?? */ +- 0); /* cow (copy-on-write) */ +- if (rc == KERN_SUCCESS) ++ if (R0Process != NIL_RTR0PROCESS) { -+#if __FreeBSD_version >= 1000001 -+ vm_page_t pPage = vm_page_alloc_contig(NULL, iPage, pFlags, 1, 0, VmPhysAddrHigh, uAlignment, 0, VM_MEMATTR_DEFAULT); -+#else - vm_page_t pPage = vm_phys_alloc_contig(1, 0, VmPhysAddrHigh, uAlignment, 0); -+#endif +- if (R0Process != NIL_RTR0PROCESS) +- { +- rc = vm_map_inherit(pMap, +- MapAddress, +- MapAddress + cb, +- VM_INHERIT_SHARE); +- AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); +- } +- pMemFreeBSD->Core.pv = (void *)MapAddress; +- pMemFreeBSD->Core.u.ResVirt.R0Process = R0Process; +- *ppMem = &pMemFreeBSD->Core; +- return VINF_SUCCESS; ++ rc = vm_map_inherit(pMap, ++ MapAddress, ++ MapAddress + cb, ++ VM_INHERIT_SHARE); ++ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); + } +- vm_object_deallocate(pMemFreeBSD->u.NonPhys.pObject); +- rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ ++ pMemFreeBSD->Core.pv = (void *)MapAddress; ++ pMemFreeBSD->Core.u.ResVirt.R0Process = R0Process; ++ *ppMem = &pMemFreeBSD->Core; ++ return VINF_SUCCESS; + } +- else +- rc = VERR_NO_MEMORY; ++ ++ rc = VERR_NO_MEMORY; /** @todo fix translation (borrow from darwin) */ + rtR0MemObjDelete(&pMemFreeBSD->Core); + return rc; + +@@ -690,7 +594,7 @@ + DECLHIDDEN(int) rtR0MemObjNativeMapKernel(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, void *pvFixed, size_t uAlignment, + unsigned fProt, size_t offSub, size_t cbSub) + { +- AssertMsgReturn(!offSub && !cbSub, ("%#x %#x\n", offSub, cbSub), VERR_NOT_SUPPORTED); ++// AssertMsgReturn(!offSub && !cbSub, ("%#x %#x\n", offSub, cbSub), VERR_NOT_SUPPORTED); + AssertMsgReturn(pvFixed == (void *)-1, ("%p\n", pvFixed), VERR_NOT_SUPPORTED); + + /* +@@ -699,21 +603,68 @@ + if (uAlignment > PAGE_SIZE) + return VERR_NOT_SUPPORTED; - if (!pPage) +-/* Phys: see pmap_mapdev in i386/i386/pmap.c (http://fxr.watson.org/fxr/source/i386/i386/pmap.c?v=RELENG62#L2860) */ +-/** @todo finish the implementation. */ ++ int rc; ++ PRTR0MEMOBJFREEBSD pMemToMapFreeBSD = (PRTR0MEMOBJFREEBSD)pMemToMap; + +- return VERR_NOT_SUPPORTED; ++ /* calc protection */ ++ vm_prot_t ProtectionFlags = 0; ++ if ((fProt & RTMEM_PROT_NONE) == RTMEM_PROT_NONE) ++ ProtectionFlags = VM_PROT_NONE; ++ if ((fProt & RTMEM_PROT_READ) == RTMEM_PROT_READ) ++ ProtectionFlags |= VM_PROT_READ; ++ if ((fProt & RTMEM_PROT_WRITE) == RTMEM_PROT_WRITE) ++ ProtectionFlags |= VM_PROT_WRITE; ++ if ((fProt & RTMEM_PROT_EXEC) == RTMEM_PROT_EXEC) ++ ProtectionFlags |= VM_PROT_EXECUTE; ++ ++ vm_offset_t Addr = vm_map_min(kernel_map); ++ if (cbSub == 0) ++ cbSub = pMemToMap->cb - offSub; ++ ++ vm_object_reference(pMemToMapFreeBSD->pObject); ++ rc = vm_map_find(kernel_map, /* Map to insert the object in */ ++ pMemToMapFreeBSD->pObject, /* Object to map */ ++ offSub, /* Start offset in the object */ ++ &Addr, /* Start address IN/OUT */ ++ cbSub, /* Size of the mapping */ ++ VMFS_ANY_SPACE, /* Whether a suitable address should be searched for first */ ++ ProtectionFlags, /* protection flags */ ++ VM_PROT_ALL, /* Maximum protection flags */ ++ 0); /* copy-on-write and similar flags */ ++ ++ if (rc == KERN_SUCCESS) ++ { ++ rc = vm_map_wire(kernel_map, Addr, Addr + cbSub, VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES); ++ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); ++ ++ PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(RTR0MEMOBJFREEBSD), ++ RTR0MEMOBJTYPE_MAPPING, ++ (void *)Addr, ++ cbSub); ++ if (pMemFreeBSD) ++ { ++ Assert((vm_offset_t)pMemFreeBSD->Core.pv == Addr); ++ pMemFreeBSD->Core.u.Mapping.R0Process = NIL_RTR0PROCESS; ++ *ppMem = &pMemFreeBSD->Core; ++ return VINF_SUCCESS; ++ } ++ rc = vm_map_remove(kernel_map, Addr, Addr + cbSub); ++ AssertMsg(rc == KERN_SUCCESS, ("Deleting mapping failed\n")); ++ } ++ else ++ vm_object_deallocate(pMemToMapFreeBSD->pObject); ++ ++ return VERR_NO_MEMORY; + } + + +-/* see http://markmail.org/message/udhq33tefgtyfozs */ +-DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, RTR3PTR R3PtrFixed, size_t uAlignment, unsigned fProt, RTR0PROCESS R0Process) ++DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ pMemToMap, RTR3PTR R3PtrFixed, size_t uAlignment, ++ unsigned fProt, RTR0PROCESS R0Process) + { + /* + * Check for unsupported stuff. + */ + AssertMsgReturn(R0Process == RTR0ProcHandleSelf(), ("%p != %p\n", R0Process, RTR0ProcHandleSelf()), VERR_NOT_SUPPORTED); +- AssertMsgReturn(R3PtrFixed == (RTR3PTR)-1, ("%p\n", R3PtrFixed), VERR_NOT_SUPPORTED); + if (uAlignment > PAGE_SIZE) + return VERR_NOT_SUPPORTED; + +@@ -734,62 +685,38 @@ + ProtectionFlags |= VM_PROT_EXECUTE; + + /* calc mapping address */ +- PROC_LOCK(pProc); +- vm_offset_t AddrR3 = round_page((vm_offset_t)pProc->p_vmspace->vm_daddr + lim_max(pProc, RLIMIT_DATA)); +- PROC_UNLOCK(pProc); ++ vm_offset_t AddrR3; ++ if (R3PtrFixed == (RTR3PTR)-1) ++ { ++ // is this needed? ++ PROC_LOCK(pProc); ++ AddrR3 = round_page((vm_offset_t)pProc->p_vmspace->vm_daddr + lim_max(pProc, RLIMIT_DATA)); ++ PROC_UNLOCK(pProc); ++ } ++ else ++ AddrR3 = (vm_offset_t)R3PtrFixed; + +- /* Insert the object in the map. */ ++ /* Insert the pObject in the map. */ ++ vm_object_reference(pMemToMapFreeBSD->pObject); + rc = vm_map_find(pProcMap, /* Map to insert the object in */ +- NULL, /* Object to map */ ++ pMemToMapFreeBSD->pObject, /* Object to map */ + 0, /* Start offset in the object */ + &AddrR3, /* Start address IN/OUT */ + pMemToMap->cb, /* Size of the mapping */ +- TRUE, /* Whether a suitable address should be searched for first */ ++ R3PtrFixed == (RTR3PTR)-1 ? VMFS_ANY_SPACE : VMFS_NO_SPACE, ++ /* Whether a suitable address should be searched for first */ + ProtectionFlags, /* protection flags */ + VM_PROT_ALL, /* Maximum protection flags */ +- 0); /* Copy on write */ ++ 0); /* copy-on-write and similar flags */ + +- /* Map the memory page by page into the destination map. */ + if (rc == KERN_SUCCESS) + { +- size_t cPages = pMemToMap->cb >> PAGE_SHIFT;; +- pmap_t pPhysicalMap = pProcMap->pmap; +- vm_offset_t AddrR3Dst = AddrR3; +- +- if ( pMemToMap->enmType == RTR0MEMOBJTYPE_PHYS +- || pMemToMap->enmType == RTR0MEMOBJTYPE_PHYS_NC +- || pMemToMap->enmType == RTR0MEMOBJTYPE_PAGE) +- { +- /* Mapping physical allocations */ +- Assert(cPages == pMemToMapFreeBSD->u.Phys.cPages); ++ rc = vm_map_wire(pProcMap, AddrR3, AddrR3 + pMemToMap->cb, VM_MAP_WIRE_USER|VM_MAP_WIRE_NOHOLES); ++ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); + +- /* Insert the memory page by page into the mapping. */ +- for (uint32_t iPage = 0; iPage < cPages; iPage++) +- { +- vm_page_t pPage = pMemToMapFreeBSD->u.Phys.apPages[iPage]; ++ rc = vm_map_inherit(pProcMap, AddrR3, AddrR3 + pMemToMap->cb, VM_INHERIT_SHARE); ++ AssertMsg(rc == KERN_SUCCESS, ("%#x\n", rc)); + +- MY_PMAP_ENTER(pPhysicalMap, AddrR3Dst, pPage, ProtectionFlags, TRUE); +- AddrR3Dst += PAGE_SIZE; +- } +- } +- else +- { +- /* Mapping cont or low memory types */ +- vm_offset_t AddrToMap = (vm_offset_t)pMemToMap->pv; +- +- for (uint32_t iPage = 0; iPage < cPages; iPage++) +- { +- vm_page_t pPage = PHYS_TO_VM_PAGE(vtophys(AddrToMap)); +- +- MY_PMAP_ENTER(pPhysicalMap, AddrR3Dst, pPage, ProtectionFlags, TRUE); +- AddrR3Dst += PAGE_SIZE; +- AddrToMap += PAGE_SIZE; +- } +- } +- } +- +- if (RT_SUCCESS(rc)) +- { + /* + * Create a mapping object for it. + */ +@@ -805,9 +732,11 @@ + return VINF_SUCCESS; + } + +- rc = vm_map_remove(pProcMap, ((vm_offset_t)AddrR3), ((vm_offset_t)AddrR3) + pMemToMap->cb); ++ rc = vm_map_remove(pProcMap, AddrR3, AddrR3 + pMemToMap->cb); + AssertMsg(rc == KERN_SUCCESS, ("Deleting mapping failed\n")); + } ++ else ++ vm_object_deallocate(pMemToMapFreeBSD->pObject); + + return VERR_NO_MEMORY; + } +@@ -855,49 +784,47 @@ + return NIL_RTHCPHYS; + } + +- vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + (iPage << PAGE_SHIFT); ++ vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + ptoa(iPage); + + struct proc *pProc = (struct proc *)pMemFreeBSD->Core.u.Lock.R0Process; + struct vm_map *pProcMap = &pProc->p_vmspace->vm_map; +- pmap_t pPhysicalMap = pProcMap->pmap; ++ pmap_t pPhysicalMap = vm_map_pmap(pProcMap); + + return pmap_extract(pPhysicalMap, pb); + } + + case RTR0MEMOBJTYPE_MAPPING: + { +- vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + (iPage << PAGE_SHIFT); ++ vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + ptoa(iPage); + + if (pMemFreeBSD->Core.u.Mapping.R0Process != NIL_RTR0PROCESS) { + struct proc *pProc = (struct proc *)pMemFreeBSD->Core.u.Mapping.R0Process; + struct vm_map *pProcMap = &pProc->p_vmspace->vm_map; +- pmap_t pPhysicalMap = pProcMap->pmap; ++ pmap_t pPhysicalMap = vm_map_pmap(pProcMap); + + return pmap_extract(pPhysicalMap, pb); + } + return vtophys(pb); + } + +- case RTR0MEMOBJTYPE_CONT: +- return pMemFreeBSD->Core.u.Cont.Phys + (iPage << PAGE_SHIFT); +- +- case RTR0MEMOBJTYPE_PHYS: +- return pMemFreeBSD->Core.u.Phys.PhysBase + (iPage << PAGE_SHIFT); +- + case RTR0MEMOBJTYPE_PAGE: +- case RTR0MEMOBJTYPE_PHYS_NC: +- return VM_PAGE_TO_PHYS(pMemFreeBSD->u.Phys.apPages[iPage]); +- +-#ifdef USE_KMEM_ALLOC_ATTR + case RTR0MEMOBJTYPE_LOW: ++ case RTR0MEMOBJTYPE_PHYS_NC: + { +- vm_offset_t pb = (vm_offset_t)pMemFreeBSD->Core.pv + (iPage << PAGE_SHIFT); +- return vtophys(pb); ++ RTHCPHYS addr; ++ VM_OBJECT_LOCK(pMemFreeBSD->pObject); ++ addr = VM_PAGE_TO_PHYS(vm_page_lookup(pMemFreeBSD->pObject, iPage)); ++ VM_OBJECT_UNLOCK(pMemFreeBSD->pObject); ++ return addr; + } +-#else +- case RTR0MEMOBJTYPE_LOW: +-#endif ++ ++ case RTR0MEMOBJTYPE_PHYS: ++ return pMemFreeBSD->Core.u.Cont.Phys + ptoa(iPage); ++ ++ case RTR0MEMOBJTYPE_CONT: ++ return pMemFreeBSD->Core.u.Phys.PhysBase + ptoa(iPage); ++ + case RTR0MEMOBJTYPE_RES_VIRT: + default: + return NIL_RTHCPHYS; diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c deleted file mode 100644 index c298f52fd501..000000000000 --- a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-mp-r0drv-freebsd.c +++ /dev/null @@ -1,79 +0,0 @@ ---- src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c.orig 2011-05-16 12:33:52.000000000 -0400 -+++ src/VBox/Runtime/r0drv/freebsd/mp-r0drv-freebsd.c 2011-06-24 13:57:31.000000000 -0400 -@@ -163,17 +163,26 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER p - /* Will panic if no rendezvousing cpus, so check up front. */ - if (RTMpGetOnlineCount() > 1) - { --#if __FreeBSD_version >= 700000 -- cpumask_t Mask = ~(cpumask_t)curcpu; -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#elif __FreeBSD_version >= 700000 -+ cpumask_t Mask; - #endif -+ RTCPUID idCpu = curcpu; - RTMPARGS Args; - - Args.pfnWorker = pfnWorker; - Args.pvUser1 = pvUser1; - Args.pvUser2 = pvUser2; -- Args.idCpu = RTMpCpuId(); -+ Args.idCpu = idCpu; - Args.cHits = 0; - #if __FreeBSD_version >= 700000 -+ Mask = all_cpus; -+#if __FreeBSD_version >= 900000 -+ CPU_CLR(idCpu, &Mask); -+#else -+ Mask &= ~((cpumask_t)1 << idCpu); -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpOnOthersFreeBSDWrapper, smp_no_rendevous_barrier, &Args); - #else - smp_rendezvous(NULL, rtmpOnOthersFreeBSDWrapper, NULL, &Args); -@@ -203,8 +212,10 @@ static void rtmpOnSpecificFreeBSDWrapper - - RTDECL(int) RTMpOnSpecific(RTCPUID idCpu, PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) - { --#if __FreeBSD_version >= 700000 -- cpumask_t Mask = 1 << idCpu; -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#elif __FreeBSD_version >= 700000 -+ cpumask_t Mask; - #endif - RTMPARGS Args; - -@@ -218,7 +229,11 @@ RTDECL(int) RTMpOnSpecific(RTCPUID idCpu - Args.idCpu = idCpu; - Args.cHits = 0; - #if __FreeBSD_version >= 700000 -+#if __FreeBSD_version >= 900000 -+ CPU_SETOF(idCpu, &Mask); -+#else - Mask = (cpumask_t)1 << idCpu; -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpOnSpecificFreeBSDWrapper, smp_no_rendevous_barrier, &Args); - #else - smp_rendezvous(NULL, rtmpOnSpecificFreeBSDWrapper, NULL, &Args); -@@ -242,13 +257,21 @@ static void rtmpFreeBSDPokeCallback(void - - RTDECL(int) RTMpPokeCpu(RTCPUID idCpu) - { -+#if __FreeBSD_version >= 900000 -+ cpuset_t Mask; -+#else - cpumask_t Mask; -+#endif - - /* Will panic if no rendezvousing cpus, so make sure the cpu is online. */ - if (!RTMpIsCpuOnline(idCpu)) - return VERR_CPU_NOT_FOUND; - -+#if __FreeBSD_version >= 900000 -+ CPU_SETOF(idCpu, &Mask); -+#else - Mask = (cpumask_t)1 << idCpu; -+#endif - smp_rendezvous_cpus(Mask, NULL, rtmpFreeBSDPokeCallback, smp_no_rendevous_barrier, NULL); - - return VINF_SUCCESS; diff --git a/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c new file mode 100644 index 000000000000..2f04d3adfafd --- /dev/null +++ b/emulators/virtualbox-ose-kmod-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-semfastmutex-r0drv-freebsd.c @@ -0,0 +1,15 @@ +- Fix INVARIANTS warning: +acquiring duplicate lock of same type: "IPRT Fast Mutex Semaphore" + +Submitted by: avg +--- src/VBox/Runtime/r0drv/freebsd/semfastmutex-r0drv-freebsd.c.orig 2011-11-04 12:19:54.000000000 +0100 ++++ src/VBox/Runtime/r0drv/freebsd/semfastmutex-r0drv-freebsd.c 2011-12-06 23:12:49.233297685 +0100 +@@ -66,7 +66,7 @@ + if (pThis) + { + pThis->u32Magic = RTSEMFASTMUTEX_MAGIC; +- sx_init(&pThis->SxLock, "IPRT Fast Mutex Semaphore"); ++ sx_init_flags(&pThis->SxLock, "IPRT Fast Mutex Semaphore", SX_DUPOK); + + *phFastMtx = pThis; + return VINF_SUCCESS; diff --git a/emulators/virtualbox-ose-kmod-legacy/pkg-plist b/emulators/virtualbox-ose-kmod-legacy/pkg-plist index ef2cca5a6af2..83a55bedda50 100644 --- a/emulators/virtualbox-ose-kmod-legacy/pkg-plist +++ b/emulators/virtualbox-ose-kmod-legacy/pkg-plist @@ -1,8 +1,10 @@ @comment $FreeBSD$ @cwd / %%KMODDIR%%/vboxdrv.ko +%%WITH_DEBUG%%%%KMODDIR%%/vboxdrv.ko.symbols %%KMODDIR%%/vboxnetadp.ko +%%WITH_DEBUG%%%%KMODDIR%%/vboxnetadp.ko.symbols %%KMODDIR%%/vboxnetflt.ko +%%WITH_DEBUG%%%%KMODDIR%%/vboxnetflt.ko.symbols @exec /usr/sbin/kldxref /%%KMODDIR%% @unexec /usr/sbin/kldxref /%%KMODDIR%% - diff --git a/emulators/virtualbox-ose-legacy/Makefile b/emulators/virtualbox-ose-legacy/Makefile index 09c85decda22..4fec6bcd39c6 100644 --- a/emulators/virtualbox-ose-legacy/Makefile +++ b/emulators/virtualbox-ose-legacy/Makefile @@ -1,13 +1,8 @@ -# New ports collection makefile for: virtualbox-ose-legacy -# Date created: 2009-05-02 -# Whom: Bernhard Froehlich <decke@bluelife.at> -# +# Created by: Bernhard Froehlich <decke@bluelife.at> # $FreeBSD$ -# PORTNAME= virtualbox-ose -DISTVERSION= 4.0.16 -PORTREVISION= 2 +DISTVERSION= 4.1.24 CATEGORIES= emulators MASTER_SITES= http://download.virtualbox.org/virtualbox/${DISTVERSION}/ \ http://tmp.chruetertee.ch/ \ @@ -21,20 +16,22 @@ EXTRACT_ONLY= VirtualBox-${DISTVERSION}${EXTRACT_SUFX} MAINTAINER= vbox@FreeBSD.org COMMENT= A general-purpose full virtualizer for x86 hardware +LICENSE= GPLv2 +LICENSE_FILE= ${WRKSRC}/COPYING + BUILD_DEPENDS= yasm:${PORTSDIR}/devel/yasm \ as86:${PORTSDIR}/devel/dev86 \ xsltproc:${PORTSDIR}/textproc/libxslt \ - kmk:${PORTSDIR}/devel/kBuild + kmk:${PORTSDIR}/devel/kBuild \ + gtar:${PORTSDIR}/archivers/gtar LIB_DEPENDS= png15:${PORTSDIR}/graphics/png \ xslt.2:${PORTSDIR}/textproc/libxslt \ curl.6:${PORTSDIR}/ftp/curl RUN_DEPENDS= /boot/modules/vboxdrv.ko:${PORTSDIR}/emulators/virtualbox-ose-kmod-legacy -LICENSE= GPLv2 -LICENSE_FILE= ${WRKSRC}/COPYING - -WRKSRC= ${WRKDIR}/VirtualBox-${PORTVERSION}_OSE +WRKSRC= ${WRKDIR}/VirtualBox-${PORTVERSION} ONLY_FOR_ARCHS= i386 amd64 +FETCH_ARGS= -pRr USE_CDRTOOLS= yes USE_GCC= any USE_GNOME= libidl @@ -50,7 +47,6 @@ CONFIGURE_ARGS+=--with-gcc="${CC}" --with-g++="${CXX}" --passive-mesa USE_LDCONFIG= ${PREFIX}/lib/virtualbox CONFLICTS= bcc-[0-9]* -CONFLICTS_BUILD= kBuild-devel-[0-9]* CONFLICTS_INSTALL= virtualbox-ose-[3,4]* virtualbox-ose-devel-[3,4]* virtualbox-ose-additions-[3,4]* virtualbox-ose-additions-devel-[3,4]* VBOXUSER?= vboxusers @@ -117,7 +113,6 @@ GUESTADDITIONS= VBoxGuestAdditions_${VBOX_GUEST_VER}.iso GADISTFILES= ${GUESTADDITIONS}:guestadditions RESTRICTED= for personal use only RESTRICTED_FILES= ${GUESTADDITIONS} -FETCH_ARGS= -pRr PLIST_SUB+= GUESTADDITIONS="" .else PLIST_SUB+= GUESTADDITIONS="@comment " @@ -175,11 +170,15 @@ PLIST_SUB+= I386="@comment " .include <bsd.port.pre.mk> +.if ${OSVERSION} < 802000 +BROKEN= Does not compile on FreeBSD < 8.2 +.endif + .if ${OSVERSION} > 900012 EXTRA_PATCHES+= ${FILESDIR}/extrapatch-include-iprt-string.h .endif -.if ${OSVERSION} > 900020 || ${OSVERSION} < 900000 && ${OSVERSION} > 801500 +.if ${OSVERSION} < 900000 && ${OSVERSION} > 801500 EXTRA_PATCHES+= ${FILESDIR}/extrapatch-src-VBox-Devices-PC-vbox.dsl .endif @@ -214,6 +213,9 @@ post-patch: .if ${OSVERSION} < 800069 @${ECHO} 'VBOX_WITH_USB=' >> ${WRKSRC}/LocalConfig.kmk .endif +.if ${PORT_OPTIONS:MUDPTUNNEL} + @${ECHO} 'VBOX_WITH_UDPTUNNEL = 1' >> ${WRKSRC}/LocalConfig.kmk +.endif .if ${PORT_OPTIONS:MWEBSERVICE} @${ECHO} 'VBOX_WITH_WEBSERVICES = 1' >> ${WRKSRC}/LocalConfig.kmk @${ECHO} 'VBOX_GSOAP_INSTALLED = 1' >> ${WRKSRC}/LocalConfig.kmk @@ -252,7 +254,7 @@ do-install: .endif ${MKDIR} ${PREFIX}/bin -.for f in VBoxManage VBoxNetAdpCtl VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD ${VBOX_FRONTENDS} ${VBOX_WEB} +.for f in VBoxManage VBoxNetAdpCtl VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD VBoxBalloonCtrl ${VBOX_FRONTENDS} ${VBOX_WEB} ${INSTALL_PROGRAM} ${WRKSRC}/out/${KMK_ARCH}/${KMK_BUILDTYPE}/bin/${f} ${PREFIX}/lib/virtualbox/ ${LN} -sf ${PREFIX}/lib/virtualbox/${f} ${PREFIX}/bin/ .endfor @@ -261,7 +263,7 @@ do-install: ${CHMOD} 4511 ${PREFIX}/lib/virtualbox/${f} .endfor -.for f in VBoxManage VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp +.for f in VBoxManage VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp VBoxBalloonCtrl ${CHMOD} 0711 ${PREFIX}/lib/virtualbox/${f} .endfor @@ -286,7 +288,7 @@ do-install: ${PYTHON_CMD} -mcompileall ${PYTHON_SITELIBDIR}/xpcom/ post-install: -.for f in VBoxManage VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp ${VBOX_FRONTENDS} +.for f in VBoxManage VBoxNetDHCP VBoxSVC VBoxXPCOMIPCD VBoxExtPackHelperApp VBoxBalloonCtrl ${VBOX_FRONTENDS} ${CHOWN} root:${VBOXGROUP} ${PREFIX}/lib/virtualbox/${f} .endfor diff --git a/emulators/virtualbox-ose-legacy/distinfo b/emulators/virtualbox-ose-legacy/distinfo index 31b4828107ac..9b658d14b28f 100644 --- a/emulators/virtualbox-ose-legacy/distinfo +++ b/emulators/virtualbox-ose-legacy/distinfo @@ -1,4 +1,4 @@ -SHA256 (VirtualBox-4.0.16.tar.bz2) = d6c165cc41063cb8eb8283606b712904cae180000171fb1f833b7eaada633c77 -SIZE (VirtualBox-4.0.16.tar.bz2) = 70042175 -SHA256 (VBoxGuestAdditions_4.0.16.iso) = 778c7c020b853f999317bd017e2f3e2badc6deebfbec33ae89d7710826fb404e -SIZE (VBoxGuestAdditions_4.0.16.iso) = 41639936 +SHA256 (VirtualBox-4.1.24.tar.bz2) = 74008b8e8942045668c1b7d06b0a4bb5fe8464066e343e3a2e1ba30b94ce8a7f +SIZE (VirtualBox-4.1.24.tar.bz2) = 74612732 +SHA256 (VBoxGuestAdditions_4.1.24.iso) = 6db32584eb4e2ace0fd5fbbd9d63bdb8f50f0c28821d03dafd0ed1018d133cc7 +SIZE (VBoxGuestAdditions_4.1.24.iso) = 53532672 diff --git a/emulators/virtualbox-ose-legacy/files/patch-configure b/emulators/virtualbox-ose-legacy/files/patch-configure index 8b889ef38986..d47c69b30074 100644 --- a/emulators/virtualbox-ose-legacy/files/patch-configure +++ b/emulators/virtualbox-ose-legacy/files/patch-configure @@ -1,15 +1,6 @@ ---- configure.orig 2009-12-17 15:23:05.000000000 +0100 -+++ configure 2009-12-21 14:25:45.000000000 +0100 -@@ -107,7 +107,7 @@ - GENISOIMAGE="genisoimage" - MKISOFS="mkisofs" - INCCRYPTO="" --LIBCRYPTO="-lcrypto" -+LIBCRYPTO="-lcrypto -lssl" - LIBPTHREAD="-lpthread" - LIBCAP="-lcap" - GSOAP="" -@@ -1773,7 +1775,7 @@ +--- configure.orig 2011-05-30 17:11:26.000000000 +0200 ++++ configure 2011-06-06 10:01:12.000000000 +0200 +@@ -1920,7 +1920,7 @@ cat $ODIR.tmp_src.cc >> $LOG echo "using the following command line:" >> $LOG echo "$CXX -O -Wall -o $ODIR.tmp_out $ODIR.tmp_src.cc -I$p/include/$d $p/$b/lib$d.so" >> $LOG diff --git a/emulators/virtualbox-ose-legacy/files/patch-include-iprt-types.h b/emulators/virtualbox-ose-legacy/files/patch-include-iprt-types.h new file mode 100644 index 000000000000..4c2070e3bb10 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-include-iprt-types.h @@ -0,0 +1,11 @@ +--- include/iprt/types.h.orig 2012-03-05 10:48:48.000000000 +0100 ++++ include/iprt/types.h 2012-03-05 11:21:25.000000000 +0100 +@@ -82,6 +82,8 @@ + # include <stddef.h> + # define _UINT64_T_DECLARED + # define _INT64_T_DECLARED ++# define _UINTPTR_T_DECLARED ++# define _INTPTR_T_DECLARED + # include <sys/types.h> + + # elif defined(RT_OS_LINUX) && defined(__KERNEL__) diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Makefile.kmk b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Makefile.kmk deleted file mode 100644 index 2cdf6521b3db..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-Makefile.kmk +++ /dev/null @@ -1,13 +0,0 @@ ---- src/VBox/Devices/Makefile.kmk.orig 2010-12-06 22:42:36.000000000 +0100 -+++ src/VBox/Devices/Makefile.kmk 2010-12-06 22:42:59.000000000 +0100 -@@ -22,7 +22,9 @@ - VBOX_PATH_DEVICES_SRC := $(PATH_SUB_CURRENT) - - # Include sub-makefiles. --include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk -+ifdef VBOX_WITH_TESTCASES -+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk -+endif - if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS) - include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk - else ifndef VBOX_WITHOUT_ETHERBOOT diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-PC-vbox.dsl b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-PC-vbox.dsl new file mode 100644 index 000000000000..56437ffcc02c --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Devices-PC-vbox.dsl @@ -0,0 +1,20 @@ +--- src/VBox/Devices/PC/vbox.dsl.orig 2011-04-28 10:00:53.000000000 +0200 ++++ src/VBox/Devices/PC/vbox.dsl 2011-07-25 19:36:06.000000000 +0200 +@@ -1161,7 +1161,7 @@ + // (all of low memory space) + ResourceProducer, // bit 0 of general flags is 0 + PosDecode, // positive Decode +- MinNotFixed, // Range is not fixed ++ MinFixed, // Range is not fixed + MaxFixed, // Range is fixed + Cacheable, + ReadWrite, +@@ -1170,7 +1170,7 @@ + + 0xffdfffff, // Max = 4GB - 2MB + 0x00000000, // Translation +- 0x00000000, // Range Length (calculated ++ 0xffe00000, // Range Length (calculated + // dynamically) + , // Optional field left blank + , // Optional field left blank diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxHeadless-FramebufferVNC.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxHeadless-FramebufferVNC.cpp deleted file mode 100644 index 8af83a23a87a..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxHeadless-FramebufferVNC.cpp +++ /dev/null @@ -1,13 +0,0 @@ ---- src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp.orig 2012-05-12 19:50:26.807639833 +0100 -+++ src/VBox/Frontends/VBoxHeadless/FramebufferVNC.cpp 2012-05-12 19:50:38.568636058 +0100 -@@ -89,7 +89,10 @@ - vncServer = rfbGetScreen(0, NULL, mWidth, mHeight, 8, 3, 1); - vncServer->screenData = (void*)this; - if (mVncPort) -+ { - vncServer->port = mVncPort; -+ vncServer->ipv6port = mVncPort; -+ } - char *pszDesktopName; - rc = RTStrAPrintf(&pszDesktopName, "%s - VirtualBox", pszName); - if (rc >= 0) diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp new file mode 100644 index 000000000000..00e3d32c29d5 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp @@ -0,0 +1,25 @@ +- Add support for files to VBoxManage createrawvmdk. Currently +it only supports character devices so it failes like this: + +VBoxManage internalcommands createrawvmdk -filename test.vmdk -rawdisk /vbox/HardDisks/test.img +VBoxManage: error: File '/vbox/HardDisks/test.img' is no character device +VBoxManage: error: The raw disk vmdk file was not created + +Submitted by: Pawel Jakub Dawidek <pjd@FreeBSD.org> +--- src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp.orig 2011-12-13 11:18:43.424439415 +0100 ++++ src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp 2011-12-13 11:22:01.554438862 +0100 +@@ -1140,9 +1140,13 @@ + goto out; + } + } ++ else if (S_ISREG(DevStat.st_mode)) ++ { ++ cbSize = DevStat.st_size; ++ } + else + { +- RTMsgError("File '%s' is no character device", rawdisk.c_str()); ++ RTMsgError("File '%s' is neither character device nor regular file", rawdisk.c_str()); + vrc = VERR_INVALID_PARAMETER; + goto out; + } diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostServices-auth-pam-VBoxAuthPAM.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostServices-auth-pam-VBoxAuthPAM.c new file mode 100644 index 000000000000..1344f3f2bd60 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-HostServices-auth-pam-VBoxAuthPAM.c @@ -0,0 +1,15 @@ +- Fix path for libpam.so on FreeBSD + +Submitted by: Landon Fuller <landonf at plausible.coop> +Sponsored by: Plausible Labs Cooperative, Inc. +--- src/VBox/HostServices/auth/pam/VBoxAuthPAM.c.orig 2012-04-03 14:11:56.000000000 +0200 ++++ src/VBox/HostServices/auth/pam/VBoxAuthPAM.c 2012-04-05 12:44:48.000000000 +0200 +@@ -62,6 +62,8 @@ + /* The name of the PAM library */ + # ifdef RT_OS_SOLARIS + # define PAM_LIB_NAME "libpam.so.1" ++# elif defined(RT_OS_FREEBSD) ++# define PAM_LIB_NAME "libpam.so" + # else + # define PAM_LIB_NAME "libpam.so.0" + # endif diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Installer-freebsd-virtualbox.desktop b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Installer-freebsd-virtualbox.desktop index 5f248a87bf95..8f43a89b8d8d 100644 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Installer-freebsd-virtualbox.desktop +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Installer-freebsd-virtualbox.desktop @@ -1,5 +1,5 @@ ---- src/VBox/Installer/freebsd/virtualbox.desktop.orig 2010-10-11 17:39:54.000000000 +0200 -+++ src/VBox/Installer/freebsd/virtualbox.desktop 2010-10-11 17:40:06.000000000 +0200 +--- src/VBox/Installer/freebsd/virtualbox.desktop.orig 2010-10-07 10:42:04.000000000 +0200 ++++ src/VBox/Installer/freebsd/virtualbox.desktop 2010-10-07 10:43:20.000000000 +0200 @@ -7,7 +7,6 @@ Type=Application Exec=VirtualBox diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-MachineImpl.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-MachineImpl.cpp new file mode 100644 index 000000000000..fce7b85eefa3 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-MachineImpl.cpp @@ -0,0 +1,13 @@ +- Remove debugging fprintf in MachineImpl.cpp to fix build with GCC 4.6 + +Submitted by: Andriy Gapon <avg at FreeBSD.org> +--- src/VBox/Main/src-server/MachineImpl.cpp.orig 2012-04-03 14:12:01.000000000 +0200 ++++ src/VBox/Main/src-server/MachineImpl.cpp 2012-04-13 10:49:25.000000000 +0200 +@@ -6643,7 +6643,6 @@ + + Utf8Str idStr = mData->mUuid.toString(); + const char * args[] = {szPath, "--comment", mUserData->s.strName.c_str(), "--startvm", idStr.c_str(), 0 }; +- fprintf(stderr, "SDL=%s\n", szPath); + vrc = RTProcCreate(szPath, args, env, 0, &pid); + } + #else /* !VBOX_WITH_VBOXSDL */ diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp deleted file mode 100644 index 69d6260ac6ff..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-HostHardwareFreeBSD.cpp +++ /dev/null @@ -1,33 +0,0 @@ ---- src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp.orig 2011-05-16 12:33:46.000000000 -0400 -+++ src/VBox/Main/src-server/freebsd/HostHardwareFreeBSD.cpp 2011-06-24 16:03:37.000000000 -0400 -@@ -35,6 +35,7 @@ - #include <iprt/string.h> - - #ifdef RT_OS_FREEBSD -+# include <sys/param.h> - # include <sys/types.h> - # include <sys/stat.h> - # include <unistd.h> -@@ -186,11 +187,17 @@ static int getDVDInfoFromCAM(DriveInfoLi - DeviceMatchPattern.pattern.device_pattern.target_id = CAM_TARGET_WILDCARD; - DeviceMatchPattern.pattern.device_pattern.target_lun = CAM_LUN_WILDCARD; - DeviceMatchPattern.pattern.device_pattern.flags = DEV_MATCH_INQUIRY; -- DeviceMatchPattern.pattern.device_pattern.inq_pat.type = T_CDROM; -- DeviceMatchPattern.pattern.device_pattern.inq_pat.media_type = SIP_MEDIA_REMOVABLE | SIP_MEDIA_FIXED; -- DeviceMatchPattern.pattern.device_pattern.inq_pat.vendor[0] = '*'; /* Matches anything */ -- DeviceMatchPattern.pattern.device_pattern.inq_pat.product[0] = '*'; /* Matches anything */ -- DeviceMatchPattern.pattern.device_pattern.inq_pat.revision[0] = '*'; /* Matches anything */ -+#if __FreeBSD_version >= 900000 -+#define INQ_PAT data.inq_pat -+#else -+#define INQ_PAT inq_pat -+#endif -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.type = T_CDROM; -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.media_type = SIP_MEDIA_REMOVABLE | SIP_MEDIA_FIXED; -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.vendor[0] = '*'; /* Matches anything */ -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.product[0] = '*'; /* Matches anything */ -+ DeviceMatchPattern.pattern.device_pattern.INQ_PAT.revision[0] = '*'; /* Matches anything */ -+#undef INQ_PAT - DeviceCCB.cdm.num_patterns = 1; - DeviceCCB.cdm.pattern_buf_len = sizeof(struct dev_match_result); - DeviceCCB.cdm.patterns = &DeviceMatchPattern; diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp new file mode 100644 index 000000000000..bf6264a3b578 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-src-server-freebsd-NetIf-freebsd.cpp @@ -0,0 +1,26 @@ +This patch adds support for IFT_L2VLAN interfaces in the +FreeBSD implementation of NetIfList(), treating them +identically as IFT_ETHER interfaces. + +Submitted by: Landon J Fuller <landonf at plausible dot coop> +Sponsored by: Plausible Labs Cooperative, Inc +--- src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp.orig 2012-04-10 11:28:41.552067907 -0400 ++++ src/VBox/Main/src-server/freebsd/NetIf-freebsd.cpp 2012-04-10 11:28:45.872069027 -0400 +@@ -268,7 +268,7 @@ + pNext += pIfAddrMsg->ifam_msglen; + } + +- if (pSdl->sdl_type == IFT_ETHER) ++ if (pSdl->sdl_type == IFT_ETHER || pSdl->sdl_type == IFT_L2VLAN) + { + struct ifreq IfReq; + strcpy(IfReq.ifr_name, pNew->szShortName); +@@ -373,7 +373,7 @@ + pNext += pIfAddrMsg->ifam_msglen; + } + +- if (!fSkip && pSdl->sdl_type == IFT_ETHER) ++ if (!fSkip && (pSdl->sdl_type == IFT_ETHER || pSdl->sdl_type == IFT_L2VLAN)) + { + size_t cbNameLen = pSdl->sdl_nlen + 1; + memcpy(pInfo->MACAddress.au8, LLADDR(pSdl), sizeof(pInfo->MACAddress.au8)); diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-webservice-websrv-wsdl.xsl b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-webservice-websrv-wsdl.xsl new file mode 100644 index 000000000000..760b76cc01c3 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Main-webservice-websrv-wsdl.xsl @@ -0,0 +1,254 @@ +Fix building with libxslt newer than 1.1.26. + +Obtained from: https://www.virtualbox.org/ticket/10940 +--- src/VBox/Main/webservice/websrv-wsdl.xsl 2012-10-26 18:24:53.000000000 +0200 ++++ src/VBox/Main/webservice/websrv-wsdl.xsl 2012-12-17 10:44:59.000001310 +0100 +@@ -93,6 +93,7 @@ + targetNamespace="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" ++ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:vbox="http://www.virtualbox.org/" + xmlns:exsl="http://exslt.org/common" +@@ -460,7 +461,7 @@ + <xsl:param name="_params" /> + <xsl:param name="_valuetype" /> <!-- optional, for attribute setter messages --> + +- <message> ++ <wsdl:message> + <xsl:attribute name="name"><xsl:value-of select="concat($_ifname, $G_classSeparator, $_methodname, $G_methodRequest)" /></xsl:attribute> + + <xsl:call-template name="convertTypeAndEmitPartOrElement"> +@@ -469,10 +470,10 @@ + <xsl:with-param name="name" select="'parameters'" /> + <xsl:with-param name="type" select="$G_typeIsGlobalRequestElementMarker" /> + <xsl:with-param name="safearray" select="'no'" /> +- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> ++ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> + <xsl:with-param name="attrname" select="'element'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> --> + </xsl:call-template> +- </message> ++ </wsdl:message> + </xsl:template> + + <!-- +@@ -485,7 +486,7 @@ + <xsl:param name="_params" /> <!-- set of parameter elements --> + <xsl:param name="_resulttype" /> <!-- for attribute getter methods only --> + +- <message> ++ <wsdl:message> + <xsl:attribute name="name"><xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute> + + <!-- <xsl:variable name="cOutParams" select="count($_params[@dir='out']) + count($_params[@dir='return'])" /> --> +@@ -495,10 +496,10 @@ + <xsl:with-param name="name" select="'parameters'" /> + <xsl:with-param name="type" select="$G_typeIsGlobalResponseElementMarker" /> + <xsl:with-param name="safearray" select="'no'" /> +- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> ++ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> + <xsl:with-param name="attrname" select="'element'" /> <!-- attrib of part of element: <part type=...> or <part element=...> or <element type=...> --> + </xsl:call-template> +- </message> ++ </wsdl:message> + </xsl:template> + + <!-- +@@ -543,13 +544,13 @@ + <xsl:with-param name="_methodname" select="$attrSetter" /> + <xsl:with-param name="_params" select="/.." /> <!-- empty set --> + <xsl:with-param name="_valuetype" select="$attrtype" /> +- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> ++ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> + </xsl:call-template> + <xsl:call-template name="emitResultMessage"> + <xsl:with-param name="_ifname" select="$ifname" /> + <xsl:with-param name="_methodname" select="$attrSetter" /> + <xsl:with-param name="_params" select="/.." /> <!-- empty set --> +- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> ++ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> + </xsl:call-template> + </xsl:template> + +@@ -566,7 +567,7 @@ + + <xsl:call-template name="debugMsg"><xsl:with-param name="msg" select="concat('....emitInOutOperation ', $_ifname, '::', $_methodname)" /></xsl:call-template> + +- <operation> ++ <wsdl:operation> + <xsl:attribute name="name"> + <xsl:value-of select="concat($_ifname, '_', $_methodname)" /> + </xsl:attribute> +@@ -577,7 +578,7 @@ + <xsl:attribute name="style"><xsl:value-of select="$G_basefmt" /></xsl:attribute> + </soap:operation> + </xsl:if> +- <input> ++ <wsdl:input> + <xsl:choose> + <xsl:when test="$_fSoap"> + <soap:body> +@@ -589,10 +590,10 @@ + <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodRequest" /></xsl:attribute> + </xsl:otherwise> + </xsl:choose> +- </input> ++ </wsdl:input> + <xsl:choose> + <xsl:when test="$_resulttype"> +- <output> ++ <wsdl:output> + <xsl:choose> + <xsl:when test="$_fSoap"> + <soap:body> +@@ -604,11 +605,11 @@ + <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute> + </xsl:otherwise> + </xsl:choose> +- </output> ++ </wsdl:output> + </xsl:when> + <xsl:otherwise> + <!-- <xsl:if test="count($_params[@dir='out'] | $_params[@dir='return']) > 0"> --> +- <output> ++ <wsdl:output> + <xsl:choose> + <xsl:when test="$_fSoap"> + <soap:body> +@@ -620,29 +621,29 @@ + <xsl:attribute name="message">vbox:<xsl:copy-of select="$_ifname" /><xsl:value-of select="$G_classSeparator" /><xsl:value-of select="$_methodname" /><xsl:copy-of select="$G_methodResponse" /></xsl:attribute> + </xsl:otherwise> + </xsl:choose> +- </output> ++ </wsdl:output> + <!-- </xsl:if> --> + </xsl:otherwise> + </xsl:choose> + <xsl:choose> + <xsl:when test="not($_fSoap)"> +- <fault name="InvalidObjectFault" message="vbox:InvalidObjectFaultMsg" /> +- <fault name="RuntimeFault" message="vbox:RuntimeFaultMsg" /> ++ <wsdl:fault name="InvalidObjectFault" message="vbox:InvalidObjectFaultMsg" /> ++ <wsdl:fault name="RuntimeFault" message="vbox:RuntimeFaultMsg" /> + </xsl:when> + <xsl:otherwise> +- <fault name="InvalidObjectFault"> ++ <wsdl:fault name="InvalidObjectFault"> + <soap:fault name="InvalidObjectFault"> + <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute> + </soap:fault> +- </fault> +- <fault name="RuntimeFault"> ++ </wsdl:fault> ++ <wsdl:fault name="RuntimeFault"> + <soap:fault name="RuntimeFault"> + <xsl:attribute name="use"><xsl:value-of select="$G_parmfmt" /></xsl:attribute> + </soap:fault> +- </fault> ++ </wsdl:fault> + </xsl:otherwise> + </xsl:choose> +- </operation> ++ </wsdl:operation> + </xsl:template> + + <!-- +@@ -742,7 +743,7 @@ + <xsl:with-param name="_wsmap" select="$wsmap" /> + <xsl:with-param name="_methodname" select="$methodname" /> + <xsl:with-param name="_params" select="param" /> +- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> ++ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> + </xsl:call-template> + <!-- emit a second "result" message only if the method has "out" arguments or a return value --> + <!-- <xsl:if test="(count(param[@dir='out'] | param[@dir='return']) > 0)"> --> +@@ -751,7 +752,7 @@ + <xsl:with-param name="_wsmap" select="$wsmap" /> + <xsl:with-param name="_methodname" select="@name" /> + <xsl:with-param name="_params" select="param" /> +- <xsl:with-param name="elname" select="'part'" /> <!-- "part" or "element" --> ++ <xsl:with-param name="elname" select="'wsdl:part'" /> <!-- "part" or "element" --> + </xsl:call-template> + <!-- </xsl:if> --> + </xsl:otherwise> +@@ -956,10 +957,9 @@ + and emit complexTypes for all method arguments and return values. + --> + <xsl:template match="library"> +- <definitions ++ <wsdl:definitions + name="VirtualBox" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> +- <xsl:attribute name="xmlns">http://schemas.xmlsoap.org/wsdl/</xsl:attribute> + <xsl:attribute name="targetNamespace"><xsl:value-of select="$G_targetNamespace" /></xsl:attribute> + <!-- at top of WSDL file, dump a <types> section with user-defined types --> + <xsl:comment> +@@ -969,7 +969,7 @@ + * + ****************************************************** + </xsl:comment> +- <types> ++ <wsdl:types> + <xsd:schema> + <xsl:attribute name="targetNamespace"><xsl:value-of select='$G_targetNamespace' /></xsl:attribute> + +@@ -1193,14 +1193,14 @@ + </xsd:schema> + + +- </types> ++ </wsdl:types> + +- <message name="InvalidObjectFaultMsg"> +- <part name="fault" element="vbox:InvalidObjectFault" /> +- </message> +- <message name="RuntimeFaultMsg"> +- <part name="fault" element="vbox:RuntimeFault" /> +- </message> ++ <wsdl:message name="InvalidObjectFaultMsg"> ++ <wsdl:part name="fault" element="vbox:InvalidObjectFault" /> ++ </wsdl:message> ++ <wsdl:message name="RuntimeFaultMsg"> ++ <wsdl:part name="fault" element="vbox:RuntimeFault" /> ++ </wsdl:message> + + <xsl:comment> + ****************************************************** +@@ -1241,7 +1241,7 @@ + ****************************************************** + </xsl:comment> + +- <portType> ++ <wsdl:portType> + <xsl:attribute name="name"><xsl:copy-of select="'vbox'" /><xsl:value-of select="$G_portTypeSuffix" /></xsl:attribute> + + <xsl:for-each select="//interface"> +@@ -1261,7 +1261,7 @@ + </xsl:call-template> + </xsl:if> + </xsl:for-each> +- </portType> ++ </wsdl:portType> + + <xsl:comment> + ****************************************************** +@@ -1271,7 +1271,7 @@ + ****************************************************** + </xsl:comment> + +- <binding> ++ <wsdl:binding> + <xsl:attribute name="name"><xsl:value-of select="concat('vbox', $G_bindingSuffix)" /></xsl:attribute> + <xsl:attribute name="type"><xsl:value-of select="concat('vbox:vbox', $G_portTypeSuffix)" /></xsl:attribute> + +@@ -1297,9 +1297,9 @@ + </xsl:call-template> + </xsl:if> + </xsl:for-each> +- </binding> ++ </wsdl:binding> + +- </definitions> ++ </wsdl:definitions> + </xsl:template> diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c new file mode 100644 index 000000000000..9c63505651b0 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-memobj-r0drv-freebsd.c @@ -0,0 +1,53 @@ +From Alan L. Cox on FreeBSD-current: + + I just glanced at the virtualbox code for a couple minutes. For + FreeBSD 9 and 10, these lock acquires are completely unnecessary, and + have been since FreeBSD 9.0. Just delete them. They may be equally + unnecessary under FreeBSD 8, but I didn't look carefully enough to + answer that question. + +[1] http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html + +--- src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c.orig 2012-12-19 20:51:59.000000000 +0100 ++++ src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c 2012-12-20 15:14:56.283850834 +0100 +@@ -136,7 +136,10 @@ + (vm_offset_t)pMemFreeBSD->Core.pv + pMemFreeBSD->Core.cb); + AssertMsg(rc == KERN_SUCCESS, ("%#x", rc)); + ++#if __FreeBSD_version < 900000 ++ /* See http://lists.freebsd.org/pipermail/freebsd-current/2012-November/037963.html */ + vm_page_lock_queues(); ++#endif + for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) + { + vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; +@@ -191,7 +194,9 @@ + case RTR0MEMOBJTYPE_PHYS: + case RTR0MEMOBJTYPE_PHYS_NC: + { ++#if __FreeBSD_version < 900000 + vm_page_lock_queues(); ++#endif + for (uint32_t iPage = 0; iPage < pMemFreeBSD->u.Phys.cPages; iPage++) + { + vm_page_t pPage = pMemFreeBSD->u.Phys.apPages[iPage]; +@@ -266,7 +271,9 @@ + while (iPage-- > 0) + { + pPage = pMemFreeBSD->u.Phys.apPages[iPage]; ++#if __FreeBSD_version < 900000 + vm_page_lock_queues(); ++#endif + vm_page_unwire(pPage, 0); + vm_page_free(pPage); + vm_page_unlock_queues(); +@@ -448,7 +455,9 @@ + while (iPage-- > 0) + { + pPage = pMemFreeBSD->u.Phys.apPages[iPage]; ++#if __FreeBSD_version < 900000 + vm_page_lock_queues(); ++#endif + vm_page_unwire(pPage, 0); + vm_page_free(pPage); + vm_page_unlock_queues(); diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r3-freebsd-fileaio-freebsd.c b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r3-freebsd-fileaio-freebsd.c deleted file mode 100644 index 671bb5552189..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r3-freebsd-fileaio-freebsd.c +++ /dev/null @@ -1,16 +0,0 @@ -Runtime/fileaio-freebsd: Fix error check for aio_error - -Obtained-from: https://www.virtualbox.org/changeset/38332 - ---- src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp.orig 2011-07-15 17:34:34.000000000 +0200 -+++ src/VBox/Runtime/r3/freebsd/fileaio-freebsd.cpp 2011-11-21 09:33:26.155092865 +0100 -@@ -416,7 +416,8 @@ - { - pReqInt = pahReqs[i]; - rcBSD = aio_error(&pReqInt->AioCB); -- if (rcBSD == EINVAL || rcBSD == EAGAIN) -+ if ( rcBSD == -1 -+ && errno == EINVAL) - { - /* Was not submitted. */ - RTFILEAIOREQ_SET_STATE(pReqInt, PREPARED); diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-VMM-Makefile.kmk b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-VMM-Makefile.kmk deleted file mode 100644 index cfe6e5fc1434..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-VMM-Makefile.kmk +++ /dev/null @@ -1,11 +0,0 @@ ---- src/VBox/VMM/Makefile.kmk.orig 2011-12-21 13:47:59.000000000 +0100 -+++ src/VBox/VMM/Makefile.kmk 2012-03-09 20:36:09.390067614 +0100 -@@ -19,7 +19,7 @@ - include $(KBUILD_PATH)/subheader.kmk - - # Include sub-makefiles. --include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk -+#include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk - - - # diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-VMM-VMMR3-CPUM.cpp b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-VMM-VMMR3-CPUM.cpp deleted file mode 100644 index 5bb1888abe18..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-VMM-VMMR3-CPUM.cpp +++ /dev/null @@ -1,12 +0,0 @@ ---- src/VBox/VMM/VMMR3/CPUM.cpp (Revision 71439) -+++ src/VBox/VMM/VMMR3/CPUM.cpp (Revision 71440) -@@ -999,7 +999,8 @@ - */ - if (!fHWVirtExEnabled) - { -- Assert(pVM->cpum.s.aGuestCpuIdStd[4].eax == 0); -+ Assert( pVM->cpum.s.aGuestCpuIdStd[4].eax == 0 -+ || pVM->cpum.s.aGuestCpuIdStd[0].eax < 0x4); - pVM->cpum.s.aGuestCpuIdStd[4].eax = 0; - } - } diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-recompiler-Sun-testmath.c b/emulators/virtualbox-ose-legacy/files/patch-src-recompiler-Sun-testmath.c new file mode 100644 index 000000000000..c4678be05189 --- /dev/null +++ b/emulators/virtualbox-ose-legacy/files/patch-src-recompiler-Sun-testmath.c @@ -0,0 +1,22 @@ +--- src/recompiler/Sun/testmath.c.orig 2011-01-14 21:15:07.000000000 +0100 ++++ src/recompiler/Sun/testmath.c 2011-08-05 13:54:49.000000000 +0200 +@@ -261,8 +261,6 @@ + #endif + set_cw(0x27f); + +- CHECK(logl(2.7182818284590452353602874713526625L), 1.0); +- + CHECK(remainderl(1.0L, 1.0L), 0.0); + CHECK(remainderl(1.0L, 1.5L), -0.5); + CHECK(remainderl(42.0L, 34.25L), 7.75); +@@ -315,10 +313,6 @@ + CHECK(tanl(0.0L), 0.0); + CHECK(tanl(0.7853981633974483096156608458198757L), 1.0); + +- CHECK(powl(0.0, 0.0), 1.0); +- CHECK(powl(2.0, 2.0), 4.0); +- CHECK(powl(3.0, 3.0), 27.0); +- + return cErrors; + } + diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-recompiler-target-i386-cpu.h b/emulators/virtualbox-ose-legacy/files/patch-src-recompiler-target-i386-cpu.h deleted file mode 100644 index b8c3a9acb71a..000000000000 --- a/emulators/virtualbox-ose-legacy/files/patch-src-recompiler-target-i386-cpu.h +++ /dev/null @@ -1,11 +0,0 @@ ---- src/recompiler/target-i386/cpu.h.orig 2010-07-15 20:13:56.000000000 +0200 -+++ src/recompiler/target-i386/cpu.h 2010-11-01 12:23:16.000000000 +0100 -@@ -678,7 +678,7 @@ - user */ - struct APICState *apic_state; - #else -- uint32_t alignment2[3]; -+ uint32_t alignment2[2]; - /** Profiling tb_flush. */ - STAMPROFILE StatTbFlush; - #endif diff --git a/emulators/virtualbox-ose-legacy/pkg-plist b/emulators/virtualbox-ose-legacy/pkg-plist index 740c84ec3c9c..1e60acad9deb 100644 --- a/emulators/virtualbox-ose-legacy/pkg-plist +++ b/emulators/virtualbox-ose-legacy/pkg-plist @@ -1,3 +1,4 @@ +bin/VBoxBalloonCtrl %%X11%%bin/VBoxBFE bin/VBoxHeadless bin/VBoxManage @@ -15,6 +16,7 @@ bin/VBoxXPCOMIPCD lib/virtualbox/DBGCPlugInDiggers.so lib/virtualbox/VBoxAuth.so lib/virtualbox/VBoxAuthSimple.so +lib/virtualbox/VBoxBalloonCtrl %%QT4%%lib/virtualbox/VBoxDbg.so lib/virtualbox/VBoxDD.so lib/virtualbox/VBoxDD2.so @@ -238,6 +240,8 @@ include/virtualbox/VBoxCAPI_v2_2.h include/virtualbox/VBoxCAPI_v3_0.h include/virtualbox/VBoxCAPI_v3_1.h include/virtualbox/VBoxCAPI_v3_2.h +include/virtualbox/VBoxCAPI_v4_0.h +include/virtualbox/VBoxCAPI_v4_1.h include/virtualbox/VirtualBox_XPCOM.h include/virtualbox/ipcIClientObserver.h include/virtualbox/ipcIDConnectService.h |