comparison rvinterf/etmsync/memcmd.c @ 911:42719fa3e6af

etmsync: memory read implemented
author Space Falcon <falcon@ivan.Harhan.ORG>
date Tue, 08 Sep 2015 07:52:29 +0000
parents
children f50c71442d50
comparison
equal deleted inserted replaced
910:d1333db6385f 911:42719fa3e6af
1 /*
2 * User commands for reading memory regions and Calypso die ID via ETM
3 */
4
5 #include <sys/types.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <strings.h>
10 #include "etm.h"
11 #include "limits.h"
12 #include "localtypes.h"
13 #include "exitcodes.h"
14
15 void
16 memdump_line(addr, buf, len)
17 u32 addr;
18 u_char *buf;
19 {
20 int i, c;
21
22 printf("%08X: ", addr);
23 for (i = 0; i < 16; i++) {
24 if (i < len)
25 printf("%02X ", buf[i]);
26 else
27 fputs(" ", stdout);
28 if (i == 7 || i == 15)
29 putchar(' ');
30 }
31 for (i = 0; i < len; i++) {
32 c = buf[i];
33 if (c < ' ' || c > '~')
34 c = '.';
35 putchar(c);
36 }
37 putchar('\n');
38 }
39
40 cmd_memdump(argc, argv)
41 char **argv;
42 {
43 u_char databuf[MAX_MEMREAD_BYTES];
44 u32 memaddr;
45 int rc, sz, off, l;
46
47 memaddr = strtoul(argv[1], 0, 16);
48 sz = strtoul(argv[2], 0, 16);
49 rc = do_memory_read(memaddr, databuf, sz);
50 if (rc)
51 return(rc);
52 for (off = 0; off < sz; off += 16) {
53 l = sz - off;
54 if (l > 16)
55 l = 16;
56 memdump_line(memaddr + off, databuf + off, l);
57 }
58 return(0);
59 }