X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=contrib%2Fitmdump.c;h=f31e1ff756aba9a6de653e1297af695eaff81823;hb=fed16496ab31041a7e113db3f3d6b0cf5c23866d;hp=71f6e06709529d4c92fd1f9d7189e1390cb7bc8f;hpb=01b42b2e7c0d2a0419548f0a270705dc19baca34;p=fw%2Fopenocd
diff --git a/contrib/itmdump.c b/contrib/itmdump.c
index 71f6e0670..f31e1ff75 100644
--- a/contrib/itmdump.c
+++ b/contrib/itmdump.c
@@ -1,19 +1,6 @@
-/*
- * Copyright (C) 2010 by David Brownell
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+
+/* Copyright (C) 2010 by David Brownell */
/*
* Simple utility to parse and dump ARM Cortex-M3 SWO trace output. Once the
@@ -39,11 +26,13 @@
#include
#include
-#include
#include
+#include
+#include
#include
#include
+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 +48,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 +79,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 +139,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 +241,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 +276,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 +297,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;
@@ -301,7 +313,7 @@ static void show_timestamp(FILE *f, int c)
delayed = true;
break;
case 0xf:
- label = ", packet and timetamp delayed";
+ label = ", packet and timestamp delayed";
delayed = true;
break;
}
@@ -348,7 +360,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 +370,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]));