summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorgj <gj@FreeBSD.org>1997-04-27 21:36:49 +0000
committergj <gj@FreeBSD.org>1997-04-27 21:36:49 +0000
commitfeaedb83b142112b35a43051cb0bcabc9f1b83e5 (patch)
tree0bcd356cb63227e007c41d1d8158ebe226bb77fb /gnu
parentc38f6b729e60399b2a092e0d98e2a8e74854baeb (diff)
downloadFreeBSD-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')
-rw-r--r--gnu/usr.bin/binutils/gdb/Makefile4
-rw-r--r--gnu/usr.bin/binutils/gdb/gdb.1385
-rw-r--r--gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c27
-rw-r--r--gnu/usr.bin/binutils/gdb/kvm-fbsd.c27
-rw-r--r--gnu/usr.bin/gdb/gdb/Makefile4
-rw-r--r--gnu/usr.bin/gdb/gdb/gdb.1385
-rw-r--r--gnu/usr.bin/gdb/gdb/kvm-fbsd.c27
7 files changed, 833 insertions, 26 deletions
diff --git a/gnu/usr.bin/binutils/gdb/Makefile b/gnu/usr.bin/binutils/gdb/Makefile
index ae2b1ac..658496a 100644
--- a/gnu/usr.bin/binutils/gdb/Makefile
+++ b/gnu/usr.bin/binutils/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/binutils/gdb/gdb.1 b/gnu/usr.bin/binutils/gdb/gdb.1
new file mode 100644
index 0000000..f07c891
--- /dev/null
+++ b/gnu/usr.bin/binutils/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/binutils/gdb/i386/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
index 9419b6a..27e6f6c 100644
--- a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
+++ b/gnu/usr.bin/binutils/gdb/i386/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... */
diff --git a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
index 9419b6a..27e6f6c 100644
--- a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
+++ b/gnu/usr.bin/binutils/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... */
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... */
OpenPOWER on IntegriCloud