diff options
Diffstat (limited to 'emulators/virtualbox-ose/files')
22 files changed, 555 insertions, 674 deletions
diff --git a/emulators/virtualbox-ose/files/patch-configure b/emulators/virtualbox-ose/files/patch-configure index c6532c3db606..a4aaf507ccc9 100644 --- a/emulators/virtualbox-ose/files/patch-configure +++ b/emulators/virtualbox-ose/files/patch-configure @@ -1,15 +1,33 @@ ---- configure.orgi 2009-05-31 13:43:50.000000000 +0200 -+++ configure 2009-05-31 13:45:47.000000000 +0200 -@@ -102,7 +102,7 @@ - XSLTPROC="xsltproc" +--- 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="" -@@ -1698,7 +1698,7 @@ +@@ -125,6 +125,8 @@ + if [ "$OS" = "freebsd" ]; then + INCCURL="-I/usr/local/include" + LIBCURL="-L/usr/local/lib -lcurl" ++ INCPULSE="-I/usr/local/include" ++ LIBPULSE="-L/usr/local/lib" + else + INCCURL="" + LIBCURL="-lcurl" +@@ -1181,7 +1183,7 @@ + #endif + } + EOF +- if test_compile "-lpulse" pulse pulse; then ++ if test_compile "$INCPULSE $LIBPULSE -lpulse" pulse pulse; then + test_execute + fi + } +@@ -1773,7 +1775,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 @@ -18,3 +36,31 @@ if [ $? -eq 0 ]; then found=1 break +@@ -2315,6 +2317,15 @@ + [ $WITH_QT4 -eq 1 ] && check_qt4 + [ $WITH_PYTHON -eq 1 ] && check_python + ++# PulseAudio ++if [ "$OS" = "linux" -o "$OS" = "freebsd" ]; then ++ if [ $WITH_PULSE -eq 1 ]; then ++ check_pulse ++ else ++ cnf_append "VBOX_WITH_PULSE" "" ++ fi ++fi ++ + # Linux-specific + if [ "$OS" = "linux" ]; then + # don't check for the static libstdc++ in the PUEL version as we build the +@@ -2332,11 +2343,6 @@ + else + cnf_append "VBOX_WITH_ALSA" "" + fi +- if [ $WITH_PULSE -eq 1 ]; then +- check_pulse +- else +- cnf_append "VBOX_WITH_PULSE" "" +- fi + if [ $WITH_DBUS -eq 0 ]; then + cnf_append "VBOX_WITH_DBUS" "" + fi diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk new file mode 100644 index 000000000000..cc5553f7736d --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Additions-x11-VBoxClient-Makefile.kmk @@ -0,0 +1,20 @@ +Index: src/VBox/Additions/x11/VBoxClient/Makefile.kmk +=================================================================== +--- src/VBox/Additions/x11/VBoxClient/Makefile.kmk (revision 25472) ++++ src/VBox/Additions/x11/VBoxClient/Makefile.kmk (revision 25473) +@@ -43,11 +43,14 @@ + $(VBOX_LIBPATH32_X11) + VBoxClient_LIBS.freebsd = \ + iconv ++VBoxClient_LIBS.linux = \ ++ dl ++VBoxClient_LIBS.solaris = \ ++ dl + VBoxClient_LIBS = \ + $(VBOX_LIB_IPRT_GUEST_R3) \ + $(VBOX_LIB_VBGL_R3) \ + $(VBOX_LIB_IPRT_GUEST_R3) \ +- dl \ + X11 \ + Xt + # These are static replacements for gcc-specific parts of libstdc++ diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c new file mode 100644 index 000000000000..16a3f8a69f73 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Audio-audio.c @@ -0,0 +1,14 @@ +--- src/VBox/Devices/Audio/audio.c.orig 2009-12-15 14:54:13.000000000 +0900 ++++ src/VBox/Devices/Audio/audio.c 2009-12-15 14:53:54.000000000 +0900 +@@ -73,6 +73,11 @@ + &pulse_audio_driver, + # endif + #endif /* RT_OS_LINUX */ ++#ifdef RT_OS_FREEBSD ++# ifdef VBOX_WITH_PULSE ++ &pulse_audio_driver, ++# endif ++#endif + #ifdef RT_OS_DARWIN + &coreaudio_audio_driver, + #endif diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk index d404c8aee176..b76f318af457 100644 --- a/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Devices-Makefile.kmk @@ -1,15 +1,13 @@ ---- src/VBox/Devices/Makefile.kmk.orig 2009-11-01 22:50:39.000000000 +0100 -+++ src/VBox/Devices/Makefile.kmk 2009-11-01 22:50:52.000000000 +0100 -@@ -31,8 +31,10 @@ - include $(PATH_SUB_CURRENT)/PC/VMI/Makefile.kmk - endif - include $(PATH_SUB_CURRENT)/Graphics/BIOS/Makefile.kmk --include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk --include $(PATH_SUB_CURRENT)/Storage/testcase/Makefile.kmk -+ifdef VBOX_WITH_TESTCASES -+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk -+ include $(PATH_SUB_CURRENT)/Storage/testcase/Makefile.kmk -+endif - ifndef VBOX_OSE - include $(PATH_SUB_CURRENT)/Storage/VBoxHDDFormats/Makefile.kmk +--- src/VBox/Devices/Makefile.kmk.orig 2009-12-17 15:27:43.000000000 +0100 ++++ src/VBox/Devices/Makefile.kmk 2009-12-21 14:29:56.000000000 +0100 +@@ -970,6 +970,10 @@ + Drivers_SOURCES.linux+= \ + Audio/pulseaudio.c \ + Audio/pulse_stubs.c ++ Drivers_DEFS.freebsd += VBOX_WITH_PULSE ++ Drivers_SOURCES.freebsd+= \ ++ Audio/pulseaudio.c \ ++ Audio/pulse_stubs.c endif + + ifdef VBOX_WITH_USB diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp new file mode 100644 index 000000000000..ffe2a20ceb63 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageHelp.cpp @@ -0,0 +1,37 @@ +--- src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp.orig 2009-12-15 15:16:21.000000000 +0900 ++++ src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp 2009-12-15 15:14:01.000000000 +0900 +@@ -41,6 +41,11 @@ + #else + bool fSolaris = false; + #endif ++#ifdef RT_OS_FREEBSD ++ bool fFreeBSD = true; ++#else ++ bool fFreeBSD = false; ++#endif + #ifdef RT_OS_DARWIN + bool fDarwin = true; + #else +@@ -62,6 +67,7 @@ + fLinux = true; + fWin = true; + fSolaris = true; ++ fFreeBSD = true; + fDarwin = true; + fVRDP = true; + fVBoxSDL = true; +@@ -227,6 +233,14 @@ + #endif + ); + } ++ if (fFreeBSD) ++ { ++ RTPrintf( "|oss" ++#ifdef VBOX_WITH_PULSE ++ "|pulse" ++#endif ++ ); ++ } + if (fDarwin) + { + RTPrintf( "|coreaudio"); diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp new file mode 100644 index 000000000000..38111c6205d4 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxManageModifyVM.cpp @@ -0,0 +1,23 @@ +--- src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp.orig 2009-09-09 23:39:46.000000000 +0900 ++++ src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp 2009-12-15 15:22:27.000000000 +0900 +@@ -1478,6 +1478,20 @@ + # endif + + #endif /* !RT_OS_SOLARIS */ ++#ifdef RT_OS_FREEBSD ++ else if (!strcmp(ValueUnion.psz, "oss")) ++ { ++ CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS)); ++ CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true)); ++ } ++# ifdef VBOX_WITH_PULSE ++ else if (!strcmp(ValueUnion.psz, "pulse")) ++ { ++ CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Pulse)); ++ CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true)); ++ } ++# endif ++#endif /* !RT_OS_FREEBSD */ + #ifdef RT_OS_DARWIN + else if (!strcmp(ValueUnion.psz, "coreaudio")) + { diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk new file mode 100644 index 000000000000..5e9024588b8a --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Makefile.kmk @@ -0,0 +1,27 @@ +--- src/VBox/HostDrivers/Makefile.kmk.orig 2009-10-05 11:17:45.000000000 +0200 ++++ src/VBox/HostDrivers/Makefile.kmk 2009-10-05 11:18:08.000000000 +0200 +@@ -40,7 +40,7 @@ + endif + endif + +- if1of ($(KBUILD_TARGET),linux freebsd) ++ if1of ($(KBUILD_TARGET),linux) + # + # Install the Makefile for module compliation on Linux and FreeBSD hosts + # +@@ -51,6 +51,7 @@ + HostDrivers-src_SOURCES.freebsd = freebsd/Makefile + endif + ++if 0 + if1of ($(KBUILD_TARGET),freebsd) + # + # Install the export_modules script for tar'ing the module sources on FreeBSD hosts +@@ -60,6 +61,7 @@ + HostDrivers-sh_MODE = a+rx,u+w + HostDrivers-sh_SOURCES.freebsd = freebsd/export_modules + endif ++endif + endif # !VBOX_ONLY_DOCS + + # Let kBuild generate the rules. diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp new file mode 100644 index 000000000000..4a89fec97dfa --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-Support-SUPR3HardenedMain.cpp @@ -0,0 +1,33 @@ +--- src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp (revision 25471) ++++ src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp (revision 25472) +@@ -66,6 +66,9 @@ + # ifndef CAP_TO_MASK + # define CAP_TO_MASK(cap) RT_BIT(cap) + # endif ++# elif defined(RT_OS_FREEBSD) ++# include <sys/param.h> ++# include <sys/sysctl.h> + # elif defined(RT_OS_SOLARIS) + # include <priv.h> + # endif +@@ -325,7 +328,19 @@ + sprintf(szFileBuf, "/proc/%ld/path/a.out", (long)getpid()); + int cchLink = readlink(szFileBuf, &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1); + # else /* RT_OS_FREEBSD: */ +- int cchLink = readlink("/proc/curproc/file", &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1); ++ int aiName[4]; ++ size_t cbPath; ++ ++ aiName[0] = CTL_KERN; ++ aiName[1] = KERN_PROC; ++ aiName[2] = KERN_PROC_PATHNAME; ++ aiName[3] = getpid(); ++ ++ cbPath = sizeof(g_szSupLibHardenedExePath) - 1; ++ if(sysctl(aiName, RT_ELEMENTS(aiName), g_szSupLibHardenedExePath, &cbPath, NULL, 0) < 0) ++ supR3HardenedFatal("supR3HardenedExecDir: sysctl failed\n"); ++ ++ int cchLink = strlen(g_szSupLibHardenedExePath); + # endif + if (cchLink < 0 || cchLink == sizeof(g_szSupLibHardenedExePath) - 1) + supR3HardenedFatal("supR3HardenedExecDir: couldn't read \"%s\", errno=%d cchLink=%d\n", diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c deleted file mode 100644 index 0e223c4b9039..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetAdp-freebsd-VBoxNetAdp-freebsd.c +++ /dev/null @@ -1,11 +0,0 @@ ---- src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c.orig 2009-12-07 12:20:44.000000000 +0100 -+++ src/VBox/HostDrivers/VBoxNetAdp/freebsd/VBoxNetAdp-freebsd.c 2009-12-07 12:21:00.000000000 +0100 -@@ -92,7 +92,7 @@ - DECLARE_MODULE(vboxnetadp, g_VBoxNetAdpFreeBSDModule, SI_SUB_PSEUDO, SI_ORDER_ANY); - MODULE_VERSION(vboxnetadp, 1); - MODULE_DEPEND(vboxnetadp, vboxdrv, 1, 1, 1); --MODULE_DEPEND(vboxnetadp, ng_vboxnetflt, 1, 1, 1); -+MODULE_DEPEND(vboxnetadp, vboxnetflt, 1, 1, 1); - - /** - * Module event handler diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h deleted file mode 100644 index 250a1960a7f4..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-VBoxNetFltInternal.h +++ /dev/null @@ -1,28 +0,0 @@ -Index: src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h -=================================================================== ---- src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h (revision 23391) -+++ src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h (working copy) -@@ -206,6 +206,14 @@ - hook_p output; - /** Original interface flags */ - unsigned int flags; -+ /** Input queue */ -+ struct ifqueue inq; -+ /** Output queue */ -+ struct ifqueue outq; -+ /** Input task */ -+ struct task tskin; -+ /** Output task */ -+ struct task tskout; - /** The MAC address of the interface. */ - RTMAC Mac; - /** @} */ -@@ -241,6 +249,8 @@ - # endif - #elif defined(RT_OS_LINUX) - uint8_t abPadding[320]; -+#elif defined(RT_OS_FREEBSD) -+ uint8_t abPadding[320]; - #else - uint8_t abPadding[128]; - #endif diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c deleted file mode 100644 index f23fedbf0ec0..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-HostDrivers-VBoxNetFlt-freebsd-VBoxNetFlt-freebsd.c +++ /dev/null @@ -1,384 +0,0 @@ -Index: src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c -=================================================================== ---- src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c (revision 23391) -+++ src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c (working copy) -@@ -43,6 +43,8 @@ - #include <sys/socket.h> - #include <sys/sockio.h> - #include <sys/syscallsubr.h> -+#include <sys/queue.h> -+#include <sys/taskqueue.h> - - #include <net/if.h> - #include <net/if_var.h> -@@ -78,8 +80,6 @@ - static ng_rcvdata_t ng_vboxnetflt_rcvdata; - static ng_disconnect_t ng_vboxnetflt_disconnect; - static int ng_vboxnetflt_mod_event(module_t mod, int event, void *data); --static int ng_vboxnetflt_rcv_in(hook_p node, item_p item); --static int ng_vboxnetflt_rcv_out(hook_p node, item_p item); - - /** Netgraph node type */ - #define NG_VBOXNETFLT_NODE_TYPE "vboxnetflt" -@@ -112,8 +112,8 @@ - { - .version = NG_ABI_VERSION, - .name = NG_VBOXNETFLT_NODE_TYPE, -- .mod_event = vboxnetflt_modevent, -- .constructor = ng_vboxnetflt_constructor, -+ .mod_event = vboxnetflt_modevent, -+ .constructor = ng_vboxnetflt_constructor, - .rcvmsg = ng_vboxnetflt_rcvmsg, - .shutdown = ng_vboxnetflt_shutdown, - .newhook = ng_vboxnetflt_newhook, -@@ -122,7 +122,7 @@ - .cmdlist = ng_vboxnetflt_cmdlist, - }; - NETGRAPH_INIT(vboxnetflt, &ng_vboxnetflt_typestruct); --MODULE_VERSION(ng_vboxnetflt, 1); -+MODULE_VERSION(vboxnetflt, 1); - MODULE_DEPEND(ng_vboxnetflt, vboxdrv, 1, 1, 1); - - /** -@@ -267,16 +267,12 @@ - if (strcmp(name, NG_VBOXNETFLT_HOOK_IN) == 0) - { - #if __FreeBSD_version >= 800000 -- NG_HOOK_SET_RCVDATA(hook, ng_vboxnetflt_rcv_in); - NG_HOOK_SET_TO_INBOUND(hook); - #endif - pThis->u.s.input = hook; - } - else if (strcmp(name, NG_VBOXNETFLT_HOOK_OUT) == 0) - { --#if __FreeBSD_version >= 800000 -- NG_HOOK_SET_RCVDATA(hook, ng_vboxnetflt_rcv_out); --#endif - pThis->u.s.output = hook; - } - else -@@ -310,161 +306,171 @@ - - /** - * Handle data on netgraph hooks. -+ * Frames processing is deferred to a taskqueue because this might -+ * be called with non-sleepable locks held and code paths inside -+ * the virtual switch might sleep. - */ - static int ng_vboxnetflt_rcvdata(hook_p hook, item_p item) - { - const node_p node = NG_HOOK_NODE(hook); - PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node); -+ struct ifnet *ifp = pThis->u.s.ifp; - struct mbuf *m; -+ struct m_tag *mtag; -+ bool fActive; - -+ fActive = ASMAtomicUoReadBool(&pThis->fActive); -+ -+ NGI_GET_M(item, m); -+ NG_FREE_ITEM(item); -+ -+ /* Locate tag to see if processing should be skipped for this frame */ -+ mtag = m_tag_locate(m, MTAG_VBOX, PACKET_TAG_VBOX, NULL); -+ if (mtag != NULL) -+ { -+ m_tag_unlink(m, mtag); -+ m_tag_free(mtag); -+ } -+ -+ /* -+ * Handle incoming hook. This is connected to the -+ * input path of the interface, thus handling incoming frames. -+ */ - if (pThis->u.s.input == hook) -- return ng_vboxnetflt_rcv_in(hook, item); -+ { -+ if (mtag != NULL || !fActive) -+ { -+ ether_demux(ifp, m); -+ return (0); -+ } -+ mtx_lock_spin(&pThis->u.s.inq.ifq_mtx); -+ _IF_ENQUEUE(&pThis->u.s.inq, m); -+ mtx_unlock_spin(&pThis->u.s.inq.ifq_mtx); -+ taskqueue_enqueue_fast(taskqueue_fast, &pThis->u.s.tskin); -+ } -+ /** -+ * Handle mbufs on the outgoing hook, frames going to the interface -+ */ - else if (pThis->u.s.output == hook) -- return ng_vboxnetflt_rcv_out(hook, item); -+ { -+ if (mtag != NULL || !fActive) -+ return ether_output_frame(ifp, m); -+ mtx_lock_spin(&pThis->u.s.outq.ifq_mtx); -+ _IF_ENQUEUE(&pThis->u.s.outq, m); -+ mtx_unlock_spin(&pThis->u.s.outq.ifq_mtx); -+ taskqueue_enqueue_fast(taskqueue_fast, &pThis->u.s.tskout); -+ } - else - { -- NGI_GET_M(item, m); -- NG_FREE_ITEM(item); -+ m_freem(m); - } - return (0); - } - -+static int ng_vboxnetflt_shutdown(node_p node) -+{ -+ PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node); -+ bool fActive; -+ -+ /* Prevent node shutdown if we're active */ -+ fActive = ASMAtomicUoReadBool(&pThis->fActive); -+ if (fActive) -+ return (EBUSY); -+ NG_NODE_UNREF(node); -+ return (0); -+} -+ -+static int ng_vboxnetflt_disconnect(hook_p hook) -+{ -+ return (0); -+} -+ - /** -- * Handle incoming hook. This is connected to the -- * input path of the interface, thus handling incoming frames. -+ * Input processing task, handles incoming frames - */ --static int ng_vboxnetflt_rcv_in(hook_p hook, item_p item) -+static void vboxNetFltFreeBSDinput(void *arg, int pending) - { -+ PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)arg; - struct mbuf *m, *m0; -- struct m_tag *mtag; -- const node_p node = NG_HOOK_NODE(hook); -- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node); - struct ifnet *ifp = pThis->u.s.ifp; -- bool fActive, fDropIt = false; - unsigned int cSegs = 0; -+ bool fDropIt = false, fActive; - PINTNETSG pSG; - -- NGI_GET_M(item, m); -- NG_FREE_ITEM(item); -- -- fActive = ASMAtomicUoReadBool(&pThis->fActive); -- if (!fActive) -- goto out; -- -- mtag = m_tag_locate(m, MTAG_VBOX, PACKET_TAG_VBOX, NULL); -- if (mtag != NULL) -- { -- m_tag_unlink(m, mtag); -- m_tag_free(mtag); -- goto out; -- } - vboxNetFltRetain(pThis, true /* fBusy */); -- -- for (m0 = m; m0 != NULL; m0 = m0->m_next) -+ for (;;) - { -- if (m0->m_len > 0) -- cSegs++; -- } -+ mtx_lock_spin(&pThis->u.s.inq.ifq_mtx); -+ _IF_DEQUEUE(&pThis->u.s.inq, m); -+ mtx_unlock_spin(&pThis->u.s.inq.ifq_mtx); -+ if (m == NULL) -+ break; - -+ for (m0 = m; m0 != NULL; m0 = m0->m_next) -+ if (m0->m_len > 0) -+ cSegs++; -+ - #ifdef PADD_RUNT_FRAMES_FROM_HOST -- if (m_length(m, NULL) < 60) -- cSegs++; -+ if (m_length(m, NULL) < 60) -+ cSegs++; - #endif - -- /* Create a copy of the mbuf and hand it to the virtual switch */ -- pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs])); -- vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0); -- fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_WIRE); -- RTMemTmpFree(pSG); -+ /* Create a copy and deliver to the virtual switch */ -+ pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs])); -+ vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0); -+ fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST); -+ RTMemTmpFree(pSG); -+ if (fDropIt) -+ m_freem(m); -+ else -+ ether_demux(ifp, m); -+ } - vboxNetFltRelease(pThis, true /* fBusy */); -- --out: -- /* Only deliver it to the host stack if the destination weren't a guest */ -- if (fDropIt) -- { -- m_freem(m); -- return (0); -- } -- ether_demux(ifp, m); -- return (0); - } - - /** -- * Handle mbufs on the outgoing hook, frames going to the interface -+ * Output processing task, handles outgoing frames - */ --static int ng_vboxnetflt_rcv_out(hook_p hook, item_p item) -+static void vboxNetFltFreeBSDoutput(void *arg, int pending) - { -+ PVBOXNETFLTINS pThis = (PVBOXNETFLTINS)arg; - struct mbuf *m, *m0; -- struct m_tag *mtag; -- const node_p node = NG_HOOK_NODE(hook); -- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node); - struct ifnet *ifp = pThis->u.s.ifp; - unsigned int cSegs = 0; - bool fDropIt = false, fActive; - PINTNETSG pSG; - -- NGI_GET_M(item, m); -- NG_FREE_ITEM(item); -- -- fActive = ASMAtomicUoReadBool(&pThis->fActive); -- if (!fActive) -- return ether_output_frame(ifp, m); -- - vboxNetFltRetain(pThis, true /* fBusy */); -- /* Pass directly to interface if the packet originated from us */ -- mtag = m_tag_locate(m, MTAG_VBOX, PACKET_TAG_VBOX, NULL); -- if (mtag != NULL) -+ for (;;) - { -- m_tag_unlink(m, mtag); -- m_tag_free(mtag); -- goto out; -- } -+ mtx_lock_spin(&pThis->u.s.outq.ifq_mtx); -+ _IF_DEQUEUE(&pThis->u.s.outq, m); -+ mtx_unlock_spin(&pThis->u.s.outq.ifq_mtx); -+ if (m == NULL) -+ break; - -- for (m0 = m; m0 != NULL; m0 = m0->m_next) -- { -- if (m0->m_len > 0) -- cSegs++; -- } -+ for (m0 = m; m0 != NULL; m0 = m0->m_next) -+ if (m0->m_len > 0) -+ cSegs++; - - #ifdef PADD_RUNT_FRAMES_FROM_HOST -- if (m_length(m, NULL) < 60) -- cSegs++; -+ if (m_length(m, NULL) < 60) -+ cSegs++; - #endif -- /* Create a copy and deliver to the virtual switch */ -- pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs])); -- vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0); -- fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST); -- RTMemTmpFree(pSG); -+ /* Create a copy and deliver to the virtual switch */ -+ pSG = RTMemTmpAlloc(RT_OFFSETOF(INTNETSG, aSegs[cSegs])); -+ vboxNetFltFreeBSDMBufToSG(pThis, m, pSG, cSegs, 0); -+ fDropIt = pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST); -+ RTMemTmpFree(pSG); - --out: -+ if (fDropIt) -+ m_freem(m); -+ else -+ ether_output_frame(ifp, m); -+ } - vboxNetFltRelease(pThis, true /* fBusy */); -- if (fDropIt) -- { -- m_freem(m); -- return (0); -- } -- -- return ether_output_frame(ifp, m); - } - --static int ng_vboxnetflt_shutdown(node_p node) --{ -- PVBOXNETFLTINS pThis = NG_NODE_PRIVATE(node); -- bool fActive; -- -- /* Prevent node shutdown if we're active */ -- fActive = ASMAtomicUoReadBool(&pThis->fActive); -- if (fActive) -- return (EBUSY); -- NG_NODE_UNREF(node); -- return (0); --} -- --static int ng_vboxnetflt_disconnect(hook_p hook) --{ -- return (0); --} -- - /** - * Called to deliver a frame to either the host, the wire or both. - */ -@@ -536,13 +542,23 @@ - - /* Create a new netgraph node for this instance */ - if (ng_make_node_common(&ng_vboxnetflt_typestruct, &node) != 0) -- return VERR_INTERNAL_ERROR; -+ return VERR_INTERNAL_ERROR; - - RTSpinlockAcquire(pThis->hSpinlock, &Tmp); - ASMAtomicUoWritePtr((void * volatile *)&pThis->u.s.ifp, ifp); - pThis->u.s.node = node; - bcopy(IF_LLADDR(ifp), &pThis->u.s.Mac, ETHER_ADDR_LEN); - ASMAtomicUoWriteBool(&pThis->fDisconnectedFromHost, false); -+ /* Initialize deferred input queue */ -+ bzero(&pThis->u.s.inq, sizeof(struct ifqueue)); -+ mtx_init(&pThis->u.s.inq.ifq_mtx, "vboxnetflt inq", NULL, MTX_SPIN); -+ TASK_INIT(&pThis->u.s.tskin, 0, vboxNetFltFreeBSDinput, pThis); -+ -+ /* Initialize deferred output queue */ -+ bzero(&pThis->u.s.outq, sizeof(struct ifqueue)); -+ mtx_init(&pThis->u.s.outq.ifq_mtx, "vboxnetflt outq", NULL, MTX_SPIN); -+ TASK_INIT(&pThis->u.s.tskout, 0, vboxNetFltFreeBSDoutput, pThis); -+ - RTSpinlockRelease(pThis->hSpinlock, &Tmp); - - NG_NODE_SET_PRIVATE(node, pThis); -@@ -571,7 +587,10 @@ - } - - if (ifp0 != NULL) -+ { -+ vboxNetFltOsDeleteInstance(pThis); - vboxNetFltOsInitInstance(pThis, NULL); -+ } - - return !ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost); - } -@@ -579,6 +598,12 @@ - void vboxNetFltOsDeleteInstance(PVBOXNETFLTINS pThis) - { - -+ taskqueue_drain(taskqueue_fast, &pThis->u.s.tskin); -+ taskqueue_drain(taskqueue_fast, &pThis->u.s.tskout); -+ -+ mtx_destroy(&pThis->u.s.inq.ifq_mtx); -+ mtx_destroy(&pThis->u.s.outq.ifq_mtx); -+ - if (pThis->u.s.node != NULL) - ng_rmnode_self(pThis->u.s.node); - pThis->u.s.node = NULL; diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk b/emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk new file mode 100644 index 000000000000..7f226b633c9b --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Installer-Makefile.kmk @@ -0,0 +1,15 @@ +--- src/VBox/Installer/Makefile.kmk.orig 2009-10-05 14:31:40.000000000 +0200 ++++ src/VBox/Installer/Makefile.kmk 2009-10-05 14:32:09.000000000 +0200 +@@ -38,10 +38,12 @@ + if "$(KBUILD_TARGET)" == "win" && "$(KBUILD_HOST)" == "win" + include $(PATH_SUB_CURRENT)/win/Makefile.kmk + endif ++if 0 + if "$(KBUILD_TARGET)" == "freebsd" && "$(KBUILD_HOST)" == "freebsd" + include $(PATH_SUB_CURRENT)/freebsd/Makefile.kmk + endif + endif ++endif + + include $(PATH_SUB_CURRENT)/common/Makefile.kmk + diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp new file mode 100644 index 000000000000..f47f49c97b0e --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-AudioAdapterImpl.cpp @@ -0,0 +1,14 @@ +--- src/VBox/Main/AudioAdapterImpl.cpp.orig 2009-12-15 14:45:08.000000000 +0900 ++++ src/VBox/Main/AudioAdapterImpl.cpp 2009-12-15 14:45:42.000000000 +0900 +@@ -261,6 +261,11 @@ + #if defined (RT_OS_LINUX) || defined (RT_OS_FREEBSD) || defined(VBOX_WITH_SOLARIS_OSS) + case AudioDriverType_OSS: + #endif ++#ifdef RT_OS_FREEBSD ++# ifdef VBOX_WITH_PULSE ++ case AudioDriverType_Pulse: ++# endif ++#endif + #ifdef RT_OS_DARWIN + case AudioDriverType_CoreAudio: + #endif diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp new file mode 100644 index 000000000000..cb67a48f5a44 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl.cpp @@ -0,0 +1,11 @@ +--- src/VBox/Main/ConsoleImpl.cpp.orig ++++ src/VBox/Main/ConsoleImpl.cpp +@@ -6168,7 +6168,7 @@ Console::usbDetachCallback(Console *that + } + + #endif /* VBOX_WITH_USB */ +-#if (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) && !defined(VBOX_WITH_NETFLT) ++#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD)) + + /** + * Helper function to handle host interface device creation and attachment. diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp new file mode 100644 index 000000000000..4373abea3487 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-ConsoleImpl2.cpp @@ -0,0 +1,103 @@ +--- src/VBox/Main/ConsoleImpl2.cpp.orig 2009-12-15 14:48:58.000000000 +0900 ++++ src/VBox/Main/ConsoleImpl2.cpp 2009-12-15 14:48:42.000000000 +0900 +@@ -86,6 +86,7 @@ + # include <sys/ioctl.h> + # include <sys/socket.h> + # include <net/if.h> ++# include <net80211/ieee80211_ioctl.h> + #endif + + #if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_NETFLT) +@@ -1605,6 +1605,15 @@ + break; + } + #endif ++#ifdef RT_OS_FREEBSD ++# ifdef VBOX_WITH_PULSE ++ case AudioDriverType_Pulse: ++ { ++ rc = CFGMR3InsertString(pCfg, "AudioDriver", "pulse"); RC_CHECK(); ++ break; ++ } ++# endif ++#endif + #ifdef RT_OS_DARWIN + case AudioDriverType_CoreAudio: + { +@@ -2394,6 +2394,42 @@ DECLCALLBACK(int) Console::configConstru + /* we're not releasing the INetCfg stuff here since we use it later to figure out whether it is wireless */ + + # elif defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) ++# if defined(RT_OS_FREEBSD) ++ /* ++ * If we bridge to a tap interface open it the `old' direct way. ++ * This works and performs better than bridging a physical ++ * interface via the current FreeBSD vboxnetflt implementation. ++ */ ++ if (!strncmp(pszHifName, "tap", sizeof "tap" - 1)) { ++ hrc = pThis->attachToTapInterface(aNetworkAdapter); ++ if (FAILED(hrc)) ++ { ++ switch (hrc) ++ { ++ case VERR_ACCESS_DENIED: ++ return VMSetError(pVM, VERR_HOSTIF_INIT_FAILED, RT_SRC_POS, N_( ++ "Failed to open '/dev/%s' for read/write access. Please check the " ++ "permissions of that node, and that the net.link.tap.user_open " ++ "sysctl is set. Either run 'chmod 0666 /dev/%s' or " ++ "change the group of that node to vboxusers and make yourself " ++ "a member of that group. Make sure that these changes are permanent."), pszHifName, pszHifName); ++ default: ++ AssertMsgFailed(("Could not attach to tap interface! Bad!\n")); ++ return VMSetError(pVM, VERR_HOSTIF_INIT_FAILED, RT_SRC_POS, N_( ++ "Failed to initialize Host Interface Networking")); ++ } ++ } ++ ++ Assert ((int)pThis->maTapFD[uInstance] >= 0); ++ if ((int)pThis->maTapFD[uInstance] >= 0) ++ { ++ rc = CFGMR3InsertString(pLunL0, "Driver", "HostInterface"); RC_CHECK(); ++ rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); ++ rc = CFGMR3InsertInteger(pCfg, "FileHandle", pThis->maTapFD[uInstance]); RC_CHECK(); ++ } ++ break; ++ } ++# endif + /** @todo Check for malformed names. */ + const char *pszTrunk = pszHifName; + +@@ -2495,6 +2496,33 @@ DECLCALLBACK(int) Console::configConstru + } + else + Log(("Failed to open wireless socket\n")); ++# elif defined(RT_OS_FREEBSD) ++ int iSock = socket(AF_INET, SOCK_DGRAM, 0); ++ if (iSock >= 0) ++ { ++ struct ieee80211req ireq; ++ uint8_t data[32]; ++ ++ (void) memset(&ireq, 0, sizeof(ireq)); ++ (void) strncpy(ireq.i_name, pszHifName, sizeof(ireq.i_name)); ++ ireq.i_type = IEEE80211_IOC_SSID; ++ ireq.i_val = -1; ++ ireq.i_data = data; ++ ireq.i_len = sizeof(data); ++ ++ bool fSharedMacOnWire = ioctl(iSock, SIOCG80211, &ireq) >= 0; ++ close(iSock); ++ if (fSharedMacOnWire) ++ { ++ rc = CFGMR3InsertInteger(pCfg, "SharedMacOnWire", true); ++ RC_CHECK(); ++ Log(("Set SharedMacOnWire\n")); ++ } ++ else ++ Log(("Failed to get wireless name\n")); ++ } ++ else ++ Log(("Failed to open wireless socket\n")); + # elif defined(RT_OS_WINDOWS) + # define DEVNAME_PREFIX L"\\\\.\\" + /* we are getting the medium type via IOCTL_NDIS_QUERY_GLOBAL_STATS Io Control diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h b/emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h new file mode 100644 index 000000000000..2471480886d8 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Main-include-ConsoleImpl.h @@ -0,0 +1,20 @@ +--- src/VBox/Main/include/ConsoleImpl.h.orig ++++ src/VBox/Main/include/ConsoleImpl.h +@@ -410,7 +410,7 @@ private: + + HRESULT callTapSetupApplication(bool isStatic, RTFILE tapFD, Bstr &tapDevice, + Bstr &tapSetupApplication); +-#if (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) && !defined(VBOX_WITH_NETFLT) ++#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD)) + HRESULT attachToTapInterface(INetworkAdapter *networkAdapter); + HRESULT detachFromTapInterface(INetworkAdapter *networkAdapter); + #endif +@@ -582,7 +582,7 @@ private: + PPDMLED mapNetworkLeds[SchemaDefs::NetworkAdapterCount]; + PPDMLED mapSharedFolderLed; + PPDMLED mapUSBLed[2]; +-#if !defined(VBOX_WITH_NETFLT) && (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) ++#if ((defined(RT_OS_LINUX) && !defined(VBOX_WITH_NETFLT)) || defined(RT_OS_FREEBSD)) + Utf8Str maTAPDeviceName[8]; + RTFILE maTapFD[8]; + #endif diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp new file mode 100644 index 000000000000..005a25e4a79a --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-VBox-log-vbox.cpp @@ -0,0 +1,82 @@ +--- src/VBox/Runtime/VBox/log-vbox.cpp (revision 25471) ++++ src/VBox/Runtime/VBox/log-vbox.cpp (revision 25472) +@@ -135,6 +135,12 @@ + # include <Windows.h> + # elif defined(RT_OS_LINUX) + # include <unistd.h> ++# elif defined(RT_OS_FREEBSD) ++# include <sys/param.h> ++# include <sys/sysctl.h> ++# include <sys/user.h> ++# include <stdlib.h> ++# include <unistd.h> + # elif defined(RT_OS_SOLARIS) + # define _STRUCTURED_PROC 1 + # undef _FILE_OFFSET_BITS /* procfs doesn't like this */ +@@ -157,6 +163,7 @@ + # include <iprt/path.h> + # include <iprt/process.h> + # include <iprt/string.h> ++# include <iprt/mem.h> + # include <stdio.h> + #endif + +@@ -339,12 +346,8 @@ + fclose(pFile); + } + +-# elif defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) +-# ifdef RT_OS_LINUX ++# elif defined(RT_OS_LINUX) + FILE *pFile = fopen("/proc/self/cmdline", "r"); +-# else /* RT_OS_FREEBSD: */ +- FILE *pFile = fopen("/proc/curproc/cmdline", "r"); +-# endif + if (pFile) + { + /* braindead */ +@@ -370,7 +373,44 @@ + RTLogLoggerEx(pLogger, 0, ~0U, "\n"); + fclose(pFile); + } ++# elif defined(RT_OS_FREEBSD) ++ char *pszArgFileBuf = NULL; ++ int aiName[4]; ++ size_t cchArgs; + ++ aiName[0] = CTL_KERN; ++ aiName[1] = KERN_PROC; ++ aiName[2] = KERN_PROC_ARGS; ++ aiName[3] = -1; ++ ++ /* Retrieve the required length first */ ++ cchArgs = 0; ++ int rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), NULL, &cchArgs, NULL, 0); ++ ++ if (cchArgs > 0) ++ { ++ pszArgFileBuf = (char *)RTMemAllocZ(cchArgs + 1 /* Safety */); ++ if (pszArgFileBuf) ++ { ++ /* Retrieve the argument list */ ++ rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), pszArgFileBuf, &cchArgs, NULL, 0); ++ if (!rcBSD) ++ { ++ /* ++ * cmdline is a flattened argument list so we need ++ * to convert all \0 to blanks ++ */ ++ for(size_t i = 0; i < cchArgs - 1; i++) ++ { ++ if(pszArgFileBuf[i] == '\0') ++ pszArgFileBuf[i] = ' '; ++ } ++ ++ RTLogLoggerEx(pLogger, 0, ~0U, "Commandline: %s\n", pszArgFileBuf); ++ } ++ RTMemFree(pszArgFileBuf); ++ } ++ } + # elif defined(RT_OS_L4) || defined(RT_OS_OS2) || defined(RT_OS_DARWIN) + /* commandline? */ + # else diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c deleted file mode 100644 index c7c56d5814ee..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-spinlock-r0drv-freebsd.c +++ /dev/null @@ -1,14 +0,0 @@ -Index: src/VBox/Runtime/r0drv/freebsd/spinlock-r0drv-freebsd.c -@@ -171,7 +171,12 @@ RTDECL(void) RTSpinlockAcquire(RTSPINLOC - AssertPtr(pThis); - Assert(pThis->u32Magic == RTSPINLOCK_MAGIC); - #ifdef RT_STRICT -+#if 0 -+ /* This can't work because at least RTPowerNotificationRegister calls -+ * RTSpinlockAcquire with *pTmp allocated on the stack. -+ */ - Assert(pTmp->uFlags == 0); -+#endif - pTmp->uFlags = 42; - #endif - diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h deleted file mode 100644 index 4332049487c3..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r0drv-freebsd-the-freebsd-kernel.h +++ /dev/null @@ -1,11 +0,0 @@ ---- src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h.orig 2009-09-11 14:48:47.000000000 +0200 -+++ src/VBox/Runtime/r0drv/freebsd/the-freebsd-kernel.h 2009-09-11 14:48:54.000000000 +0200 -@@ -76,7 +76,7 @@ - # define SLEEPQ_TIMEDWAIT_SIG(EventInt) sleepq_timedwait_sig(EventInt, 0) - # define SLEEPQ_WAIT(EventInt) sleepq_wait(EventInt, 0) - # define SLEEPQ_WAIT_SIG(EventInt) sleepq_wait_sig(EventInt, 0) --#elif -+#else - # define SLEEPQ_TIMEDWAIT(EventInt) sleepq_timedwait(EventInt) - # define SLEEPQ_TIMEDWAIT_SIG(EventInt) sleepq_timedwait_sig(EventInt) - # define SLEEPQ_WAIT(EventInt) sleepq_wait(EventInt) diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp new file mode 100644 index 000000000000..2332212ead14 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-VBox-Runtime-r3-freebsd-rtProcInitExePath-freebsd.cpp @@ -0,0 +1,81 @@ +--- src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp (revision 25471) ++++ src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp (revision 25472) +@@ -32,6 +32,8 @@ + * Header Files * + *******************************************************************************/ + #define LOG_GROUP RTLOGGROUP_PROCESS ++#include <sys/param.h> ++#include <sys/sysctl.h> + #include <unistd.h> + #include <errno.h> + #include <dlfcn.h> +@@ -47,17 +49,20 @@ + + DECLHIDDEN(int) rtProcInitExePath(char *pszPath, size_t cchPath) + { +- /* +- * Read the /proc/curproc/file link, convert to native and return it. +- */ +- int cchLink = readlink("/proc/curproc/file", pszPath, cchPath - 1); +- if (cchLink > 0 && (size_t)cchLink <= cchPath - 1) +- { +- pszPath[cchLink] = '\0'; ++ int aiName[4]; ++ size_t cchExePath; + ++ aiName[0] = CTL_KERN; ++ aiName[1] = KERN_PROC; ++ aiName[2] = KERN_PROC_PATHNAME; ++ aiName[3] = getpid(); ++ ++ cchExePath = cchPath - 1; ++ if(sysctl(aiName, RT_ELEMENTS(aiName), pszPath, &cchExePath, NULL, 0) == 0) ++ { + char *pszTmp = NULL; + int rc = rtPathFromNative(&pszTmp, pszPath); +- AssertMsgRCReturn(rc, ("rc=%Rrc pszLink=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cchLink, pszPath), rc); ++ AssertMsgRCReturn(rc, ("rc=%Rrc pszLink=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cchExePath, pszPath), rc); + + size_t cch = strlen(pszTmp); + AssertReturn(cch <= cchPath, VERR_BUFFER_OVERFLOW); +@@ -68,39 +73,8 @@ + return VINF_SUCCESS; + } + +- int err = errno; +- +- /* +- * Fall back on the dynamic linker since /proc is optional. +- */ +- void *hExe = dlopen(NULL, 0); +- if (hExe) +- { +- struct link_map const *pLinkMap = 0; +- if (dlinfo(hExe, RTLD_DI_LINKMAP, &pLinkMap) == 0) +- { +- const char *pszImageName = pLinkMap->l_name; +- if (*pszImageName == '/') /* this may not always be absolute, despite the docs. :-( */ +- { +- char *pszTmp = NULL; +- int rc = rtPathFromNative(&pszTmp, pszImageName); +- AssertMsgRCReturn(rc, ("rc=%Rrc pszImageName=\"%s\"\n", rc, pszImageName), rc); +- +- size_t cch = strlen(pszTmp); +- AssertReturn(cch <= cchPath, VERR_BUFFER_OVERFLOW); +- +- memcpy(pszPath, pszTmp, cch + 1); +- RTStrFree(pszTmp); +- +- return VINF_SUCCESS; +- } +- /** @todo Try search the PATH for the file name or append the current +- * directory, which ever makes sense... */ +- } +- } +- +- int rc = RTErrConvertFromErrno(err); +- AssertMsgFailed(("rc=%Rrc err=%d cchLink=%d hExe=%p\n", rc, err, cchLink, hExe)); ++ int rc = RTErrConvertFromErrno(errno); ++ AssertMsgFailed(("rc=%Rrc errno=%d cchLink=%d\n", rc, errno, cchExePath)); + return rc; + } diff --git a/emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp b/emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp deleted file mode 100644 index 955bf7a3a151..000000000000 --- a/emulators/virtualbox-ose/files/patch-src-VBox-apps-adpctl_VBoxNetAdpCtl.cpp +++ /dev/null @@ -1,207 +0,0 @@ ---- src/apps/adpctl/VBoxNetAdpCtl.cpp.r22902 2009-04-10 14:03:59.000000000 +0200 -+++ src/apps/adpctl/VBoxNetAdpCtl.cpp 2009-09-16 14:07:11.000000000 +0200 -@@ -1,4 +1,4 @@ --/* $Id: VBoxNetAdpCtl.cpp 18864 2009-04-10 12:03:59Z vboxsync $ */ -+/* $Id: VBoxNetAdpCtl.cpp 23064 2009-09-16 12:07:11Z vboxsync $ */ - /** @file - * Apps - VBoxAdpCtl, Configuration tool for vboxnetX adapters. - */ -@@ -24,7 +24,6 @@ - /******************************************************************************* - * Header Files * - *******************************************************************************/ --#include <assert.h> - #include <stdio.h> - #include <stdlib.h> - #include <string.h> -@@ -36,11 +35,12 @@ - # include <sys/ioccom.h> - #endif - --/* @todo Error codes must be moved to some header file */ --#define ADPCTLERR_NO_CTL_DEV 3 --#define ADPCTLERR_IOCTL_FAILED 4 -+/** @todo Error codes must be moved to some header file */ -+#define ADPCTLERR_BAD_NAME 2 -+#define ADPCTLERR_NO_CTL_DEV 3 -+#define ADPCTLERR_IOCTL_FAILED 4 - --/* @todo These are duplicates from src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h */ -+/** @todo These are duplicates from src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h */ - #define VBOXNETADP_CTL_DEV_NAME "/dev/vboxnetctl" - #define VBOXNETADP_NAME "vboxnet" - #define VBOXNETADP_MAX_NAME_LEN 32 -@@ -85,6 +85,7 @@ - pcszArg5, /* [network mask] */ - NULL /* terminator */ - }; -+ char * const envp[] = { (char*)"LC_ALL=C", NULL }; - int rc = EXIT_SUCCESS; - pid_t childPid = fork(); - switch (childPid) -@@ -94,7 +95,7 @@ - rc = EXIT_FAILURE; - break; - case 0: /* Child process. */ -- if (execv(VBOXADPCTL_IFCONFIG_PATH, (char * const*)argv) == -1) -+ if (execve(VBOXADPCTL_IFCONFIG_PATH, (char * const*)argv, envp) == -1) - rc = EXIT_FAILURE; - break; - default: /* Parent process. */ -@@ -108,15 +109,39 @@ - #define MAX_ADDRESSES 128 - #define MAX_ADDRLEN 64 - --static bool removeAddresses(const char *pszAdapterName) -+static bool removeAddresses(char *pszAdapterName) - { -- char szCmd[1024], szBuf[1024]; -+ char szBuf[1024]; - char aszAddresses[MAX_ADDRESSES][MAX_ADDRLEN]; -+ int rc; -+ int fds[2]; -+ char * const argv[] = { VBOXADPCTL_IFCONFIG_PATH, pszAdapterName, NULL }; -+ char * const envp[] = { (char*)"LC_ALL=C", NULL }; - - memset(aszAddresses, 0, sizeof(aszAddresses)); -- snprintf(szCmd, sizeof(szCmd), VBOXADPCTL_IFCONFIG_PATH " %s", pszAdapterName); -- FILE *fp = popen(szCmd, "r"); - -+ rc = pipe(fds); -+ if (rc < 0) -+ return false; -+ -+ pid_t pid = fork(); -+ if (pid < 0) -+ return false; -+ -+ if (pid == 0) -+ { -+ /* child */ -+ close(fds[0]); -+ close(STDOUT_FILENO); -+ rc = dup2(fds[1], STDOUT_FILENO); -+ if (rc >= 0) -+ execve(VBOXADPCTL_IFCONFIG_PATH, argv, envp); -+ return false; -+ } -+ -+ /* parent */ -+ close(fds[1]); -+ FILE *fp = fdopen(fds[0], "r"); - if (!fp) - return false; - -@@ -124,9 +149,6 @@ - for (cAddrs = 0; cAddrs < MAX_ADDRESSES && fgets(szBuf, sizeof(szBuf), fp);) - { - int cbSkipWS = strspn(szBuf, " \t"); --#if 0 /* Don't use this! assert() breaks the mac build. Use IPRT or be a rectangular building thing. */ -- assert(cbSkipWS < 20); --#endif - char *pszWord = strtok(szBuf + cbSkipWS, " "); - /* We are concerned with IPv6 address lines only. */ - if (!pszWord || strcmp(pszWord, "inet6")) -@@ -143,11 +165,12 @@ - continue; - strncpy(aszAddresses[cAddrs++], pszWord, MAX_ADDRLEN-1); - } -- pclose(fp); -+ fclose(fp); - - for (int i = 0; i < cAddrs; i++) - { -- if (executeIfconfig(pszAdapterName, "inet6", VBOXADPCTL_DEL_CMD, aszAddresses[i]) != EXIT_SUCCESS) -+ if (executeIfconfig(pszAdapterName, "inet6", -+ VBOXADPCTL_DEL_CMD, aszAddresses[i]) != EXIT_SUCCESS) - return false; - } - -@@ -166,19 +189,41 @@ - int rc = ioctl(fd, uCmd, pData); - if (rc == -1) - { -- perror("VBoxNetAdpCtl: ioctl failed for " VBOXNETADP_CTL_DEV_NAME); -+ perror("VBoxNetAdpCtl: ioctl failed for " VBOXNETADP_CTL_DEV_NAME); - rc = ADPCTLERR_IOCTL_FAILED; - } -- -+ - close(fd); -- -+ - return rc; - } - -+int checkAdapterName(const char *pcszNameIn, char *pszNameOut) -+{ -+ int iAdapterIndex = -1; -+ -+ if ( strlen(pcszNameIn) >= VBOXNETADP_MAX_NAME_LEN -+ || sscanf(pcszNameIn, "vboxnet%d", &iAdapterIndex) != 1 -+ || iAdapterIndex < 0 || iAdapterIndex > 99 ) -+ { -+ fprintf(stderr, "Setting configuration for %s is not supported.\n", pcszNameIn); -+ return ADPCTLERR_BAD_NAME; -+ } -+ sprintf(pszNameOut, "vboxnet%d", iAdapterIndex); -+ if (strcmp(pszNameOut, pcszNameIn)) -+ { -+ fprintf(stderr, "Invalid adapter name %s.\n", pcszNameIn); -+ return ADPCTLERR_BAD_NAME; -+ } -+ -+ return 0; -+} -+ - int main(int argc, char *argv[]) - - { -- const char *pszAdapterName; -+ char szAdapterName[VBOXNETADP_MAX_NAME_LEN]; -+ char *pszAdapterName; - const char *pszAddress; - const char *pszNetworkMask = NULL; - const char *pszOption = NULL; -@@ -216,13 +261,18 @@ - pszAddress = argv[2]; - if (strcmp("remove", pszAddress) == 0) - { -- strncpy(Req.szName, pszAdapterName, sizeof(Req.szName)); -+ rc = checkAdapterName(pszAdapterName, szAdapterName); -+ if (rc) -+ return rc; -+ memset(&Req, '\0', sizeof(Req)); -+ snprintf(Req.szName, sizeof(Req.szName), "%s", szAdapterName); - return doIOCtl(VBOXNETADP_CTL_REMOVE, &Req); - } - break; - case 2: - if (strcmp("add", argv[1]) == 0) - { -+ memset(&Req, '\0', sizeof(Req)); - rc = doIOCtl(VBOXNETADP_CTL_ADD, &Req); - if (rc == 0) - puts(Req.szName); -@@ -237,11 +287,11 @@ - return 1; - } - -- if (strncmp("vboxnet", pszAdapterName, 7)) -- { -- fprintf(stderr, "Setting configuration for %s is not supported.\n", pszAdapterName); -- return 2; -- } -+ rc = checkAdapterName(pszAdapterName, szAdapterName); -+ if (rc) -+ return rc; -+ -+ pszAdapterName = szAdapterName; - - if (fRemove) - { -@@ -276,3 +326,4 @@ - } - return rc; - } -+ diff --git a/emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp b/emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp new file mode 100644 index 000000000000..707189e1cac7 --- /dev/null +++ b/emulators/virtualbox-ose/files/patch-src-settings-vm-VBoxVMSettingsAudio.cpp @@ -0,0 +1,12 @@ +--- src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsAudio.cpp.orig 2009-12-17 15:28:01.000000000 +0100 ++++ src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsAudio.cpp 2009-12-21 14:14:35.000000000 +0100 +@@ -89,6 +89,9 @@ + #endif + #if defined Q_OS_LINUX || defined Q_OS_FREEBSD + mCbAudioDriver->addItem (vboxGlobal().toString (KAudioDriverType_OSS)); ++# ifdef VBOX_WITH_PULSE ++ mCbAudioDriver->addItem (vboxGlobal().toString (KAudioDriverType_Pulse)); ++# endif + #endif + #if defined Q_OS_LINUX + # ifdef VBOX_WITH_ALSA |