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 0x%08x %10d 0x%08x 0x%08x\n", $token->t_desc, \ 111 $token->t_flags, $token->t_collisions, $tokref->tr_owner, \ 112 $tokref->tr_stallpc 113 else 114 printf "%-15s 0x%08x %10d not held\n", $token->t_desc, \ 115 $token->t_flags, $token->t_collisions 116 end 117end 118 119define infotok 120 printf "\nToken flags collisions owner stallpc\n" 121 _infotok ($arg0) 122end 123 124define lstok 125 printf "\nToken flags collisions owner stallpc\n" 126 _infotok &pmap_token 127 _infotok &dev_token 128 _infotok &vm_token 129 _infotok &vmspace_token 130 _infotok &kvm_token 131 _infotok &proc_token 132 _infotok &tty_token 133 _infotok &vnode_token 134 _infotok &vmobj_token 135end 136 137# Documentation, usable within GDB using the 'help' command. 138document lsvfs 139Output list of loaded file systems, refcount, similar to the 140lsvfs(1) utility. 141end 142 143document lsmount 144Iterate the current list of mount structures loaded from the 145memory core, there should be one per loaded VFS. 146end 147 148document lsvfsops 149Display the VFS operations vector for each file system found in 150the memory core, preceded by a summarised header. 151end 152 153document kldstat 154Output list of loaded kernel modules in kldstat(1) style. 155end 156 157document pcomm 158Print command name of the given thread pointer (first argument). 159end 160 161document psx 162Output a list of processes with wait-channel (wchan) informaiton. 163end 164 165document running_threads 166List the threads which are currently running and their CPU number. 167end 168 169document psax 170Output a list of processes. 171end 172 173document lstok 174Display all known global tokens and some information about them. 175end 176 177document infotok 178Takes one argument, a struct lwkt_token * (pointer) and prints some 179information about that token. 180end 181