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
straytrap(addr)17 straytrap(addr)
18 register int addr;
19 {
20 printf("stray trap, addr 0x%x\n", addr);
21 }
22
23 int *nofault = 0;
24
badaddr(addr)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
regdump(rp,sbytes)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
dumpmem(ptr,sz,ustack)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 *
hexstr(val,len)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