add cpu_set_init_frame to initialize init's syscall frame
[unix-history] / usr / src / sys / deprecated / kdb / kdb_print.c
CommitLineData
9d61b7ff
SL
1/*
2 * Copyright (c) 1986 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
d7070096 6 * @(#)kdb_print.c 7.22 (Berkeley) %G%
9d61b7ff 7 */
3a7e1670 8
dbdee9f3
MT
9#include "machine/mtpr.h"
10#undef ISP
b28b3a13 11#undef TB
3a7e1670 12#include "../kdb/defs.h"
dbdee9f3 13#undef CTRL
bcb86c63 14#include "ioctl.h"
dbdee9f3 15#include "tty.h"
50155fbb 16#include "vnode.h"
8f6abf4c 17#include "mount.h"
3a7e1670 18
addd5f13 19char *kdbBADRAD;
54917220 20
addd5f13
KS
21char *kdbBADMOD;
22char *kdblp;
23long kdbmaxpos;
24int kdbradix;
25char kdblastc;
3a7e1670
SL
26
27/* breakpoints */
addd5f13 28BKPTR kdbbkpthead;
3a7e1670 29
addd5f13 30extern REGLIST kdbreglist[];
3a7e1670
SL
31
32/* general printing routines ($) */
33
addd5f13 34kdbprinttrace(modif)
3a7e1670 35{
1949726e 36 register int i;
3a7e1670 37 register BKPTR bkptr;
3a7e1670 38 register char *comptr;
3a7e1670 39 register struct nlist *sp;
bcb86c63 40 register struct proc *p;
4e198681 41 extern struct proc *allproc;
3a7e1670 42
addd5f13
KS
43 if (kdbcntflg==0)
44 kdbcntval = -1;
3a7e1670
SL
45 switch (modif) {
46
47 case 'd':
addd5f13
KS
48 if (kdbadrflg) {
49 if (kdbadrval < 2 || kdbadrval > 16)
50 kdberror(kdbBADRAD);
51 kdbradix = kdbadrval;
3a7e1670 52 }
addd5f13 53 kdbprintf("radix=%d base ten", kdbradix);
3a7e1670
SL
54 break;
55
56 case 'w': case 'W':
addd5f13 57 kdbprintf("maxpos=%d", kdbmaxpos=(kdbadrflg?kdbadrval:MAXPOS));
3a7e1670
SL
58 break;
59
60 case 's': case 'S':
addd5f13 61 kdbprintf("maxoff=%d", kdbmaxoff=(kdbadrflg?kdbadrval:MAXOFF));
3a7e1670
SL
62 break;
63
2bec3707 64 case 'V':
addd5f13 65 kdbprintf("variables\n");
3a7e1670 66 for (i=0;i<=35;i++)
addd5f13
KS
67 if (kdbvar[i]) {
68 kdbprintc((i<=9 ? '0' : 'a'-10) + i);
69 kdbprintf(" = %R\n",kdbvar[i]);
3a7e1670
SL
70 }
71 break;
72
73 case 0: case '?':
addd5f13
KS
74 if (p = (struct proc *)kdbvar[kdbvarchk('p')])
75 kdbprintf("pid = %d\n", p->p_pid);
4e198681 76 else
addd5f13
KS
77 kdbprintf("in idle loop\n");
78 kdbprinttrap(kdbvar[kdbvarchk('t')], kdbvar[kdbvarchk('c')]);
4e198681 79 /* fall thru... */
3a7e1670 80 case 'r': case 'R':
addd5f13 81 kdbprintregs(modif);
3a7e1670
SL
82 return;
83
84 case 'c': case 'C':
1949726e 85 kdbstacktrace(modif == 'C');
3a7e1670
SL
86 break;
87
88 /*print externals*/
89 case 'e': case 'E':
addd5f13 90 for (sp = kdbsymtab; sp < kdbesymtab; sp++)
3a7e1670
SL
91 if (sp->n_type==(N_DATA|N_EXT) ||
92 sp->n_type==(N_BSS|N_EXT))
addd5f13
KS
93 kdbprintf("%s:%12t%R\n", sp->n_un.n_name,
94 kdbget((off_t)sp->n_value, DSP));
3a7e1670
SL
95 break;
96
97 /*print breakpoints*/
98 case 'b': case 'B':
addd5f13
KS
99 kdbprintf("breakpoints\ncount%8tbkpt%24tcommand\n");
100 for (bkptr=kdbbkpthead; bkptr; bkptr=bkptr->nxtbkpt)
3a7e1670 101 if (bkptr->flag) {
addd5f13
KS
102 kdbprintf("%-8.8d",bkptr->count);
103 kdbpsymoff((long)bkptr->loc,ISYM,"%24t");
3a7e1670
SL
104 comptr=bkptr->comm;
105 while (*comptr)
addd5f13 106 kdbprintc(*comptr++);
3a7e1670
SL
107 }
108 break;
109
7fbd3812
KM
110 case 'k':
111 panic("kdb requested panic");
112 /* NOTREACHED */
113
dbdee9f3
MT
114 case 'l': {
115 struct pte savemmap;
116 extern char vmmap[];
117
118 savemmap = mmap[0];
3a7e1670 119 for (p = allproc; p; p = p->p_nxt) {
d7070096 120 kdbprintf("%lx pid %5d%c%5d %c ", p, p->p_pid,
addd5f13 121 p == (struct proc *)kdbvar[kdbvarchk('p')]? '*' : ' ',
bcb86c63 122 p->p_ppid,
3a7e1670
SL
123 p->p_stat == SSLEEP ? 'S' :
124 p->p_stat == SRUN ? 'R':
125 p->p_stat == SIDL ? 'I':
126 p->p_stat == SSTOP ? 'T' : '?');
bcb86c63 127 if (p->p_wchan)
addd5f13 128 kdbpsymoff((long)p->p_wchan, ISYM, "");
dbdee9f3
MT
129 if ((p->p_flag & SLOAD) && p->p_addr) {
130 int i;
131 *(int *)mmap = *(int *)p->p_addr;
132 mtpr(TBIS, vmmap);
133#define U ((struct user *)vmmap)
134#ifdef not_until_uarea_completely_mapped
135 if (U->u_ttyp)
addd5f13 136 kdbprintf(" ctty %x ", U->u_ttyp);
dbdee9f3 137#endif
addd5f13 138 kdbprintf(" %.8s ", p->p_comm);
dbdee9f3
MT
139#undef U
140 }
141
addd5f13 142 kdbprintc(EOR);
3a7e1670 143 }
dbdee9f3
MT
144 mmap[0] = savemmap;
145 mtpr(TBIS, vmmap);
3a7e1670 146 break;
dbdee9f3
MT
147 }
148
149 case 't': /* XXX - debug */
addd5f13
KS
150 if (kdbadrflg) {
151 kdbprintf("dev state rawq canq outq lwat hwat\n");
dbdee9f3 152
addd5f13
KS
153#define T ((struct tty *)kdbadrval)
154 kdbprintf("%x %x %d %d %d %d %d\n", T->t_dev,
dbdee9f3
MT
155 T->t_state, T->t_rawq.c_cc,
156 T->t_canq.c_cc, T->t_outq.c_cc,
157 T->t_lowat, T->t_hiwat);
addd5f13
KS
158 kdbprintf(" &rawq &canq &outq &outq.c_cf &rawq.c_cf\n");
159 kdbprintf(" %x %x %x %x %x \n", &T->t_rawq,
dbdee9f3
MT
160 &T->t_canq, &T->t_outq, &T->t_outq.c_cf,
161 &T->t_rawq.c_cf);
162#undef T
163 }
3a7e1670 164
431d3966
KM
165#ifdef DEBUG
166 case 'v':
167 printlockedvnodes();
2bec3707 168 break;
431d3966 169#endif
2bec3707 170
3a7e1670 171 default:
addd5f13 172 kdberror(kdbBADMOD);
3a7e1670
SL
173 }
174}
175
176static
addd5f13 177kdbprintregs(c)
3a7e1670
SL
178{
179 register REGPTR p;
180 ADDR v;
181
addd5f13 182 for (p = kdbreglist; p->rname; p++) {
40abac8c 183 if (c != 'R' && ishiddenreg(p))
3a7e1670 184 continue;
3a7e1670 185 v = *p->rkern;
addd5f13
KS
186 kdbprintf("%s%6t%R %16t", p->rname, v);
187 kdbvalpr((long)v, p->rkern == &kdbpcb.pcb_pc ? ISYM : DSYM);
188 kdbprintc(EOR);
3a7e1670 189 }
addd5f13 190 kdbprintpc();
3a7e1670
SL
191}
192
addd5f13 193kdbgetreg(regnam)
3a7e1670
SL
194{
195 register REGPTR p;
196 register char *regptr;
197 char *olp;
198
addd5f13
KS
199 olp = kdblp;
200 for (p = kdbreglist; p->rname; p++) {
40abac8c 201 regptr = p->rname;
3a7e1670
SL
202 if (regnam == *regptr++) {
203 while (*regptr)
addd5f13 204 if (kdbreadchar() != *regptr++) {
3a7e1670
SL
205 --regptr;
206 break;
207 }
208 if (*regptr)
addd5f13 209 kdblp = olp;
3a7e1670 210 else
40abac8c 211 return ((int)p->rkern);
3a7e1670
SL
212 }
213 }
addd5f13 214 kdblp = olp;
3a7e1670
SL
215 return (-1);
216}
217
addd5f13 218kdbprintpc()
3a7e1670
SL
219{
220
addd5f13
KS
221 kdbpsymoff((long)kdbpcb.pcb_pc, ISYM, ":%16t");
222 kdbprintins(ISP, (long)kdbchkget((off_t)kdbpcb.pcb_pc, ISP));
223 kdbprintc(EOR);
3a7e1670 224}