diff options
Diffstat (limited to 'c/src/lib/libbsp/i960/rxgen960/startup/flttbl.c')
-rw-r--r-- | c/src/lib/libbsp/i960/rxgen960/startup/flttbl.c | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/c/src/lib/libbsp/i960/rxgen960/startup/flttbl.c b/c/src/lib/libbsp/i960/rxgen960/startup/flttbl.c deleted file mode 100644 index d83dc07eb3..0000000000 --- a/c/src/lib/libbsp/i960/rxgen960/startup/flttbl.c +++ /dev/null @@ -1,120 +0,0 @@ -/*-------------------------------------*/ -/* flttbl.c */ -/* Last change : 3.11.94 */ -/*-------------------------------------*/ -/* - * $Id$ - */ - -#include "i960.h" -#include "string.h" -#include "sctns.h" -#include "fault.h" -#include "asmfault.h" -#include "flttbl.h" -/*-------------------------------------*/ - /* Fault Table. It (as well as all the rest of the - * code of this file will always stay in ROM, so - * that it wouldn't be destroyed by silly user code. - * Thus, at least faults will be always caugth, - */ -FaultTblEntry faultTbl[] = { - {faultHndlEntry + LOCAL_FH, LOCAL_FW}, /* Parallel */ - {faultHndlEntry + LOCAL_FH, LOCAL_FW}, /* Trace */ - {faultHndlEntry + LOCAL_FH, LOCAL_FW}, /* Operation */ - {faultHndlEntry + LOCAL_FH, LOCAL_FW}, /* Arithmetic */ - {0, 0}, /* Reserved */ - {faultHndlEntry + LOCAL_FH, LOCAL_FW}, /* Constraint */ - {0, 0}, /* Reserved */ - {faultHndlEntry + LOCAL_FH, LOCAL_FW}, /* Protection */ - {0, 0}, /* Reserved */ - {faultHndlEntry + LOCAL_FH, LOCAL_FW} /* Type */ -}; - -void fltTblInit(void) -{ - static unsigned int fltTblCheckSum(void); - - faultCheckSum = fltTblCheckSum(); -} -static unsigned int fltTblCheckSum(void) -{ - unsigned int * f = faultStart; - unsigned int * l = faultEnd; - unsigned int sum; - - for (sum = 0; f < l; f ++) { - sum += * f; - } - return sum; -} -void faultTblHandler(unsigned int * fp, unsigned int * faultBuffer) -{ - unsigned int * ip; - struct typeWord { - unsigned int sbtp : 8; - unsigned int : 8; - unsigned int type : 8; - unsigned int : 8; - } tw; - unsigned int type; - unsigned int sbtp; - unsigned int ac; - unsigned int pc; - unsigned int inst; - - char nib; - unsigned int i; - - /* Address of faulting instruction. - */ - ip = (unsigned int *) fp[-1]; - /* Type/Subtype word. - */ - - /* put address of faulting instruction to console */ - kkprintf("Fault: %x\n", ip); - - tw = * (struct typeWord *) & fp[-2]; - /* Type and subtype. - */ - type = tw.type; - sbtp = tw.sbtp; - /* Arithmetic controls. - */ - ac = fp[-3]; - /* Process controls. - */ - pc = fp[-4]; - /* Global and local registers are in faultBuffer - * already. Save the rest. Change RIP to IP. - */ - faultBuffer[IP_REGNUM] = (unsigned int) ip; - faultBuffer[ACW_REGNUM] = ac; - faultBuffer[PCW_REGNUM] = pc; - /* Bad instruction itself. We do - * this here since it may be repaired (by copying from PROM). - */ - inst = * ip; - /* Now, to handling. - */ - if (faultCheckSum != fltTblCheckSum()) { - /* RAM-based fault repair stuff - * is broken. No chance to recover. - * Repair RAM memory which is - * destroyed by silly user. - */ - copyCodeToRom(); - /* And call RAM-based fault handler. - */ - faultBad(1, inst, faultBuffer, type, sbtp); - } - else { - /* There exist a chance to recover. - */ - faultGood(inst, faultBuffer, type, sbtp); - } -} -/*-------------*/ -/* End of file */ -/*-------------*/ |