static void show_swit(FILE *f, int c) { unsigned size; unsigned port = c >> 3; unsigned char buf[4]; unsigned value = 0; unsigned i; printf("SWIT %u - ", port); if (!read_varlen(f, c, &value)) return; printf("%#08x", value); for (i = 0; i <= sizeof(format) / sizeof(format[0]); i++) { if (format[i].port == port) { printf(", "); format[i].show(port, value); break; } } printf("\n"); return; err: printf("(ERROR %d - %s)\n", errno, strerror(errno)); return; }
static void show_swit(FILE *f, int c) { unsigned port = c >> 3; unsigned value = 0; unsigned i; printf("SWIT %u - ", port); if (!read_varlen(f, c, &value)) return; printf("%#08x", value); for (i = 0; i < sizeof(format) / sizeof(format[0]); i++) { if (format[i].port == port) { printf(", "); format[i].show(port, value); break; } } printf("\n"); return; }
static void show_hard(FILE *f, int c) { unsigned type = c >> 3; unsigned value; char *label; printf("DWT - "); if (!read_varlen(f, c, &value)) return; printf("%#x", value); switch (type) { case 0: /* event counter wrapping */ printf("overflow %s%s%s%s%s%s", (value & (1 << 5)) ? "cyc " : "", (value & (1 << 4)) ? "fold " : "", (value & (1 << 3)) ? "lsu " : "", (value & (1 << 2)) ? "slp " : "", (value & (1 << 1)) ? "exc " : "", (value & (1 << 0)) ? "cpi " : ""); break; case 1: /* exception tracing */ switch (value >> 12) { case 1: label = "entry to"; break; case 2: label = "exit from"; break; case 3: label = "return to"; break; default: label = "?"; break; } printf("%s exception %d", label, value & 0x1ff); break; case 2: /* PC sampling */ if (c == 0x15) printf("PC - sleep"); else printf("PC - %#08x", value); break; case 8: /* data tracing, pc value */ case 10: case 12: case 14: printf("Data trace %d, PC %#08x", (c >> 4) & 3, value); /* optionally followed by data value */ break; case 9: /* data tracing, address offset */ case 11: case 13: case 15: printf("Data trace %d, address offset %#04x", (c >> 4) & 3, value); /* always followed by data value */ break; case 16 ... 23: /* data tracing, data value */ printf("Data trace %d, ", (c >> 4) & 3); label = (c & 0x8) ? "write" : "read"; switch (c & 3) { case 3: printf("word %s, value %#08x", label, value); break; case 2: printf("halfword %s, value %#04x", label, value); break; case 1: printf("byte %s, value %#02x", label, value); break; } break; default: printf("UNDEFINED, rawtype: %x", type); break; } printf("\n"); return; }