aboutsummaryrefslogtreecommitdiff
path: root/monitor.c
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2005-06-04 20:15:57 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2005-06-04 20:15:57 +0000
commite4cf1adc806f24d26756fa828e0d7b515a06752d (patch)
tree693bab6068c9927e64a22f131af5f0b107712613 /monitor.c
parent72cc6cfeef616f443761365c294a86057950f9bd (diff)
added sum command
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1434 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'monitor.c')
-rw-r--r--monitor.c18
1 files changed, 18 insertions, 0 deletions
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, },
};