freebsd-dev/sys/contrib/ia64/libuwx/test/dump_context.c
Marcel Moolenaar c2b1cc6d02 Import beta6 of libuwx. This release has some minor fixes and
some minor corrections to beta5.
2003-10-29 04:25:17 +00:00

101 lines
1.8 KiB
C

#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');
}
}