Index: trunk/src/VBox/HostDrivers/Support/SUPDrv.c
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPDrv.c	(revision 14900)
+++ trunk/src/VBox/HostDrivers/Support/SUPDrv.c	(revision 14901)
@@ -311,5 +311,5 @@
     { "SUPR0Printf",                            (void *)SUPR0Printf }, /** @todo needs wrapping? */
     { "SUPR0GetPagingMode",                     (void *)UNWIND_WRAP(SUPR0GetPagingMode) },
-    { "SUPR0NativeEnableHwVirtExt",             (void *)SUPR0NativeEnableHwVirtExt },
+    { "SUPR0EnableVTx",                         (void *)SUPR0EnableVTx },
     { "RTMemAlloc",                             (void *)UNWIND_WRAP(RTMemAlloc) },
     { "RTMemAllocZ",                            (void *)UNWIND_WRAP(RTMemAllocZ) },
@@ -4059,10 +4059,13 @@
  * @retval  VERR_NOT_SUPPORTED if not supported by the native OS.
  *
- * @param   pSession        The calling session.
  * @param   fEnable         Whether to enable or disable.
  */
-SUPR0DECL(int) SUPR0NativeEnableHwVirtExt(PSUPDRVSESSION pSession, bool fEnable)
-{
+SUPR0DECL(int) SUPR0EnableVTx(bool fEnable)
+{
+#ifdef RT_OS_DARWIN
+    return supdrvOSEnableVTx(fEnable);
+#else
     return VERR_NOT_SUPPORTED;
+#endif
 }
 
Index: trunk/src/VBox/HostDrivers/Support/SUPDrvIOC.h
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPDrvIOC.h	(revision 14900)
+++ trunk/src/VBox/HostDrivers/Support/SUPDrvIOC.h	(revision 14901)
@@ -188,5 +188,5 @@
  *            and renaming the related IOCtls too.
  */
-#define SUPDRV_IOC_VERSION                              0x000a0006
+#define SUPDRV_IOC_VERSION                              0x000a0007
 
 /** SUP_IOCTL_COOKIE. */
Index: trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h	(revision 14900)
+++ trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h	(revision 14901)
@@ -599,4 +599,5 @@
 bool VBOXCALL   supdrvOSObjCanAccess(PSUPDRVOBJ pObj, PSUPDRVSESSION pSession, const char *pszObjName, int *prc);
 bool VBOXCALL   supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt);
+int  VBOXCALL   supdrvOSEnableVTx(bool fEnabled);
 
 /*******************************************************************************
Index: trunk/src/VBox/HostDrivers/Support/SUPLib.cpp
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPLib.cpp	(revision 14900)
+++ trunk/src/VBox/HostDrivers/Support/SUPLib.cpp	(revision 14901)
@@ -261,5 +261,5 @@
         CookieReq.u.In.u32ReqVersion = SUPDRV_IOC_VERSION;
         const uint32_t MinVersion = (SUPDRV_IOC_VERSION & 0xffff0000) == 0x000a0000
-                                  ? 0x000a0006
+                                  ? 0x000a0007
                                   :  SUPDRV_IOC_VERSION & 0xffff0000;
         CookieReq.u.In.u32MinVersion = MinVersion;
@@ -400,5 +400,5 @@
         { "SUPR0Printf",                            0xefef000b },
         { "SUPR0GetPagingMode",                     0xefef000c },
-        { "SUPR0NativeEnableHwVirtExt",             0xefef000c },
+        { "SUPR0EnableVTx",                         0xefef000c },
         { "RTMemAlloc",                             0xefef000d },
         { "RTMemAllocZ",                            0xefef000e },
Index: trunk/src/VBox/HostDrivers/Support/SUPR0.def
===================================================================
--- trunk/src/VBox/HostDrivers/Support/SUPR0.def	(revision 14900)
+++ trunk/src/VBox/HostDrivers/Support/SUPR0.def	(revision 14901)
@@ -54,5 +54,5 @@
     SUPR0Printf
     SUPR0GetPagingMode
-    SUPR0NativeEnableHwVirtExt
+    SUPR0EnableVTx
     RTMemAlloc
     RTMemAllocZ
Index: trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
===================================================================
--- trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp	(revision 14900)
+++ trunk/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp	(revision 14901)
@@ -54,5 +54,5 @@
 #include <iprt/process.h>
 #include <iprt/alloc.h>
-#include <iprt/err.h>
+#include <VBox/err.h>
 #include <VBox/log.h>
 
@@ -240,5 +240,4 @@
                 if (g_iMajorDeviceNo >= 0)
                 {
-                    /** @todo the UID, GID and mode mask should be configurable! This isn't very secure... */
 #ifdef VBOX_WITH_HARDENING
                     g_hDevFsDevice = devfs_make_node(makedev(g_iMajorDeviceNo, 0), DEVFS_CHAR,
@@ -662,5 +661,75 @@
 
 
-bool VBOXCALL   supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
+/*
+ * The following is a weak symbol hack to deal with the lack of
+ * host_vmxon & host_vmxoff in Tiger.
+ */
+static int g_fWeakHostVmxOnOff = false;
+
+__BEGIN_DECLS
+int host_vmxon(int exclusive) __attribute__((weak));
+void host_vmxoff(void) __attribute__((weak));
+__END_DECLS
+
+/* weak version for Tiger. */
+int host_vmxon(int exclusive)
+{
+    NOREF(exclusive);
+    g_fWeakHostVmxOnOff = true;
+    return 42;
+}
+
+/* weak version for Tiger. */
+void host_vmxoff(void)
+{
+    g_fWeakHostVmxOnOff = true;
+}
+
+
+/**
+ * Enables or disables VT-x using kernel functions.
+ *
+ * @returns VBox status code. VERR_NOT_SUPPORTED has a special meaning.
+ * @param   fEnable     Whether to enable or disable.
+ */
+int VBOXCALL supdrvOSEnableVTx(bool fEnable)
+{
+    if (g_fWeakHostVmxOnOff)
+        return VERR_NOT_SUPPORTED;
+
+    int rc;
+    if (fEnable)
+    {
+printf("calling host_vmxon\n");
+        rc = host_vmxon(false /* exclusive */);
+printf("host_vmxon: %d\n", rc);
+        if (rc == 42)
+            rc = VERR_NOT_SUPPORTED;
+        else
+        {
+            AssertReturn(!g_fWeakHostVmxOnOff, VERR_NOT_SUPPORTED);
+            if (rc == 0 /* all ok */)
+                rc = VINF_SUCCESS;
+            else if (rc == 1 /* unsupported */)
+                rc = VERR_VMX_NO_VMX;
+            else if (rc == 2 /* exclusive user */)
+                rc = VERR_VMX_IN_VMX_ROOT_MODE;
+            else
+                rc = VERR_UNRESOLVED_ERROR;
+        }
+    }
+    else
+    {
+printf("calling host_vmxoff\n");
+        host_vmxoff();
+printf("host_vmxoff returned\n");
+        AssertReturn(!g_fWeakHostVmxOnOff, VERR_NOT_SUPPORTED);
+        rc = VINF_SUCCESS;
+    }
+    return rc;
+}
+
+
+bool VBOXCALL supdrvOSGetForcedAsyncTscMode(PSUPDRVDEVEXT pDevExt)
 {
     NOREF(pDevExt);
