svn commit: r450636 - in head/emulators/virtualbox-ose: . files

Jung-uk Kim jkim at FreeBSD.org
Mon Sep 25 21:39:31 UTC 2017


Author: jkim
Date: Mon Sep 25 21:39:29 2017
New Revision: 450636
URL: https://svnweb.freebsd.org/changeset/ports/450636

Log:
  Build recompiler with Clang if global register variable is supported.
  
  Note support for global register variable was proposed in the following
  upstream code reviews:
  
  https://reviews.llvm.org/D3261
  https://reviews.llvm.org/D3797
  
  and commits:
  
  http://llvm.org/viewvc/llvm-project?view=revision&revision=208104
  http://llvm.org/viewvc/llvm-project?view=revision&revision=209149
  
  However, it has very limited support as described in the following upstream
  PR in the gory details:
  
  https://bugs.llvm.org/show_bug.cgi?id=31005
  
  Although it is incomplete, I *believe* Clang 3.5 and later has just enough
  code to support (ancient) QEMU-based recompiler.  If you experience any VM
  crash related to recompiler, e.g., "fatal error in recompiler cpu" in its
  VBox.log, please let me know.
  
  FYI, QEMU was rewritten not to use this GCC-specific feature long time ago:
  
  http://lists.gnu.org/archive/html/qemu-devel/2011-05/msg00855.html
  https://www.mail-archive.com/qemu-devel@nongnu.org/msg63834.html
  
  Unfortunately, VirtualBox stopped merging code from QEMU for some time now.
  
  Tested by:	soralx at cydem.org

Added:
  head/emulators/virtualbox-ose/files/extrapatch-src_recompiler_dyngen-exec.h   (contents, props changed)
  head/emulators/virtualbox-ose/files/extrapatch-src_recompiler_tcg_i386_tcg-target.h   (contents, props changed)
Modified:
  head/emulators/virtualbox-ose/Makefile

Modified: head/emulators/virtualbox-ose/Makefile
==============================================================================
--- head/emulators/virtualbox-ose/Makefile	Mon Sep 25 21:21:33 2017	(r450635)
+++ head/emulators/virtualbox-ose/Makefile	Mon Sep 25 21:39:29 2017	(r450636)
@@ -3,6 +3,7 @@
 
 PORTNAME=	virtualbox-ose
 PORTVERSION=	5.1.28
+PORTREVISION=	1
 CATEGORIES=	emulators
 MASTER_SITES=	http://download.virtualbox.org/virtualbox/${PORTVERSION}/
 DISTFILES=	VirtualBox-${PORTVERSION}${EXTRACT_SUFX} ${GUESTADDITIONS}
@@ -227,7 +228,11 @@ KMK_FLAGS+=	-j${MAKE_JOBS_NUMBER}
 PATCH_DEPENDS+=	${LOCALBASE}/share/kBuild/tools/GXX3.kmk:devel/kBuild
 EXTRA_PATCHES+=	${PATCHDIR}/extrapatch-Config.kmk \
 		${PATCHDIR}/extrapatch-src-VBox-Devices-PC-ipxe-Makefile.kmk \
-		${PATCHDIR}/extrapatch-src-recompiler-Makefile.kmk
+		${PATCHDIR}/extrapatch-src_recompiler_dyngen-exec.h \
+		${PATCHDIR}/extrapatch-src_recompiler_tcg_i386_tcg-target.h
+.if ${COMPILER_VERSION} < 35
+EXTRA_PATCHES+=	${PATCHDIR}/extrapatch-src-recompiler-Makefile.kmk
+.endif
 .endif
 
 .if ${PYTHON_MAJOR_VER} >= 3

Added: head/emulators/virtualbox-ose/files/extrapatch-src_recompiler_dyngen-exec.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/emulators/virtualbox-ose/files/extrapatch-src_recompiler_dyngen-exec.h	Mon Sep 25 21:39:29 2017	(r450636)
@@ -0,0 +1,21 @@
+--- src/recompiler/dyngen-exec.h.orig	2017-09-13 09:34:47 UTC
++++ src/recompiler/dyngen-exec.h
+@@ -75,10 +75,18 @@ typedef void * host_reg_t;
+ # ifndef VBOX
+ #define AREG0 "ebp"
+ # else  /* VBOX - why are we different? frame-pointer optimizations on mac? */
++#  ifndef __clang__
+ #  define AREG0 "esi"
++#  else  /* __clang __ */
++#   define AREG0 "ebp"
++#  endif /* __clang __ */
+ # endif /* VBOX */
+ #elif defined(__x86_64__)
++# ifndef __clang__
+ #define AREG0 "r14"
++# else  /* __clang__ */
++#  define AREG0 "rbp"
++# endif /* __clang__ */
+ #elif defined(_ARCH_PPC)
+ #define AREG0 "r27"
+ #elif defined(__arm__)

Added: head/emulators/virtualbox-ose/files/extrapatch-src_recompiler_tcg_i386_tcg-target.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/emulators/virtualbox-ose/files/extrapatch-src_recompiler_tcg_i386_tcg-target.h	Mon Sep 25 21:39:29 2017	(r450636)
@@ -0,0 +1,23 @@
+--- src/recompiler/tcg/i386/tcg-target.h.orig	2017-09-13 09:34:48 UTC
++++ src/recompiler/tcg/i386/tcg-target.h
+@@ -120,12 +120,20 @@ enum {
+ 
+ /* Note: must be synced with dyngen-exec.h */
+ #if TCG_TARGET_REG_BITS == 64
++# ifndef __clang__
+ # define TCG_AREG0 TCG_REG_R14
++# else  /* __clang__ */
++#  define TCG_AREG0 TCG_REG_RBP
++# endif /* __clang__ */
+ #else
+ # ifndef VBOX /* we're using ESI instead of EBP, probably due to frame pointer opt issues */
+ # define TCG_AREG0 TCG_REG_EBP
+ # else  /* VBOX */
++#  ifndef __clang__
+ #  define TCG_AREG0 TCG_REG_ESI
++#  else  /* __clang__ */
++#   define TCG_AREG0 TCG_REG_EBP
++#  endif /* __clang__ */
+ # endif /* VBOX */
+ #endif
+ 


More information about the svn-ports-all mailing list