Skip to content
Snippets Groups Projects
Commit f7a16467 authored by wlott's avatar wlott
Browse files

Changed the internal error reporting stuff to be able to deal with the

more complicated internal error format.
parent 71f14e0d
No related branches found
No related tags found
No related merge requests found
/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/test.c,v 1.6 1990/07/01 04:49:00 wlott Exp $ */
/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/test.c,v 1.7 1990/08/30 16:39:00 wlott Exp $ */
/* Extra random routines for testing stuff. */
#include <signal.h>
......@@ -25,7 +25,7 @@ struct sigcontext *context;
{
int mask;
unsigned long *ptr, bad_inst;
char *cptr;
unsigned char *cptr;
printf("Hit with %s, code = %d, context = 0x%x\n", signames[signal], code, context);
......@@ -48,10 +48,90 @@ struct sigcontext *context;
case trap_Error:
case trap_Cerror:
cptr = (char *)(ptr+1);
printf("Error: %s\n", errors[*cptr]);
while (*++cptr != 0)
printf(" R%d: 0x%x\n", *cptr, context->sc_regs[*cptr]);
cptr = (unsigned char *)(ptr+1);
if (*cptr == 0xff) {
int len, scoffset, sc, offset, ch;
cptr++;
len = *cptr++;
printf("Error: %s\n", errors[*cptr++]);
len--;
while (len > 0) {
scoffset = *cptr++;
len--;
if (scoffset == 253) {
scoffset = *cptr++;
len--;
}
else if (scoffset == 254) {
scoffset = cptr[0] + cptr[1]*256;
cptr += 2;
len -= 2;
}
else if (scoffset == 255) {
scoffset = cptr[0] + (cptr[1]<<8) +
(cptr[2]<<16) + (cptr[3]<<24);
cptr += 4;
len -= 4;
}
sc = scoffset & 0x1f;
offset = scoffset >> 5;
printf(" SC: %d, Offset: %d", sc, offset);
switch (sc) {
case 16: /* Any reg */
case 17: /* Descriptor reg */
putchar('\t');
brief_print(context->sc_regs[offset]);
break;
case 18: /* base char reg */
ch = context->sc_regs[offset];
switch (ch) {
case '\n': printf("\t'\\n'\n"); break;
case '\b': printf("\t'\\b'\n"); break;
case '\t': printf("\t'\\t'\n"); break;
case '\r': printf("\t'\\r'\n"); break;
default:
if (ch < 32 || ch > 127)
printf("\\%03o", ch);
else
printf("\t'%c'\n", ch);
break;
}
break;
case 19: /* sap reg */
printf("\t0x%08x\n", context->sc_regs[offset]);
break;
case 20: /* signed reg */
printf("\t%ld\n", context->sc_regs[offset]);
break;
case 21: /* unsigned reg */
printf("\t%lu\n", context->sc_regs[offset]);
break;
case 22: /* non-descr reg */
case 23: /* interior reg */
printf("\t???\n");
break;
case 24: /* single-float reg */
printf("\t%g\n",
*(float *)&context->sc_fpregs[offset]);
break;
case 25: /* double-float reg */
printf("\t%g\n",
*(double *)&context->sc_fpregs[offset]);
break;
default:
printf("\t???\n");
break;
}
}
}
else {
printf("Error: %s\n", errors[*cptr]);
while (*++cptr != 0)
printf(" R%d: 0x%x\n", *cptr,
context->sc_regs[*cptr]);
}
if (code == trap_Cerror) {
printf("Hit a break. Use ``exit'' to continue.\n");
if (context->sc_cause & CAUSE_BD)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment