Index: /trunk/src/VBox/Runtime/common/ldr/ldrEx.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/ldr/ldrEx.cpp	(revision 58726)
+++ /trunk/src/VBox/Runtime/common/ldr/ldrEx.cpp	(revision 58727)
@@ -730,2 +730,25 @@
 }
 
+
+/**
+ * Translates a RTLDRARCH value to a string.
+ *
+ * @returns Name corresponding to @a enmArch
+ * @param   enmArch             The value to name.
+ */
+DECLHIDDEN(const char *) rtLdrArchName(RTLDRARCH enmArch)
+{
+    switch (enmArch)
+    {
+        case RTLDRARCH_INVALID:     return "INVALID";
+        case RTLDRARCH_WHATEVER:    return "WHATEVER";
+        case RTLDRARCH_HOST:        return "HOST";
+        case RTLDRARCH_AMD64:       return "AMD64";
+        case RTLDRARCH_X86_32:      return "X86_32";
+
+        case RTLDRARCH_END:
+        case RTLDRARCH_32BIT_HACK:
+            break;
+    }
+    return "UNKNOWN";
+}
Index: /trunk/src/VBox/Runtime/common/ldr/ldrPE.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/ldr/ldrPE.cpp	(revision 58726)
+++ /trunk/src/VBox/Runtime/common/ldr/ldrPE.cpp	(revision 58727)
@@ -3623,4 +3623,16 @@
 
 
+static const char *rtldrPEGetArchName(uint16_t uMachine)
+{
+    switch (uMachine)
+    {
+        case IMAGE_FILE_MACHINE_I386:   return "X86_32";
+        case IMAGE_FILE_MACHINE_AMD64:  return "AMD64";
+        default:                        return "Unknown";
+    }
+}
+
+
+
 /**
  * Open a PE image.
@@ -3659,5 +3671,6 @@
     {
         if (!(fFlags & RTLDR_O_IGNORE_ARCH_IF_NO_CODE))
-            return VERR_LDR_ARCH_MISMATCH;
+            return RTErrInfoSetF(pErrInfo, VERR_LDR_ARCH_MISMATCH, "Image is for '%s', only accepting images for '%s'.",
+                                 rtldrPEGetArchName(FileHdr.Machine), rtLdrArchName(enmArch));
         fArchNoCodeCheckPending = true;
     }
@@ -3676,5 +3689,7 @@
         return rc;
     if (fArchNoCodeCheckPending && OptHdr.SizeOfCode != 0)
-        return VERR_LDR_ARCH_MISMATCH;
+        return RTErrInfoSetF(pErrInfo, VERR_LDR_ARCH_MISMATCH,
+                             "Image is for '%s' and contains code (%#x), only accepting images for '%s' with code.",
+                             rtldrPEGetArchName(FileHdr.Machine), OptHdr.SizeOfCode, rtLdrArchName(enmArch));
 
     /*
Index: /trunk/src/VBox/Runtime/include/internal/ldr.h
===================================================================
--- /trunk/src/VBox/Runtime/include/internal/ldr.h	(revision 58726)
+++ /trunk/src/VBox/Runtime/include/internal/ldr.h	(revision 58727)
@@ -497,4 +497,5 @@
 
 DECLHIDDEN(int) rtLdrReadAt(RTLDRMOD hLdrMod, void *pvBuf, uint32_t iDbgInfo, RTFOFF off, size_t cb);
+DECLHIDDEN(const char *) rtLdrArchName(RTLDRARCH enmArch);
 
 RT_C_DECLS_END
