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);
+}