Date: Wed, 24 Sep 2008 16:08:03 GMT From: Andrew Thompson <thompsa@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 150386 for review Message-ID: <200809241608.m8OG83Fm059598@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=150386 Change 150386 by thompsa@thompsa_burger on 2008/09/24 16:07:33 Add more descriptive ddb output. 'show ttys' has been renamed to 'show all ttys' and 'show tty <addr>' added. Affected files ... .. //depot/projects/mpsafetty/sys/kern/tty.c#46 edit Differences ... ==== //depot/projects/mpsafetty/sys/kern/tty.c#46 (text+ko) ==== @@ -1739,6 +1739,7 @@ #include "opt_ddb.h" #ifdef DDB #include <ddb/ddb.h> +#include <ddb/db_sym.h> static struct { int flag; @@ -1774,14 +1775,141 @@ { 0, '\0' }, }; +#define TTY_FLAG_BITS \ + "\20\1NOPREFIX\2INITLOCK\3CALLOUT\4OPENED_IN\5OPENED_OUT\6GONE" \ + "\7OPENCLOSE\10ASYNC\11LITERAL\12HIWAT_IN\13HIWAT_OUT\14STOPPED" \ + "\15EXCLUDE\16BYPASS\17ZOMBIE\20HOOK" + +#define DB_PRINTSYM(name, addr) \ + db_printf("%s " #name ": ", sep); \ + db_printsym((db_addr_t) addr, DB_STGY_ANY); \ + db_printf("\n"); + +static void +_db_show_devsw(const char *sep, const struct ttydevsw *tsw) +{ + db_printf("%sdevsw: ", sep); + db_printsym((db_addr_t)tsw, DB_STGY_ANY); + db_printf(" (%p)\n", tsw); + DB_PRINTSYM(open, tsw->tsw_open); + DB_PRINTSYM(close, tsw->tsw_close); + DB_PRINTSYM(outwakeup, tsw->tsw_outwakeup); + DB_PRINTSYM(inwakeup, tsw->tsw_inwakeup); + DB_PRINTSYM(ioctl, tsw->tsw_ioctl); + DB_PRINTSYM(param, tsw->tsw_param); + DB_PRINTSYM(modem, tsw->tsw_modem); + DB_PRINTSYM(mmap, tsw->tsw_mmap); + DB_PRINTSYM(pktnotify, tsw->tsw_pktnotify); + DB_PRINTSYM(free, tsw->tsw_free); +} +static void +_db_show_hooks(const char *sep, const struct ttyhook *th) +{ + db_printf("%shook: ", sep); + db_printsym((db_addr_t)th, DB_STGY_ANY); + db_printf(" (%p)\n", th); + if (th == NULL) + return; + DB_PRINTSYM(rint, th->th_rint); + DB_PRINTSYM(rint_bypass, th->th_rint_bypass); + DB_PRINTSYM(rint_done, th->th_rint_done); + DB_PRINTSYM(rint_poll, th->th_rint_poll); + DB_PRINTSYM(getc_inject, th->th_getc_inject); + DB_PRINTSYM(getc_capture, th->th_getc_capture); + DB_PRINTSYM(getc_poll, th->th_getc_poll); + DB_PRINTSYM(close, th->th_close); +} + /* DDB command to show TTY statistics. */ -DB_SHOW_COMMAND(ttys, db_show_ttys) +DB_SHOW_COMMAND(tty, db_show_tty) +{ + struct tty *tp; + size_t isiz, osiz; + + if (!have_addr) { + db_printf("usage: show tty <addr>\n"); + return; + } + tp = (struct tty *)addr; + isiz = tp->t_inq.ti_nblocks * TTYINQ_DATASIZE; + osiz = tp->t_outq.to_nblocks * TTYOUTQ_DATASIZE; + + db_printf("0x%p: %s\n", tp, tty_devname(tp)); + db_printf("\tmtx: %p\n", tp->t_mtx); + db_printf("\tflags: %b\n", tp->t_flags, TTY_FLAG_BITS); + db_printf("\trevokecnt: %u\n", tp->t_revokecnt); + + /* Buffering mechanisms. */ + db_printf("\tinq: %p begin %u linestart %u reprint %u end %u " + "nblocks %u quota %u\n", &tp->t_inq, tp->t_inq.ti_begin, + tp->t_inq.ti_linestart, tp->t_inq.ti_reprint, tp->t_inq.ti_end, + tp->t_inq.ti_nblocks, tp->t_inq.ti_quota); + db_printf("\toutq: %p begin %u end %u nblocks %u quota %u\n", + &tp->t_outq, tp->t_outq.to_begin, tp->t_outq.to_end, + tp->t_outq.to_nblocks, tp->t_outq.to_quota); + db_printf("\tinlow: %zu\n", tp->t_inlow); + db_printf("\toutlow: %zu\n", tp->t_outlow); + db_printf("\ttermios: iflag 0x%x oflag 0x%x cflag 0x%x lflag 0x%x\n", + tp->t_termios.c_iflag, tp->t_termios.c_oflag, tp->t_termios.c_cflag, + tp->t_termios.c_lflag); + db_printf("\twinsize: row %u col %u xpixel %u ypixel %u\n", + tp->t_winsize.ws_row, tp->t_winsize.ws_col, + tp->t_winsize.ws_xpixel, tp->t_winsize.ws_ypixel); + db_printf("\tcolumn: %u\n", tp->t_column); + db_printf("\twritepos: %u\n", tp->t_writepos); + db_printf("\tcompatflags: 0x%x\n", tp->t_compatflags); + + /* Init/lock-state devices. */ + db_printf("\ttermios_init_in: iflag 0x%x oflag 0x%x cflag 0x%x lflag " + "0x%x\n", tp->t_termios_init_in.c_iflag, + tp->t_termios_init_in.c_oflag, tp->t_termios_init_in.c_cflag, + tp->t_termios_init_in.c_lflag); + db_printf("\ttermios_init_out: iflag 0x%x oflag 0x%x cflag 0x%x lflag " + "0x%x\n", tp->t_termios_init_out.c_iflag, + tp->t_termios_init_out.c_oflag, tp->t_termios_init_out.c_cflag, + tp->t_termios_init_out.c_lflag); + db_printf("\ttermios_lock_in: iflag 0x%x oflag 0x%x cflag 0x%x lflag " + "0x%x\n", tp->t_termios_lock_in.c_iflag, + tp->t_termios_lock_in.c_oflag, tp->t_termios_lock_in.c_cflag, + tp->t_termios_lock_in.c_lflag); + db_printf("\ttermios_lock_out: iflag 0x%x oflag 0x%x cflag 0x%x lflag " + "0x%x\n", tp->t_termios_lock_out.c_iflag, + tp->t_termios_lock_out.c_oflag, tp->t_termios_lock_out.c_cflag, + tp->t_termios_lock_out.c_lflag); + + /* Hooks */ + _db_show_devsw("\t", tp->t_devsw); + _db_show_hooks("\t", tp->t_hook); + + /* Process info. */ + db_printf("\tpgrp: %p gid %d jobc %d\n", tp->t_pgrp, + tp->t_pgrp ? tp->t_pgrp->pg_id : 0, + tp->t_pgrp ? tp->t_pgrp->pg_jobc : 0); + db_printf("\tsession: %p", tp->t_session); + if (tp->t_session != NULL) + db_printf(" count %u leader %p tty %p sid %d login %s", + tp->t_session->s_count, tp->t_session->s_leader, + tp->t_session->s_ttyp, tp->t_session->s_sid, + tp->t_session->s_login); + db_printf("\n"); + db_printf("\tsessioncnt: %u\n", tp->t_sessioncnt); + db_printf("\tdevswsoftc: %p\n", tp->t_devswsoftc); + db_printf("\thooksoftc: %p\n", tp->t_hooksoftc); + db_printf("\tdev: %p\n", tp->t_dev); +} + +/* DDB command to list TTYs. */ +DB_SHOW_ALL_COMMAND(ttys, db_show_all_ttys) { struct tty *tp; size_t isiz, osiz; int i, j; /* Make the output look like `pstat -t'. */ + db_printf("PTR "); +#if defined(__LP64__) + db_printf(" "); +#endif db_printf(" LINE INQ CAN LIN LOW OUTQ USE LOW " "COL SESS PGID STATE\n"); @@ -1789,7 +1917,8 @@ isiz = tp->t_inq.ti_nblocks * TTYINQ_DATASIZE; osiz = tp->t_outq.to_nblocks * TTYOUTQ_DATASIZE; - db_printf("%10s %5zu %4u %4u %4zu %5zu %4u %4zu %5u %5d %5d ", + db_printf("%p %10s %5zu %4u %4u %4zu %5zu %4u %4zu %5u %5d %5d ", + tp, tty_devname(tp), isiz, tp->t_inq.ti_linestart - tp->t_inq.ti_begin,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809241608.m8OG83Fm059598>