* Copyright (c) 1986 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* @(#)kdb_print.c 7.16 (Berkeley) %G%
#include "machine/mtpr.h"
extern REGLIST reglist
[];
/* general printing routines ($) */
register ADDR argp
, frame
;
register struct nlist
*sp
;
extern struct proc
*allproc
;
if (adrval
< 2 || adrval
> 16)
printf("radix=%d base ten", radix
);
printf("maxpos=%d", maxpos
=(adrflg
?adrval
:MAXPOS
));
printf("maxoff=%d", maxoff
=(adrflg
?adrval
:MAXOFF
));
printc((i
<=9 ? '0' : 'a'-10) + i
);
printf(" = %R\n",var
[i
]);
if (p
= (struct proc
*)var
[varchk('p')])
printf("pid = %d\n", p
->p_pid
);
printf("in idle loop\n");
printtrap(var
[varchk('t')], var
[varchk('c')]);
callpc
= getprevpc(frame
);
while (cntval
-- && frame
!= NOFRAME
) {
/* check for pc in pcb (signal trampoline code) */
if (issignalpc(callpc
)) {
(void) findsym((long)callpc
, ISYM
);
name
= cursym
->n_un
.n_name
;
get((off_t
)(argp
= nextarg(argp
)),
psymoff((long)callpc
, ISYM
, "\n");
while (localsym((long)frame
)) {
word
= get((off_t
)localval
, DSP
);
callpc
= getprevpc(frame
);
frame
= getprevframe(frame
);
callpc
= getsignalpc(lastframe
);
if (!adrflg
&& !INSTACK(frame
))
for (sp
= symtab
; sp
< esymtab
; sp
++)
if (sp
->n_type
==(N_DATA
|N_EXT
) ||
sp
->n_type
==(N_BSS
|N_EXT
))
printf("%s:%12t%R\n", sp
->n_un
.n_name
,
get((off_t
)sp
->n_value
, DSP
));
printf("breakpoints\ncount%8tbkpt%24tcommand\n");
for (bkptr
=bkpthead
; bkptr
; bkptr
=bkptr
->nxtbkpt
)
printf("%-8.8d",bkptr
->count
);
psymoff((long)bkptr
->loc
,ISYM
,"%24t");
panic("kdb requested panic");
for (p
= allproc
; p
; p
= p
->p_nxt
) {
printf("%X pid %5d%c%5d %c ", p
, p
->p_pid
,
p
== (struct proc
*)var
[varchk('p')]? '*' : ' ',
p
->p_stat
== SSLEEP
? 'S' :
p
->p_stat
== SSTOP
? 'T' : '?');
psymoff((long)p
->p_wchan
, ISYM
, "");
if ((p
->p_flag
& SLOAD
) && p
->p_addr
) {
*(int *)mmap
= *(int *)p
->p_addr
;
#define U ((struct user *)vmmap)
#ifdef not_until_uarea_completely_mapped
printf(" ctty %x ", U
->u_ttyp
);
printf(" %.8s ", p
->p_comm
);
case 't': /* XXX - debug */
printf("dev state rawq canq outq lwat hwat\n");
#define T ((struct tty *)adrval)
printf("%x %x %d %d %d %d %d\n", T
->t_dev
,
T
->t_state
, T
->t_rawq
.c_cc
,
T
->t_canq
.c_cc
, T
->t_outq
.c_cc
,
printf(" &rawq &canq &outq &outq.c_cf &rawq.c_cf\n");
printf(" %x %x %x %x %x \n", &T
->t_rawq
,
&T
->t_canq
, &T
->t_outq
, &T
->t_outq
.c_cf
,
register struct mount
*mp
;
register struct vnode
*vp
;
printf("Locked vnodes\n");
for (vp
= mp
->m_mounth
; vp
; vp
= vp
->v_mountf
)
for (p
= reglist
; p
->rname
; p
++) {
if (c
!= 'R' && ishiddenreg(p
))
printf("%s%6t%R %16t", p
->rname
, v
);
valpr((long)v
, p
->rkern
== &pcb
.pcb_pc
? ISYM
: DSYM
);
for (p
= reglist
; p
->rname
; p
++) {
if (regnam
== *regptr
++) {
if (readchar() != *regptr
++) {
psymoff((long)pcb
.pcb_pc
, ISYM
, ":%16t");
printins(ISP
, (long)chkget((off_t
)pcb
.pcb_pc
, ISP
));