diff options
author | gj <gj@FreeBSD.org> | 1997-04-27 21:36:49 +0000 |
---|---|---|
committer | gj <gj@FreeBSD.org> | 1997-04-27 21:36:49 +0000 |
commit | feaedb83b142112b35a43051cb0bcabc9f1b83e5 (patch) | |
tree | 0bcd356cb63227e007c41d1d8158ebe226bb77fb /gnu/usr.bin/gdb | |
parent | c38f6b729e60399b2a092e0d98e2a8e74854baeb (diff) | |
download | FreeBSD-src-feaedb83b142112b35a43051cb0bcabc9f1b83e5.zip FreeBSD-src-feaedb83b142112b35a43051cb0bcabc9f1b83e5.tar.gz |
change kvm-fbsd.c so that kernel debugging works again.
document the -k and -wcore options in the manpage.
change Makefile to use a local copy of the manpage.
Diffstat (limited to 'gnu/usr.bin/gdb')
-rw-r--r-- | gnu/usr.bin/gdb/gdb/Makefile | 4 | ||||
-rw-r--r-- | gnu/usr.bin/gdb/gdb/gdb.1 | 385 | ||||
-rw-r--r-- | gnu/usr.bin/gdb/gdb/kvm-fbsd.c | 27 |
3 files changed, 407 insertions, 9 deletions
diff --git a/gnu/usr.bin/gdb/gdb/Makefile b/gnu/usr.bin/gdb/gdb/Makefile index ae2b1ac..658496a 100644 --- a/gnu/usr.bin/gdb/gdb/Makefile +++ b/gnu/usr.bin/gdb/gdb/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.20 1997/03/29 10:33:13 peter Exp $ +# $Id: Makefile,v 1.21 1997/04/07 08:08:14 peter Exp $ PROG = gdb @@ -30,6 +30,8 @@ SRCS = annotate.c blockframe.c breakpoint.c buildsym.c c-lang.c \ callback.c SRCS+= i386-dis.c dis-buf.c disassemble.c +MAN1= gdb.1 + CFLAGS+= -I$(.CURDIR) -I${DESTDIR}/usr/include/readline -I$(.CURDIR)/../bfd # use phkmalloc CFLAGS+= -DNO_MMALLOC diff --git a/gnu/usr.bin/gdb/gdb/gdb.1 b/gnu/usr.bin/gdb/gdb/gdb.1 new file mode 100644 index 0000000..f07c891 --- /dev/null +++ b/gnu/usr.bin/gdb/gdb/gdb.1 @@ -0,0 +1,385 @@ +.\" Copyright (c) 1991 Free Software Foundation +.\" See section COPYING for conditions for redistribution +.\" $Id: gdb.1,v 1.3 1991/12/13 22:22:58 pesch Exp $ +.TH gdb 1 "4nov1991" "GNU Tools" "GNU Tools" +.SH NAME +gdb \- The GNU Debugger +.SH SYNOPSIS +.na +.TP +.B gdb +.RB "[\|" \-help "\|]" +.RB "[\|" \-nx "\|]" +.RB "[\|" \-q "\|]" +.RB "[\|" \-batch "\|]" +.RB "[\|" \-cd=\c +.I dir\c +\|] +.RB "[\|" \-f "\|]" +.RB "[\|" \-k "\|]" +.RB "[\|" \-wcore "\|]" +.RB "[\|" "\-b\ "\c +.IR bps "\|]" +.RB "[\|" "\-tty="\c +.IR dev "\|]" +.RB "[\|" "\-s "\c +.I symfile\c +\&\|] +.RB "[\|" "\-e "\c +.I prog\c +\&\|] +.RB "[\|" "\-se "\c +.I prog\c +\&\|] +.RB "[\|" "\-c "\c +.I core\c +\&\|] +.RB "[\|" "\-x "\c +.I cmds\c +\&\|] +.RB "[\|" "\-d "\c +.I dir\c +\&\|] +.RB "[\|" \c +.I prog\c +.RB "[\|" \c +.IR core \||\| procID\c +\&\|]\&\|] +.ad b +.SH DESCRIPTION +The purpose of a debugger such as GDB is to allow you to see what is +going on ``inside'' another program while it executes\(em\&or what another +program was doing at the moment it crashed. + +GDB can do four main kinds of things (plus other things in support of +these) to help you catch bugs in the act: + +.TP +\ \ \ \(bu +Start your program, specifying anything that might affect its behavior. + +.TP +\ \ \ \(bu +Make your program stop on specified conditions. + +.TP +\ \ \ \(bu +Examine what has happened, when your program has stopped. + +.TP +\ \ \ \(bu +Change things in your program, so you can experiment with correcting the +effects of one bug and go on to learn about another. +.PP + +You can use GDB to debug programs written in C, C++, and Modula-2. +Fortran support will be added when a GNU Fortran compiler is ready. + +GDB is invoked with the shell command \c +.B gdb\c +\&. Once started, it reads +commands from the terminal until you tell it to exit with the GDB +command \c +.B quit\c +\&. You can get online help from \c +.B gdb\c +\& itself +by using the command \c +.B help\c +\&. + +You can run \c +.B gdb\c +\& with no arguments or options; but the most +usual way to start GDB is with one argument or two, specifying an +executable program as the argument: +.sp +.br +gdb\ program +.br +.sp + +You can also start with both an executable program and a core file specified: +.sp +.br +gdb\ program\ core +.br +.sp + +You can, instead, specify a process ID as a second argument, if you want +to debug a running process: +.sp +.br +gdb\ program\ 1234 +.br +.sp + +would attach GDB to process \c +.B 1234\c +\& (unless you also have a file +named `\|\c +.B 1234\c +\&\|'; GDB does check for a core file first). + +Here are some of the most frequently needed GDB commands: +.TP +.B break \fR[\|\fIfile\fB:\fR\|]\fIfunction +\& +Set a breakpoint at \c +.I function\c +\& (in \c +.I file\c +\&). +.TP +.B run \fR[\|\fIarglist\fR\|] +Start your program (with \c +.I arglist\c +\&, if specified). +.TP +.B bt +Backtrace: display the program stack. +.TP +.BI print " expr"\c +\& +Display the value of an expression. +.TP +.B c +Continue running your program (after stopping, e.g. at a breakpoint). +.TP +.B next +Execute next program line (after stopping); step \c +.I over\c +\& any +function calls in the line. +.TP +.B step +Execute next program line (after stopping); step \c +.I into\c +\& any +function calls in the line. +.TP +.B help \fR[\|\fIname\fR\|] +Show information about GDB command \c +.I name\c +\&, or general information +about using GDB. +.TP +.B quit +Exit from GDB. +.PP +For full details on GDB, see \c +.I +Using GDB: A Guide to the GNU Source-Level Debugger\c +\&, by Richard M. Stallman and Roland H. Pesch. The same text is available online +as the \c +.B gdb\c +\& entry in the \c +.B info\c +\& program. +.SH OPTIONS +Any arguments other than options specify an executable +file and core file (or process ID); that is, the first argument +encountered with no +associated option flag is equivalent to a `\|\c +.B \-se\c +\&\|' option, and the +second, if any, is equivalent to a `\|\c +.B \-c\c +\&\|' option if it's the name of a file. Many options have +both long and short forms; both are shown here. The long forms are also +recognized if you truncate them, so long as enough of the option is +present to be unambiguous. (If you prefer, you can flag option +arguments with `\|\c +.B +\c +\&\|' rather than `\|\c +.B \-\c +\&\|', though we illustrate the +more usual convention.) + +All the options and command line arguments you give are processed +in sequential order. The order makes a difference when the +`\|\c +.B \-x\c +\&\|' option is used. + +.TP +.B \-help +.TP +.B \-h +List all options, with brief explanations. + +.TP +.BI "\-symbols=" "file"\c +.TP +.BI "\-s " "file"\c +\& +Read symbol table from file \c +.I file\c +\&. + +.TP +.BI "\-exec=" "file"\c +.TP +.BI "\-e " "file"\c +\& +Use file \c +.I file\c +\& as the executable file to execute when +appropriate, and for examining pure data in conjunction with a core +dump. + +.TP +.BI "\-se=" "file"\c +\& +Read symbol table from file \c +.I file\c +\& and use it as the executable +file. + +.TP +.BI "\-core=" "file"\c +.TP +.BI "\-c " "file"\c +\& +Use file \c +.I file\c +\& as a core dump to examine. + +.TP +.BI "\-command=" "file"\c +.TP +.BI "\-x " "file"\c +\& +Execute GDB commands from file \c +.I file\c +\&. + +.TP +.BI "\-directory=" "directory"\c +.TP +.BI "\-d " "directory"\c +\& +Add \c +.I directory\c +\& to the path to search for source files. +.PP + +.TP +.B \-nx +.TP +.B \-n +Do not execute commands from any `\|\c +.B .gdbinit\c +\&\|' initialization files. +Normally, the commands in these files are executed after all the +command options and arguments have been processed. + + +.TP +.B \-quiet +.TP +.B \-q +``Quiet''. Do not print the introductory and copyright messages. These +messages are also suppressed in batch mode. + +.TP +.B \-batch +Run in batch mode. Exit with status \c +.B 0\c +\& after processing all the command +files specified with `\|\c +.B \-x\c +\&\|' (and `\|\c +.B .gdbinit\c +\&\|', if not inhibited). +Exit with nonzero status if an error occurs in executing the GDB +commands in the command files. + +Batch mode may be useful for running GDB as a filter, for example to +download and run a program on another computer; in order to make this +more useful, the message +.sp +.br +Program\ exited\ normally. +.br +.sp + +(which is ordinarily issued whenever a program running under GDB control +terminates) is not issued when running in batch mode. + +.TP +.BI "\-cd=" "directory"\c +\& +Run GDB using \c +.I directory\c +\& as its working directory, +instead of the current directory. + +.TP +.B \-fullname +.TP +.B \-f +Emacs sets this option when it runs GDB as a subprocess. It tells GDB +to output the full file name and line number in a standard, +recognizable fashion each time a stack frame is displayed (which +includes each time the program stops). This recognizable format looks +like two `\|\c +.B \032\c +\&\|' characters, followed by the file name, line number +and character position separated by colons, and a newline. The +Emacs-to-GDB interface program uses the two `\|\c +.B \032\c +\&\|' characters as +a signal to display the source code for the frame. + +.TP +.B \-kernel +.TP +.B \-k +Use gdb in kernel debugging mode. The prompt is set to ``(kgdb)''. + +.TP +.B \-wcore +This option may only be used in kernel debugging mode while +debugging a ``live'' kernel and makes the corefile (/dev/mem) +writable. + +.TP +.BI "\-b " "bps"\c +\& +Set the line speed (baud rate or bits per second) of any serial +interface used by GDB for remote debugging. + +.TP +.BI "\-tty=" "device"\c +\& +Run using \c +.I device\c +\& for your program's standard input and output. +.PP + +.SH "SEE ALSO" +.RB "`\|" gdb "\|'" +entry in +.B info\c +\&; +.I +Using GDB: A Guide to the GNU Source-Level Debugger\c +, Richard M. Stallman and Roland H. Pesch, July 1991. +.SH COPYING +Copyright (c) 1991 Free Software Foundation, Inc. +.PP +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. +.PP +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. +.PP +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. diff --git a/gnu/usr.bin/gdb/gdb/kvm-fbsd.c b/gnu/usr.bin/gdb/gdb/kvm-fbsd.c index 9419b6a..27e6f6c 100644 --- a/gnu/usr.bin/gdb/gdb/kvm-fbsd.c +++ b/gnu/usr.bin/gdb/gdb/kvm-fbsd.c @@ -479,6 +479,7 @@ static int found_pcb; static int devmem; static int kfd; static struct pcb pcb; +static struct i386tss cts; /* substitutes for the stuff in libkvm which doesn't work */ /* most of this was taken from the old kgdb */ @@ -512,7 +513,8 @@ kvm_open (efile, cfile, sfile, perm, errout) printf ("IdlePTD %x\n", sbr); curpcb = ksym_lookup ("curpcb") - KERNOFF; physrd (cfd, curpcb, (char*)&curpcb, sizeof curpcb); - kstack = ksym_lookup ("kstack"); + physrd (cfd, ksym_lookup ("common_tss") - KERNOFF, (char*)&cts, sizeof cts); + kstack = cts.tss_ksp; found_pcb = 1; /* for vtophys */ if (!devmem) @@ -810,6 +812,7 @@ read_pcb (fd, uaddr) { int i; int *pcb_regs = (int *)&pcb; + int *cts_regs = (int *)&cts; int eip; CORE_ADDR nuaddr = uaddr; @@ -828,15 +831,23 @@ read_pcb (fd, uaddr) * get the register values out of the sys pcb and * store them where `read_register' will find them. */ - for (i = 0; i < 8; ++i) - supply_register (i, (char *)&pcb_regs[i+10]); - supply_register (8, (char *)&pcb_regs[8]); /* eip */ - supply_register (9, (char *)&pcb_regs[9]); /* eflags */ + for (i = 0; i < 3; ++i) + supply_register (i, (char *)&cts_regs[i+10]); /* eax, ecx, edx */ + + /* get registers from the pcb */ + supply_register (3, (char *)&pcb_regs[5]); /* ebx */ + supply_register (4, (char *)&pcb_regs[4]); /* esp */ + supply_register (5, (char *)&pcb_regs[3]); /* ebp */ + supply_register (6, (char *)&pcb_regs[2]); /* esi */ + supply_register (7, (char *)&pcb_regs[1]); /* edi */ + supply_register (8, (char *)&pcb_regs[6]); /* eip */ + + supply_register (9, (char *)&cts_regs[9]); /* eflags */ for (i = 10; i < 13; ++i) /* cs, ss, ds */ - supply_register (i, (char *)&pcb_regs[i+9]); - supply_register (13, (char *)&pcb_regs[18]); /* es */ + supply_register (i, (char *)&cts_regs[i+9]); + supply_register (13, (char *)&cts_regs[18]); /* es */ for (i = 14; i < 16; ++i) /* fs, gs */ - supply_register (i, (char *)&pcb_regs[i+8]); + supply_register (i, (char *)&cts_regs[i+8]); #if 0 /* doesn't work ??? */ /* Hmm... */ |