summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ia64/libuwx/test/dump_context.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/ia64/libuwx/test/dump_context.c')
-rw-r--r--sys/contrib/ia64/libuwx/test/dump_context.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/sys/contrib/ia64/libuwx/test/dump_context.c b/sys/contrib/ia64/libuwx/test/dump_context.c
new file mode 100644
index 0000000..db46e3d
--- /dev/null
+++ b/sys/contrib/ia64/libuwx/test/dump_context.c
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <inttypes.h>
+
+#define IP 0
+#define SP 1
+#define BSP 2
+#define CFM 3
+#define RP 4
+#define PSP 5
+#define PFS 6
+#define PREDS 7
+#define PRIUNAT 8
+#define AR_BSPSTORE 9
+#define AR_RNAT 10
+#define AR_UNAT 11
+#define AR_FPSR 12
+#define AR_LC 13
+#define AR_PFS 14
+#define GR4 16
+#define GR5 17
+#define GR6 18
+#define GR7 19
+#define BR1 20
+#define BR2 21
+#define BR3 22
+#define BR4 23
+#define BR5 24
+
+void dump_context(uint64_t *context)
+{
+ int i, j;
+ unsigned int valid;
+ uint64_t val;
+ static char *names[] = {
+ /* 0 */ "ip", "sp", "bsp", "cfm",
+ /* 4 */ "rp", "psp", "pfs", "preds",
+ /* 8 */ "priunat", "ar.bspstore", "ar.rnat", "ar.unat",
+ /* 12 */ "ar.fpsr", "ar.lc", "ar.pfs", "(pad)",
+ /* 16 */ "gr4", "gr5", "gr6", "gr7",
+ /* 20 */ "br1", "br2", "br3", "br4", "br5"
+ };
+ static int col1[] = {
+ IP,
+ SP,
+ BSP,
+ CFM,
+ RP,
+ PSP,
+ PFS,
+ AR_RNAT,
+ AR_UNAT,
+ AR_FPSR,
+ AR_LC,
+ AR_PFS,
+ };
+ static int col2[] = {
+ PREDS,
+ PRIUNAT,
+ GR4,
+ GR5,
+ GR6,
+ GR7,
+ BR1,
+ BR2,
+ BR3,
+ BR4,
+ BR5,
+ };
+
+#define NCOL1 (sizeof(col1)/sizeof(int))
+#define NCOL2 (sizeof(col2)/sizeof(int))
+#define NPRINT (NCOL1 > NCOL2 ? NCOL1 : NCOL2)
+
+ valid = (unsigned int)(context[0] >> 32);
+ printf(" valid_regs (%08lx):", valid);
+ for (i = 0; i <= BR5; i++) {
+ if (valid & 1) printf(" %s", names[i]);
+ valid >>= 1;
+ }
+ printf("\n");
+ for (i = 0; i < NPRINT; i++) {
+ if (i < NCOL1) {
+ j = col1[i];
+ val = context[j+1];
+ printf(" %-8s %08x %08x", names[j],
+ (unsigned int)(val >> 32),
+ (unsigned int)val);
+ }
+ else
+ printf(" ");
+ if (i < NCOL2) {
+ j = col2[i];
+ val = context[j+1];
+ printf(" %-8s %08x %08x", names[j],
+ (unsigned int)(val >> 32),
+ (unsigned int)val);
+ }
+ putchar('\n');
+ }
+}
OpenPOWER on IntegriCloud