mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 11:23:43 +08:00
physical memory dump to file
(Marvin Flumm) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4195 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
0938cda5d0
commit
a8bdf7a639
28
monitor.c
28
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, },
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user