xref: /original-bsd/sys/luna68k/stand/machdep.c (revision 3705696b)
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