1# 2# Command file for the GNU Debugger, for kernel debugging. 3# 4# This file can either be put in your home directory as ~/.gdbinit, 5# or selected at run time as: 6# 7# 'gdb -k -q -x /usr/share/misc/gdbinit ...' 8# 9set print union 10set history expansion on 11 12define pcomm 13 printf "%10s\n",$arg0->td_comm 14end 15 16define lsvfs 17 set $vfc = (struct vfsconf *)vfsconf_list.stqh_first 18 printf "\nFilesystem Refs Flags\n" 19 while ($vfc != 0) 20 printf "%-10s %6d 0x%08x\n", $vfc->vfc_name, \ 21 $vfc->vfc_refcount, $vfc->vfc_flags 22 set $vfc = $vfc->vfc_next.stqe_next 23 end 24end 25 26define lsmount 27 set $mnt = (mountlist->tqh_first) 28 while ($mnt != 0) 29 print *$mnt 30 set $mnt = $mnt->mnt_list->tqe_next 31 end 32end 33 34define lsvfsops 35 set $vfc = (struct vfsconf *)vfsconf_list.stqh_first 36 while ($vfc != 0) 37 printf "Filesystem: %s, Refs: %d, Flags: 0x%08x\n", \ 38 $vfc->vfc_name, $vfc->vfc_refcount, $vfc->vfc_flags 39 printf "VFS ops: \n" 40 set print pretty 41 print *$vfc->vfc_vfsops 42 set print pretty off 43 set $vfc = $vfc->vfc_next.stqe_next 44 end 45end 46 47 48define kldstat 49 set $kld = linker_files.tqh_first 50 printf "\nId Refs Address Size Name\n" 51 while ($kld != 0) 52 printf "%2d %4d 0x%08x %-8x %s\n", \ 53 $kld->id, $kld->refs, $kld->address, $kld->size, $kld->filename 54 set $kld = $kld->link.tqe_next 55 end 56end 57 58define psx 59 set $cpu = 0 60 printf "\ncpu pid thread flags comm wchan wmesg\n" 61 while ($cpu < ncpus) 62 set $gd = &((struct privatespace *)&CPU_prvspace)[$cpu].mdglobaldata 63 set $td = $gd->mi.gd_tdallq.tqh_first 64 while ( $td != 0 ) 65 if ( $td->td_proc != 0 ) 66 set $pid = $td->td_proc->p_pid 67 else 68 set $pid = -1 69 end 70 if ( $td->td_wmesg != 0 ) 71 printf "%3d %5d %08x %08x %-18s %08x %s\n", \ 72 $cpu, $pid, $td, $td->td_flags, $td->td_comm, $td->td_wchan, \ 73 $td->td_wmesg 74 else 75 printf "%3d %5d %08x %08x %-18s %08x\n", \ 76 $cpu, $pid, $td, $td->td_flags, $td->td_comm, $td->td_wchan 77 end 78 set $td = $td->td_allq.tqe_next 79 end 80 set $cpu = $cpu + 1 81 end 82end 83 84 85define running_threads 86 set $icpu = 0 87 printf "\ncpu curthread wchan\n" 88 while ($icpu < ncpus) 89 set $ipvspace = (struct privatespace *)&CPU_prvspace 90 set $gd = $ipvspace[$icpu].mdglobaldata.mi 91 set $td = $gd.gd_curthread 92 printf "%d %10s %08x\n", \ 93 $gd.gd_cpuid, $td->td_comm, $td->td_wchan 94 set $icpu = $icpu + 1 95 end 96end 97 98define psax 99 set $proc = allproc->lh_first 100 while $proc != 0 101 printf "%p%6d%10s\n",$proc,$proc->p_pid,$proc->p_comm 102 set $proc = $proc->p_list.le_next 103 end 104end 105 106define _infotok 107 set $token = ($arg0) 108 set $tokref = $token->t_ref 109 if ($tokref != 0) 110 printf "%-15s %10d 0x%08x\n", $token->t_desc, \ 111 $token->t_collisions, $tokref->tr_owner 112 else 113 printf "%-15s %10d not held\n", $token->t_desc, \ 114 $token->t_collisions 115 end 116end 117 118define infotok 119 printf "\nToken collisions owner\n" 120 _infotok ($arg0) 121end 122 123define lstok 124 printf "\nToken collisions owner\n" 125 _infotok &pmap_token 126 _infotok &dev_token 127 _infotok &vm_token 128 _infotok &vmspace_token 129 _infotok &kvm_token 130 _infotok &proc_token 131 _infotok &tty_token 132 _infotok &vnode_token 133 _infotok &vmobj_token 134end 135 136define dmesg 137 set $bufp = msgbufp->msg_ptr 138 set $size = msgbufp->msg_size 139 set $rseq = msgbufp->msg_bufr % $size 140 set $wseq = msgbufp->msg_bufx % $size 141 if ( $bufp != 0 && $size != 0 && $rseq != $wseq ) 142 while ( $rseq < $wseq ) 143 set $c = $bufp + $rseq 144 printf "%c", *$c 145 set $rseq = $rseq + 1 146 if ( $rseq == msgbufp->msg_size ) 147 set $rseq = 0 148 end 149 end 150 if ( *$c == '\n' ) 151 printf "\n" 152 end 153 printf "\n" 154 end 155end 156 157# Documentation, usable within GDB using the 'help' command. 158document lsvfs 159Output list of loaded file systems, refcount, similar to the 160lsvfs(1) utility. 161end 162 163document lsmount 164Iterate the current list of mount structures loaded from the 165memory core, there should be one per loaded VFS. 166end 167 168document lsvfsops 169Display the VFS operations vector for each file system found in 170the memory core, preceded by a summarised header. 171end 172 173document kldstat 174Output list of loaded kernel modules in kldstat(1) style. 175end 176 177document pcomm 178Print command name of the given thread pointer (first argument). 179end 180 181document psx 182Output a list of processes with wait-channel (wchan) information. 183end 184 185document running_threads 186List the threads which are currently running and their CPU number. 187end 188 189document psax 190Output a list of processes. 191end 192 193document lstok 194Display all known global tokens and some information about them. 195end 196 197document infotok 198Takes one argument, a struct lwkt_token * (pointer) and prints some 199information about that token. 200end 201 202document dmesg 203Shows the unread portion of the kernel message buffer. 204end 205