FreeCalypso > hg > freecalypso-tools
diff rvinterf/etmsync/memcmd.c @ 0:e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 Jun 2016 00:13:35 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/etmsync/memcmd.c Sat Jun 11 00:13:35 2016 +0000 @@ -0,0 +1,94 @@ +/* + * User commands for reading memory regions and Calypso die ID via ETM + */ + +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include "etm.h" +#include "tm3.h" +#include "limits.h" +#include "localtypes.h" +#include "exitcodes.h" + +static void +memdump_line(addr, buf, len) + u32 addr; + u_char *buf; +{ + int i, c; + + printf("%08X: ", addr); + for (i = 0; i < 16; i++) { + if (i < len) + printf("%02X ", buf[i]); + else + fputs(" ", stdout); + if (i == 7 || i == 15) + putchar(' '); + } + for (i = 0; i < len; i++) { + c = buf[i]; + if (c < ' ' || c > '~') + c = '.'; + putchar(c); + } + putchar('\n'); +} + +cmd_memdump(argc, argv) + char **argv; +{ + u_char databuf[MAX_MEMREAD_BYTES]; + u32 memaddr; + int rc, sz, off, l; + + memaddr = strtoul(argv[1], 0, 16); + sz = strtoul(argv[2], 0, 16); + rc = do_memory_read(memaddr, databuf, sz); + if (rc) + return(rc); + for (off = 0; off < sz; off += 16) { + l = sz - off; + if (l > 16) + l = 16; + memdump_line(memaddr + off, databuf + off, l); + } + return(0); +} + +cmd_omemdump(argc, argv) + char **argv; +{ + u_char databuf[TM3_MEMREAD_MAX]; + u32 memaddr; + int rc, sz, off, l; + + memaddr = strtoul(argv[1], 0, 16); + sz = strtoul(argv[2], 0, 16); + rc = do_memory_read_tm3(memaddr, databuf, sz); + if (rc) + return(rc); + for (off = 0; off < sz; off += 16) { + l = sz - off; + if (l > 16) + l = 16; + memdump_line(memaddr + off, databuf + off, l); + } + return(0); +} + +cmd_dieid() +{ + u_char buf[8]; + int rc; + + rc = do_dieid_read(buf); + if (rc) + return(rc); + printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", buf[0], buf[1], + buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); + return(0); +}