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/cuau0' 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 cuau0
44define tr0
45tr /dev/cuau0
46end
47define tr1
48tr /dev/cuau1
49end
50# Firewire
51define trf
52tr localhost:5556
53end
54
55document tr0
56Debug a remote system via serial interface /dev/cuau0.  See also tr, tr1 and trf commands.
57end
58document tr1
59Debug a remote system via serial interface /dev/cuau1.  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/cuau0, 'tr /dev/cuau1' 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