1 /* 2 * Copyright (c) 1992 OMRON Corporation. 3 * Copyright (c) 1992, 1993 4 * The Regents of the University of California. All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * OMRON Corporation. 8 * 9 * %sccs.include.redist.c% 10 * 11 * @(#)machdep.c 8.1 (Berkeley) 06/10/93 12 */ 13 14 #include <sys/param.h> 15 #include <luna68k/include/reg.h> 16 17 straytrap(addr) 18 register int addr; 19 { 20 printf("stray trap, addr 0x%x\n", addr); 21 } 22 23 int *nofault = 0; 24 25 badaddr(addr) 26 register caddr_t addr; 27 { 28 register int i; 29 label_t faultbuf; 30 31 #ifdef lint 32 i = *addr; if (i) return(0); 33 #endif 34 nofault = (int *) &faultbuf; 35 if (setjmp((label_t *)nofault)) { 36 nofault = (int *) 0; 37 return(1); 38 } 39 i = *(volatile short *)addr; 40 nofault = (int *) 0; 41 return(0); 42 } 43 44 regdump(rp, sbytes) 45 int *rp; /* must not be register */ 46 int sbytes; 47 { 48 static int doingdump = 0; 49 register int i; 50 int s; 51 extern char *hexstr(); 52 53 if (doingdump) 54 return; 55 s = splhigh(); 56 doingdump = 1; 57 /* printf("pid = %d, pc = %s, ", u.u_procp->p_pid, hexstr(rp[PC], 8)); */ 58 printf("pc = %s, ", hexstr(rp[PC], 8)); 59 printf("ps = %s, ", hexstr(rp[PS], 4)); 60 printf("sfc = %s, ", hexstr(getsfc(), 4)); 61 printf("dfc = %s\n", hexstr(getdfc(), 4)); 62 /* 63 printf("p0 = %x@%s, ", 64 u.u_pcb.pcb_p0lr, hexstr((int)u.u_pcb.pcb_p0br, 8)); 65 printf("p1 = %x@%s\n\n", 66 u.u_pcb.pcb_p1lr, hexstr((int)u.u_pcb.pcb_p1br, 8)); 67 */ 68 printf("Registers:\n "); 69 for (i = 0; i < 8; i++) 70 printf(" %d", i); 71 printf("\ndreg:"); 72 for (i = 0; i < 8; i++) 73 printf(" %s", hexstr(rp[i], 8)); 74 printf("\nareg:"); 75 for (i = 0; i < 8; i++) 76 printf(" %s", hexstr(rp[i+8], 8)); 77 if (sbytes > 0) { 78 /* if (rp[PS] & PSL_S) { */ 79 printf("\n\nKernel stack (%s):", 80 hexstr((int)(((int *)&rp)-1), 8)); 81 dumpmem(((int *)&rp)-1, sbytes, 0); 82 /* 83 } else { 84 printf("\n\nUser stack (%s):", hexstr(rp[SP], 8)); 85 dumpmem((int *)rp[SP], sbytes, 1); 86 } 87 */ 88 } 89 doingdump = 0; 90 splx(s); 91 } 92 93 /* #define KSADDR ((int *)&(((char *)&u)[(UPAGES-1)*NBPG])) */ 94 95 dumpmem(ptr, sz, ustack) 96 register int *ptr; 97 int sz; 98 { 99 register int i, val; 100 extern char *hexstr(); 101 102 for (i = 0; i < sz; i++) { 103 if ((i & 7) == 0) 104 printf("\n%s: ", hexstr((int)ptr, 6)); 105 else 106 printf(" "); 107 /* 108 if (ustack == 1) { 109 if ((val = fuword(ptr++)) == -1) 110 break; 111 } else { 112 if (ustack == 0 && (ptr < KSADDR || ptr > KSADDR+(NBPG/4-1))) 113 break; 114 */ 115 val = *ptr++; 116 /* } */ 117 printf("%s", hexstr(val, 8)); 118 } 119 printf("\n"); 120 } 121 122 char * 123 hexstr(val, len) 124 register int val; 125 { 126 static char nbuf[9]; 127 register int x, i; 128 129 if (len > 8) 130 return(""); 131 nbuf[len] = '\0'; 132 for (i = len-1; i >= 0; --i) { 133 x = val & 0xF; 134 if (x > 9) 135 nbuf[i] = x - 10 + 'A'; 136 else 137 nbuf[i] = x + '0'; 138 val >>= 4; 139 } 140 return(nbuf); 141 } 142