physical memory dump to file
authoraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 11 Apr 2008 21:36:14 +0000 (21:36 +0000)
committeraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>
Fri, 11 Apr 2008 21:36:14 +0000 (21:36 +0000)
(Marvin Flumm)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4195 c046a42c-6fe2-441c-8c8c-71466251a162

monitor.c

index 025025b..7bad326 100644 (file)
--- a/monitor.c
+++ b/monitor.c
@@ -744,6 +744,32 @@ static void do_memory_save(unsigned int valh, unsigned int vall,
     fclose(f);
 }
 
+static void do_physical_memory_save(unsigned int valh, unsigned int vall,
+                                    uint32_t size, const char *filename)
+{
+    FILE *f;
+    uint32_t l;
+    uint8_t buf[1024];
+    target_long addr = GET_TLONG(valh, vall);
+
+    f = fopen(filename, "wb");
+    if (!f) {
+        term_printf("could not open '%s'\n", filename);
+        return;
+    }
+    while (size != 0) {
+        l = sizeof(buf);
+        if (l > size)
+            l = size;
+        cpu_physical_memory_rw(addr, buf, l, 0);
+        fwrite(buf, 1, l, f);
+        fflush(f);
+        addr += l;
+        size -= l;
+    }
+    fclose(f);
+}
+
 static void do_sum(uint32_t start, uint32_t size)
 {
     uint32_t addr;
@@ -1328,6 +1354,8 @@ static term_cmd_t term_cmds[] = {
        "capture index", "stop capture" },
     { "memsave", "lis", do_memory_save,
       "addr size file", "save to disk virtual memory dump starting at 'addr' of size 'size'", },
+    { "pmemsave", "lis", do_physical_memory_save,
+      "addr size file", "save to disk physical memory dump starting at 'addr' of size 'size'", },
     { NULL, NULL, },
 };