Index: /trunk/src/VBox/Runtime/darwin/RTErrConvertFromDarwin.cpp
===================================================================
--- /trunk/src/VBox/Runtime/darwin/RTErrConvertFromDarwin.cpp	(revision 43302)
+++ /trunk/src/VBox/Runtime/darwin/RTErrConvertFromDarwin.cpp	(revision 43303)
@@ -49,5 +49,5 @@
          */
         case KERN_INVALID_ADDRESS:      return VERR_INVALID_POINTER;
-        //case KERN_PROTECTION_FAILURE:
+        case KERN_PROTECTION_FAILURE:   return VERR_PERMISSION_DENIED;
         //case KERN_NO_SPACE:
         case KERN_INVALID_ARGUMENT:     return VERR_INVALID_PARAMETER;
Index: /trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp	(revision 43302)
+++ /trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp	(revision 43303)
@@ -395,6 +395,4 @@
 extern "C" void OSMalloc(void);
 extern "C" void OSlibkernInit(void);
-extern "C" int  osrelease;
-extern "C" int  ostype;
 extern "C" void kdp_set_interface(void);
 
@@ -743,5 +741,6 @@
                     RETURN_VERR_BAD_EXE_FORMAT;
 
-                if (pSeg->vmaddr != 0)
+                if (   pSeg->vmaddr != 0
+                    || !strcmp(pSeg->segname, "__PAGEZERO"))
                 {
                     if (pSeg->vmaddr + RT_ALIGN_Z(pSeg->vmsize, RT_BIT_32(12)) < pSeg->vmaddr)
@@ -775,4 +774,5 @@
                         case S_MOD_TERM_FUNC_POINTERS:
                         case S_COALESCED:
+                        case S_4BYTE_LITERALS:
                             if (  pSeg->filesize != 0
                                 ? paSects[i].offset - pSeg->fileoff >= pSeg->filesize
@@ -792,5 +792,4 @@
                         case S_SYMBOL_STUBS:
                         case S_INTERPOSING:
-                        case S_4BYTE_LITERALS:
                         case S_8BYTE_LITERALS:
                         case S_16BYTE_LITERALS:
Index: /trunk/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp	(revision 43302)
+++ /trunk/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp	(revision 43303)
@@ -547,4 +547,9 @@
                         RTThreadPreemptRestore(&State);
 # endif
+
+                        /* Bug 6226: Ignore KERN_PROTECTION_FAILURE on Leopard and older. */
+                        if (   rc == VERR_PERMISSION_DENIED
+                            && version_major <= 9 /* 9 = 10.5.x = Leopard. */)
+                            rc = VINF_SUCCESS;
                     }
                     else
@@ -1034,5 +1039,25 @@
                                    fMachProt);
     if (krc != KERN_SUCCESS)
+    {
+        static int s_cComplaints = 0;
+        if (s_cComplaints < 10)
+        {
+            s_cComplaints++;
+            printf("rtR0MemObjNativeProtect: vm_protect(%p,%p,%p,false,%#x) -> %d\n",
+                   pVmMap, (void *)Start, (void *)cbSub, fMachProt, krc);
+
+            kern_return_t               krc2;
+            vm_offset_t                 pvReal = Start;
+            vm_size_t                   cbReal = 0;
+            mach_msg_type_number_t      cInfo  = VM_REGION_BASIC_INFO_COUNT;
+            struct vm_region_basic_info Info;
+            RT_ZERO(Info);
+            krc2 = vm_region(pVmMap, &pvReal, &cbReal, VM_REGION_BASIC_INFO, (vm_region_info_t)&Info, &cInfo, NULL);
+            printf("rtR0MemObjNativeProtect: basic info - krc2=%d pv=%p cb=%p prot=%#x max=%#x inh=%#x shr=%d rvd=%d off=%#x behavior=%#x wired=%#x\n",
+                   krc2, (void *)pvReal, (void *)cbReal, Info.protection, Info.max_protection,  Info.inheritance,
+                   Info.shared, Info.reserved, Info.offset, Info.behavior, Info.user_wired_count);
+        }
         return RTErrConvertFromDarwinKern(krc);
+    }
 
     /*
Index: /trunk/src/VBox/Runtime/r0drv/darwin/the-darwin-kernel.h
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/darwin/the-darwin-kernel.h	(revision 43302)
+++ /trunk/src/VBox/Runtime/r0drv/darwin/the-darwin-kernel.h	(revision 43303)
@@ -60,6 +60,8 @@
 #include <libkern/libkern.h>
 #include <libkern/sysctl.h>
+#include <libkern/version.h>
 #include <mach/thread_act.h>
 #include <mach/vm_map.h>
+#include <mach/vm_region.h>
 #include <pexpert/pexpert.h>
 #include <sys/conf.h>
@@ -142,4 +144,6 @@
 /* osfmk/vm/vm_user.c */
 extern kern_return_t vm_protect(vm_map_t, vm_offset_t, vm_size_t, boolean_t, vm_prot_t);
+/*extern kern_return_t vm_region(vm_map_t, vm_address_t *, vm_size_t *, vm_region_flavor_t, vm_region_info_t,
+                               mach_msg_type_number_t *, mach_port_t *);*/
 
 /* i386/machine_routines.h */
Index: /trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp	(revision 43302)
+++ /trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp	(revision 43303)
@@ -374,10 +374,10 @@
         if (g_HvmR0.vmx.fUsingSUPR0EnableVTx)
         {
-            AssertMsg(rc == VINF_SUCCESS || rc == VERR_VMX_IN_VMX_ROOT_MODE || rc == VERR_VMX_NO_VMX, ("%Rrc\n", rc));
+            AssertLogRelMsg(rc == VINF_SUCCESS || rc == VERR_VMX_IN_VMX_ROOT_MODE || rc == VERR_VMX_NO_VMX, ("%Rrc\n", rc));
             if (RT_SUCCESS(rc))
             {
                 g_HvmR0.vmx.fSupported = true;
                 rc = SUPR0EnableVTx(false /* fEnable */);
-                AssertRC(rc);
+                AssertLogRelRC(rc);
             }
         }
@@ -433,7 +433,10 @@
                      */
                     RTR0MEMOBJ hScatchMemObj;
-                    rc = RTR0MemObjAllocCont(&hScatchMemObj, PAGE_SIZE, true /* executable R0 mapping */);
+                    rc = RTR0MemObjAllocCont(&hScatchMemObj, PAGE_SIZE, true /*fExecutable*/);
                     if (RT_FAILURE(rc))
+                    {
+                        LogRel(("hmR0InitIntel: RTR0MemObjAllocCont(,PAGE_SIZE,true) -> %Rrc\n", rc));
                         return rc;
+                    }
 
                     void      *pvScatchPage      = RTR0MemObjAddress(hScatchMemObj);
Index: /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 43302)
+++ /trunk/src/VBox/VMM/VMMR0/VMMR0.cpp	(revision 43303)
@@ -166,24 +166,42 @@
 #endif
                                     }
+                                    else
+                                        LogRel(("ModuleInit: CPUMR0ModuleInit -> %Rrc\n", rc));
 #ifdef VBOX_WITH_PCI_PASSTHROUGH
                                     PciRawR0Term();
 #endif
                                 }
+                                else
+                                    LogRel(("ModuleInit: PciRawR0Init -> %Rrc\n", rc));
                                 IntNetR0Term();
                             }
+                            else
+                                LogRel(("ModuleInit: IntNetR0Init -> %Rrc\n", rc));
 #ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
                             PGMR0DynMapTerm();
 #endif
                         }
+                        else
+                            LogRel(("ModuleInit: PGMR0DynMapInit -> %Rrc\n", rc));
                         PGMDeregisterStringFormatTypes();
                     }
+                    else
+                        LogRel(("ModuleInit: PGMRegisterStringFormatTypes -> %Rrc\n", rc));
                     HWACCMR0Term();
                 }
+                else
+                    LogRel(("ModuleInit: HWACCMR0Init -> %Rrc\n", rc));
                 GMMR0Term();
             }
-           GVMMR0Term();
+            else
+                LogRel(("ModuleInit: GMMR0Init -> %Rrc\n", rc));
+            GVMMR0Term();
         }
+        else
+            LogRel(("ModuleInit: GVMMR0Init -> %Rrc\n", rc));
         vmmTermFormatTypes();
     }
+    else
+        LogRel(("ModuleInit: vmmInitFormatTypes -> %Rrc\n", rc));
 
     LogFlow(("ModuleInit: failed %Rrc\n", rc));
Index: /trunk/src/VBox/VMM/include/PGMInline.h
===================================================================
--- /trunk/src/VBox/VMM/include/PGMInline.h	(revision 43302)
+++ /trunk/src/VBox/VMM/include/PGMInline.h	(revision 43303)
@@ -490,5 +490,5 @@
         rc = VINF_SUCCESS;
         AssertPtr(pTlbe->pv);
-# if !defined(VBOX_WITH_2X_4GB_ADDR_SPACE) || defined(IN_RING3)
+# ifndef VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0
         Assert(!pTlbe->pMap || RT_VALID_PTR(pTlbe->pMap->pv));
 # endif
