Index: tools/debugscripts/gdbinit.kernel =================================================================== --- tools/debugscripts/gdbinit.kernel +++ tools/debugscripts/gdbinit.kernel @@ -369,3 +369,147 @@ set $kld = $kld->link.tqe_next end end + +# Routines to list devices +# Helper routine to print the device state +define devstate + if ($arg0->state == DS_NOTPRESENT) + printf "NOT PRESENT" + else + if ($arg0->state == DS_ALIVE) + printf "ALIVE " + else + if ($arg0->state == DS_ATTACHED) + printf "ATTACHED " + else + if ($arg0->state == DS_BUSY) + printf "BUSY: %-5d", $arg0->busy + else + printf "???: %-6d", $arg0->state + end + end + end + end +end + +# Helper routine to print the headers +define devhdr + printf " name state " + set $foo = ($PTRWIDTH - 5) / 2 + set $bar = $PTRWIDTH - 5 - $foo + spaces $foo + printf "softc" + spaces $bar + printf " " + spaces $foo + printf "ivars\n" +end + +# Print the device +define devprint + if ($arg0->nameunit) + printf "%-20s ", $arg0->nameunit + else + printf "(null) " + end + devstate $arg0 + if ($arg0->softc) + printf " %p", $arg0->softc + else + printf " NULL" + spaces $foo + end + if ($arg0->ivars) + printf " %p", $arg0->ivars + else + printf " NULL" + spaces $foo + end + printf "\n" +end + +document devprint +print a single device +end + +# List device info as +define lsdev + devhdr + set $foo = $PTRWIDTH - 4 + set $dev = bus_data_devices->tqh_first + while ($dev != 0) + devprint $dev + set $dev = $dev->devlink.tqe_next + end +end + +document lsdev +Show new-bus devices. +end + +define finddev + set $dev = bus_data_devices->tqh_first + while ($dev != 0) + if ($dev->nameunit && $_streq($dev->nameunit, $arg0)) + printf "%s: %p\n", $dev->nameunit, $dev + end + set $dev = $dev->devlink.tqe_next + end +end +document finddev +Finds a newbus whose name matches the passed in string +end + +define alldev + set $dc = devclasses->tqh_first + set $foo = $PTRWIDTH - 4 + devhdr + while ($dc != 0) + if ($dc->name && $_streq($dc->name, $arg0)) + set $i = 0 + while ($i < $dc->maxunit) + set $dev = $dc->devices[$i] + if ($dev != 0) + devprint $dev + end + set $i = $i + 1 + end + loop_break + end + set $dc = $dc->link.tqe_next + end +end +document alldev +Prints all the devices of a given name for the string passed in. +end + +# Show the new-bus device tree +define devinfo + set $indent = 0 + set $dev = root_bus + set $ignore = 0 + while ($dev != 0) + if ($dev->nameunit != 0 && $ignore == 0) + spaces $indent + printf "%s\n", $dev->nameunit + end + if ($dev->children.tqh_first != 0 && $ignore == 0) + set $dev = $dev->children.tqh_first + set $indent = $indent + 1 + set $ignore = 0 + else + if ($dev->link.tqe_next != 0) + set $dev = $dev->link.tqe_next + set $ignore = 0 + else + set $indent = $indent - 1 + set $dev = $dev->parent + set $ignore = 1 + end + end + end +end + +document devinfo +Show new-bus hierarchy similar to devinfo(8). +end