Index: /trunk/src/VBox/VMM/VMMAll/APICAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/APICAll.cpp	(revision 60474)
+++ /trunk/src/VBox/VMM/VMMAll/APICAll.cpp	(revision 60475)
@@ -232,4 +232,139 @@
 
 /**
+ * Gets the descriptive APIC mode.
+ *
+ * @returns The name.
+ * @param   enmMode     The xAPIC mode.
+ */
+const char *apicGetModeName(APICMODE enmMode)
+{
+    switch (enmMode)
+    {
+        case APICMODE_DISABLED:  return "Disabled";
+        case APICMODE_XAPIC:     return "xAPIC";
+        case APICMODE_X2APIC:    return "x2APIC";
+        default:                 break;
+    }
+    return "Invalid";
+}
+
+
+/**
+ * Gets the descriptive destination format name.
+ *
+ * @returns The destination format name.
+ * @param   enmDestFormat       The destination format.
+ */
+const char *apicGetDestFormatName(XAPICDESTFORMAT enmDestFormat)
+{
+    switch (enmDestFormat)
+    {
+        case XAPICDESTFORMAT_FLAT:      return "Flat";
+        case XAPICDESTFORMAT_CLUSTER:   return "Cluster";
+        default:                        break;
+    }
+    return "Invalid";
+}
+
+
+/**
+ * Gets the descriptive delivery mode name.
+ *
+ * @returns The delivery mode name.
+ * @param   enmDeliveryMode     The delivery mode.
+ */
+const char *apicGetDeliveryModeName(XAPICDELIVERYMODE enmDeliveryMode)
+{
+    switch (enmDeliveryMode)
+    {
+        case XAPICDELIVERYMODE_FIXED:        return "Fixed";
+        case XAPICDELIVERYMODE_LOWEST_PRIO:  return "Lowest-priority";
+        case XAPICDELIVERYMODE_SMI:          return "SMI";
+        case XAPICDELIVERYMODE_NMI:          return "NMI";
+        case XAPICDELIVERYMODE_INIT:         return "INIT";
+        case XAPICDELIVERYMODE_STARTUP:      return "SIPI";
+        case XAPICDELIVERYMODE_EXTINT:       return "ExtINT";
+        default:                             break;
+    }
+    return "Invalid";
+}
+
+
+/**
+ * Gets the descriptive destination mode name.
+ *
+ * @returns The destination mode name.
+ * @param   enmDestMode     The destination mode.
+ */
+const char *apicGetDestModeName(XAPICDESTMODE enmDestMode)
+{
+    switch (enmDestMode)
+    {
+        case XAPICDESTMODE_PHYSICAL:  return "Physical";
+        case XAPICDESTMODE_LOGICAL:   return "Logical";
+        default:                      break;
+    }
+    return "Invalid";
+}
+
+
+/**
+ * Gets the descriptive trigger mode name.
+ *
+ * @returns The trigger mode name.
+ * @param   enmTriggerMode     The trigger mode.
+ */
+const char *apicGetTriggerModeName(XAPICTRIGGERMODE enmTriggerMode)
+{
+    switch (enmTriggerMode)
+    {
+        case XAPICTRIGGERMODE_EDGE:     return "Edge";
+        case XAPICTRIGGERMODE_LEVEL:    return "Level";
+        default:                        break;
+    }
+    return "Invalid";
+}
+
+
+/**
+ * Gets the destination shorthand name.
+ *
+ * @returns The destination shorthand name.
+ * @param   enmDestShorthand     The destination shorthand.
+ */
+const char *apicGetDestShorthandName(XAPICDESTSHORTHAND enmDestShorthand)
+{
+    switch (enmDestShorthand)
+    {
+        case XAPICDESTSHORTHAND_NONE:           return "None";
+        case XAPICDESTSHORTHAND_SELF:           return "Self";
+        case XAPIDDESTSHORTHAND_ALL_INCL_SELF:  return "All including self";
+        case XAPICDESTSHORTHAND_ALL_EXCL_SELF:  return "All excluding self";
+        default:                                break;
+    }
+    return "Invalid";
+}
+
+
+/**
+ * Gets the timer mode name.
+ *
+ * @returns The timer mode name.
+ * @param   enmTimerMode         The timer mode.
+ */
+const char *apicGetTimerModeName(XAPICTIMERMODE enmTimerMode)
+{
+    switch (enmTimerMode)
+    {
+        case XAPICTIMERMODE_ONESHOT:        return "One-shot";
+        case XAPICTIMERMODE_PERIODIC:       return "Periodic";
+        case XAPICTIMERMODE_TSC_DEADLINE:   return "TSC deadline";
+        default:                            break;
+    }
+    return "Invalid";
+}
+
+
+/**
  * Gets the APIC mode given the base MSR value.
  *
@@ -543,5 +678,6 @@
         default:
         {
-            AssertMsgFailed(("APIC: apicSendIntr: Unknown delivery mode %#x\n", enmDeliveryMode));
+            AssertMsgFailed(("APIC: apicSendIntr: Unsupported delivery mode %#x (%s)\n", enmDeliveryMode,
+                             apicGetDeliveryModeName(enmDeliveryMode)));
             break;
         }
@@ -1037,4 +1173,7 @@
                 apicClearVectorInReg(&pXApicPage->tmr, uVector);
             }
+
+            Log4(("APIC%u: apicSetEoi: Acknowledged %s triggered interrupt. uVector=%#x\n", pVCpu->idCpu,
+                  fLevelTriggered ? "level" : "edge", uVector));
 
             apicSignalNextPendingIntr(pVCpu);
@@ -1992,4 +2131,7 @@
     uint32_t          fBroadcastMask  = UINT32_C(0xff);
 
+    Log4(("APIC: apicBusDeliver: fDestMask=%#x enmDestMode=%s enmTriggerMode=%s enmDeliveryMode=%s\n", fDestMask,
+          apicGetDestModeName(enmDestMode), apicGetTriggerModeName(enmTriggerMode), apicGetDeliveryModeName(enmDeliveryMode)));
+
     VMCPUSET DestCpuSet;
     apicGetDestCpuSet(pVM, fDestMask, fBroadcastMask, enmDestMode, enmDeliveryMode, &DestCpuSet);
@@ -2076,6 +2218,6 @@
                 {
                     rcStrict = VERR_INTERNAL_ERROR_3;
-                    AssertMsgFailed(("APIC%u: LocalInterrupt: Invalid delivery mode %#x on LINT%d\n", pVCpu->idCpu,
-                                     enmDeliveryMode, u8Pin));
+                    AssertMsgFailed(("APIC%u: LocalInterrupt: Invalid delivery mode %#x (%s) on LINT%d\n", pVCpu->idCpu,
+                                     enmDeliveryMode, apicGetDeliveryModeName(enmDeliveryMode), u8Pin));
                     break;
                 }
Index: /trunk/src/VBox/VMM/VMMR3/APIC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/APIC.cpp	(revision 60474)
+++ /trunk/src/VBox/VMM/VMMR3/APIC.cpp	(revision 60475)
@@ -147,139 +147,4 @@
     SSMFIELD_ENTRY_TERM()
 };
-
-
-/**
- * Gets the descriptive APIC mode.
- *
- * @returns The name.
- * @param   enmMode     The xAPIC mode.
- */
-static const char *apicGetModeName(APICMODE enmMode)
-{
-    switch (enmMode)
-    {
-        case APICMODE_DISABLED:  return "Disabled";
-        case APICMODE_XAPIC:     return "xAPIC";
-        case APICMODE_X2APIC:    return "x2APIC";
-        default:                 break;
-    }
-    return "Invalid";
-}
-
-
-/**
- * Gets the descriptive destination format name.
- *
- * @returns The destination format name.
- * @param   enmDestFormat       The destination format.
- */
-static const char *apicGetDestFormatName(XAPICDESTFORMAT enmDestFormat)
-{
-    switch (enmDestFormat)
-    {
-        case XAPICDESTFORMAT_FLAT:      return "Flat";
-        case XAPICDESTFORMAT_CLUSTER:   return "Cluster";
-        default:                        break;
-    }
-    return "Invalid";
-}
-
-
-/**
- * Gets the descriptive delivery mode name.
- *
- * @returns The delivery mode name.
- * @param   enmDeliveryMode     The delivery mode.
- */
-static const char *apicGetDeliveryModeName(XAPICDELIVERYMODE enmDeliveryMode)
-{
-    switch (enmDeliveryMode)
-    {
-        case XAPICDELIVERYMODE_FIXED:        return "Fixed";
-        case XAPICDELIVERYMODE_LOWEST_PRIO:  return "Lowest priority";
-        case XAPICDELIVERYMODE_SMI:          return "SMI";
-        case XAPICDELIVERYMODE_NMI:          return "NMI";
-        case XAPICDELIVERYMODE_INIT:         return "INIT";
-        case XAPICDELIVERYMODE_STARTUP:      return "SIPI";
-        case XAPICDELIVERYMODE_EXTINT:       return "ExtINT";
-        default:                             break;
-    }
-    return "Invalid";
-}
-
-
-/**
- * Gets the descriptive destination mode name.
- *
- * @returns The destination mode name.
- * @param   enmDestMode     The destination mode.
- */
-static const char *apicGetDestModeName(XAPICDESTMODE enmDestMode)
-{
-    switch (enmDestMode)
-    {
-        case XAPICDESTMODE_PHYSICAL:  return "Physical";
-        case XAPICDESTMODE_LOGICAL:   return "Logical";
-        default:                      break;
-    }
-    return "Invalid";
-}
-
-
-/**
- * Gets the descriptive trigger mode name.
- *
- * @returns The trigger mode name.
- * @param   enmTriggerMode     The trigger mode.
- */
-static const char *apicGetTriggerModeName(XAPICTRIGGERMODE enmTriggerMode)
-{
-    switch (enmTriggerMode)
-    {
-        case XAPICTRIGGERMODE_EDGE:     return "Edge";
-        case XAPICTRIGGERMODE_LEVEL:    return "Level";
-        default:                        break;
-    }
-    return "Invalid";
-}
-
-
-/**
- * Gets the destination shorthand name.
- *
- * @returns The destination shorthand name.
- * @param   enmDestShorthand     The destination shorthand.
- */
-static const char *apicGetDestShorthandName(XAPICDESTSHORTHAND enmDestShorthand)
-{
-    switch (enmDestShorthand)
-    {
-        case XAPICDESTSHORTHAND_NONE:           return "None";
-        case XAPICDESTSHORTHAND_SELF:           return "Self";
-        case XAPIDDESTSHORTHAND_ALL_INCL_SELF:  return "All including self";
-        case XAPICDESTSHORTHAND_ALL_EXCL_SELF:  return "All excluding self";
-        default:                                break;
-    }
-    return "Invalid";
-}
-
-
-/**
- * Gets the timer mode name.
- *
- * @returns The timer mode name.
- * @param   enmTimerMode         The timer mode.
- */
-static const char *apicGetTimerModeName(XAPICTIMERMODE enmTimerMode)
-{
-    switch (enmTimerMode)
-    {
-        case XAPICTIMERMODE_ONESHOT:        return "One-shot";
-        case XAPICTIMERMODE_PERIODIC:       return "Periodic";
-        case XAPICTIMERMODE_TSC_DEADLINE:   return "TSC deadline";
-        default:                            break;
-    }
-    return "Invalid";
-}
 
 
Index: /trunk/src/VBox/VMM/include/APICInternal.h
===================================================================
--- /trunk/src/VBox/VMM/include/APICInternal.h	(revision 60474)
+++ /trunk/src/VBox/VMM/include/APICInternal.h	(revision 60475)
@@ -611,4 +611,12 @@
 RT_C_DECLS_BEGIN
 
+const char             *apicGetModeName(APICMODE enmMode);
+const char             *apicGetDestFormatName(XAPICDESTFORMAT enmDestFormat);
+const char             *apicGetDeliveryModeName(XAPICDELIVERYMODE enmDeliveryMode);
+const char             *apicGetDestModeName(XAPICDESTMODE enmDestMode);
+const char             *apicGetTriggerModeName(XAPICTRIGGERMODE enmTriggerMode);
+const char             *apicGetDestShorthandName(XAPICDESTSHORTHAND enmDestShorthand);
+const char             *apicGetTimerModeName(XAPICTIMERMODE enmTimerMode);
+
 VMMDECL(uint64_t)       APICGetBaseMsr(PPDMDEVINS pDevIns, PVMCPU pVCpu);
 VMMDECL(VBOXSTRICTRC)   APICSetBaseMsr(PPDMDEVINS pDevIns, PVMCPU pVCpu, uint64_t uBase);
