From e4cf1adc806f24d26756fa828e0d7b515a06752d Mon Sep 17 00:00:00 2001 From: bellard Date: Sat, 4 Jun 2005 20:15:57 +0000 Subject: added sum command git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1434 c046a42c-6fe2-441c-8c8c-71466251a162 --- monitor.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'monitor.c') diff --git a/monitor.c b/monitor.c index b9de0295c3..285508e066 100644 --- a/monitor.c +++ b/monitor.c @@ -562,6 +562,22 @@ static void do_print(int count, int format, int size, unsigned int valh, unsigne term_printf("\n"); } +static void do_sum(uint32_t start, uint32_t size) +{ + uint32_t addr; + uint8_t buf[1]; + uint16_t sum; + + sum = 0; + for(addr = start; addr < (start + size); addr++) { + cpu_physical_memory_rw(addr, buf, 1, 0); + /* BSD sum algorithm ('sum' Unix command) */ + sum = (sum >> 1) | (sum << 15); + sum += buf[0]; + } + term_printf("%05d\n", sum); +} + typedef struct { int keycode; const char *name; @@ -906,6 +922,8 @@ static term_cmd_t term_cmds[] = { "keys", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1')" }, { "system_reset", "", do_system_reset, "", "reset the system" }, + { "sum", "ii", do_sum, + "addr size", "compute the checksum of a memory region" }, { NULL, NULL, }, }; -- cgit v1.2.1