Index: /trunk/src/VBox/Runtime/include/internal/ldrMach-O.h
===================================================================
--- /trunk/src/VBox/Runtime/include/internal/ldrMach-O.h	(revision 41049)
+++ /trunk/src/VBox/Runtime/include/internal/ldrMach-O.h	(revision 41050)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -248,5 +248,12 @@
 #define MH_BINDS_TO_WEAK            UINT32_C(0x00010000)
 #define MH_ALLOW_STACK_EXECUTION    UINT32_C(0x00020000)
-#define MH_VALID_FLAGS              UINT32_C(0x0003ffff)
+#define MH_ROOT_SAFE                UINT32_C(0x00040000)
+#define MH_SETUID_SAFE              UINT32_C(0x00080000)
+#define MH_NO_REEXPORTED_DYLIBS     UINT32_C(0x00100000)
+#define MH_PIE                      UINT32_C(0x00200000)
+#define MH_DEAD_STRIPPABLE_DYLIB    UINT32_C(0x00400000)
+#define MH_HAS_TLV_DESCRIPTORS      UINT32_C(0x00800000)
+#define MH_NO_HEAP_EXECUTION        UINT32_C(0x01000000)
+#define MH_VALID_FLAGS              UINT32_C(0x02ffffff)
 
 
@@ -282,8 +289,25 @@
 #define LC_TWOLEVEL_HINTS           UINT32_C(0x16)
 #define LC_PREBIND_CKSUM            UINT32_C(0x17)
-#define LC_LOAD_WEAK_DYLIB (        UINT32_C(0x18) | LC_REQ_DYLD)
+#define LC_LOAD_WEAK_DYLIB         (UINT32_C(0x18) | LC_REQ_DYLD)
 #define LC_SEGMENT_64               UINT32_C(0x19)
 #define LC_ROUTINES_64              UINT32_C(0x1a)
 #define LC_UUID                     UINT32_C(0x1b)
+#define LC_RPATH                   (UINT32_C(0x1c) | LC_REQ_DYLD)
+#define LC_CODE_SIGNATURE           UINT32_C(0x1d)
+#define LC_SEGMENT_SPLIT_INFO       UINT32_C(0x1e)
+#define LC_REEXPORT_DYLIB          (UINT32_C(0x1f) | LC_REQ_DYLD)
+#define LC_LAZY_LOAD_DYLIB          UINT32_C(0x20)
+#define LC_ENCRYPTION_INFO          UINT32_C(0x21)
+#define LC_DYLD_INFO                UINT32_C(0x22)
+#define LC_DYLD_INFO_ONLY          (UINT32_C(0x22) | LC_REQ_DYLD)
+#define LC_LOAD_UPWARD_DYLIB       (UINT32_C(0x23) | LC_REQ_DYLD)
+#define LC_VERSION_MIN_MACOSX       UINT32_C(0x24)
+#define LC_VERSION_MIN_IPHONEOS     UINT32_C(0x25)
+#define LC_FUNCTION_STARTS          UINT32_C(0x26)
+#define LC_DYLD_ENVIRONMENT         UINT32_C(0x27)
+#define LC_MAIN                    (UINT32_C(0x28) | LC_REQ_DYLD)
+#define LC_DATA_IN_CODE             UINT32_C(0x29)
+#define LC_SOURCE_VERSION           UINT32_C(0x2a)
+#define LC_DYLIB_CODE_SIGN_DRS      UINT32_C(0x2b)
 
 
Index: /trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp	(revision 41049)
+++ /trunk/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp	(revision 41050)
@@ -590,5 +590,5 @@
         const char *pszSym = &pThis->pachStrTab[(uint32_t)pSym->n_un.n_strx];
 #ifdef IN_RING3
-        RTAssertMsg2("%05i: %02x:%08x %02x %04x %s\n", iSym, pSym->n_sect, pSym->n_value, pSym->n_type, pSym->n_desc, pszSym);
+        RTAssertMsg2("%05i: %02x:%08llx %02x %04x %s\n", iSym, pSym->n_sect, (uint64_t)pSym->n_value, pSym->n_type, pSym->n_desc, pszSym);
 #endif
 
@@ -607,17 +607,17 @@
                     if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY))
                         RETURN_VERR_BAD_EXE_FORMAT;
-                    if (pSym->n_value < pThis->apSections[pSym->n_sect - 1]->addr)
+                    if (   pSym->n_value < pThis->apSections[pSym->n_sect - 1]->addr
+                        && strcmp(pszSym, "__mh_execute_header"))    /* in 10.8 it's no longer absolute (PIE?). */
                         RETURN_VERR_BAD_EXE_FORMAT;
-                    if (   pSym->n_value - pThis->apSections[pSym->n_sect - 1]->addr
-                        > pThis->apSections[pSym->n_sect - 1]->size)
+                    if (      pSym->n_value - pThis->apSections[pSym->n_sect - 1]->addr
+                           > pThis->apSections[pSym->n_sect - 1]->size
+                        && strcmp(pszSym, "__mh_execute_header"))    /* see above. */
                         RETURN_VERR_BAD_EXE_FORMAT;
                     break;
 
                 case MACHO_N_ABS:
-#if 0 /* Spec say MACHO_NO_SECT, __mh_execute_header has 1 with 10.7/amd64 */
-                    if (pSym->n_sect != MACHO_NO_SECT)
-#else
-                    if (pSym->n_sect > pThis->cSections)
-#endif
+                    if (   pSym->n_sect != MACHO_NO_SECT
+                        && (   strcmp(pszSym, "__mh_execute_header") /* n_sect=1 in 10.7/amd64 */
+                            || pSym->n_sect > pThis->cSections) )
                         RETURN_VERR_BAD_EXE_FORMAT;
                     if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY))
@@ -828,4 +828,10 @@
             case LC_DYSYMTAB:
             case LC_UNIXTHREAD:
+            case LC_CODE_SIGNATURE:
+            case LC_VERSION_MIN_MACOSX:
+            case LC_FUNCTION_STARTS:
+            case LC_MAIN:
+            case LC_DATA_IN_CODE:
+            case LC_SOURCE_VERSION:
                 break;
 
@@ -847,4 +853,10 @@
             case LC_TWOLEVEL_HINTS:
             case LC_PREBIND_CKSUM:
+            case LC_SEGMENT_SPLIT_INFO:
+            case LC_ENCRYPTION_INFO:
+                RETURN_VERR_LDR_UNEXPECTED;
+
+            /* no phones here yet */
+            case LC_VERSION_MIN_IPHONEOS:
                 RETURN_VERR_LDR_UNEXPECTED;
 
@@ -860,4 +872,12 @@
             case LC_SUB_CLIENT:
             case LC_SUB_LIBRARY:
+            case LC_RPATH:
+            case LC_REEXPORT_DYLIB:
+            case LC_LAZY_LOAD_DYLIB:
+            case LC_DYLD_INFO:
+            case LC_DYLD_INFO_ONLY:
+            case LC_LOAD_UPWARD_DYLIB:
+            case LC_DYLD_ENVIRONMENT:
+            case LC_DYLIB_CODE_SIGN_DRS:
                 RETURN_VERR_LDR_UNEXPECTED;
 
Index: /trunk/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp	(revision 41049)
+++ /trunk/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp	(revision 41050)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2011 Oracle Corporation
+ * Copyright (C) 2011-2012 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -46,4 +46,7 @@
         "dtrace_register",
         "dtrace_suspend",
+        "kext_alloc",
+        "kext_free",
+        "vm_map_protect"
     };
     for (unsigned i = 0; i < RT_ELEMENTS(s_apszSyms); i++)
