FreeCalypso > hg > freecalypso-sw
annotate target-utils/libload/cmd_memdump_human.c @ 41:1c50add5e202
loadagent stack bottom moved to 0x81FFFC: be friendly to chain-loading
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 16 Jun 2013 07:31:23 +0000 |
parents | 9ee91bc6057c |
children |
rev | line source |
---|---|
19
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This is a human-oriented memory dump command. The dump is given in |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * both hex and ASCII, with readable spacing. |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 */ |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 #include <sys/types.h> |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include "types.h" |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 void |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 cmd_memdump_human(argbulk) |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 char *argbulk; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 { |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 char *argv[3]; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 u_long start, length; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 u_long offset; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 u_char intbuf[16]; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 int i, c; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 if (parse_args(argbulk, 2, 2, argv, 0) < 0) |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 return; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 if (parse_hexarg(argv[0], 8, &start) < 0) { |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 printf("ERROR: arg1 must be a valid 32-bit hex address\n"); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 return; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 } |
24
9ee91bc6057c
loadagent buglet in the memory dump command argument parsing
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
19
diff
changeset
|
25 if (parse_hexarg(argv[1], 8, &length) < 0) { |
19
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 printf("ERROR: arg2 must be a valid 32-bit hex value (length)\n"); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 return; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 } |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 if (start & 0xF || length & 0xF) { |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 printf("ERROR: implementation limit: 16-byte alignment required\n"); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 return; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 } |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 for (offset = 0; offset < length; offset += 0x10) { |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 bcopy(start + offset, intbuf, 0x10); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 printf("%08X: ", start + offset); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 for (i = 0; i < 16; i++) { |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 printf("%02X ", intbuf[i]); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 if ((i & 3) == 3) |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 putchar(' '); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 } |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 for (i = 0; i < 16; i++) { |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 c = intbuf[i]; |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 if (c >= ' ' && c <= '~') |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 putchar(c); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 else |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 putchar('.'); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 } |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 putchar('\n'); |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 } |
c0e063494194
loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 } |