Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp	(revision 35241)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageDebugVM.cpp	(revision 35242)
@@ -70,5 +70,6 @@
      * Parse arguments.
      */
-    const char                 *pszFilename  = NULL;
+    const char                 *pszFilename = NULL;
+    const char                 *pszCompression = NULL;
 
     RTGETOPTSTATE               GetState;
@@ -76,5 +77,6 @@
     static const RTGETOPTDEF    s_aOptions[] =
     {
-        { "--filename", 'f', RTGETOPT_REQ_STRING }
+        { "--filename",     'f', RTGETOPT_REQ_STRING },
+        { "--compression",  'c', RTGETOPT_REQ_STRING }
     };
     int rc = RTGetOptInit(&GetState, pArgs->argc, pArgs->argv, s_aOptions, RT_ELEMENTS(s_aOptions), 2, 0 /*fFlags*/);
@@ -85,4 +87,9 @@
         switch (rc)
         {
+            case 'c':
+                if (pszCompression)
+                    return errorSyntax(USAGE_DEBUGVM, "The --compression option has already been given");
+                pszCompression = ValueUnion.psz;
+                break;
             case 'f':
                 if (pszFilename)
@@ -107,5 +114,6 @@
 
     com::Bstr bstrFilename(szAbsFilename);
-    CHECK_ERROR2_RET(pDebugger, DumpGuestCore(bstrFilename.raw()), RTEXITCODE_FAILURE);
+    com::Bstr bstrCompression(pszCompression);
+    CHECK_ERROR2_RET(pDebugger, DumpGuestCore(bstrFilename.raw(), bstrCompression.raw()), RTEXITCODE_FAILURE);
     return RTEXITCODE_SUCCESS;
 }
Index: /trunk/src/VBox/Main/MachineDebuggerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineDebuggerImpl.cpp	(revision 35241)
+++ /trunk/src/VBox/Main/MachineDebuggerImpl.cpp	(revision 35242)
@@ -651,75 +651,41 @@
 /////////////////////////////////////////////////////////////////////////////
 
-/**
- * Resets VM statistics.
- *
- * @returns COM status code.
- * @param   aPattern            The selection pattern. A bit similar to filename globbing.
- */
-STDMETHODIMP MachineDebugger::ResetStats(IN_BSTR aPattern)
-{
-    Console::SafeVMPtrQuiet pVM (mParent);
-
-    if (!pVM.isOk())
-        return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running");
-
-    STAMR3Reset(pVM, Utf8Str(aPattern).c_str());
-
-    return S_OK;
-}
-
-/**
- * Dumps VM statistics to the log.
- *
- * @returns COM status code.
- * @param   aPattern            The selection pattern. A bit similar to filename globbing.
- */
-STDMETHODIMP MachineDebugger::DumpStats (IN_BSTR aPattern)
-{
-    Console::SafeVMPtrQuiet pVM (mParent);
-
-    if (!pVM.isOk())
-        return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running");
-
-    STAMR3Dump(pVM, Utf8Str(aPattern).c_str());
-
-    return S_OK;
-}
-
-/**
- * Get the VM statistics in an XML format.
- *
- * @returns COM status code.
- * @param   aPattern            The selection pattern. A bit similar to filename globbing.
- * @param   aWithDescriptions   Whether to include the descriptions.
- * @param   aStats              The XML document containing the statistics.
- */
-STDMETHODIMP MachineDebugger::GetStats (IN_BSTR aPattern, BOOL aWithDescriptions, BSTR *aStats)
-{
-    Console::SafeVMPtrQuiet pVM (mParent);
-
-    if (!pVM.isOk())
-        return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running");
-
-    char *pszSnapshot;
-    int vrc = STAMR3Snapshot(pVM, Utf8Str(aPattern).c_str(), &pszSnapshot, NULL,
-                             !!aWithDescriptions);
-    if (RT_FAILURE(vrc))
-        return vrc == VERR_NO_MEMORY ? E_OUTOFMEMORY : E_FAIL;
-
-    /** @todo this is horribly inefficient! And it's kinda difficult to tell whether it failed...
-     * Must use UTF-8 or ASCII here and completely avoid these two extra copy operations.
-     * Until that's done, this method is kind of useless for debugger statistics GUI because
-     * of the amount statistics in a debug build. */
-    Bstr (pszSnapshot).cloneTo(aStats);
-
-    return S_OK;
-}
-
-/**
- * Injects an NMI.
- *
- * @returns COM status code
- */
+STDMETHODIMP MachineDebugger::DumpGuestCore(IN_BSTR a_bstrFilename, IN_BSTR a_bstrCompression)
+{
+    CheckComArgStrNotEmptyOrNull(a_bstrFilename);
+    Utf8Str strFilename(a_bstrFilename);
+    if (a_bstrCompression && *a_bstrCompression)
+        return setError(E_INVALIDARG, tr("The compression parameter must be empty"));
+
+    AutoCaller autoCaller(this);
+    HRESULT hrc = autoCaller.rc();
+    if (SUCCEEDED(hrc))
+    {
+        AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+        Console::SafeVMPtr ptrVM(mParent);
+        hrc = ptrVM.rc();
+        if (SUCCEEDED(hrc))
+        {
+            int vrc = DBGFR3CoreWrite(ptrVM, strFilename.c_str(), false /*fReplaceFile*/);
+            if (RT_SUCCESS(vrc))
+                hrc = S_OK;
+            else
+                hrc = setError(E_FAIL, tr("DBGFR3CoreWrite failed with %Rrc"), vrc);
+        }
+    }
+
+    return hrc;
+}
+
+STDMETHODIMP MachineDebugger::DumpHostProcessCore(IN_BSTR a_bstrFilename, IN_BSTR a_bstrCompression)
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::Info(IN_BSTR a_bstrName, IN_BSTR a_bstrArgs, BSTR *a_pbstrInfo)
+{
+    ReturnComNotImplemented();
+}
+
 STDMETHODIMP MachineDebugger::InjectNMI()
 {
@@ -745,33 +711,108 @@
 }
 
-/**
- * Triggers a guest core dump.
- *
- * @returns COM status code
- * @param
- */
-STDMETHODIMP MachineDebugger::DumpGuestCore(IN_BSTR a_bstrFilename)
-{
-    CheckComArgStrNotEmptyOrNull(a_bstrFilename);
-    Utf8Str strFilename(a_bstrFilename);
-
-    AutoCaller autoCaller(this);
-    HRESULT hrc = autoCaller.rc();
-    if (SUCCEEDED(hrc))
-    {
-        AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
-        Console::SafeVMPtr ptrVM(mParent);
-        hrc = ptrVM.rc();
-        if (SUCCEEDED(hrc))
-        {
-            int vrc = DBGFR3CoreWrite(ptrVM, strFilename.c_str(), false /*fReplaceFile*/);
-            if (RT_SUCCESS(vrc))
-                hrc = S_OK;
-            else
-                hrc = setError(E_FAIL, tr("DBGFR3CoreWrite failed with %Rrc"), vrc);
-        }
-    }
-
-    return hrc;
+STDMETHODIMP MachineDebugger::ReadPhysicalMemory(LONG64 a_Address, ULONG a_cbRead, ComSafeArrayOut(BYTE, a_abData))
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::WritePhysicalMemory(LONG64 a_Address, ULONG a_cbRead, ComSafeArrayIn(BYTE, a_abData))
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::ReadVirtualMemory(ULONG a_idCpu, LONG64 a_Address, ULONG a_cbRead, ComSafeArrayOut(BYTE, a_abData))
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::WriteVirtualMemory(ULONG a_idCpu, LONG64 a_Address, ULONG a_cbRead, ComSafeArrayIn(BYTE, a_abData))
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::GetRegister(ULONG a_idCpu, IN_BSTR a_bstrName, BSTR *a_pbstrValue)
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::GetRegisters(ULONG a_idCpu, ComSafeArrayOut(BSTR, a_bstrNames), ComSafeArrayOut(BSTR, a_bstrValues))
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::SetRegister(ULONG a_idCpu, IN_BSTR a_bstrName, IN_BSTR a_bstrValue)
+{
+    ReturnComNotImplemented();
+}
+
+STDMETHODIMP MachineDebugger::SetRegisters(ULONG a_idCpu, ComSafeArrayIn(IN_BSTR, a_bstrNames), ComSafeArrayIn(IN_BSTR, a_bstrValues))
+{
+    ReturnComNotImplemented();
+}
+
+/**
+ * Resets VM statistics.
+ *
+ * @returns COM status code.
+ * @param   aPattern            The selection pattern. A bit similar to filename globbing.
+ */
+STDMETHODIMP MachineDebugger::ResetStats(IN_BSTR aPattern)
+{
+    Console::SafeVMPtrQuiet pVM (mParent);
+
+    if (!pVM.isOk())
+        return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running");
+
+    STAMR3Reset(pVM, Utf8Str(aPattern).c_str());
+
+    return S_OK;
+}
+
+/**
+ * Dumps VM statistics to the log.
+ *
+ * @returns COM status code.
+ * @param   aPattern            The selection pattern. A bit similar to filename globbing.
+ */
+STDMETHODIMP MachineDebugger::DumpStats (IN_BSTR aPattern)
+{
+    Console::SafeVMPtrQuiet pVM (mParent);
+
+    if (!pVM.isOk())
+        return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running");
+
+    STAMR3Dump(pVM, Utf8Str(aPattern).c_str());
+
+    return S_OK;
+}
+
+/**
+ * Get the VM statistics in an XML format.
+ *
+ * @returns COM status code.
+ * @param   aPattern            The selection pattern. A bit similar to filename globbing.
+ * @param   aWithDescriptions   Whether to include the descriptions.
+ * @param   aStats              The XML document containing the statistics.
+ */
+STDMETHODIMP MachineDebugger::GetStats (IN_BSTR aPattern, BOOL aWithDescriptions, BSTR *aStats)
+{
+    Console::SafeVMPtrQuiet pVM (mParent);
+
+    if (!pVM.isOk())
+        return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running");
+
+    char *pszSnapshot;
+    int vrc = STAMR3Snapshot(pVM, Utf8Str(aPattern).c_str(), &pszSnapshot, NULL,
+                             !!aWithDescriptions);
+    if (RT_FAILURE(vrc))
+        return vrc == VERR_NO_MEMORY ? E_OUTOFMEMORY : E_FAIL;
+
+    /** @todo this is horribly inefficient! And it's kinda difficult to tell whether it failed...
+     * Must use UTF-8 or ASCII here and completely avoid these two extra copy operations.
+     * Until that's done, this method is kind of useless for debugger statistics GUI because
+     * of the amount statistics in a debug build. */
+    Bstr(pszSnapshot).detachTo(aStats);
+
+    return S_OK;
 }
 
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35241)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35242)
@@ -11889,7 +11889,238 @@
   <interface
     name="IMachineDebugger" extends="$unknown"
-    uuid="373a5f51-67c1-4a31-be43-1e29ebe8ef85"
+    uuid="b1fd749c-e471-4ae3-863f-54b4f787cdef"
     wsmap="suppress"
     >
+    <method name="dumpGuestCore">
+      <desc>
+        Takes a core dump of the guest.
+
+        See include/VBox/dbgfcorefmt.h for details on the file format.
+      </desc>
+      <param name="filename" type="wstring" dir="in">
+        <desc>
+          The name of the output file.  The file must not exist.
+        </desc>
+      </param>
+      <param name="compression" type="wstring" dir="in">
+        <desc>
+          Reserved for future compression method indicator.
+        </desc>
+      </param>
+    </method>
+
+    <method name="dumpHostProcessCore">
+      <desc>
+        Takes a core dump of the VM process on the host.
+
+        This feature is not implemented in the 4.0.0 release but it may show up
+        in a dot release.
+      </desc>
+      <param name="filename" type="wstring" dir="in">
+        <desc>
+          The name of the output file.  The file must not exist.
+        </desc>
+      </param>
+      <param name="compression" type="wstring" dir="in">
+        <desc>
+          Reserved for future compression method indicator.
+        </desc>
+      </param>
+    </method>
+
+    <method name="info">
+      <desc>
+        Interfaces with the info dumpers (DBGFInfo).
+
+        This feature is not implemented in the 4.0.0 release but it may show up
+        in a dot release.
+      </desc>
+      <param name="name" type="wstring" dir="in">
+        <desc>
+          The name of the info item.
+        </desc>
+      </param>
+      <param name="args" type="wstring" dir="in">
+        <desc>
+          Arguments to the info dumper.
+        </desc>
+      </param>
+      <param name="info" type="wstring" dir="return">
+        <desc>
+          The into string.
+        </desc>
+      </param>
+    </method>
+
+    <method name="injectNMI">
+      <desc>
+        Inject an NMI into a running VT-x/AMD-V VM.
+      </desc>
+    </method>
+
+    <method name="readPhysicalMemory">
+      <desc>
+        Reads guest physical memory, no side effects (MMIO++).
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="address" type="long long" dir="in">
+        <desc>The guest physical address.</desc>
+      </param>
+      <param name="size" type="unsigned long" dir="in">
+        <desc>The number of bytes to read.</desc>
+      </param>
+      <param name="bytes" type="octet" safearray="yes" dir="return">
+        <desc>The bytes read.</desc>
+      </param>
+    </method>
+
+    <method name="writePhysicalMemory">
+      <desc>
+        Writes guest physical memory, access handles (MMIO++) are ignored.
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="address" type="long long" dir="in">
+        <desc>The guest physical address.</desc>
+      </param>
+      <param name="size" type="unsigned long" dir="in">
+        <desc>The number of bytes to read.</desc>
+      </param>
+      <param name="bytes" type="octet" safearray="yes" dir="in">
+        <desc>The bytes to write.</desc>
+      </param>
+    </method>
+
+    <method name="readVirtualMemory">
+      <desc>
+        Reads guest virtual memory, no side effects (MMIO++).
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="cpuId" type="unsigned long" dir="in">
+        <desc>The identifier of the Virtual CPU.</desc>
+      </param>
+      <param name="address" type="long long" dir="in">
+        <desc>The guest virtual address.</desc>
+      </param>
+      <param name="size" type="unsigned long" dir="in">
+        <desc>The number of bytes to read.</desc>
+      </param>
+      <param name="bytes" type="octet" safearray="yes" dir="return">
+        <desc>The bytes read.</desc>
+      </param>
+    </method>
+
+    <method name="writeVirtualMemory">
+      <desc>
+        Writes guest virtual memory, access handles (MMIO++) are ignored.
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="cpuId" type="unsigned long" dir="in">
+        <desc>The identifier of the Virtual CPU.</desc>
+      </param>
+      <param name="address" type="long long" dir="in">
+        <desc>The guest virtual address.</desc>
+      </param>
+      <param name="size" type="unsigned long" dir="in">
+        <desc>The number of bytes to read.</desc>
+      </param>
+      <param name="bytes" type="octet" safearray="yes" dir="in">
+        <desc>The bytes to write.</desc>
+      </param>
+    </method>
+
+    <method name="getRegister">
+      <desc>
+        Gets one register.
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="cpuId" type="unsigned long" dir="in">
+        <desc>The identifier of the Virtual CPU.</desc>
+      </param>
+      <param name="name" type="wstring" dir="in">
+        <desc>The register name, case is ignored.</desc>
+      </param>
+      <param name="value" type="wstring" dir="return">
+        <desc>
+          The register value.  This is usually a hex value (always 0x prefixed)
+          but other format may be used for floating point registers (TBD).
+        </desc>
+      </param>
+    </method>
+
+    <method name="getRegisters">
+      <desc>
+        Gets all the registers for the given CPU.
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="cpuId" type="unsigned long" dir="in">
+        <desc>The identifier of the Virtual CPU.</desc>
+      </param>
+      <param name="names" type="wstring" dir="out" safearray="yes">
+        <desc>Array containing the lowercase register names.</desc>
+      </param>
+      <param name="values" type="wstring" dir="out" safearray="yes">
+        <desc>
+          Array paralell to the names holding the register values as if the
+          register was returned by <link name="IMachineDebugger::getRegister"/>.
+        </desc>
+      </param>
+    </method>
+
+    <method name="setRegister">
+      <desc>
+        Gets one register.
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="cpuId" type="unsigned long" dir="in">
+        <desc>The identifier of the Virtual CPU.</desc>
+      </param>
+      <param name="name" type="wstring" dir="in">
+        <desc>The register name, case is ignored.</desc>
+      </param>
+      <param name="value" type="wstring" dir="in">
+        <desc>
+          The new register value.  Hexadecimal, decimal and octal formattings
+          are supported in addition to any special formattings returned by
+          the getters.
+        </desc>
+      </param>
+    </method>
+
+    <method name="setRegisters">
+      <desc>
+        Sets zero or more registers atomically.
+
+        This feature is not implemented in the 4.0.0 release but may show up
+        in a dot release.
+      </desc>
+      <param name="cpuId" type="unsigned long" dir="in">
+        <desc>The identifier of the Virtual CPU.</desc>
+      </param>
+      <param name="names" type="wstring" dir="in" safearray="yes">
+        <desc>Array containing the register names, case ignored.</desc>
+      </param>
+      <param name="values" type="wstring" dir="in" safearray="yes">
+        <desc>
+          Array paralell to the names holding the register values. See
+          <link name="IMachineDebugger::setRegister"/> for formatting
+          guidelines.
+        </desc>
+      </param>
+    </method>
+
     <method name="resetStats">
       <desc>
@@ -11922,23 +12153,4 @@
       <param name="stats" type="wstring" dir="out">
         <desc>The XML document containing the statistics.</desc>
-      </param>
-    </method>
-
-    <method name="injectNMI">
-      <desc>
-        Inject an NMI into a running VT-x/AMD-V VM.
-      </desc>
-    </method>
-
-    <method name="dumpGuestCore">
-      <desc>
-        Takes a core dump of the guest.
-
-        See include/VBox/dbgfcorefmt.h for details on the file format.
-      </desc>
-      <param name="filename" type="wstring" dir="in">
-        <desc>
-          The name of the output file.  The file must not exist.
-        </desc>
       </param>
     </method>
Index: /trunk/src/VBox/Main/include/MachineDebuggerImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 35241)
+++ /trunk/src/VBox/Main/include/MachineDebuggerImpl.h	(revision 35242)
@@ -72,11 +72,21 @@
     STDMETHOD(COMSETTER(VirtualTimeRate)) (ULONG aPct);
     STDMETHOD(COMGETTER(VM)) (LONG64 *aVm);
-    STDMETHOD(InjectNMI)();
-    STDMETHOD(DumpGuestCore)(IN_BSTR a_bstrFilename);
 
     // IMachineDebugger methods
-    STDMETHOD(ResetStats (IN_BSTR aPattern));
-    STDMETHOD(DumpStats (IN_BSTR aPattern));
-    STDMETHOD(GetStats (IN_BSTR aPattern, BOOL aWithDescriptions, BSTR *aStats));
+    STDMETHOD(DumpGuestCore)(IN_BSTR a_bstrFilename, IN_BSTR a_bstrCompression);
+    STDMETHOD(DumpHostProcessCore)(IN_BSTR a_bstrFilename, IN_BSTR a_bstrCompression);
+    STDMETHOD(Info)(IN_BSTR a_bstrName, IN_BSTR a_bstrArgs, BSTR *a_bstrInfo);
+    STDMETHOD(InjectNMI)();
+    STDMETHOD(ReadPhysicalMemory)(LONG64 a_Address, ULONG a_cbRead, ComSafeArrayOut(BYTE, a_abData));
+    STDMETHOD(WritePhysicalMemory)(LONG64 a_Address, ULONG a_cbRead, ComSafeArrayIn(BYTE, a_abData));
+    STDMETHOD(ReadVirtualMemory)(ULONG a_idCpu, LONG64 a_Address, ULONG a_cbRead, ComSafeArrayOut(BYTE, a_abData));
+    STDMETHOD(WriteVirtualMemory)(ULONG a_idCpu, LONG64 a_Address, ULONG a_cbRead, ComSafeArrayIn(BYTE, a_abData));
+    STDMETHOD(GetRegister)(ULONG a_idCpu, IN_BSTR a_bstrName, BSTR *a_pbstrValue);
+    STDMETHOD(GetRegisters)(ULONG a_idCpu, ComSafeArrayOut(BSTR, a_bstrNames), ComSafeArrayOut(BSTR, a_bstrValues));
+    STDMETHOD(SetRegister)(ULONG a_idCpu, IN_BSTR a_bstrName, IN_BSTR a_bstrValue);
+    STDMETHOD(SetRegisters)(ULONG a_idCpu, ComSafeArrayIn(IN_BSTR, a_bstrNames), ComSafeArrayIn(IN_BSTR, a_bstrValues));
+    STDMETHOD(ResetStats)(IN_BSTR aPattern);
+    STDMETHOD(DumpStats)(IN_BSTR aPattern);
+    STDMETHOD(GetStats)(IN_BSTR aPattern, BOOL aWithDescriptions, BSTR *aStats);
 
 
