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