]> git.sur5r.net Git - openocd/blobdiff - contrib/itmdump.c
target/riscv/riscv-011: fix compile warning about uninitialized variable
[openocd] / contrib / itmdump.c
index 71f6e06709529d4c92fd1f9d7189e1390cb7bc8f..896389416033ab212ffcc6793d3fdce0c1015f66 100644 (file)
@@ -44,6 +44,7 @@
 #include <string.h>
 #include <unistd.h>
 
+unsigned int dump_swit;
 
 /* Example ITM trace word (0xWWXXYYZZ) parsing for task events, sent
  * on port 31 (Reserved for "the" RTOS in CMSIS v1.30)
@@ -59,6 +60,9 @@ static void show_task(int port, unsigned data)
        unsigned code = data >> 16;
        char buf[16];
 
+       if (dump_swit)
+               return;
+
        switch (code) {
        case 0:
                strcpy(buf, "run");
@@ -87,6 +91,9 @@ static void show_reserved(FILE *f, char *label, int c)
 {
        unsigned i;
 
+       if (dump_swit)
+               return;
+
        printf("%s - %#02x", label, c);
 
        for (i = 0; (c & 0x80) && i < 4; i++) {
@@ -144,6 +151,9 @@ static void show_hard(FILE *f, int c)
        unsigned value;
        char *label;
 
+       if (dump_swit)
+               return;
+
        printf("DWT - ");
 
        if (!read_varlen(f, c, &value))
@@ -243,10 +253,21 @@ static void show_swit(FILE *f, int c)
        unsigned value = 0;
        unsigned i;
 
-       printf("SWIT %u - ", port);
+       if (port + 1 == dump_swit) {
+               if (!read_varlen(f, c, &value))
+                       return;
+               printf("%c", value);
+               return;
+       }
 
        if (!read_varlen(f, c, &value))
                return;
+
+       if (dump_swit)
+               return;
+
+       printf("SWIT %u - ", port);
+
        printf("%#08x", value);
 
        for (i = 0; i < sizeof(format) / sizeof(format[0]); i++) {
@@ -267,6 +288,9 @@ static void show_timestamp(FILE *f, int c)
        char *label = "";
        bool delayed = false;
 
+       if (dump_swit)
+               return;
+
        printf("TIMESTAMP - ");
 
        /* Format 2: header only */
@@ -285,7 +309,7 @@ static void show_timestamp(FILE *f, int c)
        }
 
        /* Format 1:  one to four bytes of data too */
-       switch (c) {
+       switch (c >> 4) {
        default:
                label = ", reserved control\n";
                break;
@@ -348,7 +372,7 @@ int main(int argc, char **argv)
        int c;
 
        /* parse arguments */
-       while ((c = getopt(argc, argv, "f:")) != EOF) {
+       while ((c = getopt(argc, argv, "f:d:")) != EOF) {
                switch (c) {
                case 'f':
                        /* e.g. from UART connected to /dev/ttyUSB0 */
@@ -358,6 +382,9 @@ int main(int argc, char **argv)
                                return 1;
                        }
                        break;
+               case 'd':
+                       dump_swit = atoi(optarg);
+                       break;
                default:
                        fprintf(stderr, "usage: %s [-f input]",
                                basename(argv[0]));