1# .gdbinit file for remote serial debugging. 2# 3# XXX Do not use this file directly. It contains parameters which are 4# XXX substituted by the kernel Makefile when you do a 'make gdbinit'. 5# XXX This also removes lines starting with '# XXX'. 6# XXX 7# To debug kernels, do: 8# 9# cd /usr/obj/usr/src/sys/GENERIC (or kernel build directory) 10# make gdbinit 11# gdb kernel.debug 12# 13# Read gdb(4) for more details. 14 15# The following lines (down to "***** End" comment) may need to be changed 16 17# Bit rate for serial link. Due to problems in the interface, 18# this may not work well above 9600 bps. 19set remotebaud 9600 20 21set output-radix 16 22set height 70 23set width 120 24set remotetimeout 1 25set complaints 1 26set print pretty 27dir ../../.. 28 29# ***** End of things you're likely to need to change. 30 31# Connect to remote target via a serial port. 32define tr 33# Remote debugging port 34target remote $arg0 35end 36 37document tr 38Debug a remote system via serial or firewire interface. For example, specify 'tr /dev/cuau0' to use first serial port, or 'tr localhost:5556' for default firewire port. See also tr0, tr1 and trf commands. 39end 40 41# Convenience functions. These call tr. 42# debug via cuau0 43define tr0 44tr /dev/cuau0 45end 46define tr1 47tr /dev/cuau1 48end 49# Firewire 50define trf 51tr localhost:5556 52end 53 54document tr0 55Debug a remote system via serial interface /dev/cuau0. See also tr, tr1 and trf commands. 56end 57document tr1 58Debug a remote system via serial interface /dev/cuau1. See also tr, tr0 and trf commands. 59end 60document trf 61Debug a remote system via firewire interface at default port 5556. See also tr, tr0 and tr1 commands. 62end 63 64# Get symbols from klds. Unfortunately, there are a number of 65# landmines involved here: 66# 67# When debugging the same machine (via /dev/mem), we can get the 68# script to call kldstat and pass the info on to asf(8). This won't 69# work for crashes or remote debugging, of course, because we'd get 70# the information for the wrong system. Instead, we use the macro 71# "kldstat", which extracts the information from the "dump". The 72# trouble here is that it's a pain to use, since gdb doesn't have the 73# capability to pass data to scripts, so we have to mark it and paste 74# it into the script. This makes it silly to use this method for 75# debugging the local system. Instead, we have two scripts: 76# 77# getsyms uses the information in the "dump", and you have to paste it. 78# kldsyms uses the local kld information. 79# 80# Improvements in gdb should make this go away some day. 81# 82define kldsyms 83# This will be replaced by the path of the real modules directory. 84shell asf -f -k MODPATH 85source .asf 86end 87document kldsyms 88Read in the symbol tables for the debugging machine. This only makes sense when debugging /dev/mem; use the 'getsyms' macro for remote debugging. 89end 90 91# Remote system 92define getsyms 93kldstat 94echo Select the list above with the mouse, paste into the screen\n 95echo and then press ^D. Yes, this is annoying.\n 96# This will be replaced by the path of the real modules directory. 97shell asf -f MODPATH 98source .asf 99end 100 101document getsyms 102Display kldstat information for the target machine and invite user to paste it back in. This causes the symbols for the KLDs to be loaded. When doing memory debugging, use the command kldsyms instead. 103end 104 105source gdbinit.kernel 106source gdbinit.machine 107 108echo Ready to go. Enter 'tr' to connect to the remote target\n 109echo with /dev/cuau0, 'tr /dev/cuau1' to connect to a different port\n 110echo or 'trf portno' to connect to the remote target with the firewire\n 111echo interface. portno defaults to 5556.\n 112echo \n 113echo Type 'getsyms' after connection to load kld symbols.\n 114echo \n 115echo If you're debugging a local system, you can use 'kldsyms' instead\n 116echo to load the kld symbols. That's a less obnoxious interface.\n 117