From 191b671d04a0a7c92fbd4421a3a8fb93c7bf1d1b Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Sat, 24 Nov 1990 07:52:32 +0000 Subject: [PATCH] Added sparc code inside of #ifdef/#endifs. --- ldb/test.c | 194 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 119 insertions(+), 75 deletions(-) diff --git a/ldb/test.c b/ldb/test.c index cfd61a427..f72c8bfb6 100644 --- a/ldb/test.c +++ b/ldb/test.c @@ -1,4 +1,4 @@ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/test.c,v 1.9 1990/10/13 04:50:03 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/test.c,v 1.10 1990/11/24 07:52:32 wlott Exp $ */ /* Extra random routines for testing stuff. */ #include <signal.h> @@ -20,6 +20,32 @@ static char *signames[] = { static char *errors[] = ERRORS; +#ifdef mips +#define any_reg_sc 16 +#define descriptor_reg_sc 17 +#define base_char_reg_sc 18 +#define sap_reg_sc 19 +#define signed_reg_sc 20 +#define unsigned_reg_sc 21 +#define non_descr_reg_sc 22 +#define interior_reg_sc 23 +#define single_float_reg_sc 24 +#define double_float_reg_sc 25 +#endif + +#ifdef sparc +#define any_reg_sc 11 +#define descriptor_reg_sc 12 +#define base_char_reg_sc 13 +#define sap_reg_sc 14 +#define signed_reg_sc 15 +#define unsigned_reg_sc 16 +#define non_descr_reg_sc 17 +#define interior_reg_sc 18 +#define single_float_reg_sc 19 +#define double_float_reg_sc 20 +#endif + signal_handler(signal, code, context) int signal, code; @@ -28,6 +54,7 @@ struct sigcontext *context; int mask; unsigned long *ptr, bad_inst; unsigned char *cptr; + int len, scoffset, sc, offset, ch; printf("Hit with %s, code = %d, context = 0x%x\n", signames[signal], code, context); @@ -36,11 +63,26 @@ struct sigcontext *context; ptr = (unsigned long *)(context->sc_pc + 4); else ptr = (unsigned long *)(context->sc_pc); +#endif +#ifdef sparc + ptr = (unsigned long *)(context->sc_pc); +#endif + bad_inst = *ptr; +#ifdef mips if ((bad_inst >> 26) == 0 && (bad_inst & 0x3f) == 0xd) { /* It was a break. */ switch ((bad_inst >> 16) & 0x3ff) { +#if 0 + } + } +#endif +#endif +#ifdef sparc + if ((bad_inst & 0xc1c00000) == 0) { + switch (bad_inst & 0x3fffff) { +#endif case trap_Halt: printf("%primitive halt called; the party is over.\n"); break; @@ -52,95 +94,93 @@ struct sigcontext *context; case trap_Error: case trap_Cerror: cptr = (unsigned char *)(ptr+1); - if (*cptr == 0xff) { - int len, scoffset, sc, offset, ch; - + if (*cptr == 0xff) cptr++; - len = *cptr++; - printf("Error: %s\n", errors[*cptr++]); + + len = *cptr++; + printf("Error: %s\n", errors[*cptr++]); + len--; + while (len > 0) { + scoffset = *cptr++; len--; - while (len > 0) { + if (scoffset == 253) { 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); + } + 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; + len -= 4; + } + sc = scoffset & 0x1f; + offset = scoffset >> 5; + + printf(" SC: %d, Offset: %d", sc, offset); + switch (sc) { + case any_reg_sc: + case descriptor_reg_sc: + putchar('\t'); + brief_print(context->sc_regs[offset]); + break; + case base_char_reg_sc: + 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: - printf("\t???\n"); + if (ch < 32 || ch > 127) + printf("\\%03o", ch); + else + printf("\t'%c'\n", ch); break; } + break; + case sap_reg_sc: + printf("\t0x%08x\n", context->sc_regs[offset]); + break; + case signed_reg_sc: + printf("\t%ld\n", context->sc_regs[offset]); + break; + case unsigned_reg_sc: + printf("\t%lu\n", context->sc_regs[offset]); + break; + case non_descr_reg_sc: + case interior_reg_sc: + printf("\t???\n"); + break; + case single_float_reg_sc: + printf("\t%g\n", + *(float *)&context->sc_fpregs[offset]); + break; + case double_float_reg_sc: + 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"); +#ifdef mips if (context->sc_cause & CAUSE_BD) emulate_branch(context, *(unsigned long *)context->sc_pc); else context->sc_pc += 4; +#endif +#ifdef sparc + context->sc_pc = context->sc_npc; + context->sc_npc = context->sc_npc + 4; +#endif } break; @@ -149,7 +189,6 @@ struct sigcontext *context; break; } } -#endif mask = sigsetmask(0); @@ -163,7 +202,12 @@ struct sigcontext *context; test_init() { install_handler(SIGINT, signal_handler); +#ifdef mips install_handler(SIGTRAP, signal_handler); +#endif +#ifdef sparc + install_handler(SIGILL, signal_handler); +#endif } -- GitLab