diff options
author | Neal H. Walfield <neal@gnu.org> | 2009-02-23 20:58:59 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2009-02-23 20:58:59 +0100 |
commit | f36fe8af3fe9288386a2d40c1730d353e7f1bef6 (patch) | |
tree | 195175656af8573750a625da5277bc5553b1893a /viengoos | |
parent | 4350b0adcaed317d4758379d347d8a431bb6d5ec (diff) |
Fix memory dump output.
Diffstat (limited to 'viengoos')
-rw-r--r-- | viengoos/object.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/viengoos/object.c b/viengoos/object.c index 9b187c7..c700784 100644 --- a/viengoos/object.c +++ b/viengoos/object.c @@ -197,20 +197,34 @@ memory_debug_command (int argc, char *argv[]) addr -= count; } + int i = (uintptr_t) addr & (sizeof (uint64_t) - 1); + if (i != 0) + /* ADDR is not a multiple of a uint64_t, round down. */ + { + count += i; + addr -= i; + } + + i = (uintptr_t) count & (sizeof (uint64_t) - 1); + if (i != 0) + /* COUNT is not a multiple of a uint64_t, round up. */ + count += sizeof (uint64_t) - i; + if (((uintptr_t) addr & ((sizeof (uint64_t) * 4) - 1)) != 0) { if (sizeof (uintptr_t) == 8) - printf ("%016"PRIxPTR": ", (uintptr_t) addr); + printf ("%016"PRIxPTR":", (uintptr_t) addr); else - printf ("%08"PRIxPTR": ", (uintptr_t) addr); + printf ("%08"PRIxPTR":", (uintptr_t) addr); - uintptr_t a = ((uintptr_t) addr & ~((sizeof (uint64_t) * 4) - 1)); - while (a < (uintptr_t) addr) + uintptr_t a; + for (a = ((uintptr_t) addr & ~((sizeof (uint64_t) * 4) - 1)); + a < (uintptr_t) addr; + a ++) { - printf (" "); - a ++; if ((a & (sizeof (uint64_t) - 1)) == 0) printf (" "); + printf (" "); } } @@ -238,30 +252,23 @@ memory_debug_command (int argc, char *argv[]) } if (skipped) - printf ("... skipping %d zero bytes...", + printf ("\n... skipping %d zero bytes...", skipped * (int) sizeof (uint64_t) * 4); if (count > 0) { if (sizeof (uintptr_t) == 8) - printf ("\n%016"PRIxPTR": ", (uintptr_t) addr); + printf ("\n%016"PRIxPTR":", (uintptr_t) addr); else - printf ("\n%08"PRIxPTR": ", (uintptr_t) addr); + printf ("\n%08"PRIxPTR":", (uintptr_t) addr); } else break; } - do - { - printf ("%02x", *addr); - addr ++; - count --; - } - while ((((uintptr_t) addr & (sizeof (uint64_t) - 1)) != 0) - && count > 0); - - printf (" "); + printf (" %016"PRIxPTR, *(uint64_t *) addr); + addr += sizeof (uint64_t); + count -= sizeof (uint64_t); } printf ("\n"); } @@ -284,7 +291,6 @@ object_lookup_command (int argc, char *argv[]) } struct thread *thread = current_thread; - if (argc == 3) { vg_oid_t oid = strtoul (argv[1], NULL, 16); @@ -304,6 +310,11 @@ object_lookup_command (int argc, char *argv[]) thread = (struct thread *) object; } + if (! thread) + { + printf ("current_thread is NULL and no thread specified."); + return; + } char *tail = NULL; uintptr_t prefix = strtoul (argv[argc - 1], &tail, 16); |