Commit a8bdf7a63901c6ce2d02b2b67a8cc8f84222bd26

Authored by aurel32
1 parent 0938cda5

physical memory dump to file

(Marvin Flumm)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4195 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 28 additions and 0 deletions
monitor.c
... ... @@ -744,6 +744,32 @@ static void do_memory_save(unsigned int valh, unsigned int vall,
744 744 fclose(f);
745 745 }
746 746  
  747 +static void do_physical_memory_save(unsigned int valh, unsigned int vall,
  748 + uint32_t size, const char *filename)
  749 +{
  750 + FILE *f;
  751 + uint32_t l;
  752 + uint8_t buf[1024];
  753 + target_long addr = GET_TLONG(valh, vall);
  754 +
  755 + f = fopen(filename, "wb");
  756 + if (!f) {
  757 + term_printf("could not open '%s'\n", filename);
  758 + return;
  759 + }
  760 + while (size != 0) {
  761 + l = sizeof(buf);
  762 + if (l > size)
  763 + l = size;
  764 + cpu_physical_memory_rw(addr, buf, l, 0);
  765 + fwrite(buf, 1, l, f);
  766 + fflush(f);
  767 + addr += l;
  768 + size -= l;
  769 + }
  770 + fclose(f);
  771 +}
  772 +
747 773 static void do_sum(uint32_t start, uint32_t size)
748 774 {
749 775 uint32_t addr;
... ... @@ -1328,6 +1354,8 @@ static term_cmd_t term_cmds[] = {
1328 1354 "capture index", "stop capture" },
1329 1355 { "memsave", "lis", do_memory_save,
1330 1356 "addr size file", "save to disk virtual memory dump starting at 'addr' of size 'size'", },
  1357 + { "pmemsave", "lis", do_physical_memory_save,
  1358 + "addr size file", "save to disk physical memory dump starting at 'addr' of size 'size'", },
1331 1359 { NULL, NULL, },
1332 1360 };
1333 1361  
... ...