aboutsummaryrefslogtreecommitdiff
path: root/emulators/virtualbox-ose-additions/files
diff options
context:
space:
mode:
authorBernhard Froehlich <decke@FreeBSD.org>2013-05-15 21:22:21 +0000
committerBernhard Froehlich <decke@FreeBSD.org>2013-05-15 21:22:21 +0000
commit2931f65e37596cae6de663dfbe1c15c68c8cf3c4 (patch)
tree199cdec14ebbcd7da90f2d745d08e5ff6f139181 /emulators/virtualbox-ose-additions/files
parent07722cdcee696ddeb4fd160619e752f2e2781678 (diff)
downloadports-2931f65e37596cae6de663dfbe1c15c68c8cf3c4.tar.gz
ports-2931f65e37596cae6de663dfbe1c15c68c8cf3c4.zip
Notes
Diffstat (limited to 'emulators/virtualbox-ose-additions/files')
-rw-r--r--emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk40
-rw-r--r--emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c120
-rw-r--r--emulators/virtualbox-ose-additions/files/vboxguest.in16
3 files changed, 176 insertions, 0 deletions
diff --git a/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk b/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk
new file mode 100644
index 000000000000..59962fd217b3
--- /dev/null
+++ b/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-Makefile.kmk
@@ -0,0 +1,40 @@
+--- src/VBox/Additions/common/crOpenGL/Makefile.kmk.orig 2013-04-12 12:35:06.000000000 +0200
++++ src/VBox/Additions/common/crOpenGL/Makefile.kmk 2013-05-02 23:33:26.523212251 +0200
+@@ -42,7 +42,7 @@
+
+ if1of ($(KBUILD_TARGET), linux solaris freebsd)
+ #VBoxOGL_DRI = 1
+- ifn1of ($(KBUILD_TARGET),solaris freebsd) # No DRI on Solaris yet
++ ifn1of ($(KBUILD_TARGET),solaris) # No DRI on Solaris yet
+ VBoxOGL_FAKEDRI = 1
+ endif
+
+@@ -209,8 +209,13 @@
+ $(PATH_STAGE_LIB)/libXfixes.so \
+ $(PATH_STAGE_LIB)/libXext.so
+ ifdef VBoxOGL_FAKEDRI
+- VBoxOGL_LIBS += \
++ ifeq ($(KBUILD_TARGET), freebsd)
++ VBoxOGL_LIBS += \
++ elf
++ else
++ VBoxOGL_LIBS += \
+ dl
++ endif
+ endif
+ endif
+ ifdef VBOX_WITH_CRHGSMI
+@@ -368,6 +373,13 @@
+ | $$(dir $$@)
+ $(call MSG_GENERATE,python,$@,$<)
+ $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI)
++ else ifeq ($(KBUILD_TARGET),freebsd)
++$(VBOX_PATH_CROGL_GENFILES)/freebsd_exports.c: \
++ $(PATH_SUB_CURRENT)/FreeBSD_exports.py \
++ $(VBOX_CROGL_API_FILES) $(PATH_SUB_CURRENT)/entrypoints.py \
++ | $$(dir $$@)
++ $(call MSG_GENERATE,python,$@,$<)
++ $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI)
+ else
+ $(VBOX_PATH_CROGL_GENFILES)/linux_exports.c: \
+ $(PATH_SUB_CURRENT)/Linux_exports.py \
diff --git a/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c b/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c
new file mode 100644
index 000000000000..30e49b85c315
--- /dev/null
+++ b/emulators/virtualbox-ose-additions/files/patch-src-VBox-Additions-common-crOpenGL-fakedri_drv.c
@@ -0,0 +1,120 @@
+--- src/VBox/Additions/common/crOpenGL/fakedri_drv.c.orig 2012-12-19 13:25:04.000000000 -0500
++++ src/VBox/Additions/common/crOpenGL/fakedri_drv.c 2013-01-27 17:57:04.000000000 -0500
+@@ -29,6 +29,15 @@
+ #include <dlfcn.h>
+ #include <elf.h>
+ #include <unistd.h>
++
++#include <sys/param.h>
++#if defined(BSD)
++#include <fcntl.h>
++#include <gelf.h>
++#include <libelf.h>
++#include <string.h>
++#endif
++
+ /** X server message type definitions. */
+ typedef enum {
+ X_PROBED, /* Value was probed */
+@@ -50,11 +59,11 @@
+
+ //@todo this could be different...
+ #ifdef RT_ARCH_AMD64
+-# define DRI_DEFAULT_DRIVER_DIR "/usr/lib64/dri:/usr/lib/dri:/usr/lib/x86_64-linux-gnu/dri"
+-# define DRI_XORG_DRV_DIR "/usr/lib/xorg/modules/drivers/"
++# define DRI_DEFAULT_DRIVER_DIR "/usr/local/lib/dri"
++# define DRI_XORG_DRV_DIR "/usr/local/lib/xorg/modules/drivers/"
+ #else
+-# define DRI_DEFAULT_DRIVER_DIR "/usr/lib/dri:/usr/lib/i386-linux-gnu/dri"
+-# define DRI_XORG_DRV_DIR "/usr/lib/xorg/modules/drivers/"
++# define DRI_DEFAULT_DRIVER_DIR "/usr/local/lib/dri"
++# define DRI_XORG_DRV_DIR "/usr/local/lib/xorg/modules/drivers/"
+ #endif
+
+ #ifdef DEBUG_DRI_CALLS
+@@ -209,6 +218,85 @@
+
+ #define FAKEDRI_JMP64_PATCH_SIZE 13
+
++#if defined(BSD)
++/* Provide basic dladdr1 flags */
++enum {
++ RTLD_DL_SYMENT = 1
++};
++
++/* Provide a minimal local version of dladdr1 */
++static int
++dladdr1(const void *address, Dl_info *dlip, void **info, int flags)
++{
++ static DRI_ELFSYM desym;
++ GElf_Sym sym;
++ GElf_Shdr shdr;
++ Elf *elf;
++ Elf_Scn *scn;
++ Elf_Data *data;
++ int ret, fd, count, i;
++
++ /* Initialize variables */
++ fd = -1;
++ elf = NULL;
++
++ /* Call dladdr first */
++ ret = dladdr(address, dlip);
++ if (ret == 0) goto err_exit;
++
++ /* Check for supported flags */
++ if (flags != RTLD_DL_SYMENT) return 1;
++
++ /* Open shared library's ELF file */
++ if (elf_version(EV_CURRENT) == EV_NONE) goto err_exit;
++ fd = open(dlip->dli_fname, O_RDONLY);
++ if (fd < 0) goto err_exit;
++ elf = elf_begin(fd, ELF_C_READ, NULL);
++ if (elf == NULL) goto err_exit;
++
++ /* Find the '.dynsym' section */
++ scn = elf_nextscn(elf, NULL);
++ while (scn != NULL) {
++ if (gelf_getshdr(scn, &shdr) == NULL) goto err_exit;
++ if (shdr.sh_type == SHT_DYNSYM) break;
++ scn = elf_nextscn(elf, scn);
++ }
++ if (scn == NULL) goto err_exit;
++
++ /* Search for the requested symbol by name and offset */
++ data = elf_getdata(scn, NULL);
++ count = shdr.sh_size / shdr.sh_entsize;
++ for (i = 0; i < count; i++) {
++ gelf_getsym(data, i, &sym);
++ if ((strcmp(dlip->dli_sname,
++ elf_strptr(elf, shdr.sh_link, sym.st_name)) == 0) &&
++ (sym.st_value == (dlip->dli_saddr - dlip->dli_fbase))) {
++ break;
++ }
++ }
++
++ /* Close ELF file */
++ elf_end(elf);
++ close(fd);
++
++ /* Return symbol entry in native format */
++ desym.st_name = sym.st_name;
++ desym.st_info = sym.st_info;
++ desym.st_other = sym.st_other;
++ desym.st_shndx = sym.st_shndx;
++ desym.st_value = sym.st_value;
++ desym.st_size = sym.st_size;
++ *info = &desym;
++ return 1;
++
++ /* Error handler */
++err_exit:
++ if (elf != NULL) elf_end(elf);
++ if (fd >= 0) close(fd);
++ return 0;
++}
++#endif
++
+ static void
+ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd)
+ {
diff --git a/emulators/virtualbox-ose-additions/files/vboxguest.in b/emulators/virtualbox-ose-additions/files/vboxguest.in
index f542b22ef472..ade179f1e22f 100644
--- a/emulators/virtualbox-ose-additions/files/vboxguest.in
+++ b/emulators/virtualbox-ose-additions/files/vboxguest.in
@@ -32,10 +32,26 @@ vboxguest_start()
return 1
fi
fi
+ if ! kldstat -q -m vgapci/vboxvideo;
+ then
+ if ! kldload vboxvideo > /dev/null 2>&1;
+ then
+ warn "Can't load vboxvideo module."
+ return 1
+ fi
+ fi
}
vboxguest_stop()
{
+ if kldstat -q -m vgapci/vboxvideo;
+ then
+ if ! kldunload vboxvideo > /dev/null 2>&1;
+ then
+ warn "Can't unload vboxvideo module."
+ return 1
+ fi
+ fi
if kldstat -q -m pci/vboxguest;
then
if ! kldunload vboxguest > /dev/null 2>&1;