set _cntflag 0 set _msgflag 0 set _dataflag 0 ifdef strstat em strstat fi define strstat "" 0t529 # Determine if we have the required symbols set strstat_flag 1 ifsdef strst else set strstat_flag 0 printf "Undefined symbol: strst\n" fi ifsdef Strinfo else set strstat_flag 0 printf "Undefined symbol: Strinfo\n" fi # Print the tables iff we have both symbols if strstat_flag strstat_aux strst Strinfo fi # Print some additional information, again iff we have their symbols ifsdef Strcount printf "Total byte count = %8x\n", *Strcount fi ifsdef strthresh printf "strthresh = %8x\n", *strthresh fi . ifdef linkblk em linkblk FI define linkblk "" 0t216 printf "LINKBLK TABLE SIZE = %d\n",(*(((Strinfo)+ (4 * 0t8))+0t4)) printf "LBLKADDR QTOP QBOT FILEADDR MUXID\n" do linkblk_aux (*(((Strinfo) + (4 * 0t8))+0t0)),(*(((Strinfo) + (4 * 0t8))+0t4)) . ifdef linkblk_aux em linkblk_aux FI define linkblk_aux ai 0t437 if $2 == 0 exit else printf "%8x",$1 if ((*(($1)+0t0)) + 0t0) printf " %8x %8x %8x",*((*(($1)+0t0)) + 0t0) ,(*(($1)+0t4)) + 0t0 ,(*(($1)+0t32)) else printf " %8x %8x %8x",((*(($1)+0t0)) + 0t0) ,(*(($1)+0t4)) + 0t0 ,(*(($1)+0t32)) fi if *((*(($1)+0t4)) + 0t0) printf " %3d\n",(*(($1)+0t8)) + 0t0 else printf " -\n" fi sa 1 (*(($1)+0t36)) sa 2 $2 - 1 fi . ifdef strstat_aux em strstat_aux fi define strstat_aux aa 0t1201 if ((($1) == 0) | ((%v($1)) == 0)) printf "** invalid strstat address %8x\n", $1 elseif ((($2) == 0) | ((%v($2)) == 0)) printf "** invalid strinfo address %8x\n", $2 else printf "[%8x] [%8x]\n", $1, $2 printf " inuse (Strinfo) total max fail\n" printf "stream %8x(%8x) %8x %8x %8x\n", *(($1) + 0t0 + 0), (*((($2) + (0 * 0t8))+0t4)), *(($1) + 0t0 + 4), *(($1) + 0t0 + 8), *(($1) + 0t0 + C) printf "queue %8x(%8x) %8x %8x %8x\n", *(($1) + 0t16 + 0), (*((($2) + (1 * 0t8))+0t4)), *(($1) + 0t16 + 4), *(($1) + 0t16 + 8), *(($1) + 0t16 + C) printf "msgblock %8x(%8x) %8x %8x %8x\n", *(($1) + 0t32 + 0), (*((($2) + (2 * 0t8))+0t4)), *(($1) + 0t32 + 4), *(($1) + 0t32 + 8), *(($1) + 0t32 + C) printf "mdbblock %8x(%8x) %8x %8x %8x\n", *(($1) + 0t48 + 0), (*((($2) + (3 * 0t8))+0t4)), *(($1) + 0t48 + 4), *(($1) + 0t48 + 8), *(($1) + 0t48 + C) printf "linkblk %8x(%8x) %8x %8x %8x\n", *(($1) + 0t64 + 0), (*((($2) + (4 * 0t8))+0t4)), *(($1) + 0t64 + 4), *(($1) + 0t64 + 8), *(($1) + 0t64 + C) printf "strevent %8x(%8x) %8x %8x %8x\n", *(($1) + 0t80 + 0), (*((($2) + (5 * 0t8))+0t4)), *(($1) + 0t80 + 4), *(($1) + 0t80 + 8), *(($1) + 0t80 + C) fi . ifdef strmsg em strmsg fi define strmsg a 0t86 printf " msgb type rf size psize next\n" do strmsg_aux ($1) 0t0 . ifdef indent em indent fi define indent i 0t70 if ($1 == 0) exit else printf " " sa 1 $1 - 1 fi . ifdef strascii em strascii fi define strascii ai 0t173 if ($2 == 0) exit else if ((((*$1)&FF) > 0t31) & (((*$1)&FF) < 0t127)) printf "%c", (*$1)&FF else printf "\." fi fi sa 1 ($1 + 1) sa 2 ($2 - 1) . ifdef strdata em strdata fi define strdata aii 0t317 if ($1 == $2) sa 3 ($3 % 10) if ($3 != 0) do indent 10 - $3 printf " " do strascii ($1-$3) $3 fi exit else printf " %2x",(*$1)&FF sa 1 ($1+1) sa 3 ($3 + 1) if (($3 % 0t16) == 0) printf " " do strascii $1-10 0t16 printf "\n" printf " " fi fi . ifdef strmsg_aux em strmsg_aux fi define strmsg_aux ai 0t771 if ($1) == 0 exit elseif (%v($1)) == 0 printf " ** invalid msg address %8x\n", $1 exit elseif (%v((*(($1)+0t20)))) == 0 printf " ** invalid msg->b_datap %8x\n", (*(($1)+0t20)) exit else printf " %8x %2x ", $1, ((*(((*(($1)+0t20)))+0t13))&0xFF) strmsg_type ((*(((*(($1)+0t20)))+0t13))&0xFF) printf "%2x %8x %8x %8x\n", ((*(((*(($1)+0t20)))+0t12))&0xFF), (*(((*(($1)+0t20)))+0t16)), (*(($1)+0t16)) - (*(($1)+0t12)), (*(($1)+0t0)) printbits "MARK:NOLOOP:DELIM:NOGET:10:20:40:80" ((*(($1)+0t26))&0xFFFF)&0xff printf "\n" if _dataflag == 1 printf " " do strdata (*(($1)+0t12)) (*(($1)+0t16)) 0 printf "\n" fi do strmsg_aux (*(($1)+0t8)) 0t8 sa 1 (*(($1) + ($2))) fi . ifdef strmsg_type em strmsg_type fi define strmsg_type i 0t1174 if ($1) < 12 printcase "DATA :PROTO :::::::BREAK :PASSFP :EVENT :SIG :DELAY :CTL :IOCTL ::SETOPTS:RSE " $1 elseif ($1) < 91 printcase " :IOCACK :IOCNAK :PCPROTO:PCSIG :READ :FLUSH :STOP :START :HANGUP :ERROR :COPYIN :COPYOUT:IOCDATA:PCRSE :STOPI :STARTI :PCEVENT" $1-81 else printf "???????" fi . ifdef strqueue_hd em strqueue_hd fi define strqueue_hd "" 0t80 printf "queue bsrv idname ptr count cpu plumbing:sched:flag\n" . ifdef strqueue em strqueue fi define strqueue a 0t95 strqueue_hd strqueue_aux ($1) . ifdef strqueue_aux em strqueue_aux fi define strqueue_aux a 0t1471 if ($1) == 0 exit elseif (%v($1)) == 0 printf "** invalid queue address %8x\n", $1 exit else if ((*(($1)+0t24)) != 0) | (_cntflag == 0) printf "%8x %8x ", $1, (*(($1)+0t68)) if (%v((*(($1)+0t0)))) == 0 printf "???????? " elseif (%v((*(((*(($1)+0t0)))+0t20)))) == 0 printf "???????? " elseif (%v((*(((*(((*(($1)+0t0)))+0t20)))+0t4)))) == 0 printf "???????? " else printf "%8S ", (*(((*(((*(($1)+0t0)))+0t20)))+0t4)) printf "%8x %2d ", (*(($1)+0t20)), (*(($1)+0t24)) if ((*(($1)+0t60)) == FFFFFFFF) printf "UBND " elseif ((*(($1)+0t60)) == FFFFFFFE) printf "ANY " else printf "%4x ", (*(($1)+0t60)) fi printbits "PROCSON:WANTDET:WOPEN:OFAIL:CLOSED", (((*(($1)+0t54))&0xFF))&0xff printbits "SRVFIFO:ENABLED:SRVING", ((*(($1)+0t53))&0xFF)&6 printbits "MUXLOW:WANTR:WANTW:FULL:READR:USE:NOENB:OLD", ((*(($1)+0t56)) & 0xFF) printbits "ENAB:WANTR:WANTW:FULL:READR:USE:NOENB:OLD:BACK:HLIST:BACKX:800?:1000?:2000?:4000?:8000?", ((*(($1)+0t28)) & 0xFFFF) printbits "::::::::::::::::10000?:20000?:40000?:80000?:100000?:200000?:400000?:800000?:1000000?:200000?:4000000?:8000000?:10000000?:20000000?:40000000?:80000000?", ((*(($1)+0t28)) & 0xFFFF0000) printf "\n" if _msgflag == 0 if (*(($1)+0t4)) strmsg (*(($1)+0t4)) fi fi if ((*(($1)+0t52))&0xFF) printf " nband = %x\n", ((*(($1)+0t52))&0xFF) do strqueue_band (*(($1)+0t48)) fi set _readhd $1 sa 1 (*(($1)+0t12)) fi fi fi . ifdef strqueue_band em strqueue_band fi define strqueue_band a 0t568 if ($1) == 0 exit elseif (%v($1)) == 0 printf " ** invalid qband address %8x\n", $1 exit else printf " qband %8x count %8x flag %8x: ", $1, (*(($1)+0t4)), (*(($1)+0t24)) printbits "FULL:WANTW:BACK:8?:10?:20?:40?:80?:100?:200?:400?:800?:1000?:2000?:4000?:8000?", ((*(($1)+0t24)) & 0xFFFF) printbits "::::::::::::::::10000?:20000?:40000?:80000?:100000?:200000?:400000?:800000?:1000000?:200000?:4000000?:8000000?:10000000?:20000000?:40000000?:80000000?", ((*(($1)+0t24)) & 0xFFFF0000) printf "\n" strmsg (*(($1)+0t8)) sa 1 (*(($1)+0t0)) fi . ifdef strfollow em strfollow fi define strfollow a 0t207 if ((*(($1)+0t28)) & 0x010 ) printf "Up" else printf "Down" fi printf "stream from queue %8x:\n", $1 strqueue_hd do strqueue_aux ($1) . ifdef stream em stream fi define stream a?i 0t2226 if ($#) == 1 args 3 sa 2 0 else args 3 FI printf "stream %8x iocwwait %4x rerr %8x werr %8x pushcnt %8x\n", $1, ((*(($1)+0t24))&0xFFFF), (*(($1)+0t40)), (*(($1)+0t44)), (*(($1)+0t48)) printf "flag %8x: ", (*(($1)+0t16)) printbits "IOCWAIT:RSLEEP:WSLEEP:STRPRI:STRHUP:STWOPEN:STPLEX:STRISTTY:RMSGDIS:RMSGNODIS:STRDERR:STRTIME:STR2TIME:STR3TIME:STRCLOSE:SNDMREAD", ((*(($1)+0t16)) & 0xFFFF) printbits "::::::::::::::::OLDNDELAY:RDBUFWAIT:STRSNDZERO:STRTOSTOP:RDPROTDAT:RDPROTDIS:STRMOUNT:STRSIGPIPE:STRDELIM:STWRERR:STRHOLD:8000000?:10000000?:20000000?:40000000?:80000000?", ((*(($1)+0t16)) & 0xFFFF0000) printf "\n" printf "sigflg %8x: ", (*(($1)+0t52)) printbits "INPUT:HIPRI:OUTPUT/WRNORM:MSG:ERROR:HANGUP:RDNORM:RDBAND:WRBAND:BANDURG:400?:800?:1000?:2000?:4000?:8000?", ((*(($1)+0t52)) & 0xFFFF) printbits "::::::::::::::::10000?:20000?:40000?:80000?:100000?:200000?:400000?:800000?:1000000?:200000?:4000000?:8000000?:10000000?:20000000?:40000000?:80000000?", ((*(($1)+0t52)) & 0xFFFF0000) printf "\n" printf "evflag %8x: ", (*(($1)+0t60)) printbits "INPUT:HIPRI:OUTPUT/WRNORM:MSG:ERROR:HANGUP:RDNORM:RDBAND:WRBAND:BANDURG:400?:800?:1000?:2000?:4000?:8000?", ((*(($1)+0t60)) & 0xFFFF) printbits "::::::::::::::::10000?:20000?:40000?:80000?:100000?:200000?:400000?:800000?:1000000?:200000?:4000000?:8000000?:10000000?:20000000?:40000000?:80000000?", ((*(($1)+0t60)) & 0xFFFF0000) printf " " printf "pollevents %4x: ", ((*((($1) + 0t68)+0t8))&0xFFFF) printbits "IN:PRI:OUT/WRNORM:ERR:HUP:NVAL:RDNORM:RDBAND:WRBAND:200?:400?:800?:1000?:2000?:4000?:8000?", ((*((($1) + 0t68)+0t8))&0xFFFF) printf "\n" sa 3 (*(($1)+0t8)) printf "sd_vnode %8x:\n", $3 IF $3 != 0 sa 3 (*(($3)+0t28)) printf "dev %2d/%2d:\n",(($3>>12)&3FFF), ($3)&3FFFF FI printf "sd_sidp %8x:\n", (*(($1)+0t28)) printf "sd_pgidp %8x:\n", (*(($1)+0t32)) printf "sd_eventlist %8x:\n", (*(($1)+0t64)) printf "\n" printf "queues %8x, %8x\n", (*(($1)+0t0)) - 0t76, (*(($1)+0t0)) strfollow (*(($1)+0t0)) if ((*((_readhd)+0t28)) & 0x010 ) strfollow ((*(($1)+0t0)) - 0t76) else strfollow (_readhd - 0t76) fi if $2 == 1 printf "----------------------------------------\n" FI . ifdef streams em streams fi define streams ?i 0t271 set _strmux ($#) ifsdef Strinfo set _nstrs 0 set _nmuxs 0 do streams_aux (*((Strinfo + (0 * 0t8))+0t0)) printf "%d\. streams + %d\. muxs, Strinfo\.cnt = %d\.\n", _nstrs, _nmuxs, (*((Strinfo + (0 * 0t8))+0t4)) else printf "Undefined symbol: Strinfo\n" fi . ifdef streams_muxs em streams_muxs fi define streams_muxs "" 0t12 streams 1 . ifdef streams_aux em streams_aux fi define streams_aux a 0t399 if ($1) == 0 exit elseif (%v($1)) == 0 printf "** invalid shinfo address %8x\n", $1 exit else if ((*(($1) + 0t0 + 0t16)) & 0x00000040 ) set _nmuxs (_nmuxs + 1) stream (($1) + 0t0) 1 else set _nstrs (_nstrs + 1) stream (($1) + 0t0) 1 fi sa 1 (*(($1)+0t116)) fi . ifdef cqueue em cqueue fi define cqueue "" 0t72 set _cntflag 1 set _msgflag 1 queues set _cntflag 0 set _msgflag 0 . ifdef queues em queues fi define queues "" 0t97 strqueue_hd queues_aux FFFFFFFF . ifdef queues_flag em queues_flag fi define queues_flag "" 0t127 strqueue_hd queues_aux (~(0x002 | 0x010 | 0x080 | 0x020 )) . ifdef any_queuerun em any_queuerun fi define any_queuerun "" 0t60 if (*any_qhead) != 0 do queuerun_aux *any_qhead fi . ifdef queuerun em queuerun fi define queuerun "" 0t78 if (*qhead) != 0 printf "%8x\n" *qhead do queuerun_aux *qhead fi . ifdef queuerun_aux em queuerun_aux fi define queuerun_aux a 0t97 stream (*(($1)+0t64)) if ((*(($1)+0t16)) == 0) exit else sa 1 (*(($1)+0t16)) fi . ifdef queues_aux em queues_aux fi define queues_aux i 0t222 ifsdef Strinfo set _nques 0 do queues_loop (*((Strinfo + (1 * 0t8))+0t0)) ($1) printf "%d\. queues, Strinfo\.cnt = %d\.\n", _nques, (*((Strinfo + (1 * 0t8))+0t4)) else printf "Undefined symbol: Strinfo\n" fi . ifdef queues_loop em queues_loop fi define queues_loop ai 0t790 if ($1) == 0 exit elseif (%v($1)) == 0 printf "** invalid queinfo address %8x\n", $1 exit else if ((*(($1) + 0t0 + 0t28)) & ($2)) strqueue_aux (($1) + 0t0) if ($2) != FFFFFFFF stream_find (($1) + 0t76) if _sfound stream _sfound 1 fi fi fi if ((*(($1) + 0t76 + 0t28)) & ($2)) strqueue_aux (($1) + 0t76) if ($2) != FFFFFFFF stream_find (($1) + 0t76) if _sfound stream _sfound 1 fi fi fi set _nques (_nques + 2) sa 1 (*(($1)+0t152)) fi . ifdef stream_find em stream_find fi define stream_find a 0t236 set _sfound 0 ifsdef Strinfo do stream_find1 ($1) (*((Strinfo + (0 * 0t8))+0t0)) if _sfound printf "Found stream %x\n", _sfound else printf "Could not find stream\n" fi else printf "Undefined symbol: Strinfo\n" fi . ifdef stream_find1 em stream_find1 fi define stream_find1 aa 0t223 if ($2) == 0 exit elseif (%v($2)) == 0 printf "** invalid shinfo address %8x\n", $2 exit else do stream_find2 ($1) (($2) + 0t0) (*(($2) + 0t0 + 0t0)) if _sfound exit else sa 2 (*(($2)+0t116)) fi fi . ifdef stream_find2 em stream_find2 fi define stream_find2 aaa 0t188 if ($3) == 0 exit elseif (%v($3)) == 0 printf "** invalid queue address %8x\n", $3 exit else if ($1) == ($3) set _sfound ($2) exit else sa 3 (*(($3)+0t12)) fi fi . ifdef pv em pv fi define pv a 0t48 ds (d0000000+($1)-((%p(d0000000+($1)))-($1))) .