]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/doc/gdb.texinfo
import gdb-2000-01-05 snapshot
[thirdparty/binutils-gdb.git] / gdb / doc / gdb.texinfo
index ebb8e01dd95a3dc6257a94e30b55e220d98cfb05..0f34d26c3de95b64ed0f5cb327ac297fdb81f0be 100644 (file)
@@ -1,5 +1,6 @@
 \input texinfo      @c -*-texinfo-*-
-@c Copyright (c) 1988 1989 1990 1991 1992 1993 Free Software Foundation, Inc.
+@c Copyright 1988-1999
+@c Free Software Foundation, Inc.
 @c
 @c %**start of header 
 @c makeinfo ignores cmds prev to setfilename, so its arg cannot make use
@@ -8,12 +9,7 @@
 @c
 @include gdb-cfg.texi
 @c
-@ifset GENERIC
 @settitle Debugging with @value{GDBN}
-@end ifset
-@ifclear GENERIC
-@settitle Debugging with @value{GDBN} (@value{TARGET})
-@end ifclear
 @setchapternewpage odd
 @c %**end of header
 
 @syncodeindex vr cp
 
 @c !!set GDB manual's edition---not the same as GDB version!
-@set EDITION 4.10
+@set EDITION Seventh
 
 @c !!set GDB manual's revision date
-@set DATE November 1993
-
-@c GDB CHANGELOG CONSULTED BETWEEN:
-@c Fri Oct 11 23:27:06 1991  John Gilmore  (gnu at cygnus.com)
-@c Sat Dec 22 02:51:40 1990  John Gilmore  (gnu at cygint)
+@set DATE February 1999
 
 @c THIS MANUAL REQUIRES TEXINFO-2 macros and info-makers to format properly.
 
 @c manuals to an info tree.  zoo@cygnus.com is developing this facility.
 @format
 START-INFO-DIR-ENTRY
-* Gdb::                         The GNU debugger.
+* Gdb: (gdb).                     The @sc{gnu} debugger.
 END-INFO-DIR-ENTRY
 @end format
 @end ifinfo
 @c
 @c
 @ifinfo
-This file documents the GNU debugger @value{GDBN}.
+This file documents the @sc{gnu} debugger @value{GDBN}.
 
 
-This is Edition @value{EDITION}, @value{DATE}, 
-of @cite{Debugging with @value{GDBN}: the GNU Source-Level Debugger}
-for GDB Version @value{GDBVN}.
+This is the @value{EDITION} Edition, @value{DATE}, 
+of @cite{Debugging with @value{GDBN}: the @sc{gnu} Source-Level Debugger}
+for @value{GDBN} Version @value{GDBVN}.
 
-Copyright (C) 1988, '89, '90, '91, '92, '93 Free Software Foundation, Inc.
+Copyright (C) 1988-1999 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -83,34 +75,31 @@ into another language, under the above conditions for modified versions.
 
 @titlepage
 @title Debugging with @value{GDBN}
-@subtitle The GNU Source-Level Debugger
-@ifclear GENERIC
-@subtitle (@value{TARGET})
-@end ifclear
+@subtitle The @sc{gnu} Source-Level Debugger
 @sp 1
-@subtitle Edition @value{EDITION}, for @value{GDBN} version @value{GDBVN}
+@subtitle @value{EDITION} Edition, for @value{GDBN} version @value{GDBVN}
 @subtitle @value{DATE}
 @author Richard M. Stallman and Roland H. Pesch
 @page
 @tex
 {\parskip=0pt
-\hfill (Send bugs and comments on @value{GDBN} to bug-gdb\@prep.ai.mit.edu.)\par
+\hfill (Send bugs and comments on @value{GDBN} to bug-gdb\@gnu.org.)\par
 \hfill {\it Debugging with @value{GDBN}}\par
 \hfill \TeX{}info \texinfoversion\par
-\hfill pesch\@cygnus.com\par
 }
 @end tex
 
+@c ISBN seems to be wrong...
+
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1988, '89, '90, '91, '92, '93 Free Software
-Foundation, Inc. 
+Copyright @copyright{} 1988-1999 Free Software Foundation, Inc. 
 @sp 2
 Published by the Free Software Foundation @*
-675 Massachusetts Avenue, @*
-Cambridge, MA 02139 USA @*
+59 Temple Place - Suite 330, @*
+Boston, MA 02111-1307 USA @*
 Printed copies are available for $20 each. @*
 ISBN 1-882114-11-6 @*
-
+                
 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.
@@ -129,18 +118,15 @@ into another language, under the above conditions for modified versions.
 @node Top
 @top Debugging with @value{GDBN}
 
-This file describes @value{GDBN}, the GNU symbolic debugger.
+This file describes @value{GDBN}, the @sc{gnu} symbolic debugger.
 
-This is Edition @value{EDITION}, @value{DATE}, for GDB Version @value{GDBVN}.
+This is the @value{EDITION} Edition, @value{DATE}, for @value{GDBN} Version 
+@value{GDBVN}.
 
+Copyright (C) 1988-1999 Free Software Foundation, Inc.
 @menu
 * Summary::                     Summary of @value{GDBN}
-@ifset NOVEL
-* New Features::                New features since GDB version 3.5
-@end ifset
-@ifclear BARETARGET
 * Sample Session::              A sample @value{GDBN} session
-@end ifclear
 
 * Invocation::                  Getting in and out of @value{GDBN}
 * Commands::                    @value{GDBN} commands
@@ -149,37 +135,27 @@ This is Edition @value{EDITION}, @value{DATE}, for GDB Version @value{GDBVN}.
 * Stack::                       Examining the stack
 * Source::                      Examining source files
 * Data::                        Examining data
-@ifclear CONLY
+
 * Languages::                   Using @value{GDBN} with different languages
-@end ifclear
-@ifset CONLY
-* C::                           C language support
-@end ifset
-@c remnant makeinfo bug, blank line needed after two end-ifs?
 
 * Symbols::                     Examining the symbol table
 * Altering::                    Altering execution
 * GDB Files::                   @value{GDBN} files
 * Targets::                     Specifying a debugging target
+* Configurations::              Configuration-specific information
 * Controlling GDB::             Controlling @value{GDBN}
 * Sequences::                   Canned sequences of commands
-@ifclear DOSHOST
-* Emacs::                       Using @value{GDBN} under GNU Emacs
-@end ifclear
+* Emacs::                       Using @value{GDBN} under @sc{gnu} Emacs
 
 * GDB Bugs::                    Reporting bugs in @value{GDBN}
-* Command Line Editing::        Facilities of the readline library
-* Using History Interactively::
-@ifset NOVEL
-* Renamed Commands::
-@end ifset
-@ifclear PRECONFIGURED
-* Formatting Documentation::    How to format and print GDB documentation
-* Installing GDB::              Installing GDB
-@end ifclear
+* Formatting Documentation::    How to format and print @value{GDBN} documentation
 
+* Command Line Editing::        Command Line Editing
+* Using History Interactively:: Using History Interactively
+* Installing GDB::              Installing GDB
 * Index::                       Index
 @end menu
+
 @end ifinfo
 
 @node Summary
@@ -207,28 +183,25 @@ Change things in your program, so you can experiment with correcting the
 effects of one bug and go on to learn about another.
 @end itemize
 
-@ifclear CONLY
-You can use @value{GDBN} to debug programs written in C or C++.  For
-more information, see @ref{C,,C and C++}.
+You can use @value{GDBN} to debug programs written in C and C++.
+For more information, see @ref{Support,,Supported languages}.
+For more information, see @ref{C,,C and C++}.
 
-@ifset MOD2
-@c "MOD2" used as a "miscellaneous languages" flag here.
-@c This is acceptable while there is no real doc for Chill and Pascal.
+@cindex Chill
+@cindex Modula-2
 Support for Modula-2 and Chill is partial.  For information on Modula-2,
-see @ref{Modula-2,,Modula-2}.  There is no further documentation on Chill yet.
+see @ref{Modula-2,,Modula-2}.  For information on Chill, see @ref{Chill}.
+
+@cindex Pascal
+Debugging Pascal programs which use sets, subranges, file variables, or
+nested functions does not currently work.  @value{GDBN} does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
 
-Debugging pascal programs which use sets, subranges, file variables, or nested
-functions does not currently work.  @value{GDBN} does not support
-entering expressions, printing values, etc. using Pascal syntax.
-@end ifset
-@ifset FORTRAN
 @cindex Fortran
 @value{GDBN} can be used to debug programs written in Fortran, although
-it does not yet support entering expressions, printing values, etc.
-using Fortran syntax.  It may be necessary to refer to some variables
-with a trailing underscore.
-@end ifset
-@end ifclear
+it may be necessary to refer to some variables with a trailing
+underscore.
 
 @menu
 * Free Software::               Freely redistributable software
@@ -238,7 +211,8 @@ with a trailing underscore.
 @node Free Software
 @unnumberedsec Free software
 
-@value{GDBN} is @dfn{free software}, protected by the GNU General Public License
+@value{GDBN} is @dfn{free software}, protected by the @sc{gnu} 
+General Public License
 (GPL).  The GPL gives you the freedom to copy or adapt a licensed
 program---but every person getting a copy also gets with it the
 freedom to modify that copy (which means that they must get access to
@@ -253,13 +227,13 @@ from anyone else.
 @node Contributors
 @unnumberedsec Contributors to GDB
 
-Richard Stallman was the original author of GDB, and of many other GNU
-programs.  Many others have contributed to its development.  This
-section attempts to credit major contributors.  One of the virtues of
-free software is that everyone is free to contribute to it; with
+Richard Stallman was the original author of GDB, and of many other
+@sc{gnu} programs.  Many others have contributed to its development.
+This section attempts to credit major contributors.  One of the virtues
+of free software is that everyone is free to contribute to it; with
 regret, we cannot actually acknowledge everyone here.  The file
-@file{ChangeLog} in the GDB distribution approximates a blow-by-blow
-account.
+@file{ChangeLog} in the @value{GDBN} distribution approximates a
+blow-by-blow account.
 
 Changes much prior to version 2.0 are lost in the mists of time.
 
@@ -269,162 +243,125 @@ or your friends (or enemies, to be evenhanded) have been unfairly
 omitted from this list, we would like to add your names!
 @end quotation
 
-So that they may not regard their long labor as thankless, we
-particularly thank those who shepherded GDB through major releases: Fred
-Fish (releases 4.11, 4.10, 4.9), Stu Grossman and John Gilmore (releases
-4.8, 4.7, 4.6, 4.5, 4.4), John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and
-3.9); Jim Kingdon (releases 3.5, 3.4, 3.3); and Randy Smith (releases
-3.2, 3.1, 3.0).  As major maintainer of GDB for some period, each
-contributed significantly to the structure, stability, and capabilities
-of the entire debugger.
+So that they may not regard their many labors as thankless, we
+particularly thank those who shepherded @value{GDBN} through major
+releases:
+Jim Blandy (release 4.18);
+Jason Molenda (release 4.17);
+Stan Shebs (release 4.14);
+Fred Fish (releases 4.16, 4.15, 4.13, 4.12, 4.11, 4.10, and 4.9);
+Stu Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5, and 4.4);
+John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9);
+Jim Kingdon (releases 3.5, 3.4, and 3.3);
+and Randy Smith (releases 3.2, 3.1, and 3.0).
 
 Richard Stallman, assisted at various times by Peter TerMaat, Chris
 Hanson, and Richard Mlynarik, handled releases through 2.8.
 
-@ifclear CONLY
-Michael Tiemann is the author of most of the GNU C++ support in GDB,
+Michael Tiemann is the author of most of the @sc{gnu} C++ support in GDB,
 with significant additional contributions from Per Bothner.  James
-Clark wrote the GNU C++ demangler.  Early work on C++ was by Peter
+Clark wrote the @sc{gnu} C++ demangler.  Early work on C++ was by Peter
 TerMaat (who also did much general update work leading to release 3.0).
-@end ifclear
 
-GDB 4 uses the BFD subroutine library to examine multiple
+@value{GDBN} 4 uses the BFD subroutine library to examine multiple
 object-file formats; BFD was a joint project of David V.
 Henkel-Wallace, Rich Pixley, Steve Chamberlain, and John Gilmore.
 
 David Johnson wrote the original COFF support; Pace Willison did
 the original support for encapsulated COFF.
 
+Brent Benson of Harris Computer Systems contributed DWARF 2 support.
+
 Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
 Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
-support.  Jean-Daniel Fekete contributed Sun 386i support.  Chris
-Hanson improved the HP9000 support.  Noboyuki Hikichi and Tomoyuki
-Hasei contributed Sony/News OS 3 support.  David Johnson contributed
-Encore Umax support.  Jyrki Kuoppala contributed Altos 3068 support.
-Keith Packard contributed NS32K support.  Doug Rabson contributed
-Acorn Risc Machine support.  Chris Smith contributed Convex support
-(and Fortran debugging).  Jonathan Stone contributed Pyramid support.
-Michael Tiemann contributed SPARC support.  Tim Tucker contributed
-support for the Gould NP1 and Gould Powernode.  Pace Willison
-contributed Intel 386 support.  Jay Vosburgh contributed Symmetry
 support.
+Jean-Daniel Fekete contributed Sun 386i support.
+Chris Hanson improved the HP9000 support.
+Noboyuki Hikichi and Tomoyuki Hasei contributed Sony/News OS 3 support.
+David Johnson contributed Encore Umax support.
+Jyrki Kuoppala contributed Altos 3068 support.
+Jeff Law contributed HP PA and SOM support.
+Keith Packard contributed NS32K support.
+Doug Rabson contributed Acorn Risc Machine support.
+Bob Rusk contributed Harris Nighthawk CX-UX support.
+Chris Smith contributed Convex support (and Fortran debugging).
+Jonathan Stone contributed Pyramid support.
+Michael Tiemann contributed SPARC support.
+Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
+Pace Willison contributed Intel 386 support.
+Jay Vosburgh contributed Symmetry support.
+
+Andreas Schwab contributed M68K Linux support.
 
 Rich Schaefer and Peter Schauer helped with support of SunOS shared
 libraries.
 
-Jay Fenlason and Roland McGrath ensured that GDB and GAS agree about
-several machine instruction sets.
+Jay Fenlason and Roland McGrath ensured that @value{GDBN} and GAS agree
+about several machine instruction sets.
 
-Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped
-develop remote debugging.  Intel Corporation and Wind River Systems
-contributed remote debugging modules for their products.
+Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped develop
+remote debugging.  Intel Corporation, Wind River Systems, AMD, and ARM
+contributed remote debugging modules for the i960, VxWorks, A29K UDI,
+and RDI targets, respectively.
 
 Brian Fox is the author of the readline libraries providing
 command-line editing and command history.
 
-Andrew Beers of SUNY Buffalo wrote the language-switching code,
-@ifset MOD2
-the Modula-2 support,
-@end ifset
-and contributed the Languages chapter of this manual.
+Andrew Beers of SUNY Buffalo wrote the language-switching code, the
+Modula-2 support, and contributed the Languages chapter of this manual.
 
 Fred Fish wrote most of the support for Unix System Vr4.  
-@ifclear CONLY
 He also enhanced the command-completion support to cover C++ overloaded
 symbols.
-@end ifclear
 
-Hitachi America, Ltd. sponsored the support for Hitachi microprocessors.
+Hitachi America, Ltd. sponsored the support for H8/300, H8/500, and
+Super-H processors.
 
-@ifset NOVEL
-@node New Features
-@unnumbered New Features since GDB Version 3.5
+NEC sponsored the support for the v850, Vr4xxx, and Vr5xxx processors.
 
-@table @emph
-@item Targets
-Using the new command @code{target}, you can select at runtime whether
-you are debugging local files, local processes, standalone systems over
-a serial port, realtime systems over a TCP/IP connection, etc.  The
-command @code{load} can download programs into a remote system.  Serial
-stubs are available for Motorola 680x0, Intel 80386, and Sparc remote
-systems; GDB also supports debugging realtime processes running under
-VxWorks, using SunRPC Remote Procedure Calls over TCP/IP to talk to a
-debugger stub on the target system.  Internally, GDB now uses a function
-vector to mediate access to different targets; if you need to add your
-own support for a remote protocol, this makes it much easier.
-
-@item Watchpoints
-GDB now sports watchpoints as well as breakpoints.  You can use a
-watchpoint to stop execution whenever the value of an expression
-changes, without having to predict a particular place in your program
-where this may happen.
-
-@item Wide Output
-Commands that issue wide output now insert newlines at places designed
-to make the output more readable.
-
-@item Object Code Formats
-GDB uses a new library called the Binary File Descriptor (BFD) Library
-to permit it to switch dynamically, without reconfiguration or
-recompilation, between different object-file formats.  Formats currently
-supported are COFF, ELF, a.out, Intel 960 b.out, MIPS ECOFF, HPPA SOM
-(with stabs debugging), and S-records; files may be read as .o files,
-archive libraries, or core dumps.  BFD is available as a subroutine
-library so that other programs may take advantage of it, and the other
-GNU binary utilities are being converted to use it.
-
-@item Configuration and Ports
-Compile-time configuration (to select a particular architecture and
-operating system) is much easier.  The script @code{configure} now
-allows you to configure GDB as either a native debugger or a
-cross-debugger. @xref{Installing GDB}, for details on how to
-configure.
-
-@item Interaction
-The user interface to the GDB control variables is simpler,
-and is consolidated in two commands, @code{set} and @code{show}.  Output
-lines are now broken at readable places, rather than overflowing onto
-the next line.  You can suppress output of machine-level addresses,
-displaying only source language information.
-
-@item C++
-GDB now supports C++ multiple inheritance (if used with a GCC
-version 2 compiler), and also has limited support for C++ exception
-handling, with the commands @code{catch} and @code{info catch}: GDB
-can break when an exception is raised, before the stack is peeled back
-to the exception handler's context.
-
-@ifset MOD2
-@item Modula-2
-GDB now has preliminary support for the GNU Modula-2 compiler, currently
-under development at the State University of New York at Buffalo.
-Coordinated development of both GDB and the GNU Modula-2 compiler will
-continue.  Other Modula-2 compilers are currently not supported, and
-attempting to debug programs compiled with them will likely result in an
-error as the symbol table of the executable is read in.
-@end ifset
+Mitsubishi sponsored the support for D10V, D30V, and M32R/D processors.
 
-@item Command Rationalization
-Many GDB commands have been renamed to make them easier to remember
-and use.  In particular, the subcommands of @code{info} and
-@code{show}/@code{set} are grouped to make the former refer to the state
-of your program, and the latter refer to the state of GDB itself.
-@xref{Renamed Commands}, for details on what commands were renamed.
+Toshiba sponsored the support for the TX39 Mips processor.
 
-@item Shared Libraries
-GDB 4 can debug programs and core files that use SunOS, SVR4, or IBM RS/6000
-shared libraries.
+Matsushita sponsored the support for the MN10200 and MN10300 processors.
 
-@item Threads
-On some systems, GDB 4 has facilities to debug multi-thread programs.
+Fujitsu sponsored the support for SPARClite and FR30 processors
+
+Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
+watchpoints.
+
+Michael Snyder added support for tracepoints.
+
+Stu Grossman wrote gdbserver.
+
+Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made
+nearly innumerable bug fixes and cleanups throughout GDB.
+
+The following people at the Hewlett-Packard Company contributed
+support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
+(narrow mode), HP's implementation of kernel threads, HP's aC++
+compiler, and the terminal user interface: Ben Krepp, Richard Title,
+John Bishop, Susan Macchia, Kathy Mann, Satish Pai, India Paul, Steve
+Rehrauer, and Elena Zannoni.  Kim Haase provided HP-specific
+information in this manual.
+
+Cygnus Solutions has sponsored GDB maintenance and much of its
+development since 1991.  Cygnus engineers who have worked on GDB
+fulltime include Mark Alexander, Jim Blandy, Per Bothner, Kevin
+Buettner, Edith Epstein, Chris Faylor, Fred Fish, Martin Hunt, Jim
+Ingham, John Gilmore, Stu Grossman, Kung Hsu, Jim Kingdon, John Metzler,
+Fernando Nasser, Geoffrey Noer, Dawn Perchik, Rich Pixley, Zdenek
+Radouch, Keith Seitz, Stan Shebs, David Taylor, and Elena Zannoni.  In
+addition, Dave Brolley, Ian Carmichael, Steve Chamberlain, Nick Clifton,
+JT Conklin, Stan Cox, DJ Delorie, Ulrich Drepper, Frank Eigler, Doug
+Evans, Sean Fagan, David Henkel-Wallace, Richard Henderson, Jeff
+Holcomb, Jeff Law, Jim Lemke, Tom Lord, Bob Manson, Michael Meissner,
+Jason Merrill, Catherine Moore, Drew Moseley, Ken Raeburn, Gavin
+Romig-Koch, Rob Savoye, Jamie Smith, Mike Stump, Ian Taylor, Angela
+Thomas, Michael Tiemann, Tom Tromey, Ron Unrau, Jim Wilson, and David
+Zuhn have made contributions both large and small.
 
-@item Reference Card
-GDB 4 has a reference card.  @xref{Formatting Documentation,,Formatting
-the Documentation}, for instructions about how to print it.
-@end table
-@end ifset
 
-@ifclear BARETARGET
 @node Sample Session
 @chapter A Sample @value{GDBN} Session
 
@@ -440,7 +377,7 @@ to make it easier to pick out from the surrounding output.
 @c FIXME: this example may not be appropriate for some configs, where
 @c FIXME...primary interest is in remote use.
 
-One of the preliminary versions of GNU @code{m4} (a generic macro
+One of the preliminary versions of @sc{gnu} @code{m4} (a generic macro
 processor) exhibits the following bug: sometimes, when we change its
 quote strings from the default, the commands used to capture one macro
 definition within another stop working.  In the following short @code{m4}
@@ -476,20 +413,21 @@ Let us use @value{GDBN} to try to see what is going on.
 $ @b{@value{GDBP} m4}
 @c FIXME: this falsifies the exact text played out, to permit smallbook
 @c FIXME... format to come out better.
-GDB is free software and you are welcome to distribute copies
+@value{GDBN} is free software and you are welcome to distribute copies
  of it under certain conditions; type "show copying" to see 
  the conditions.
-There is absolutely no warranty for GDB; type "show warranty" 
+There is absolutely no warranty for @value{GDBN}; type "show warranty" 
  for details.
-GDB @value{GDBVN}, Copyright 1993 Free Software Foundation, Inc...
+
+@value{GDBN} @value{GDBVN}, Copyright 1999 Free Software Foundation, Inc...
 (@value{GDBP})
 @end smallexample
 
 @noindent
-@value{GDBN} reads only enough symbol data to know where to find the rest when
-needed; as a result, the first prompt comes up very quickly.  We now
-tell @value{GDBN} to use a narrower display width than usual, so that examples
-will fit in this manual.
+@value{GDBN} reads only enough symbol data to know where to find the
+rest when needed; as a result, the first prompt comes up very quickly.
+We now tell @value{GDBN} to use a narrower display width than usual, so
+that examples fit in this manual.
 
 @smallexample
 (@value{GDBP}) @b{set width 70}
@@ -578,7 +516,7 @@ stack frame for each active subroutine.
 @end smallexample
 
 @noindent
-We will step through a few more lines to see what happens.  The first two
+We step through a few more lines to see what happens.  The first two
 times, we can use @samp{s}; the next two times we use @code{n} to avoid
 falling into the @code{xstrdup} subroutine.
 
@@ -693,41 +631,37 @@ session with the @value{GDBN} @code{quit} command.
 @smallexample
 (@value{GDBP}) @b{quit}
 @end smallexample
-@end ifclear
 
 @node Invocation
 @chapter Getting In and Out of @value{GDBN}
 
 This chapter discusses how to start @value{GDBN}, and how to get out of it.
-(The essentials: type @samp{@value{GDBP}} to start GDB, and type @kbd{quit}
-or @kbd{C-d} to exit.)
+The essentials are: 
+@itemize @bullet
+@item 
+type @samp{@value{GDBP}} to start @value{GDBN}.
+@item 
+type @kbd{quit} or @kbd{C-d} to exit.
+@end itemize
 
 @menu
 * Invoking GDB::                How to start @value{GDBN}
-* Quitting GDB::                 How to quit @value{GDBN}
+* Quitting GDB::                How to quit @value{GDBN}
 * Shell Commands::              How to use shell commands inside @value{GDBN}
 @end menu
 
 @node Invoking GDB
 @section Invoking @value{GDBN}
 
-@ifset H8EXCLUSIVE
-For details on starting up @value{GDBP} as a
-remote debugger attached to a Hitachi microprocessor, see @ref{Hitachi
-Remote,,@value{GDBN} and Hitachi Microprocessors}.
-@end ifset
-
 Invoke @value{GDBN} by running the program @code{@value{GDBP}}.  Once started,
 @value{GDBN} reads commands from the terminal until you tell it to exit.
 
 You can also run @code{@value{GDBP}} with a variety of arguments and options,
 to specify more of your debugging environment at the outset.
 
-@ifset GENERIC
 The command-line options described here are designed
 to cover a variety of situations; in some environments, some of these
 options may effectively be unavailable.  
-@end ifset
 
 The most usual way to start @value{GDBN} is with one argument,
 specifying an executable program:
@@ -736,7 +670,6 @@ specifying an executable program:
 @value{GDBP} @var{program}
 @end example
 
-@ifclear BARETARGET
 @noindent
 You can also start with both an executable program and a core file
 specified:
@@ -757,10 +690,17 @@ would attach @value{GDBN} to process @code{1234} (unless you also have a file
 named @file{1234}; @value{GDBN} does check for a core file first).
 
 Taking advantage of the second command-line argument requires a fairly
-complete operating system; when you use @value{GDBN} as a remote debugger
-attached to a bare board, there may not be any notion of ``process'',
-and there is often no way to get a core dump.
-@end ifclear
+complete operating system; when you use @value{GDBN} as a remote
+debugger attached to a bare board, there may not be any notion of
+``process'', and there is often no way to get a core dump.  @value{GDBN}
+will warn you if it is unable to attach or to read core dumps.
+
+You can run @code{gdb} without printing the front material, which describes
+@value{GDBN}'s non-warranty, by specifying @code{-silent}:
+
+@smallexample
+@value{GDBP} -silent
+@end smallexample
 
 @noindent
 You can further control how @value{GDBN} starts up by using command-line
@@ -783,47 +723,13 @@ in sequential order.  The order makes a difference when the
 
 
 @menu
-@ifclear GENERIC
-@ifset REMOTESTUB
-* Remote Serial::               @value{GDBN} remote serial protocol
-@end ifset
-@ifset I960
-* i960-Nindy Remote::          @value{GDBN} with a remote i960 (Nindy)
-@end ifset
-@ifset AMD29K
-* UDI29K Remote::               @value{GDBN} and the UDI protocol for AMD29K
-* EB29K Remote::               @value{GDBN} with a remote EB29K
-@end ifset
-@ifset VXWORKS
-* VxWorks Remote::             @value{GDBN} and VxWorks
-@end ifset
-@ifset ST2000
-* ST2000 Remote::               @value{GDBN} with a Tandem ST2000
-@end ifset
-@ifset H8
-* Hitachi Remote::              @value{GDBN} and Hitachi Microprocessors
-@end ifset
-@ifset MIPS
-* MIPS Remote::                        @value{GDBN} and MIPS boards
-@end ifset
-@ifset SIMS
-* Simulator::                   Simulated CPU target
-@end ifset
-@end ifclear
-@c remnant makeinfo bug requires this blank line after *two* end-ifblahs:
-
 * File Options::                Choosing files
 * Mode Options::                Choosing modes
 @end menu
 
-@ifclear GENERIC
-@include remote.texi
-@end ifclear
-
 @node File Options
 @subsection Choosing files
 
-@ifclear BARETARGET
 When @value{GDBN} starts, it reads any arguments other than options as
 specifying an executable file and core file (or process ID).  This is
 the same as if the arguments were specified by the @samp{-se} and
@@ -832,12 +738,10 @@ that does not have an associated option flag as equivalent to the
 @samp{-se} option followed by that argument; and the second argument
 that does not have an associated option flag, if any, as equivalent to
 the @samp{-c} option followed by that argument.)
-@end ifclear
-@ifset BARETARGET
-When @value{GDBN} starts, it reads any argument other than options as
-specifying an executable file.  This is the same as if the argument was
-specified by the @samp{-se} option.
-@end ifset
+
+If @value{GDBN} has not been configured to included core file support,
+such as for most embedded targets, then it will complain about a second
+argument and ignore it.
 
 Many options have both long and short forms; both are shown in the
 following list.  @value{GDBN} also recognizes the long forms if you truncate
@@ -852,20 +756,13 @@ Read symbol table from file @var{file}.
 
 @item -exec @var{file}
 @itemx -e @var{file}
-Use file @var{file} as the executable file to execute when
-@ifset BARETARGET
-appropriate.
-@end ifset
-@ifclear BARETARGET
-appropriate, and for examining pure data in conjunction with a core
-dump.
-@end ifclear
+Use file @var{file} as the executable file to execute when appropriate,
+and for examining pure data in conjunction with a core dump.
 
 @item -se @var{file}
 Read symbol table from file @var{file} and use it as the executable
 file.
 
-@ifclear BARETARGET
 @item -core @var{file}
 @itemx -c @var{file}
 Use file @var{file} as a core dump to examine.
@@ -874,7 +771,6 @@ Use file @var{file} as a core dump to examine.
 Connect to process ID @var{number}, as with the @code{attach} command
 (unless there is a file in core-dump format named @var{number}, in which
 case @samp{-c} specifies that file as a core dump to read).
-@end ifclear
 
 @item -command @var{file}
 @itemx -x @var{file}
@@ -885,7 +781,6 @@ Files,, Command files}.
 @itemx -d @var{directory}
 Add @var{directory} to the path to search for source files.
 
-@ifclear BARETARGET
 @item -m
 @itemx -mapped
 @emph{Warning: this option depends on operating system facilities that are not
@@ -894,35 +789,32 @@ If memory-mapped files are available on your system through the @code{mmap}
 system call, you can use this option 
 to have @value{GDBN} write the symbols from your
 program into a reusable file in the current directory.  If the program you are debugging is
-called @file{/tmp/fred}, the mapped symbol file will be @file{./fred.syms}.
-Future @value{GDBN} debugging sessions will notice the presence of this file,
-and will quickly map in symbol information from it, rather than reading
+called @file{/tmp/fred}, the mapped symbol file is @file{./fred.syms}.
+Future @value{GDBN} debugging sessions notice the presence of this file,
+and can quickly map in symbol information from it, rather than reading
 the symbol table from the executable program.
 
-@c FIXME! Really host, not target?
 The @file{.syms} file is specific to the host machine where @value{GDBN}
 is run.  It holds an exact image of the internal @value{GDBN} symbol
 table.  It cannot be shared across multiple host platforms.
-@end ifclear
 
 @item -r
 @itemx -readnow
 Read each symbol file's entire symbol table immediately, rather than
 the default, which is to read it incrementally as it is needed.
 This makes startup slower, but makes future operations faster.
+
 @end table
 
-@ifclear BARETARGET
-The @code{-mapped} and @code{-readnow} options are typically combined in
+You typically combine the @code{-mapped} and @code{-readnow} options in
 order to build a @file{.syms} file that contains complete symbol
 information.  (@xref{Files,,Commands to specify files}, for information
-on @file{.syms} files.)  A simple GDB invocation to do nothing but build
-a @file{.syms} file for future use is:
+on @file{.syms} files.)  A simple @value{GDBN} invocation to do nothing
+but build a @file{.syms} file for future use is:
 
 @example
-       gdb -batch -nx -mapped -readnow programname
+gdb -batch -nx -mapped -readnow programname
 @end example
-@end ifclear
 
 @node Mode Options
 @subsection Choosing modes
@@ -933,10 +825,11 @@ batch mode or quiet mode.
 @table @code
 @item -nx
 @itemx -n
-Do not execute commands from any initialization files (normally called
-@file{@value{GDBINIT}}).  Normally, the commands in these files are
-executed after all the command options and arguments have been
-processed.  @xref{Command Files,,Command files}.
+Do not execute commands found in any initialization files (normally
+called @file{.gdbinit}, or @file{gdb.ini} on PCs).  Normally,
+@value{GDBN} executes the commands in these files after all the command
+options and arguments have been processed.  @xref{Command Files,,Command
+files}.
 
 @item -quiet
 @itemx -q
@@ -950,54 +843,69 @@ initialization files, if not inhibited with @samp{-n}).  Exit with
 nonzero status if an error occurs in executing the @value{GDBN} commands
 in the command files.
 
-Batch mode may be useful for running @value{GDBN} as a filter, for example to
-download and run a program on another computer; in order to make this
-more useful, the message
+Batch mode may be useful for running @value{GDBN} as a filter, for
+example to download and run a program on another computer; in order to
+make this more useful, the message
 
 @example
 Program exited normally.
 @end example
 
 @noindent
-(which is ordinarily issued whenever a program running under @value{GDBN} control
-terminates) is not issued when running in batch mode.
+(which is ordinarily issued whenever a program running under
+@value{GDBN} control terminates) is not issued when running in batch
+mode.
+
+@item -nowindows
+@itemx -nw
+``No windows''.  If @value{GDBN} comes with a graphical user interface
+(GUI) built in, then this option tells GDB to only use the command-line
+interface.  If no GUI is available, this option has no effect.
+
+@item -windows
+@itemx -w
+If @value{GDBN} includes a GUI, then this option requires it to be
+used if possible.
 
 @item -cd @var{directory}
 Run @value{GDBN} using @var{directory} as its working directory,
 instead of the current directory.
 
-@ifset LUCID
-@item -context @var{authentication}
-When the Energize programming system starts up @value{GDBN}, it uses this
-option to trigger an alternate mode of interaction.
-@var{authentication} is a pair of numeric codes that identify @value{GDBN}
-as a client in the Energize environment.  Avoid this option when you run
-@value{GDBN} directly from the command line.  See @ref{Energize,,Using
-@value{GDBN} with Energize} for more discussion of using @value{GDBN} with Energize.
-@end ifset
-
-@ifclear DOSHOST
 @item -fullname
 @itemx -f
-Emacs sets this option when it runs @value{GDBN} as a subprocess.  It tells @value{GDBN}
-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 your program stops).  This recognizable format looks
-like two @samp{\032} characters, followed by the file name, line number
-and character position separated by colons, and a newline.  The
-Emacs-to-@value{GDBN} interface program uses the two @samp{\032} characters as
-a signal to display the source code for the frame.
-@end ifclear
-
-@ifset SERIAL
-@item -b @var{bps}
+@sc{gnu} Emacs sets this option when it runs @value{GDBN} as a
+subprocess.  It tells @value{GDBN} 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 your program stops).  This
+recognizable format looks like two @samp{\032} characters, followed by
+the file name, line number and character position separated by colons,
+and a newline.  The Emacs-to-@value{GDBN} interface program uses the two
+@samp{\032} characters as a signal to display the source code for the
+frame.
+
+@item -baud @var{bps}
+@itemx -b @var{bps}
 Set the line speed (baud rate or bits per second) of any serial
 interface used by @value{GDBN} for remote debugging.
 
 @item -tty @var{device}
 Run using @var{device} for your program's standard input and output.
 @c FIXME: kingdon thinks there is more to -tty.  Investigate.
-@end ifset
+
+@c resolve the situation of these eventually
+@c @item -tui
+@c Use a Terminal User Interface.  For information, use your Web browser to
+@c read the file @file{TUI.html}, which is usually installed in the
+@c directory @code{/opt/langtools/wdb/doc} on HP-UX systems.  Do not use
+@c this option if you run @value{GDBN} from Emacs (see @pxref{Emacs, ,Using
+@c @value{GDBN} under @sc{gnu} Emacs}).
+
+@c @item -xdb
+@c Run in XDB compatibility mode, allowing the use of certain XDB commands.
+@c For information, see the file @file{xdb_trans.html}, which is usually
+@c installed in the directory @code{/opt/langtools/wdb/doc} on HP-UX
+@c systems.
+
 @end table
 
 @node Quitting GDB
@@ -1006,25 +914,25 @@ Run using @var{device} for your program's standard input and output.
 @cindex leaving @value{GDBN}
 
 @table @code
-@item quit
-@kindex quit
+@kindex quit @r{[}@var{expression}@r{]}
 @kindex q
-To exit @value{GDBN}, use the @code{quit} command (abbreviated @code{q}), or type
-an end-of-file character (usually @kbd{C-d}).
+@item quit
+To exit @value{GDBN}, use the @code{quit} command (abbreviated @code{q}), or 
+type an end-of-file character (usually @kbd{C-d}).  If you do not supply 
+@var{expression}, @value{GDBN} will terminate normally; otherwise it will 
+terminate using the result of @var{expression} as the error code.
 @end table
 
 @cindex interrupt
-An interrupt (often @kbd{C-c}) will not exit from @value{GDBN}, but rather
-will terminate the action of any @value{GDBN} command that is in progress and
-return to @value{GDBN} command level.  It is safe to type the interrupt
+An interrupt (often @kbd{C-c}) does not exit from @value{GDBN}, but rather
+terminates the action of any @value{GDBN} command that is in progress and
+returns to @value{GDBN} command level.  It is safe to type the interrupt
 character at any time because @value{GDBN} does not allow it to take effect
 until a time when it is safe.
 
-@ifclear BARETARGET
 If you have been using @value{GDBN} to control an attached process or
 device, you can release it with the @code{detach} command
 (@pxref{Attach, ,Debugging an already-running process}).
-@end ifclear
 
 @node Shell Commands
 @section Shell commands
@@ -1034,14 +942,13 @@ debugging session, there is no need to leave or suspend @value{GDBN}; you can
 just use the @code{shell} command.
 
 @table @code
-@item shell @var{command string}
 @kindex shell
 @cindex shell escape
-Invoke a the standard shell to execute @var{command string}.
-@ifclear DOSHOST
+@item shell @var{command string}
+Invoke a standard shell to execute @var{command string}.
 If it exists, the environment variable @code{SHELL} determines which
-shell to run.  Otherwise @value{GDBN} uses @code{/bin/sh}.
-@end ifclear
+shell to run.  Otherwise @value{GDBN} uses the default shell
+(@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.).
 @end table
 
 The utility @code{make} is often needed in development environments.
@@ -1049,9 +956,9 @@ You do not have to use the @code{shell} command for this purpose in
 @value{GDBN}:
 
 @table @code
-@item make @var{make-args}
 @kindex make
 @cindex calling make
+@item make @var{make-args}
 Execute the @code{make} program with the specified
 arguments.  This is equivalent to @samp{shell make @var{make-args}}.
 @end table
@@ -1094,7 +1001,7 @@ arguments to the @code{help} command.
 @kindex RET
 A blank line as input to @value{GDBN} (typing just @key{RET}) means to
 repeat the previous command. Certain commands (for example, @code{run})
-will not repeat this way; these are commands for which unintentional
+will not repeat this way; these are commands whose unintentional
 repetition might cause trouble and which you are unlikely to want to
 repeat.
 
@@ -1125,8 +1032,8 @@ are for the next word in a command, at any time.  This works for @value{GDBN}
 commands, @value{GDBN} subcommands, and the names of symbols in your program.
 
 Press the @key{TAB} key whenever you want @value{GDBN} to fill out the rest
-of a word.  If there is only one possibility, @value{GDBN} will fill in the
-word, and wait for you to finish the command (or press @key{RET} to
+of a word.  If there is only one possibility, @value{GDBN} fills in the
+word, and waits for you to finish the command (or press @key{RET} to
 enter it).  For example, if you type
 
 @c FIXME "@key" does not distinguish its argument sufficiently to permit
@@ -1154,12 +1061,12 @@ might as well just type @key{RET} immediately after @samp{info bre},
 to exploit command abbreviations rather than command completion).
 
 If there is more than one possibility for the next word when you press
-@key{TAB}, @value{GDBN} will sound a bell.  You can either supply more
-characters and try again, or just press @key{TAB} a second time, and
-@value{GDBN} will display all the possible completions for that word.  For
+@key{TAB}, @value{GDBN} sounds a bell.  You can either supply more
+characters and try again, or just press @key{TAB} a second time;
+@value{GDBN} displays all the possible completions for that word.  For
 example, you might want to set a breakpoint on a subroutine whose name
 begins with @samp{make_}, but when you type @kbd{b make_@key{TAB}} @value{GDBN}
-just sounds the bell.  Typing @key{TAB} again will display all the
+just sounds the bell.  Typing @key{TAB} again displays all the
 function names in your program that begin with those characters, for
 example:
 
@@ -1181,22 +1088,18 @@ command.
 
 If you just want to see the list of alternatives in the first place, you
 can press @kbd{M-?} rather than pressing @key{TAB} twice. @kbd{M-?}
-means @kbd{@key{META} ?}.  You can type this
-@ifclear DOSHOST
-either by holding down a
+means @kbd{@key{META} ?}.  You can type this either by holding down a
 key designated as the @key{META} shift on your keyboard (if there is
-one) while typing @kbd{?}, or
-@end ifclear
-as @key{ESC} followed by @kbd{?}.
+one) while typing @kbd{?}, or as @key{ESC} followed by @kbd{?}.
 
 @cindex quotes in commands
 @cindex completion of quoted strings
 Sometimes the string you need, while logically a ``word'', may contain
-parentheses or other characters that @value{GDBN} normally excludes from its
-notion of a word.  To permit word completion to work in this situation,
-you may enclose words in @code{'} (single quote marks) in @value{GDBN} commands.
+parentheses or other characters that @value{GDBN} normally excludes from
+its notion of a word.  To permit word completion to work in this
+situation, you may enclose words in @code{'} (single quote marks) in
+@value{GDBN} commands.
 
-@ifclear CONLY
 The most likely situation where you might need this is in typing the
 name of a C++ function.  This is because C++ allows function overloading
 (multiple definitions of the same function, distinguished by argument
@@ -1215,8 +1118,8 @@ bubble(double,double)    bubble(int,int)
 (@value{GDBP}) b 'bubble(
 @end example
 
-In some cases, @value{GDBN} can tell that completing a name will require
-quotes.  When this happens, @value{GDBN} will insert the quote for you (while
+In some cases, @value{GDBN} can tell that completing a name requires using
+quotes.  When this happens, @value{GDBN} inserts the quote for you (while
 completing as much as it can) if you do not type the quote in the first
 place:
 
@@ -1230,7 +1133,11 @@ place:
 In general, @value{GDBN} can tell that a quote is needed (and inserts it) if
 you have not yet started typing the argument list when you ask for
 completion on an overloaded symbol.
-@end ifclear
+
+For more information about overloaded functions, see @ref{C plus plus
+expressions, ,C++ expressions}.  You can use the command @code{set
+overload-resolution off} to disable overload resolution;
+see @ref{Debugging C plus plus, ,@value{GDBN} features for C++}.
 
 
 @node Help
@@ -1238,13 +1145,13 @@ completion on an overloaded symbol.
 @cindex online documentation
 @kindex help
 
-You can always ask @value{GDBN} itself for information on its commands, using the
-command @code{help}.
+You can always ask @value{GDBN} itself for information on its commands, 
+using the command @code{help}.
 
 @table @code
+@kindex h
 @item help
 @itemx h
-@kindex h
 You can use @code{help} (abbreviated @code{h}) with no arguments to
 display a short list of named classes of commands:
 
@@ -1252,16 +1159,18 @@ display a short list of named classes of commands:
 (@value{GDBP}) help
 List of classes of commands:
 
-running -- Running the program
-stack -- Examining the stack
-data -- Examining data
+aliases -- Aliases of other commands
 breakpoints -- Making program stop at certain points
+data -- Examining data
 files -- Specifying and examining files
+internals -- Maintenance commands
+obscure -- Obscure features
+running -- Running the program
+stack -- Examining the stack
 status -- Status inquiries
 support -- Support facilities
+tracepoints -- Tracing of program execution without stopping the program
 user-defined -- User-defined commands
-aliases -- Aliases of other commands
-obscure -- Obscure features
 
 Type "help" followed by a class name for a list of 
 commands in that class.
@@ -1284,9 +1193,10 @@ List of commands:
 
 @c Line break in "show" line falsifies real output, but needed
 @c to fit in smallbook page size.
-show -- Generic command for showing things set
- with "set"
-info -- Generic command for printing status
+info -- Generic command for showing things
+ about the program being debugged
+show -- Generic command for showing things
+ about the debugger
 
 Type "help" followed by command name for full 
 documentation.
@@ -1295,8 +1205,31 @@ Command name abbreviations are allowed if unambiguous.
 @end smallexample
 
 @item help @var{command}
-With a command name as @code{help} argument, @value{GDBN} will display a
+With a command name as @code{help} argument, @value{GDBN} displays a
 short paragraph on how to use that command.
+
+@kindex complete
+@item complete @var{args}
+The @code{complete @var{args}} command lists all the possible completions
+for the beginning of a command.  Use @var{args} to specify the beginning of the
+command you want completed.  For example:
+
+@smallexample
+complete i
+@end smallexample
+
+@noindent results in:
+
+@smallexample
+@group
+if
+ignore
+info
+inspect
+@end group
+@end smallexample
+
+@noindent This is intended for use by @sc{gnu} Emacs.
 @end table
 
 In addition to @code{help}, you can use the @value{GDBN} commands @code{info}
@@ -1308,9 +1241,9 @@ all the sub-commands.  @xref{Index}.
 
 @c @group
 @table @code
-@item info
 @kindex info
 @kindex i
+@item info
 This command (abbreviated @code{i}) is for describing the state of your
 program.  For example, you can list the arguments given to your program
 with @code{info args}, list the registers currently in use with @code{info
@@ -1318,9 +1251,16 @@ registers}, or list the breakpoints you have set with @code{info breakpoints}.
 You can get a complete list of the @code{info} sub-commands with
 @w{@code{help info}}.
 
+@kindex set
+@item set
+You can assign the result of an expression to an environment variable with 
+@code{set}.  For example, you can set the @value{GDBN} prompt to a $-sign with
+@code{set prompt $}.
+
 @kindex show
 @item show
-In contrast, @code{show} is for describing the state of @value{GDBN} itself.
+In contrast to @code{info}, @code{show} is for describing the state of 
+@value{GDBN} itself.
 You can change most of the things you can @code{show}, by using the
 related command @code{set}; for example, you can control what number
 system is used for displays with @code{set radix}, or simply inquire
@@ -1344,11 +1284,14 @@ exceptional in lacking corresponding @code{set} commands:
 @cindex version number
 @item show version
 Show what version of @value{GDBN} is running.  You should include this
-information in @value{GDBN} bug-reports.  If multiple versions of @value{GDBN} are in
-use at your site, you may occasionally want to determine which version
-of @value{GDBN} you are running; as @value{GDBN} evolves, new commands are introduced,
-and old ones may wither away.  The version number is also announced
-when you start @value{GDBN}.
+information in @value{GDBN} bug-reports.  If multiple versions of
+@value{GDBN} are in use at your site, you may need to determine which
+version of @value{GDBN} you are running; as @value{GDBN} evolves, new
+commands are introduced, and old ones may wither away.  Also, many
+system vendors ship variant versions of @value{GDBN}, and there are
+variant versions of @value{GDBN} in GNU/Linux distributions as well.
+The version number is the same as the one announced when you start
+@value{GDBN}.
 
 @kindex show copying
 @item show copying
@@ -1356,7 +1299,9 @@ Display information about permission for copying @value{GDBN}.
 
 @kindex show warranty
 @item show warranty
-Display the GNU ``NO WARRANTY'' statement.
+Display the @sc{gnu} ``NO WARRANTY'' statement, or a warranty,
+if your version of @value{GDB} comes with one.
+
 @end table
 
 @node Running
@@ -1364,25 +1309,25 @@ Display the GNU ``NO WARRANTY'' statement.
 
 When you run a program under @value{GDBN}, you must first generate
 debugging information when you compile it.
-@ifclear BARETARGET
-You may start it with its arguments, if any, in an environment of your
-choice.  You may redirect your program's input and output, debug an
-already running process, or kill a child process.
-@end ifclear
+
+You may start @value{GDBN} with its arguments, if any, in an environment
+of your choice.  If you are doing native debugging, you may redirect
+your program's input and output, debug an already running process, or
+kill a child process.
 
 @menu
 * Compilation::                 Compiling for debugging
 * Starting::                    Starting your program
-@ifclear BARETARGET
 * Arguments::                   Your program's arguments
 * Environment::                 Your program's environment
+
 * Working Directory::           Your program's working directory
 * Input/Output::                Your program's input and output
 * Attach::                      Debugging an already-running process
 * Kill Process::                Killing the child process
-* Process Information::         Additional process information
-* Threads::                    Debugging programs with multiple threads
-@end ifclear
+
+* Threads::                     Debugging programs with multiple threads
+* Processes::                   Debugging programs with multiple processes
 @end menu
 
 @node Compilation
@@ -1401,29 +1346,29 @@ Many C compilers are unable to handle the @samp{-g} and @samp{-O}
 options together.  Using those compilers, you cannot generate optimized
 executables containing debugging information.
 
-@value{NGCC}, the GNU C compiler, supports @samp{-g} with or without
-@samp{-O}, making it possible to debug optimized code.  We recommend
-that you @emph{always} use @samp{-g} whenever you compile a program.
-You may think your program is correct, but there is no sense in pushing
-your luck.
+@value{NGCC}, the @sc{gnu} C compiler, supports @samp{-g} with or
+without @samp{-O}, making it possible to debug optimized code.  We
+recommend that you @emph{always} use @samp{-g} whenever you compile a
+program.  You may think your program is correct, but there is no sense
+in pushing your luck.
 
 @cindex optimized code, debugging
 @cindex debugging optimized code
 When you debug a program compiled with @samp{-g -O}, remember that the
-optimizer is rearranging your code; the debugger will show you what is
+optimizer is rearranging your code; the debugger shows you what is
 really there.  Do not be too surprised when the execution path does not
 exactly match your source file!  An extreme example: if you define a
-variable, but never use it, @value{GDBN} will never see that
+variable, but never use it, @value{GDBN} never sees that
 variable---because the compiler optimizes it out of existence.
 
 Some things do not work as well with @samp{-g -O} as with just
 @samp{-g}, particularly on machines with instruction scheduling.  If in
 doubt, recompile with @samp{-g} alone, and if this fixes the problem,
-please report it as a bug (including a test case!).
+please report it to us as a bug (including a test case!).
 
-Older versions of the GNU C compiler permitted a variant option
+Older versions of the @sc{gnu} C compiler permitted a variant option
 @w{@samp{-gg}} for debugging information.  @value{GDBN} no longer supports this
-format; if your GNU C compiler has this option, do not use it.
+format; if your @sc{gnu} C compiler has this option, do not use it.
 
 @need 2000
 @node Starting
@@ -1432,21 +1377,17 @@ format; if your GNU C compiler has this option, do not use it.
 @cindex running
 
 @table @code
+@kindex run
 @item run
 @itemx r
-@kindex run
-Use the @code{run} command to start your program under @value{GDBN}.  You must
-first specify the program name
-@ifset VXWORKS
-(except on VxWorks)
-@end ifset
-with an argument to @value{GDBN} (@pxref{Invocation, ,Getting In and
-Out of @value{GDBN}}), or by using the @code{file} or @code{exec-file}
-command (@pxref{Files, ,Commands to specify files}).
+Use the @code{run} command to start your program under @value{GDBN}.
+You must first specify the program name (except on VxWorks) with an
+argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of
+@value{GDBN}}), or by using the @code{file} or @code{exec-file} command
+(@pxref{Files, ,Commands to specify files}).
 
 @end table
 
-@ifclear BARETARGET
 If you are running your program in an execution environment that
 supports processes, @code{run} creates an inferior process and makes
 that process run your program.  (In environments without processes,
@@ -1455,7 +1396,7 @@ that process run your program.  (In environments without processes,
 The execution of a program is affected by certain information it
 receives from its superior.  @value{GDBN} provides ways to specify this
 information, which you must do @emph{before} starting your program.  (You
-can change it after starting your program, but such changes will only affect
+can change it after starting your program, but such changes only affect
 your program the next time you start it.)  This information may be
 divided into four categories:
 
@@ -1465,14 +1406,15 @@ Specify the arguments to give your program as the arguments of the
 @code{run} command.  If a shell is available on your target, the shell
 is used to pass the arguments, so that you may use normal conventions
 (such as wildcard expansion or variable substitution) in describing
-the arguments.  In Unix systems, you can control which shell is used
-with the @code{SHELL} environment variable. @xref{Arguments, ,Your
-program's arguments}.
+the arguments.
+In Unix systems, you can control which shell is used with the
+@code{SHELL} environment variable.
+@xref{Arguments, ,Your program's arguments}.
 
 @item The @emph{environment.}
 Your program normally inherits its environment from @value{GDBN}, but you can
 use the @value{GDBN} commands @code{set environment} and @code{unset
-environment} to change parts of the environment that will be given to
+environment} to change parts of the environment that affect
 your program.  @xref{Environment, ,Your program's environment}.
 
 @item The @emph{working directory.}
@@ -1493,7 +1435,6 @@ pipes to pass the output of the program you are debugging to another
 program; if you attempt this, @value{GDBN} is likely to wind up debugging the
 wrong program.
 @end table
-@end ifclear
 
 When you issue the @code{run} command, your program begins to execute
 immediately.  @xref{Stopping, ,Stopping and continuing}, for discussion
@@ -1501,22 +1442,27 @@ of how to arrange for your program to stop.  Once your program has
 stopped, you may call functions in your program, using the @code{print}
 or @code{call} commands.  @xref{Data, ,Examining Data}.
 
-If the modification time of your symbol file has changed since the
-last time @value{GDBN} read its symbols, @value{GDBN} will discard its symbol table and
-re-read it.  When it does this, @value{GDBN} tries to retain your current
-breakpoints.
+If the modification time of your symbol file has changed since the last
+time @value{GDBN} read its symbols, @value{GDBN} discards its symbol
+table, and reads it again.  When it does this, @value{GDBN} tries to retain
+your current breakpoints.
 
-@ifclear BARETARGET
 @node Arguments
 @section Your program's arguments
 
 @cindex arguments (to your program)
 The arguments to your program can be specified by the arguments of the
-@code{run} command.  They are passed to a shell, which expands wildcard
-characters and performs redirection of I/O, and thence to your program.
-Your @code{SHELL} environment variable (if it exists) specifies what
-shell @value{GDBN} if you do not define @code{SHELL}, @value{GDBN} uses
-@code{/bin/sh}.
+@code{run} command.  
+They are passed to a shell, which expands wildcard characters and
+performs redirection of I/O, and thence to your program.  Your
+@code{SHELL} environment variable (if it exists) specifies what shell
+@value{GDBN} uses.  If you do not define @code{SHELL}, @value{GDBN} uses
+the default shell (@file{/bin/sh} on Unix).
+
+On non-Unix systems, the program is usually invoked directly by
+@value{GDBN}, which emulates I/O redirection via the appropriate system
+calls, and the wildcard characters are expanded by the startup code of
+the program, not by the shell.
 
 @code{run} with no arguments uses the same arguments used by the previous
 @code{run}, or those set by the @code{set args} command.
@@ -1525,13 +1471,13 @@ shell @value{GDBN} if you do not define @code{SHELL}, @value{GDBN} uses
 @table @code
 @item set args
 Specify the arguments to be used the next time your program is run.  If
-@code{set args} has no arguments, @code{run} will execute your program
+@code{set args} has no arguments, @code{run} executes your program
 with no arguments.  Once you have run your program with arguments,
 using @code{set args} before the next @code{run} is the only way to run
 it again without arguments.
 
-@item show args
 @kindex show args
+@item show args
 Show the arguments to give your program when it is started.
 @end table
 
@@ -1548,13 +1494,14 @@ debugging, it can be useful to try running your program with a modified
 environment without having to start @value{GDBN} over again.
 
 @table @code
-@item path @var{directory}
 @kindex path
+@item path @var{directory}
 Add @var{directory} to the front of the @code{PATH} environment variable
 (the search path for executables), for both @value{GDBN} and your program.
-You may specify several directory names, separated by @samp{:} or
-whitespace.  If @var{directory} is already in the path, it is moved to
-the front, so it will be searched sooner.
+You may specify several directory names, separated by whitespace or by a
+system-dependent separator character (@samp{:} on Unix, @samp{;} on
+MS-DOS and MS-Windows).  If @var{directory} is already in the path, it
+is moved to the front, so it is searched sooner.
 
 You can use the string @samp{$cwd} to refer to whatever is the current
 working directory at the time @value{GDBN} searches the path.  If you
@@ -1565,20 +1512,20 @@ use @samp{.} instead, it refers to the directory where you executed the
 @c 'path' is explicitly nonrepeatable, but RMS points out it is silly to
 @c document that, since repeating it would be a no-op.
 
-@item show paths
 @kindex show paths
+@item show paths
 Display the list of search paths for executables (the @code{PATH}
 environment variable).
 
-@item show environment @r{[}@var{varname}@r{]}
 @kindex show environment
+@item show environment @r{[}@var{varname}@r{]}
 Print the value of environment variable @var{varname} to be given to
 your program when it starts.  If you do not supply @var{varname},
 print the names and values of all environment variables to be given to
 your program.  You can abbreviate @code{environment} as @code{env}.
 
-@item set environment @var{varname} @r{[}=@r{]} @var{value}
 @kindex set environment
+@item set environment @var{varname} @r{[}=@var{value}@r{]}
 Set environment variable @var{varname} to @var{value}.  The value
 changes for your program only, not for @value{GDBN} itself.  @var{value} may
 be any string; the values of environment variables are just strings, and
@@ -1595,23 +1542,24 @@ set env USER = foo
 @end example
 
 @noindent
-tells a Unix program, when subsequently run, that its user is named
+tells the debugged program, when subsequently run, that its user is named
 @samp{foo}.  (The spaces around @samp{=} are used for clarity here; they
 are not actually required.)
 
-@item unset environment @var{varname}
 @kindex unset environment
+@item unset environment @var{varname}
 Remove variable @var{varname} from the environment to be passed to your
 program.  This is different from @samp{set env @var{varname} =};
 @code{unset environment} removes the variable from the environment,
 rather than assigning it an empty value.
 @end table
 
-@emph{Warning:} @value{GDBN} runs your program using the shell indicated
+@emph{Warning:} On Unix systems, @value{GDBN} runs your program using
+the shell indicated
 by your @code{SHELL} environment variable if it exists (or
 @code{/bin/sh} if not).  If your @code{SHELL} variable names a shell
 that runs an initialization file---such as @file{.cshrc} for C-shell, or
-@file{.bashrc} for BASH---any variables you set in that file will affect
+@file{.bashrc} for BASH---any variables you set in that file affect
 your program.  You may wish to move setting of environment variables to
 files that are only run when you sign on, such as @file{.login} or
 @file{.profile}.
@@ -1631,12 +1579,12 @@ that specify files for @value{GDBN} to operate on.  @xref{Files, ,Commands to
 specify files}.
 
 @table @code
-@item cd @var{directory}
 @kindex cd
+@item cd @var{directory}
 Set the @value{GDBN} working directory to @var{directory}.
 
-@item pwd
 @kindex pwd
+@item pwd
 Print the @value{GDBN} working directory.
 @end table
 
@@ -1647,14 +1595,14 @@ Print the @value{GDBN} working directory.
 @cindex i/o
 @cindex terminal
 By default, the program you run under @value{GDBN} does input and output to
-the same terminal that @value{GDBN} uses.  @value{GDBN} switches the terminal to
-its own terminal modes to interact with you, but it records the terminal
+the same terminal that @value{GDBN} uses.  @value{GDBN} switches the terminal 
+to its own terminal modes to interact with you, but it records the terminal
 modes your program was using and switches back to them when you continue
 running your program.
 
 @table @code
-@item info terminal
 @kindex info terminal
+@item info terminal
 Displays information recorded by @value{GDBN} about the terminal modes your
 program is using.
 @end table
@@ -1702,12 +1650,12 @@ for @value{GDBN} still comes from your terminal.
 @table @code
 @item attach @var{process-id}
 This command attaches to a running process---one that was started
-outside @value{GDBN}.  (@code{info files} will show your active
+outside @value{GDBN}.  (@code{info files} shows your active
 targets.)  The command takes as argument a process ID.  The usual way to
 find out the process-id of a Unix process is with the @code{ps} utility,
 or with the @samp{jobs -l} shell command.
 
-@code{attach} will not repeat if you press @key{RET} a second time after
+@code{attach} does not repeat if you press @key{RET} a second time after
 executing the command.
 @end table
 
@@ -1716,50 +1664,52 @@ which supports processes; for example, @code{attach} does not work for
 programs on bare-board targets that lack an operating system.  You must
 also have permission to send the process a signal.
 
-When using @code{attach}, you should first use the @code{file} command
-to specify the program running in the process and load its symbol table.
-@xref{Files, ,Commands to Specify Files}.
+When you use @code{attach}, the debugger finds the program running in
+the process first by looking in the current working directory, then (if
+the program is not found) by using the source file search path
+(@pxref{Source Path, ,Specifying source directories}).  You can also use
+the @code{file} command to load the program.  @xref{Files, ,Commands to
+Specify Files}.
 
 The first thing @value{GDBN} does after arranging to debug the specified
 process is to stop it.  You can examine and modify an attached process
-with all the @value{GDBN} commands that are ordinarily available when you start
-processes with @code{run}.  You can insert breakpoints; you can step and
-continue; you can modify storage.  If you would rather the process
-continue running, you may use the @code{continue} command after
+with all the @value{GDBN} commands that are ordinarily available when
+you start processes with @code{run}.  You can insert breakpoints; you
+can step and continue; you can modify storage.  If you would rather the
+process continue running, you may use the @code{continue} command after
 attaching @value{GDBN} to the process.
 
 @table @code
-@item detach
 @kindex detach
+@item detach
 When you have finished debugging the attached process, you can use the
 @code{detach} command to release it from @value{GDBN} control.  Detaching
 the process continues its execution.  After the @code{detach} command,
 that process and @value{GDBN} become completely independent once more, and you
 are ready to @code{attach} another process or start one with @code{run}.
-@code{detach} will not repeat if you press @key{RET} again after
+@code{detach} does not repeat if you press @key{RET} again after
 executing the command.
 @end table
 
-If you exit @value{GDBN} or use the @code{run} command while you have an attached
-process, you kill that process.  By default, you will be asked for
-confirmation if you try to do either of these things; you can control
-whether or not you need to confirm by using the @code{set confirm} command
-(@pxref{Messages/Warnings, ,Optional warnings and messages}).
+If you exit @value{GDBN} or use the @code{run} command while you have an
+attached process, you kill that process.  By default, @value{GDBN} asks
+for confirmation if you try to do either of these things; you can
+control whether or not you need to confirm by using the @code{set
+confirm} command (@pxref{Messages/Warnings, ,Optional warnings and
+messages}).
 
 @node Kill Process
-@c @group
 @section Killing the child process
 
 @table @code
-@item kill
 @kindex kill
+@item kill
 Kill the child process in which your program is running under @value{GDBN}.
 @end table
 
 This command is useful if you wish to debug a core dump instead of a
 running process.  @value{GDBN} ignores any core dump file while your program
 is running.
-@c @end group
 
 On some operating systems, a program cannot be executed outside @value{GDBN}
 while you have breakpoints set on it inside @value{GDBN}.  You can use the
@@ -1769,64 +1719,23 @@ outside the debugger.
 The @code{kill} command is also useful if you wish to recompile and
 relink your program, since on many systems it is impossible to modify an
 executable file while it is running in a process.  In this case, when you
-next type @code{run}, @value{GDBN} will notice that the file has changed, and
-will re-read the symbol table (while trying to preserve your current
+next type @code{run}, @value{GDBN} notices that the file has changed, and
+reads the symbol table again (while trying to preserve your current
 breakpoint settings).
 
-@node Process Information
-@section Additional process information
-
-@kindex /proc
-@cindex process image
-Some operating systems provide a facility called @samp{/proc} that can
-be used to examine the image of a running process using file-system
-subroutines.  If @value{GDBN} is configured for an operating system with this
-facility, the command @code{info proc} is available to report on several
-kinds of information about the process running your program.
-
-@table @code
-@item info proc
-@kindex info proc
-Summarize available information about the process.
-
-@item info proc mappings
-@kindex info proc mappings
-Report on the address ranges accessible in the program, with information
-on whether your program may read, write, or execute each range.
-
-@item info proc times
-@kindex info proc times
-Starting time, user CPU time, and system CPU time for your program and
-its children.
-
-@item info proc id
-@kindex info proc id
-Report on the process IDs related to your program: its own process ID,
-the ID of its parent, the process group ID, and the session ID.
-
-@item info proc status
-@kindex info proc status
-General information on the state of the process.  If the process is
-stopped, this report includes the reason for stopping, and any signal
-received.
-
-@item info proc all
-Show all the above information about the process.
-@end table
-
 @node Threads
 @section Debugging programs with multiple threads
 
 @cindex threads of execution
 @cindex multiple threads
 @cindex switching threads
-In some operating systems, a single program may have more than one
-@dfn{thread} of execution.  The precise semantics of threads differ from
-one operating system to another, but in general the threads of a single
-program are akin to multiple processes---except that they share one
-address space (that is, they can all examine and modify the same
-variables).  On the other hand, each thread has its own registers and
-execution stack, and perhaps private memory.
+In some operating systems, such as HP-UX and Solaris, a single program
+may have more than one @dfn{thread} of execution.  The precise semantics
+of threads differ from one operating system to another, but in general
+the threads of a single program are akin to multiple processes---except
+that they share one address space (that is, they can all examine and
+modify the same variables).  On the other hand, each thread has its own
+registers and execution stack, and perhaps private memory.
 
 @value{GDBN} provides these facilities for debugging multi-thread
 programs:
@@ -1835,6 +1744,8 @@ programs:
 @item automatic notification of new threads
 @item @samp{thread @var{threadno}}, a command to switch among threads
 @item @samp{info threads}, a command to inquire about existing threads
+@item @samp{thread apply [@var{threadno}] [@var{all}] @var{args}}, 
+a command to apply a command to a list of threads
 @item thread-specific breakpoints
 @end itemize
 
@@ -1898,8 +1809,8 @@ For debugging purposes, @value{GDBN} associates its own thread
 number---always a single integer---with each thread in your program.
 
 @table @code
-@item info threads
 @kindex info threads
+@item info threads
 Display a summary of all threads currently in your
 program.  @value{GDBN} displays for each thread (in this order):
 
@@ -1927,9 +1838,64 @@ For example,
     at threadtest.c:68
 @end smallexample
 
+On HP-UX systems:
+
+@cindex thread number
+@cindex thread identifier (GDB)
+For debugging purposes, @value{GDBN} associates its own thread
+number---a small integer assigned in thread-creation order---with each
+thread in your program.
+
+@kindex New @var{systag}
+@cindex thread identifier (system)
+@c FIXME-implementors!! It would be more helpful if the [New...] message
+@c included GDB's numeric thread handle, so you could just go to that
+@c thread without first checking `info threads'.
+Whenever @value{GDBN} detects a new thread in your program, it displays
+both @value{GDBN}'s thread number and the target system's identification for the thread with a message in the
+form @samp{[New @var{systag}]}.  @var{systag} is a thread identifier
+whose form varies depending on the particular system.  For example, on
+HP-UX, you see
+
+@example
+[New thread 2 (system thread 26594)]
+@end example
+
+@noindent
+when @value{GDBN} notices a new thread. 
+
+@table @code
+@kindex info threads
+@item info threads
+Display a summary of all threads currently in your
+program.  @value{GDBN} displays for each thread (in this order):
+
+@enumerate
+@item the thread number assigned by @value{GDBN}
+
+@item the target system's thread identifier (@var{systag})
+
+@item the current stack frame summary for that thread
+@end enumerate
+
+@noindent
+An asterisk @samp{*} to the left of the @value{GDBN} thread number
+indicates the current thread.
+
+For example, 
+@end table
+@c end table here to get a little more width for example
+
+@example
+(@value{GDBP}) info threads
+    * 3 system thread 26607  worker (wptr=0x7b09c318 "@@") at quicksort.c:137
+      2 system thread 26606  0x7b0030d8 in __ksleep () from /usr/lib/libc.2
+      1 system thread 27905  0x7b003498 in _brk () from /usr/lib/libc.2
+@end example
+
 @table @code
-@item thread @var{threadno}
 @kindex thread @var{threadno}
+@item thread @var{threadno}
 Make thread number @var{threadno} the current thread.  The command
 argument @var{threadno} is the internal @value{GDBN} thread number, as
 shown in the first field of the @samp{info threads} display.
@@ -1937,7 +1903,7 @@ shown in the first field of the @samp{info threads} display.
 you selected, and its current stack frame summary:
 
 @smallexample
-@c FIXME!! This example made up; find a GDB w/threads and get real one
+@c FIXME!! This example made up; find a @value{GDBN} w/threads and get real one
 (@value{GDBP}) thread 2
 [Switching to process 35 thread 23]
 0x34e5 in sigpause ()
@@ -1947,6 +1913,15 @@ you selected, and its current stack frame summary:
 As with the @samp{[New @dots{}]} message, the form of the text after
 @samp{Switching to} depends on your system's conventions for identifying
 threads.  
+
+@kindex thread apply
+@item thread apply [@var{threadno}] [@var{all}]  @var{args}
+The @code{thread apply} command allows you to apply a command to one or
+more threads.  Specify the numbers of the threads that you want affected
+with the command argument @var{threadno}.  @var{threadno} is the internal
+@value{GDBN} thread number, as shown in the first field of the @samp{info
+threads} display.  To apply a command to all threads, use 
+@code{thread apply all} @var{args}. 
 @end table
 
 @cindex automatic thread selection
@@ -1964,7 +1939,83 @@ programs with multiple threads.
 
 @xref{Set Watchpoints,,Setting watchpoints}, for information about
 watchpoints in programs with multiple threads.
-@end ifclear
+
+@node Processes
+@section Debugging programs with multiple processes
+
+@cindex fork, debugging programs which call
+@cindex multiple processes
+@cindex processes, multiple
+On most systems, @value{GDBN} has no special support for debugging
+programs which create additional processes using the @code{fork}
+function.  When a program forks, @value{GDBN} will continue to debug the
+parent process and the child process will run unimpeded.  If you have
+set a breakpoint in any code which the child then executes, the child
+will get a @code{SIGTRAP} signal which (unless it catches the signal)
+will cause it to terminate.
+
+However, if you want to debug the child process there is a workaround
+which isn't too painful.  Put a call to @code{sleep} in the code which
+the child process executes after the fork.  It may be useful to sleep
+only if a certain environment variable is set, or a certain file exists,
+so that the delay need not occur when you don't want to run @value{GDBN}
+on the child.  While the child is sleeping, use the @code{ps} program to
+get its process ID.  Then tell @value{GDBN} (a new invocation of
+@value{GDBN} if you are also debugging the parent process) to attach to
+the child process (@pxref{Attach}).  From that point on you can debug
+the child process just like any other process which you attached to.
+
+On HP-UX (11.x and later only?), @value{GDBN} provides support for
+debugging programs that create additional processes using the
+@code{fork} or @code{vfork} function.
+
+By default, when a program forks, @value{GDBN} will continue to debug
+the parent process and the child process will run unimpeded.
+
+If you want to follow the child process instead of the parent process,
+use the command @w{@code{set follow-fork-mode}}.
+
+@table @code
+@kindex set follow-fork-mode
+@item set follow-fork-mode @var{mode}
+Set the debugger response to a program call of @code{fork} or
+@code{vfork}.  A call to @code{fork} or @code{vfork} creates a new
+process.  The @var{mode} can be:
+
+@table @code
+@item parent
+The original process is debugged after a fork.  The child process runs
+unimpeded.  This is the default.
+
+@item child
+The new process is debugged after a fork.  The parent process runs
+unimpeded.
+
+@item ask
+The debugger will ask for one of the above choices.
+@end table
+
+@item show follow-fork-mode
+Display the current debugger response to a @code{fork} or @code{vfork} call.
+@end table
+
+If you ask to debug a child process and a @code{vfork} is followed by an
+@code{exec}, @value{GDBN} executes the new target up to the first
+breakpoint in the new target.  If you have a breakpoint set on
+@code{main} in your original program, the breakpoint will also be set on
+the child process's @code{main}.
+
+When a child process is spawned by @code{vfork}, you cannot debug the
+child or parent until an @code{exec} call completes.
+
+If you issue a @code{run} command to @value{GDBN} after an @code{exec}
+call executes, the new target restarts.  To restart the parent process,
+use the @code{file} command with the parent executable name as its
+argument.
+
+You can use the @code{catch} command to make @value{GDBN} stop whenever
+a @code{fork}, @code{vfork}, or @code{exec} call is made.  @xref{Set
+Catchpoints, ,Setting catchpoints}.
 
 @node Stopping
 @chapter Stopping and Continuing
@@ -1973,72 +2024,46 @@ The principal purposes of using a debugger are so that you can stop your
 program before it terminates; or so that, if your program runs into
 trouble, you can investigate and find out why.
 
-Inside @value{GDBN}, your program may stop for any of several reasons, such
-as
-@ifclear BARETARGET
-a signal,
-@end ifclear
-a breakpoint, or reaching a new line after a @value{GDBN}
-command such as @code{step}.  You may then examine and change
-variables, set new breakpoints or remove old ones, and then continue
-execution.  Usually, the messages shown by @value{GDBN} provide ample
-explanation of the status of your program---but you can also explicitly
-request this information at any time.
+Inside @value{GDBN}, your program may stop for any of several reasons,
+such as a signal, a breakpoint, or reaching a new line after a
+@value{GDBN} command such as @code{step}.  You may then examine and
+change variables, set new breakpoints or remove old ones, and then
+continue execution.  Usually, the messages shown by @value{GDBN} provide
+ample explanation of the status of your program---but you can also
+explicitly request this information at any time.
 
 @table @code
-@item info program
 @kindex info program
+@item info program
 Display information about the status of your program: whether it is
-running or not,
-@ifclear BARETARGET
-what process it is,
-@end ifclear
-and why it stopped.
+running or not, what process it is, and why it stopped.
 @end table
 
 @menu
-@ifclear CONLY
-* Breakpoints::                 Breakpoints, watchpoints, and exceptions
-@end ifclear
-@ifset CONLY
-* Breakpoints::                 Breakpoints and watchpoints
-@end ifset
-@c Remnant makeinfo bug requires blank line after *successful* end-if in menu:
-
+* Breakpoints::                 Breakpoints, watchpoints, and catchpoints
 * Continuing and Stepping::     Resuming execution
-@ifset POSIX
 * Signals::                     Signals
-@end ifset
-@ifclear BARETARGET
-* Thread Stops::               Stopping and starting multi-thread programs
-@end ifclear
+* Thread Stops::                Stopping and starting multi-thread programs
 @end menu
 
-@c makeinfo node-defaulting requires adjacency of @node and sectioning cmds
-@c ...hence distribute @node Breakpoints over two possible @if expansions.
-@c
-@ifclear CONLY
-@node Breakpoints
-@section Breakpoints, watchpoints, and exceptions
-@end ifclear
-@ifset CONLY
 @node Breakpoints
-@section Breakpoints and watchpoints
-@end ifset
+@section Breakpoints, watchpoints, and catchpoints
 
 @cindex breakpoints
 A @dfn{breakpoint} makes your program stop whenever a certain point in
-the program is reached.  For each breakpoint, you can add various
-conditions to control in finer detail whether your program will stop.
-You can set breakpoints with the @code{break} command and its variants
-(@pxref{Set Breaks, ,Setting breakpoints}), to specify the place where
-your program should stop by line number, function name or exact address
-in the program.  
-@ifclear CONLY
-In languages with exception handling (such as GNU C++), you can also set
-breakpoints where an exception is raised (@pxref{Exception Handling,,
-Breakpoints and exceptions}).
-@end ifclear
+the program is reached.  For each breakpoint, you can add conditions to
+control in finer detail whether your program stops.  You can set
+breakpoints with the @code{break} command and its variants (@pxref{Set
+Breaks, ,Setting breakpoints}), to specify the place where your program
+should stop by line number, function name or exact address in the
+program.
+
+In HP-UX, SunOS 4.x, SVR4, and Alpha OSF/1 configurations, you can set
+breakpoints in shared libraries before the executable is run.  There is
+a minor limitation on HP-UX systems: you must wait until the executable
+is run in order to set breakpoints in shared library routines that are
+not called directly by the program (for example, routines that are
+arguments in a @code{pthread_create} call).
 
 @cindex watchpoints
 @cindex memory tracing
@@ -2055,32 +2080,36 @@ You can arrange to have values from your program displayed automatically
 whenever @value{GDBN} stops at a breakpoint.  @xref{Auto Display,,
 Automatic display}.
 
+@cindex catchpoints
+@cindex breakpoint on events
+A @dfn{catchpoint} is another special breakpoint that stops your program
+when a certain kind of event occurs, such as the throwing of a C++
+exception or the loading of a library.  As with watchpoints, you use a
+different command to set a catchpoint (@pxref{Set Catchpoints, ,Setting
+catchpoints}), but aside from that, you can manage a catchpoint like any
+other breakpoint.  (To stop when your program receives a signal, use the
+@code{handle} command; see @ref{Signals, ,Signals}.)
+
 @cindex breakpoint numbers
 @cindex numbers for breakpoints
-@value{GDBN} assigns a number to each breakpoint or watchpoint when you
-create it; these numbers are successive integers starting with one.  In
-many of the commands for controlling various features of breakpoints you
-use the breakpoint number to say which breakpoint you want to change.
-Each breakpoint may be @dfn{enabled} or @dfn{disabled}; if disabled, it has
-no effect on your program until you enable it again.
+@value{GDBN} assigns a number to each breakpoint, watchpoint, or
+catchpoint when you create it; these numbers are successive integers
+starting with one.  In many of the commands for controlling various
+features of breakpoints you use the breakpoint number to say which
+breakpoint you want to change.  Each breakpoint may be @dfn{enabled} or
+@dfn{disabled}; if disabled, it has no effect on your program until you
+enable it again.
 
 @menu
 * Set Breaks::                  Setting breakpoints
 * Set Watchpoints::             Setting watchpoints
-@ifclear CONLY
-* Exception Handling::          Breakpoints and exceptions
-@end ifclear
-
+* Set Catchpoints::             Setting catchpoints
 * Delete Breaks::               Deleting breakpoints
 * Disabling::                   Disabling breakpoints
 * Conditions::                  Break conditions
 * Break Commands::              Breakpoint command lists
-@ifclear CONLY
 * Breakpoint Menus::            Breakpoint menus
-@end ifclear
-@ifclear BARETARGET
 * Error in Breakpoints::        ``Cannot insert breakpoints''
-@end ifclear
 @end menu
 
 @node Set Breaks
@@ -2097,7 +2126,7 @@ no effect on your program until you enable it again.
 @cindex latest breakpoint
 Breakpoints are set with the @code{break} command (abbreviated
 @code{b}).  The debugger convenience variable @samp{$bpnum} records the 
-number of the beakpoint you've set most recently; see @ref{Convenience
+number of the breakpoints you've set most recently; see @ref{Convenience
 Vars,, Convenience variables}, for a discussion of what you can do with
 convenience variables.
 
@@ -2106,21 +2135,20 @@ You have several ways to say where the breakpoint should go.
 @table @code
 @item break @var{function}
 Set a breakpoint at entry to function @var{function}.  
-@ifclear CONLY
 When using source languages that permit overloading of symbols, such as
 C++, @var{function} may refer to more than one possible place to break.
 @xref{Breakpoint Menus,,Breakpoint menus}, for a discussion of that situation.
-@end ifclear
 
 @item break +@var{offset}
 @itemx break -@var{offset}
 Set a breakpoint some number of lines forward or back from the position
-at which execution stopped in the currently selected frame.
+at which execution stopped in the currently selected @dfn{stack frame}.
+(@xref{Frames, ,Frames}, for a description of stack frames.)
 
 @item break @var{linenum}
 Set a breakpoint at line @var{linenum} in the current source file.
-That file is the last file whose source text was printed.  This
-breakpoint will stop your program just before it executes any of the
+The current source file is the last file whose source text was printed.
+The breakpoint will stop your program just before it executes any of the
 code on that line.
 
 @item break @var{filename}:@var{linenum}
@@ -2141,11 +2169,11 @@ information or source files.
 When called without any arguments, @code{break} sets a breakpoint at
 the next instruction to be executed in the selected stack frame
 (@pxref{Stack, ,Examining the Stack}).  In any selected frame but the
-innermost, this will cause your program to stop as soon as control
+innermost, this makes your program stop as soon as control
 returns to that frame.  This is similar to the effect of a
 @code{finish} command in the frame inside the selected frame---except
 that @code{finish} does not leave an active breakpoint.  If you use
-@code{break} without an argument in the innermost frame, @value{GDBN} will stop
+@code{break} without an argument in the innermost frame, @value{GDBN} stops
 the next time it reaches the current location; this may be useful
 inside loops.
 
@@ -2163,49 +2191,81 @@ value is nonzero---that is, if @var{cond} evaluates as true.
 above (or no argument) specifying where to break.  @xref{Conditions,
 ,Break conditions}, for more information on breakpoint conditions.
 
-@item tbreak @var{args}
 @kindex tbreak
+@item tbreak @var{args}
 Set a breakpoint enabled only for one stop.  @var{args} are the
 same as for the @code{break} command, and the breakpoint is set in the same
-way, but the breakpoint is automatically disabled after the first time your
+way, but the breakpoint is automatically deleted after the first time your
 program stops there.  @xref{Disabling, ,Disabling breakpoints}.
 
-@item rbreak @var{regex}
+@kindex hbreak
+@item hbreak @var{args}
+Set a hardware-assisted breakpoint.  @var{args} are the same as for the
+@code{break} command and the breakpoint is set in the same way, but the
+breakpoint requires hardware support and some target hardware may not
+have this support.  The main purpose of this is EPROM/ROM code
+debugging, so you can set a breakpoint at an instruction without
+changing the instruction.  This can be used with the new trap-generation
+provided by SPARClite DSU and some x86-based targets.  These targets
+will generate traps when a program accesses some data or instruction
+address that is assigned to the debug registers.  However the hardware
+breakpoint registers can take a limited number of breakpoints.  For
+example, on the DSU, only two data breakpoints can be set at a time, and
+@value{GDBN} will reject this command if more than two are used.  Delete
+or disable unused hardware breakpoints before setting new ones
+(@pxref{Disabling, ,Disabling}).  @xref{Conditions, ,Break conditions}.
+
+@kindex thbreak
+@item thbreak @var{args}
+Set a hardware-assisted breakpoint enabled only for one stop.  @var{args}
+are the same as for the @code{hbreak} command and the breakpoint is set in
+the same way.  However, like the @code{tbreak} command,  
+the breakpoint is automatically deleted after the
+first time your program stops there.  Also, like the @code{hbreak}
+command, the breakpoint requires hardware support and some target hardware 
+may not have this support.  @xref{Disabling, ,Disabling breakpoints}.  
+See also @ref{Conditions, ,Break conditions}.
+
 @kindex rbreak
 @cindex regular expression
-@c FIXME what kind of regexp?
+@item rbreak @var{regex}
 Set breakpoints on all functions matching the regular expression
-@var{regex}.  This command
-sets an unconditional breakpoint on all matches, printing a list of all
-breakpoints it set. Once these breakpoints are set, they are treated
-just like the breakpoints set with the @code{break} command.  They can
-be deleted, disabled, made conditional, etc., in the standard ways.
+@var{regex}.  This command sets an unconditional breakpoint on all
+matches, printing a list of all breakpoints it set.  Once these
+breakpoints are set, they are treated just like the breakpoints set with
+the @code{break} command.  You can delete them, disable them, or make
+them conditional the same way as any other breakpoint.
+
+The syntax of the regular expression is the standard one used with tools
+like @file{grep}.  Note that this is different from the syntax used by
+shells, so for instance @code{foo*} matches all functions that include
+an @code{fo} followed by zero or more @code{o}s.  There is an implicit
+@code{.*} leading and trailing the regular expression you supply, so to
+match only functions that begin with @code{foo}, use @code{^foo}.
 
-@ifclear CONLY
 When debugging C++ programs, @code{rbreak} is useful for setting
 breakpoints on overloaded functions that are not members of any special
 classes.
-@end ifclear
 
 @kindex info breakpoints
 @cindex @code{$_} and @code{info breakpoints}
 @item info breakpoints @r{[}@var{n}@r{]}
 @itemx info break @r{[}@var{n}@r{]}
 @itemx info watchpoints @r{[}@var{n}@r{]}
-Print a table of all breakpoints and watchpoints set and not
-deleted, with the following columns for each breakpoint:
+Print a table of all breakpoints, watchpoints, and catchpoints set and
+not deleted, with the following columns for each breakpoint:
 
 @table @emph
 @item Breakpoint Numbers
 @item Type
-Breakpoint or watchpoint.
+Breakpoint, watchpoint, or catchpoint.
 @item Disposition
 Whether the breakpoint is marked to be disabled or deleted when hit.
 @item Enabled or Disabled
 Enabled breakpoints are marked with @samp{y}.  @samp{n} marks breakpoints
 that are not enabled.
 @item Address
-Where the breakpoint is in your program, as a memory address
+Where the breakpoint is in your program, as a memory address.
 @item What
 Where the breakpoint is in the source for your program, as a file and
 line number.
@@ -2222,6 +2282,14 @@ number @var{n} as argument lists only that breakpoint.  The
 convenience variable @code{$_} and the default examining-address for
 the @code{x} command are set to the address of the last breakpoint
 listed (@pxref{Memory, ,Examining memory}).  
+
+@noindent
+@code{info break} displays a count of the number of times the breakpoint
+has been hit.  This is especially useful in conjunction with the
+@code{ignore} command.  You can ignore a large number of breakpoint
+hits, look at the breakpoint info to see how many times the breakpoint
+was hit, and then run again, ignoring one less than that number.  This
+will get you quickly to the last hit of that breakpoint.
 @end table
 
 @value{GDBN} allows you to set any number of breakpoints at the same place in
@@ -2267,6 +2335,10 @@ Temporary internal breakpoint used by the @value{GDBN} @code{until} command.
 
 @item finish
 Temporary internal breakpoint used by the @value{GDBN} @code{finish} command.
+
+@item shlib events
+Shared library events.
+
 @end table
 
 @end table
@@ -2274,80 +2346,222 @@ Temporary internal breakpoint used by the @value{GDBN} @code{finish} command.
 
 @node Set Watchpoints
 @subsection Setting watchpoints
-@cindex setting watchpoints
 
+@cindex setting watchpoints
+@cindex software watchpoints
+@cindex hardware watchpoints
 You can use a watchpoint to stop execution whenever the value of an
-expression changes, without having to predict a particular place
-where this may happen.
-
-Watchpoints currently execute two orders of magnitude more slowly than
-other breakpoints, but this can be well worth it to catch errors where
-you have no clue what part of your program is the culprit.  Some
-processors provide special hardware to support watchpoint evaluation; future
-releases of @value{GDBN} will use such hardware if it is available.
+expression changes, without having to predict a particular place where
+this may happen.
+
+Depending on your system, watchpoints may be implemented in software or
+hardware.  @value{GDBN} does software watchpointing by single-stepping your
+program and testing the variable's value each time, which is hundreds of
+times slower than normal execution.  (But this may still be worth it, to
+catch errors where you have no clue what part of your program is the
+culprit.)
+
+On some systems, such as HP-UX, Linux and some other x86-based targets,
+@value{GDBN} includes support for
+hardware watchpoints, which do not slow down the running of your
+program.
 
 @table @code
 @kindex watch
 @item watch @var{expr}
-Set a watchpoint for an expression.
+Set a watchpoint for an expression.  @value{GDBN} will break when @var{expr}
+is written into by the program and its value changes.
+
+@kindex rwatch
+@item rwatch @var{expr}
+Set a watchpoint that will break when watch @var{expr} is read by the program.
+
+@kindex awatch
+@item awatch @var{expr}
+Set a watchpoint that will break when @var{expr} is either read or written into
+by the program.
 
 @kindex info watchpoints
 @item info watchpoints
-This command prints a list of watchpoints and breakpoints; it is the
-same as @code{info break}.
+This command prints a list of watchpoints, breakpoints, and catchpoints;
+it is the same as @code{info break}.
 @end table
 
-@ifclear BARETARGET
-@quotation
-@cindex watchpoints and threads
+@value{GDBN} sets a @dfn{hardware watchpoint} if possible.  Hardware
+watchpoints execute very quickly, and the debugger reports a change in
+value at the exact instruction where the change occurs.  If @value{GDBN}
+cannot set a hardware watchpoint, it sets a software watchpoint, which
+executes more slowly and reports the change in value at the next
+statement, not the instruction, after the change occurs.
+
+When you issue the @code{watch} command, @value{GDBN} reports
+
+@example
+Hardware watchpoint @var{num}: @var{expr}
+@end example
+
+@noindent
+if it was able to set a hardware watchpoint.
+
+Currently, the @code{awatch} and @code{rwatch} commands can only set
+hardware watchpoints, because accesses to data that don't change the
+value of the watched expression cannot be detected without examining
+every instruction as it is being executed, and @value{GDBN} does not do
+that currently.  If @value{GDBN} finds that it is unable to set a
+hardware breakpoint with the @code{awatch} or @code{rwatch} command, it
+will print a message like this:
+
+@smallexample
+Expression cannot be implemented with read/access watchpoint.
+@end smallexample
+
+Sometimes, @value{GDBN} cannot set a hardware watchpoint because the
+data type of the watched expression is wider than what a hardware
+watchpoint on the target machine can handle.  For example, some systems
+can only watch regions that are up to 4 bytes wide; on such systems you
+cannot set hardware watchpoints for an expression that yields a
+double-precision floating-point number (which is typically 8 bytes
+wide).  As a work-around, it might be possible to break the large region
+into a series of smaller ones and watch them with separate watchpoints.
+
+If you set too many hardware watchpoints, @value{GDBN} might be unable
+to insert all of them when you resume the execution of your program.
+Since the precise number of active watchpoints is unknown until such
+time as the program is about to be resumed, @value{GDBN} might not be
+able to warn you about this when you set the watchpoints, and the
+warning will be printed only when the program is resumed:
+
+@smallexample
+Hardware watchpoint @var{num}: Could not insert watchpoint
+@end smallexample
+
+@noindent
+If this happens, delete or disable some of the watchpoints.
+
+The SPARClite DSU will generate traps when a program accesses some data
+or instruction address that is assigned to the debug registers.  For the
+data addresses, DSU facilitates the @code{watch} command.  However the
+hardware breakpoint registers can only take two data watchpoints, and
+both watchpoints must be the same kind.  For example, you can set two
+watchpoints with @code{watch} commands, two with @code{rwatch} commands,
+@strong{or} two with @code{awatch} commands, but you cannot set one
+watchpoint with one command and the other with a different command.
+@value{GDBN} will reject the command if you try to mix watchpoints.
+Delete or disable unused watchpoint commands before setting new ones.
+
+If you call a function interactively using @code{print} or @code{call},
+any watchpoints you have set will be inactive until @value{GDBN} reaches another
+kind of breakpoint or the call completes.
+
+@value{GDBN} automatically deletes watchpoints that watch local
+(automatic) variables, or expressions that involve such variables, when
+they go out of scope, that is, when the execution leaves the block in
+which these variables were defined.  In particular, when the program
+being debugged terminates, @emph{all} local variables go out of scope,
+and so only watchpoints that watch global variables remain set.  If you
+rerun the program, you will need to set all such watchpoints again.  One
+way of doing that would be to set a code breakpoint at the entry to the
+@code{main} function and when it breaks, set all the watchpoints.
+
+@quotation
+@cindex watchpoints and threads
 @cindex threads and watchpoints
-@emph{Warning:} in multi-thread programs, watchpoints have only limited
+@emph{Warning:} In multi-thread programs, watchpoints have only limited
 usefulness.  With the current watchpoint implementation, @value{GDBN}
 can only watch the value of an expression @emph{in a single thread}.  If
 you are confident that the expression can only change due to the current
-thread's activity (and if you are also confident that the same thread
-will remain current), then you can use watchpoints as usual.  However,
+thread's activity (and if you are also confident that no other thread
+can become current), then you can use watchpoints as usual.  However,
 @value{GDBN} may not notice when a non-current thread's activity changes
 the expression.
+
+@c FIXME: this is almost identical to the previous paragraph.
+@emph{HP-UX Warning:} In multi-thread programs, software watchpoints
+have only limited usefulness.  If @value{GDBN} creates a software
+watchpoint, it can only watch the value of an expression @emph{in a
+single thread}.  If you are confident that the expression can only
+change due to the current thread's activity (and if you are also
+confident that no other thread can become current), then you can use
+software watchpoints as usual.  However, @value{GDBN} may not notice
+when a non-current thread's activity changes the expression.  (Hardware
+watchpoints, in contrast, watch an expression in all threads.)
 @end quotation
-@end ifclear
 
-@ifclear CONLY
-@node Exception Handling
-@subsection Breakpoints and exceptions
+@node Set Catchpoints
+@subsection Setting catchpoints
+@cindex catchpoints, setting
 @cindex exception handlers
+@cindex event handling
 
-Some languages, such as GNU C++, implement exception handling.  You can
-use @value{GDBN} to examine what caused your program to raise an exception,
-and to list the exceptions your program is prepared to handle at a
-given point in time.
+You can use @dfn{catchpoints} to cause the debugger to stop for certain
+kinds of program events, such as C++ exceptions or the loading of a
+shared library.  Use the @code{catch} command to set a catchpoint.
 
 @table @code
-@item catch @var{exceptions}
 @kindex catch
-You can set breakpoints at active exception handlers by using the
-@code{catch} command.  @var{exceptions} is a list of names of exceptions
-to catch.
+@item catch @var{event}
+Stop when @var{event} occurs.  @var{event} can be any of the following:
+@table @code
+@item throw
+@kindex catch throw
+The throwing of a C++ exception.
+
+@item catch
+@kindex catch catch
+The catching of a C++ exception.
+
+@item exec
+@kindex catch exec
+A call to @code{exec}.  This is currently only available for HP-UX.
+
+@item fork
+@kindex catch fork
+A call to @code{fork}.  This is currently only available for HP-UX.
+
+@item vfork
+@kindex catch vfork
+A call to @code{vfork}.  This is currently only available for HP-UX.
+
+@item load
+@itemx load @var{libname}
+@kindex catch load
+The dynamic loading of any shared library, or the loading of the library
+@var{libname}.  This is currently only available for HP-UX.
+
+@item unload
+@itemx unload @var{libname}
+@kindex catch unload
+The unloading of any dynamically loaded shared library, or the unloading
+of the library @var{libname}.  This is currently only available for HP-UX.
+@end table
+
+@item tcatch @var{event}
+Set a catchpoint that is enabled only for one stop.  The catchpoint is
+automatically deleted after the first time the event is caught.
+
 @end table
 
-You can use @code{info catch} to list active exception handlers.
-@xref{Frame Info, ,Information about a frame}.
+Use the @code{info break} command to list the current catchpoints.
 
-There are currently some limitations to exception handling in @value{GDBN}.
-These will be corrected in a future release.
+There are currently some limitations to C++ exception handling
+(@code{catch throw} and @code{catch catch}) in @value{GDBN}:
 
 @itemize @bullet
 @item
 If you call a function interactively, @value{GDBN} normally returns
 control to you when the function has finished executing.  If the call
 raises an exception, however, the call may bypass the mechanism that
-returns control to you and cause your program to simply continue
-running until it hits a breakpoint, catches a signal that @value{GDBN} is
-listening for, or exits.
+returns control to you and cause your program either to abort or to
+simply continue running until it hits a breakpoint, catches a signal
+that @value{GDBN} is listening for, or exits.  This is the case even if
+you set a catchpoint for the exception; catchpoints on exceptions are
+disabled within interactive calls.
+
 @item
 You cannot raise an exception interactively.
+
 @item
-You cannot interactively install an exception handler.
+You cannot install an exception handler interactively.
 @end itemize
 
 @cindex raise exceptions
@@ -2359,14 +2573,14 @@ breakpoint in an exception handler instead, it may not be easy to find
 out where the exception was raised.
 
 To stop just before an exception handler is called, you need some
-knowledge of the implementation.  In the case of GNU C++, exceptions are
+knowledge of the implementation.  In the case of @sc{gnu} C++, exceptions are
 raised by calling a library function named @code{__raise_exception}
 which has the following ANSI C interface:
 
 @example
     /* @var{addr} is where the exception identifier is stored.
-       ID is the exception identifier.  */
-    void __raise_exception (void **@var{addr}, void *@var{id});
+       @var{id} is the exception identifier.  */
+    void __raise_exception (void **addr, void *id);
 @end example
 
 @noindent
@@ -2379,30 +2593,30 @@ that depends on the value of @var{id}, you can stop your program when
 a specific exception is raised.  You can use multiple conditional
 breakpoints to stop your program when any of a number of exceptions are
 raised.
-@end ifclear
+
 
 @node Delete Breaks
 @subsection Deleting breakpoints
 
-@cindex clearing breakpoints, watchpoints
-@cindex deleting breakpoints, watchpoints
-It is often necessary to eliminate a breakpoint or watchpoint once it
-has done its job and you no longer want your program to stop there.  This
-is called @dfn{deleting} the breakpoint.  A breakpoint that has been
-deleted no longer exists; it is forgotten.
+@cindex clearing breakpoints, watchpoints, catchpoints
+@cindex deleting breakpoints, watchpoints, catchpoints
+It is often necessary to eliminate a breakpoint, watchpoint, or
+catchpoint once it has done its job and you no longer want your program
+to stop there.  This is called @dfn{deleting} the breakpoint.  A
+breakpoint that has been deleted no longer exists; it is forgotten.
 
 With the @code{clear} command you can delete breakpoints according to
 where they are in your program.  With the @code{delete} command you can
-delete individual breakpoints or watchpoints by specifying their
-breakpoint numbers.
+delete individual breakpoints, watchpoints, or catchpoints by specifying
+their breakpoint numbers.
 
 It is not necessary to delete a breakpoint to proceed past it.  @value{GDBN}
 automatically ignores breakpoints on the first instruction to be executed
 when you continue execution without changing the execution address.
 
 @table @code
-@item clear
 @kindex clear
+@item clear
 Delete any breakpoints at the next instruction to be executed in the
 selected stack frame (@pxref{Selection, ,Selecting a frame}).  When
 the innermost frame is selected, this is a good way to delete a
@@ -2416,84 +2630,86 @@ Delete any breakpoints set at entry to the function @var{function}.
 @itemx clear @var{filename}:@var{linenum}
 Delete any breakpoints set at or within the code of the specified line.
 
-@item delete @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
 @cindex delete breakpoints
 @kindex delete
 @kindex d
-Delete the breakpoints or watchpoints of the numbers specified as
-arguments.  If no argument is specified, delete all breakpoints (@value{GDBN}
-asks confirmation, unless you have @code{set confirm off}).  You
-can abbreviate this command as @code{d}.
+@item delete @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
+Delete the breakpoints, watchpoints, or catchpoints of the numbers
+specified as arguments.  If no argument is specified, delete all
+breakpoints (@value{GDBN} asks confirmation, unless you have @code{set
+confirm off}).  You can abbreviate this command as @code{d}.
 @end table
 
 @node Disabling
 @subsection Disabling breakpoints
 
-@cindex disabled breakpoints
-@cindex enabled breakpoints
-Rather than deleting a breakpoint or watchpoint, you might prefer to
-@dfn{disable} it.  This makes the breakpoint inoperative as if it had
-been deleted, but remembers the information on the breakpoint so that
-you can @dfn{enable} it again later.
+@kindex disable breakpoints
+@kindex enable breakpoints
+Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
+prefer to @dfn{disable} it.  This makes the breakpoint inoperative as if
+it had been deleted, but remembers the information on the breakpoint so
+that you can @dfn{enable} it again later.
 
-You disable and enable breakpoints and watchpoints with the
-@code{enable} and @code{disable} commands, optionally specifying one or
-more breakpoint numbers as arguments.  Use @code{info break} or
-@code{info watch} to print a list of breakpoints or watchpoints if you
-do not know which numbers to use.
+You disable and enable breakpoints, watchpoints, and catchpoints with
+the @code{enable} and @code{disable} commands, optionally specifying one
+or more breakpoint numbers as arguments.  Use @code{info break} or
+@code{info watch} to print a list of breakpoints, watchpoints, and
+catchpoints if you do not know which numbers to use.
 
-A breakpoint or watchpoint can have any of four different states of
-enablement:
+A breakpoint, watchpoint, or catchpoint can have any of four different
+states of enablement:
 
 @itemize @bullet
 @item
-Enabled.  The breakpoint will stop your program.  A breakpoint set
+Enabled.  The breakpoint stops your program.  A breakpoint set
 with the @code{break} command starts out in this state.
 @item
 Disabled.  The breakpoint has no effect on your program.
 @item
-Enabled once.  The breakpoint will stop your program, but
-when it does so it will become disabled.  A breakpoint set
-with the @code{tbreak} command starts out in this state.
+Enabled once.  The breakpoint stops your program, but then becomes
+disabled.
 @item
-Enabled for deletion.  The breakpoint will stop your program, but
-immediately after it does so it will be deleted permanently.
+Enabled for deletion.  The breakpoint stops your program, but
+immediately after it does so it is deleted permanently.  A breakpoint
+set with the @code{tbreak} command starts out in this state.
 @end itemize
 
-You can use the following commands to enable or disable breakpoints and
-watchpoints:
+You can use the following commands to enable or disable breakpoints,
+watchpoints, and catchpoints:
 
 @table @code
-@item disable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
 @kindex disable breakpoints
 @kindex disable
 @kindex dis
+@item disable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
 Disable the specified breakpoints---or all breakpoints, if none are
 listed.  A disabled breakpoint has no effect but is not forgotten.  All
 options such as ignore-counts, conditions and commands are remembered in
 case the breakpoint is enabled again later.  You may abbreviate
 @code{disable} as @code{dis}.
 
-@item enable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
 @kindex enable breakpoints
 @kindex enable
+@item enable @r{[}breakpoints@r{]} @r{[}@var{bnums}@dots{}@r{]}
 Enable the specified breakpoints (or all defined breakpoints).  They
 become effective once again in stopping your program.
 
 @item enable @r{[}breakpoints@r{]} once @var{bnums}@dots{}
-Enable the specified breakpoints temporarily.  Each will be disabled
-again the next time it stops your program.
+Enable the specified breakpoints temporarily.  @value{GDBN} disables any
+of these breakpoints immediately after stopping your program.
 
 @item enable @r{[}breakpoints@r{]} delete @var{bnums}@dots{}
-Enable the specified breakpoints to work once and then die.  Each of
-the breakpoints will be deleted the next time it stops your program.
+Enable the specified breakpoints to work once, then die.  @value{GDBN}
+deletes any of these breakpoints as soon as your program stops there.
 @end table
 
-Save for a breakpoint set with @code{tbreak} (@pxref{Set Breaks,
+@c FIXME: I think the following ``Except for [...] @code{tbreak}'' is
+@c confusing: tbreak is also initially enabled.
+Except for a breakpoint set with @code{tbreak} (@pxref{Set Breaks,
 ,Setting breakpoints}), breakpoints that you set are initially enabled;
 subsequently, they become disabled or enabled only when you use one of
 the commands above.  (The command @code{until} can set and delete a
-breakpoint of its own, but it will not change the state of your other
+breakpoint of its own, but it does not change the state of your other
 breakpoints; see @ref{Continuing and Stepping, ,Continuing and
 stepping}.)
 
@@ -2530,31 +2746,43 @@ format special data structures. The effects are completely predictable
 unless there is another enabled breakpoint at the same address.  (In
 that case, @value{GDBN} might see the other breakpoint first and stop your
 program without checking the condition of this one.)  Note that
-breakpoint commands are usually more convenient and flexible for the
+breakpoint commands are usually more convenient and flexible than break
+conditions for the
 purpose of performing side effects when a breakpoint is reached
 (@pxref{Break Commands, ,Breakpoint command lists}).
 
 Break conditions can be specified when a breakpoint is set, by using
 @samp{if} in the arguments to the @code{break} command.  @xref{Set
 Breaks, ,Setting breakpoints}.  They can also be changed at any time
-with the @code{condition} command.  The @code{watch} command does not
-recognize the @code{if} keyword; @code{condition} is the only way to
-impose a further condition on a watchpoint.
+with the @code{condition} command.
+
+You can also use the @code{if} keyword with the @code{watch} command.
+The @code{catch} command does not recognize the @code{if} keyword;
+@code{condition} is the only way to impose a further condition on a
+catchpoint.
 
 @table @code
-@item condition @var{bnum} @var{expression}
 @kindex condition
-Specify @var{expression} as the break condition for breakpoint or
-watchpoint number @var{bnum}.  From now on, this breakpoint will stop
-your program only if the value of @var{expression} is true (nonzero, in
-C).  When you use @code{condition}, @value{GDBN} checks @var{expression}
-immediately for syntactic correctness, and to determine whether symbols
-in it have referents in the context of your breakpoint.
-@c FIXME so what does GDB do if there is no referent?  Moreover, what
-@c about watchpoints?
+@item condition @var{bnum} @var{expression}
+Specify @var{expression} as the break condition for breakpoint,
+watchpoint, or catchpoint number @var{bnum}.  After you set a condition,
+breakpoint @var{bnum} stops your program only if the value of
+@var{expression} is true (nonzero, in C).  When you use
+@code{condition}, @value{GDBN} checks @var{expression} immediately for
+syntactic correctness, and to determine whether symbols in it have
+referents in the context of your breakpoint.  If @var{expression} uses
+symbols not referenced in the context of the breakpoint, @value{GDBN}
+prints an error message:
+
+@example
+No symbol "foo" in current context.
+@end example
+
+@noindent
 @value{GDBN} does
 not actually evaluate @var{expression} at the time the @code{condition}
-command is given, however.  @xref{Expressions, ,Expressions}.
+command (or a command that sets a breakpoint with a condition, like
+@code{break if @dots{}}) is given, however.  @xref{Expressions, ,Expressions}.
 
 @item condition @var{bnum}
 Remove the condition from breakpoint number @var{bnum}.  It becomes
@@ -2570,15 +2798,15 @@ is an integer.  Most of the time, the ignore count is zero, and
 therefore has no effect.  But if your program reaches a breakpoint whose
 ignore count is positive, then instead of stopping, it just decrements
 the ignore count by one and continues.  As a result, if the ignore count
-value is @var{n}, the breakpoint will not stop the next @var{n} times it
-is reached.
+value is @var{n}, the breakpoint does not stop the next @var{n} times
+your program reaches it.
 
 @table @code
-@item ignore @var{bnum} @var{count}
 @kindex ignore
+@item ignore @var{bnum} @var{count}
 Set the ignore count of breakpoint number @var{bnum} to @var{count}.
 The next @var{count} times the breakpoint is reached, your program's
-execution will not stop; other than to decrement the ignore count, @value{GDBN}
+execution does not stop; other than to decrement the ignore count, @value{GDBN}
 takes no action.
 
 To make the breakpoint stop the next time it is reached, specify
@@ -2589,9 +2817,9 @@ breakpoint, you can specify an ignore count directly as an argument to
 @code{continue}, rather than using @code{ignore}.  @xref{Continuing and
 Stepping,,Continuing and stepping}.
 
-If a breakpoint has a positive ignore count and a condition, the condition
-is not checked.  Once the ignore count reaches zero, the condition will
-be checked.
+If a breakpoint has a positive ignore count and a condition, the
+condition is not checked.  Once the ignore count reaches zero,
+@value{GDBN} resumes checking the condition.
 
 You could achieve the effect of the ignore count with a condition such
 as @w{@samp{$foo-- <= 0}} using a debugger convenience variable that
@@ -2599,21 +2827,24 @@ is decremented each time.  @xref{Convenience Vars, ,Convenience
 variables}.
 @end table
 
+Ignore counts apply to breakpoints, watchpoints, and catchpoints.
+
+
 @node Break Commands
 @subsection Breakpoint command lists
 
 @cindex breakpoint commands
-You can give any breakpoint (or watchpoint) a series of commands to
-execute when your program stops due to that breakpoint.  For example, you
-might want to print the values of certain expressions, or enable other
-breakpoints.
+You can give any breakpoint (or watchpoint or catchpoint) a series of
+commands to execute when your program stops due to that breakpoint.  For
+example, you might want to print the values of certain expressions, or
+enable other breakpoints.
 
 @table @code
+@kindex commands
+@kindex end
 @item commands @r{[}@var{bnum}@r{]}
 @itemx @dots{} @var{command-list} @dots{}
 @itemx end
-@kindex commands
-@kindex end
 Specify a list of commands for breakpoint number @var{bnum}.  The commands
 themselves appear on the following lines.  Type a line containing just
 @code{end} to terminate the commands.
@@ -2622,8 +2853,8 @@ To remove all commands from a breakpoint, type @code{commands} and
 follow it immediately with @code{end}; that is, give no commands.
 
 With no @var{bnum} argument, @code{commands} refers to the last
-breakpoint or watchpoint set (not to the breakpoint most recently
-encountered).
+breakpoint, watchpoint, or catchpoint set (not to the breakpoint most
+recently encountered).
 @end table
 
 Pressing @key{RET} as a means of repeating the last @value{GDBN} command is
@@ -2644,7 +2875,7 @@ If the first command you specify in a command list is @code{silent}, the
 usual message about stopping at a breakpoint is not printed.  This may
 be desirable for breakpoints that are to print a specific message and
 then continue.  If none of the remaining commands print anything, you
-will see no sign that the breakpoint was reached.  @code{silent} is
+see no sign that the breakpoint was reached.  @code{silent} is
 meaningful only at the beginning of a breakpoint command list.
 
 The commands @code{echo}, @code{output}, and @code{printf} allow you to
@@ -2680,7 +2911,6 @@ cont
 end
 @end example
 
-@ifclear CONLY
 @node Breakpoint Menus
 @subsection Breakpoint menus
 @cindex overloading
@@ -2690,7 +2920,7 @@ Some programming languages (notably C++) permit a single function name
 to be defined several times, for application in different contexts.
 This is called @dfn{overloading}.  When a function name is overloaded,
 @samp{break @var{function}} is not enough to tell @value{GDBN} where you want
-a breakpoint.  If you realize this will be a problem, you can use
+a breakpoint.  If you realize this is a problem, you can use
 something like @samp{break @var{function}(@var{types})} to specify which
 particular version of the function you want.  Otherwise, @value{GDBN} offers
 you a menu of numbered choices for different possible breakpoints, and
@@ -2706,6 +2936,7 @@ We choose three particular definitions of that function name:
 
 @c FIXME! This is likely to change to show arg type lists, at least
 @smallexample
+@group
 (@value{GDBP}) b String::after
 [0] cancel
 [1] all
@@ -2723,22 +2954,24 @@ Multiple breakpoints were set.
 Use the "delete" command to delete unwanted
  breakpoints.
 (@value{GDBP})
+@end group
 @end smallexample
-@end ifclear
 
-@ifclear BARETARGET
+@c  @ifclear BARETARGET
 @node Error in Breakpoints
 @subsection ``Cannot insert breakpoints''
-
-@c FIXME: "cannot insert breakpoints" error, v unclear.
-@c        Q in pending mail to Gilmore. ---pesch@cygnus.com, 26mar91
-@c        some light may be shed by looking at instances of
-@c        ONE_PROCESS_WRITETEXT.  But error message seems possible otherwise
-@c        too.  pesch, 20sep91
+@c
+@c  FIXME!! 14/6/95  Is there a real example of this?  Let's use it.
+@c
 Under some operating systems, breakpoints cannot be used in a program if
 any other process is running that program.  In this situation,
-attempting to run or continue a program with a breakpoint causes @value{GDBN}
-to stop the other process.
+attempting to run or continue a program with a breakpoint causes 
+@value{GDBN} to print an error message:
+
+@example
+Cannot insert breakpoints.
+The same program may be running in another process.
+@end example
 
 When this happens, you have three ways to proceed:
 
@@ -2747,19 +2980,36 @@ When this happens, you have three ways to proceed:
 Remove or disable the breakpoints, then continue.
 
 @item
-Suspend @value{GDBN}, and copy the file containing your program to a new name.
-Resume @value{GDBN} and use the @code{exec-file} command to specify that @value{GDBN}
-should run your program under that name.  Then start your program again.
-
-@c FIXME: RMS commented here "Show example".  Maybe when someone
-@c explains the first FIXME: in this section...
+Suspend @value{GDBN}, and copy the file containing your program to a new 
+name.  Resume @value{GDBN} and use the @code{exec-file} command to specify
+that @value{GDBN} should run your program under that name.  
+Then start your program again.
 
 @item
 Relink your program so that the text segment is nonsharable, using the
 linker option @samp{-N}.  The operating system limitation may not apply
 to nonsharable executables.
 @end enumerate
-@end ifclear
+@c  @end ifclear
+
+A similar message can be printed if you request too many active
+hardware-assisted breakpoints and watchpoints:
+
+@c FIXME: the precise wording of this message may change; the relevant
+@c source change is not committed yet (Sep 3, 1999).
+@smallexample
+Stopped; cannot insert breakpoints.
+You may have requested too many hardware breakpoints and watchpoints.
+@end smallexample
+
+@noindent
+This message is printed when you attempt to resume the program, since
+only then @value{GDBN} knows exactly how many hardware breakpoints and
+watchpoints it needs to insert.
+
+When this message is printed, you need to disable or remove some of the
+hardware-assisted breakpoints and watchpoints, and then continue.
+
 
 @node Continuing and Stepping
 @section Continuing and stepping
@@ -2771,24 +3021,18 @@ to nonsharable executables.
 completes normally.  In contrast, @dfn{stepping} means executing just
 one more ``step'' of your program, where ``step'' may mean either one
 line of source code, or one machine instruction (depending on what
-particular command you use).  Either when continuing
-or when stepping, your program may stop even sooner, due to 
-@ifset BARETARGET
-a breakpoint.
-@end ifset
-@ifclear BARETARGET
-a breakpoint or a signal.  (If due to a signal, you may want to use
-@code{handle}, or use @samp{signal 0} to resume execution.
-@xref{Signals, ,Signals}.)
-@end ifclear
+particular command you use).  Either when continuing or when stepping,
+your program may stop even sooner, due to a breakpoint or a signal.  (If
+it stops due to a signal, you may want to use @code{handle}, or use
+@samp{signal 0} to resume execution.  @xref{Signals, ,Signals}.)
 
 @table @code
-@item continue @r{[}@var{ignore-count}@r{]}
-@itemx c @r{[}@var{ignore-count}@r{]}
-@itemx fg @r{[}@var{ignore-count}@r{]}
 @kindex continue
 @kindex c
 @kindex fg
+@item continue @r{[}@var{ignore-count}@r{]}
+@itemx c @r{[}@var{ignore-count}@r{]}
+@itemx fg @r{[}@var{ignore-count}@r{]}
 Resume program execution, at the address where your program last stopped;
 any breakpoints set at that address are bypassed.  The optional argument
 @var{ignore-count} allows you to specify a further number of times to
@@ -2799,8 +3043,10 @@ The argument @var{ignore-count} is meaningful only when your program
 stopped due to a breakpoint.  At other times, the argument to
 @code{continue} is ignored.
 
-The synonyms @code{c} and @code{fg} are provided purely for convenience,
-and have exactly the same behavior as @code{continue}.
+The synonyms @code{c} and @code{fg} (for @dfn{foreground}, as the
+debugged program is deemed to be the foreground program) are provided
+purely for convenience, and have exactly the same behavior as
+@code{continue}.
 @end table
 
 To resume execution at a different place, you can use @code{return}
@@ -2809,69 +3055,88 @@ calling function; or @code{jump} (@pxref{Jumping, ,Continuing at a
 different address}) to go to an arbitrary location in your program.
 
 A typical technique for using stepping is to set a breakpoint
-@ifclear CONLY
-(@pxref{Breakpoints, ,Breakpoints; watchpoints; and exceptions})
-@end ifclear
-@ifset CONLY
-(@pxref{Breakpoints, ,Breakpoints and watchpoints})
-@end ifset
-at the
-beginning of the function or the section of your program where a
-problem is believed to lie, run your program until it stops at that
-breakpoint, and then step through the suspect area, examining the
-variables that are interesting, until you see the problem happen.
+(@pxref{Breakpoints, ,Breakpoints; watchpoints; and catchpoints}) at the
+beginning of the function or the section of your program where a problem
+is believed to lie, run your program until it stops at that breakpoint,
+and then step through the suspect area, examining the variables that are
+interesting, until you see the problem happen.
 
 @table @code
-@item step
 @kindex step
 @kindex s
+@item step
 Continue running your program until control reaches a different source
 line, then stop it and return control to @value{GDBN}.  This command is
 abbreviated @code{s}.
 
 @quotation
+@c "without debugging information" is imprecise; actually "without line
+@c numbers in the debugging information".  (gcc -g1 has debugging info but
+@c not line numbers).  But it seems complex to try to make that
+@c distinction here.
 @emph{Warning:} If you use the @code{step} command while control is
 within a function that was compiled without debugging information,
 execution proceeds until control reaches a function that does have
-debugging information.
+debugging information.  Likewise, it will not step into a function which
+is compiled without debugging information.  To step through functions
+without debugging information, use the @code{stepi} command, described
+below.
 @end quotation
 
+The @code{step} command only stops at the first instruction of a
+source line.  This prevents the multiple stops that could otherwise occur in
+switch statements, for loops, etc.  @code{step} continues to stop if a
+function that has debugging information is called within the line.
+In other words, @code{step} @emph{steps inside} any functions called
+within the line.
+
+Also, the @code{step} command only enters a function if there is line
+number information for the function.  Otherwise it acts like the
+@code{next} command.  This avoids problems when using @code{cc -gl} 
+on MIPS machines.  Previously, @code{step} entered subroutines if there
+was any debugging information about the routine.  
+
 @item step @var{count}
 Continue running as in @code{step}, but do so @var{count} times.  If a
-breakpoint is reached,
-@ifclear BARETARGET
-or a signal not related to stepping occurs before @var{count} steps,
-@end ifclear
-stepping stops right away.
+breakpoint is reached, or a signal not related to stepping occurs before
+@var{count} steps, stepping stops right away.
 
-@item next @r{[}@var{count}@r{]}
 @kindex next
 @kindex n
+@item next @r{[}@var{count}@r{]}
 Continue to the next source line in the current (innermost) stack frame.
-Similar to @code{step}, but any function calls appearing within the line
-of code are executed without stopping.  Execution stops when control
-reaches a different line of code at the stack level which was executing
-when the @code{next} command was given.  This command is abbreviated
-@code{n}.
+This is similar to @code{step}, but function calls that appear within
+the line of code are executed without stopping.  Execution stops when
+control reaches a different line of code at the original stack level
+that was executing when you gave the @code{next} command.  This command
+is abbreviated @code{n}.
 
 An argument @var{count} is a repeat count, as for @code{step}.
 
-@code{next} within a function that lacks debugging information acts like
-@code{step}, but any function calls appearing within the code of the
-function are executed without stopping.
 
-@item finish
+@c  FIX ME!!  Do we delete this, or is there a way it fits in with
+@c  the following paragraph?   ---  Vctoria
+@c
+@c  @code{next} within a function that lacks debugging information acts like
+@c  @code{step}, but any function calls appearing within the code of the
+@c  function are executed without stopping.
+
+The @code{next} command only stops at the first instruction of a
+source line.  This prevents multiple stops that could otherwise occur in
+switch statements, for loops, etc. 
+
 @kindex finish
+@item finish
 Continue running until just after function in the selected stack frame
 returns.  Print the returned value (if any).
 
 Contrast this with the @code{return} command (@pxref{Returning,
 ,Returning from a function}).
 
-@item until
 @kindex until
-@itemx u
 @kindex u
+@item until
+@itemx u
 Continue running until a source line past the current line, in the
 current stack frame, is reached.  This command is used to avoid single
 stepping through a loop more than once.  It is like the @code{next}
@@ -2880,10 +3145,10 @@ automatically continues execution until the program counter is greater
 than the address of the jump.
 
 This means that when you reach the end of a loop after single stepping
-though it, @code{until} will cause your program to continue execution
-until the loop is exited.  In contrast, a @code{next} command at the end
-of a loop will simply step back to the beginning of the loop, which
-would force you to step through the next iteration.
+though it, @code{until} makes your program continue execution until it
+exits the loop.  In contrast, a @code{next} command at the end of a loop
+simply steps back to the beginning of the loop, which forces you to step
+through the next iteration.
 
 @code{until} always stops your program if it attempts to exit the current
 stack frame.
@@ -2922,31 +3187,30 @@ the forms of argument acceptable to @code{break} (@pxref{Set Breaks,
 ,Setting breakpoints}).  This form of the command uses breakpoints,
 and hence is quicker than @code{until} without an argument.
 
-@item stepi
-@itemx si
 @kindex stepi
 @kindex si
+@item stepi
+@itemx si
 Execute one machine instruction, then stop and return to the debugger.
 
 It is often useful to do @samp{display/i $pc} when stepping by machine
-instructions.  This will cause the next instruction to be executed to
-be displayed automatically at each stop.  @xref{Auto Display,
-,Automatic display}.
+instructions.  This makes @value{GDBN} automatically display the next
+instruction to be executed, each time your program stops.  @xref{Auto
+Display,, Automatic display}.
 
 An argument is a repeat count, as in @code{step}.
 
 @need 750
-@item nexti
-@itemx ni
 @kindex nexti
 @kindex ni
+@item nexti
+@itemx ni
 Execute one machine instruction, but if it is a function call,
 proceed until the function returns.
 
 An argument is a repeat count, as in @code{next}.
 @end table
 
-@ifset POSIX
 @node Signals
 @section Signals
 @cindex signals
@@ -2954,7 +3218,7 @@ An argument is a repeat count, as in @code{next}.
 A signal is an asynchronous event that can happen in a program.  The
 operating system defines the possible kinds of signals, and gives each
 kind a name and a number.  For example, in Unix @code{SIGINT} is the
-signal a program gets when you type an interrupt (often @kbd{C-c});
+signal a program gets when you type an interrupt character (often @kbd{C-c});
 @code{SIGSEGV} is the signal a program gets from referencing a place in
 memory far away from all the areas in use; @code{SIGALRM} occurs when
 the alarm clock timer goes off (which happens only if your program has
@@ -2963,7 +3227,7 @@ requested an alarm).
 @cindex fatal signals
 Some signals, including @code{SIGALRM}, are a normal part of the
 functioning of your program.  Others, such as @code{SIGSEGV}, indicate
-errors; these signals are @dfn{fatal} (kill your program immediately) if the
+errors; these signals are @dfn{fatal} (they kill your program immediately) if the
 program has not specified in advance some other way to handle the signal.
 @code{SIGINT} does not indicate an error in your program, but it is normally
 fatal so it can carry out the purpose of the interrupt: to kill the program.
@@ -2979,16 +3243,18 @@ but to stop your program immediately whenever an error signal happens.
 You can change these settings with the @code{handle} command.
 
 @table @code
-@item info signals
 @kindex info signals
+@item info signals
 Print a table of all the kinds of signals and how @value{GDBN} has been told to
 handle each one.  You can use this to see the signal numbers of all
 the defined types of signals.
 
-@item handle @var{signal} @var{keywords}@dots{}
+@code{info handle} is an alias for @code{info signals}.
+
 @kindex handle
-Change the way @value{GDBN} handles signal @var{signal}.  @var{signal} can be the
-number of a signal or its name (with or without the @samp{SIG} at the
+@item handle @var{signal} @var{keywords}@dots{}
+Change the way @value{GDBN} handles signal @var{signal}.  @var{signal} can 
+be the number of a signal or its name (with or without the @samp{SIG} at the
 beginning).  The @var{keywords} say what change to make.
 @end table
 
@@ -3013,8 +3279,8 @@ the @code{print} keyword as well.
 implies the @code{nostop} keyword as well.
 
 @item pass
-@value{GDBN} should allow your program to see this signal; your program will be
-able to handle the signal, or may be terminated if the signal is fatal
+@value{GDBN} should allow your program to see this signal; your program
+can handle the signal, or else it may terminate if the signal is fatal
 and not handled.
 
 @item nopass
@@ -3022,12 +3288,13 @@ and not handled.
 @end table
 @c @end group
 
-When a signal stops your program, the signal is not visible until you
-continue.  Your program will see the signal then, if @code{pass} is in
+When a signal stops your program, the signal is not visible to the
+program until you
+continue.  Your program sees the signal then, if @code{pass} is in
 effect for the signal in question @emph{at that time}.  In other words,
 after @value{GDBN} reports a signal, you can use the @code{handle}
-command with @code{pass} or @code{nopass} to control whether that
-signal will be seen by your program when you later continue it.
+command with @code{pass} or @code{nopass} to control whether your
+program sees that signal when you continue.
 
 You can also use the @code{signal} command to prevent your program from
 seeing a signal, or cause it to see a signal it normally would not see,
@@ -3038,9 +3305,7 @@ execution; but your program would probably terminate immediately as
 a result of the fatal signal once it saw the signal.  To prevent this,
 you can continue with @samp{signal 0}.  @xref{Signaling, ,Giving your
 program a signal}. 
-@end ifset
 
-@ifclear BARETARGET
 @node Thread Stops
 @section Stopping and starting multi-thread programs
 
@@ -3054,6 +3319,9 @@ breakpoints on all threads, or on a particular thread.
 @kindex break @dots{} thread @var{threadno}
 @item break @var{linespec} thread @var{threadno}
 @itemx break @var{linespec} thread @var{threadno} if @dots{}
+@var{linespec} specifies source lines; there are several ways of
+writing them, but the effect is always to specify some source line.
+
 Use the qualifier @samp{thread @var{threadno}} with a breakpoint command
 to specify that you only want @value{GDBN} to stop the program when a
 particular thread reaches this breakpoint.  @var{threadno} is one of the
@@ -3069,8 +3337,9 @@ well; in this case, place @samp{thread @var{threadno}} before the
 breakpoint condition, like this:
 
 @smallexample
-(gdb) break frik.c:13 thread 28 if bartab > lim
+(@value{GDBP}) break frik.c:13 thread 28 if bartab > lim
 @end smallexample
+
 @end table
 
 @cindex stopped threads
@@ -3099,7 +3368,28 @@ You might even find your program stopped in another thread after
 continuing or even single-stepping.  This happens whenever some other
 thread runs into a breakpoint, a signal, or an exception before the
 first thread completes whatever you requested.
-@end ifclear
+
+On some OSes, you can lock the OS scheduler and thus allow only a single
+thread to run.
+
+@table @code
+@item set scheduler-locking @var{mode}
+Set the scheduler locking mode.  If it is @code{off}, then there is no
+locking and any thread may run at any time.  If @code{on}, then only the
+current thread may run when the inferior is resumed.  The @code{step}
+mode optimizes for single-stepping.  It stops other threads from
+``seizing the prompt'' by preempting the current thread while you are
+stepping.  Other threads will only rarely (or never) get a chance to run
+when you step.  They are more likely to run when you @samp{next} over a
+function call, and they are completely free to run when you use commands
+like @samp{continue}, @samp{until}, or @samp{finish}.  However, unless another
+thread hits a breakpoint during its timeslice, they will never steal the
+@value{GDBN} prompt away from the thread that you are debugging.
+
+@item show scheduler-locking
+Display the current scheduler locking mode.
+@end table
+
 
 @node Stack
 @chapter Examining the Stack
@@ -3108,11 +3398,13 @@ When your program has stopped, the first thing you need to know is where it
 stopped and how it got there.
 
 @cindex call stack
-Each time your program performs a function call, the information about
-where in your program the call was made from is saved in a block of data
-called a @dfn{stack frame}.  The frame also contains the arguments of the
-call and the local variables of the function that was called.  All the
-stack frames are allocated in a region of memory called the @dfn{call
+Each time your program performs a function call, information about the call 
+is generated. 
+That information includes the location of the call in your program, 
+the arguments of the call, 
+and the local variables of the function being called.
+The information is saved in a block of data called a @dfn{stack frame}.  
+The stack frames are allocated in a region of memory called the @dfn{call
 stack}.
 
 When your program stops, the @value{GDBN} commands for examining the
@@ -3124,26 +3416,24 @@ One of the stack frames is @dfn{selected} by @value{GDBN} and many
 particular, whenever you ask @value{GDBN} for the value of a variable in
 your program, the value is found in the selected frame.  There are
 special @value{GDBN} commands to select whichever frame you are
-interested in.
+interested in. @xref{Selection, ,Selecting a frame}.
 
 When your program stops, @value{GDBN} automatically selects the
-currently executing frame and describes it briefly as the @code{frame}
-command does (@pxref{Frame Info, ,Information about a frame}).
+currently executing frame and describes it briefly, similar to the 
+@code{frame} command (@pxref{Frame Info, ,Information about a frame}).
 
 @menu
 * Frames::                      Stack frames
 * Backtrace::                   Backtraces
 * Selection::                   Selecting a frame
 * Frame Info::                  Information on a frame
-@ifset MIPS
-* MIPS Stack::                  MIPS machines and the function stack
-@end ifset
+
 @end menu
 
 @node Frames
 @section Stack frames
 
-@cindex frame
+@cindex frame, definition
 @cindex stack frame
 The call stack is divided up into contiguous pieces called @dfn{stack
 frames}, or @dfn{frames} for short; each frame is the data associated
@@ -3166,7 +3456,7 @@ recently created of all the stack frames that still exist.
 @cindex frame pointer
 Inside your program, stack frames are identified by their addresses.  A
 stack frame consists of many bytes, each of which has its own address; each
-kind of computer has a convention for choosing one of those bytes whose
+kind of computer has a convention for choosing one byte whose
 address serves as the address of the frame.  Usually this address is kept
 in a register called the @dfn{frame pointer register} while execution is
 going on in that frame.
@@ -3182,28 +3472,46 @@ frames in @value{GDBN} commands.
 @cindex frameless execution
 Some compilers provide a way to compile functions so that they operate
 without stack frames.  (For example, the @code{@value{GCC}} option
-@samp{-fomit-frame-pointer} will generate functions without a frame.)
+@samp{-fomit-frame-pointer} generates functions without a frame.)
 This is occasionally done with heavily used library functions to save
 the frame setup time.  @value{GDBN} has limited facilities for dealing
 with these function invocations.  If the innermost function invocation
-has no stack frame, @value{GDBN} will nevertheless regard it as though
+has no stack frame, @value{GDBN} nevertheless regards it as though
 it had a separate frame, which is numbered zero as usual, allowing
 correct tracing of the function call chain.  However, @value{GDBN} has
 no provision for frameless functions elsewhere in the stack.
 
+@table @code
+@kindex frame@r{, command}
+@item frame @var{args}
+The @code{frame} command allows you to move from one stack frame to another, 
+and to print the stack frame you select.  @var{args} may be either the
+address of the frame or the stack frame number.  Without an argument, 
+@code{frame} prints the current stack frame.  
+
+@kindex select-frame
+@item select-frame
+The @code{select-frame} command allows you to move from one stack frame
+to another without printing the frame.  This is the silent version of
+@code{frame}.
+@end table
+
 @node Backtrace
 @section Backtraces
 
+@cindex backtraces
+@cindex tracebacks
+@cindex stack traces
 A backtrace is a summary of how your program got where it is.  It shows one
 line per frame, for many frames, starting with the currently executing
 frame (frame zero), followed by its caller (frame one), and on up the
 stack.
 
 @table @code
-@item backtrace
-@itemx bt
 @kindex backtrace
 @kindex bt
+@item backtrace
+@itemx bt
 Print a backtrace of the entire stack: one line per frame for all
 frames in the stack.
 
@@ -3260,10 +3568,10 @@ selecting a stack frame; all of them finish by printing a brief description
 of the stack frame just selected.
 
 @table @code
+@kindex frame@r{, selecting}
+@kindex f
 @item frame @var{n}
 @itemx f @var{n}
-@kindex frame
-@kindex f
 Select frame number @var{n}.  Recall that frame zero is the innermost
 (currently executing) frame, frame one is the frame that called the
 innermost one, and so on.  The highest-numbered frame is the one for
@@ -3277,24 +3585,27 @@ impossible for @value{GDBN} to assign numbers properly to all frames.  In
 addition, this can be useful when your program has multiple stacks and
 switches between them.
 
-@ifset SPARC
 On the SPARC architecture, @code{frame} needs two addresses to
 select an arbitrary frame: a frame pointer and a stack pointer.
+
+On the MIPS and Alpha architecture, it needs two addresses: a stack
+pointer and a program counter.
+
+On the 29k architecture, it needs three addresses: a register stack
+pointer, a program counter, and a memory stack pointer.
 @c note to future updaters: this is conditioned on a flag
-@c FRAME_SPECIFICATION_DYADIC in the tm-*.h files, currently only used
-@c by SPARC, hence the specific attribution.  Generalize or list all
-@c possibilities if more supported machines start doing this.
-@end ifset
+@c SETUP_ARBITRARY_FRAME in the tm-*.h files.  The above is up to date
+@c as of 27 Jan 1994.
 
-@item up @var{n}
 @kindex up
+@item up @var{n}
 Move @var{n} frames up the stack.  For positive numbers @var{n}, this
 advances toward the outermost frame, to higher frame numbers, to frames
 that have existed longer.  @var{n} defaults to one.
 
-@item down @var{n}
 @kindex down
 @kindex do
+@item down @var{n}
 Move @var{n} frames down the stack.  For positive numbers @var{n}, this
 advances toward the innermost frame, to lower frame numbers, to frames
 that were created more recently.  @var{n} defaults to one.  You may
@@ -3306,7 +3617,9 @@ frame.  The first line shows the frame number, the function name, the
 arguments, and the source file and line number of execution in that
 frame.  The second line shows the text of that source line.  
 
+@need 1000
 For example:
+
 @smallexample
 @group
 (@value{GDBP}) up
@@ -3316,15 +3629,15 @@ For example:
 @end group
 @end smallexample
 
-After such a printout, the @code{list} command with no arguments will
-print ten lines centered on the point of execution in the frame.
+After such a printout, the @code{list} command with no arguments
+prints ten lines centered on the point of execution in the frame.
 @xref{List, ,Printing source lines}.
 
 @table @code
-@item up-silently @var{n}
-@itemx down-silently @var{n}
 @kindex down-silently
 @kindex up-silently
+@item up-silently @var{n}
+@itemx down-silently @var{n}
 These two commands are variants of @code{up} and @code{down},
 respectively; they differ in that they do their work silently, without
 causing display of the new frame.  They are intended primarily for use
@@ -3347,28 +3660,46 @@ selected stack frame.  It can be abbreviated @code{f}.  With an
 argument, this command is used to select a stack frame.
 @xref{Selection, ,Selecting a frame}.
 
-@item info frame
-@itemx info f
 @kindex info frame
 @kindex info f
+@item info frame
+@itemx info f
 This command prints a verbose description of the selected stack frame,
-including the address of the frame, the addresses of the next frame down
-(called by this frame) and the next frame up (caller of this frame), the
-language that the source code corresponding to this frame was written in,
-the address of the frame's arguments, the program counter saved in it
-(the address of execution in the caller frame), and which registers
-were saved in the frame.  The verbose description is useful when
+including:
+
+@itemize @bullet
+@item 
+the address of the frame 
+@item
+the address of the next frame down (called by this frame)
+@item
+the address of the next frame up (caller of this frame)
+@item
+the language in which the source code corresponding to this frame is written
+@item
+the address of the frame's arguments
+@item
+the address of the frame's local variables
+@item
+the program counter saved in it (the address of execution in the caller frame)
+@item
+which registers were saved in the frame
+@end itemize
+
+@noindent The verbose description is useful when
 something has gone wrong that has made the stack format fail to fit
 the usual conventions.
 
 @item info frame @var{addr}
 @itemx info f @var{addr}
-Print a verbose description of the frame at address @var{addr},
-without selecting that frame.  The selected frame remains unchanged by
-this command.
+Print a verbose description of the frame at address @var{addr}, without
+selecting that frame.  The selected frame remains unchanged by this
+command.  This requires the same kind of address (more than one for some
+architectures) that you specify in the @code{frame} command.
+@xref{Selection, ,Selecting a frame}.
 
-@item info args
 @kindex info args
+@item info args
 Print the arguments of the selected frame, each on a separate line.
 
 @item info locals
@@ -3377,52 +3708,18 @@ Print the local variables of the selected frame, each on a separate
 line.  These are all variables (declared either static or automatic)
 accessible at the point of execution of the selected frame.
 
-@ifclear CONLY
-@item info catch
 @kindex info catch
-@cindex catch exceptions
-@cindex exception handlers
+@cindex catch exceptions, list active handlers
+@cindex exception handlers, how to list
+@item info catch
 Print a list of all the exception handlers that are active in the
 current stack frame at the current point of execution.  To see other
 exception handlers, visit the associated frame (using the @code{up},
 @code{down}, or @code{frame} commands); then type @code{info catch}.
-@xref{Exception Handling, ,Breakpoints and exceptions}.
-@end ifclear
-@end table
-
-@ifset MIPS
-@node MIPS Stack
-@section MIPS machines and the function stack
-
-@cindex stack on MIPS
-@cindex MIPS stack
-MIPS based computers use an unusual stack frame, which sometimes
-requires @value{GDBN} to search backward in the object code to find the
-beginning of a function.
-
-@cindex response time, MIPS debugging
-To improve response time (especially for embedded applications, where
-@value{GDBN} may be restricted to a slow serial line for this search)
-you may want to limit the size of this search, using one of these
-commands:
-@c FIXME! So what happens when GDB does *not* find the beginning of a
-@c function?
-
-@cindex @code{heuristic-fence-post} (MIPS)
-@table @code
-@item set heuristic-fence-post @var{limit}
-Restrict @value{GDBN} to examining at most @var{limit} bytes in its search
-for the beginning of a function.  A value of @code{0} (the default)
-means there is no limit.
+@xref{Set Catchpoints, , Setting catchpoints}.
 
-@item show heuristic-fence-post
-Display the current limit.
 @end table
 
-@noindent
-These commands are available @emph{only} when @value{GDBN} is configured
-for debugging programs on MIPS processors.
-@end ifset
 
 @node Source
 @chapter Examining Source Files
@@ -3435,18 +3732,13 @@ the line where it stopped.  Likewise, when you select a stack frame
 execution in that frame has stopped.  You can print other portions of
 source files by explicit command.
 
-@ifclear DOSHOST
-If you use @value{GDBN} through its GNU Emacs interface, you may prefer to use
-Emacs facilities to view source; @pxref{Emacs, ,Using @value{GDBN} under GNU
-Emacs}.
-@end ifclear
+If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may
+prefer to use Emacs facilities to view source; see @ref{Emacs, ,Using
+@value{GDBN} under @sc{gnu} Emacs}.
 
 @menu
 * List::                        Printing source lines
-@ifclear DOSHOST
 * Search::                      Searching source files
-@end ifclear
-
 * Source Path::                 Specifying source directories
 * Machine Code::                Source and machine code
 @end menu
@@ -3457,8 +3749,8 @@ Emacs}.
 @kindex list
 @kindex l
 To print lines from a source file, use the @code{list} command
-(abbreviated @code{l}).  There are several ways to specify what part
-of the file you want to print.
+(abbreviated @code{l}).  By default, ten lines are printed.  
+There are several ways to specify what part of the file you want to print.
 
 Here are the forms of the @code{list} command most commonly used:
 
@@ -3486,15 +3778,14 @@ By default, @value{GDBN} prints ten source lines with any of these forms of
 the @code{list} command.  You can change this using @code{set listsize}:
 
 @table @code
-@item set listsize @var{count}
 @kindex set listsize
+@item set listsize @var{count}
 Make the @code{list} command display @var{count} source lines (unless
 the @code{list} argument explicitly specifies some other number).
 
-@item show listsize
 @kindex show listsize
-Display the number of lines that @code{list} will currently display by
-default.
+@item show listsize
+Display the number of lines that @code{list} prints.
 @end table
 
 Repeating a @code{list} command with @key{RET} discards the argument,
@@ -3506,7 +3797,7 @@ each repetition moves up in the source file.
 @cindex linespec
 In general, the @code{list} command expects you to supply zero, one or two
 @dfn{linespecs}.  Linespecs specify source lines; there are several ways
-of writing them but the effect is always to specify some source line.
+of writing them, but the effect is always to specify some source line.
 Here is a complete description of the possible arguments for @code{list}:
 
 @table @code
@@ -3555,9 +3846,8 @@ Specifies the line @var{offset} lines before the last line printed.
 Specifies line @var{number} in the source file @var{filename}.
 
 @item @var{function}
-@c FIXME: "of the open-brace" is C-centric.  When we add other langs...
-Specifies the line of the open-brace that begins the body of the
-function @var{function}.
+Specifies the line that begins the body of the function @var{function}.
+For example: in C, this is the line with the open brace.
 
 @item @var{filename}:@var{function}
 Specifies the line of the open-brace that begins the body of the
@@ -3570,7 +3860,6 @@ Specifies the line containing the program address @var{address}.
 @var{address} may be any expression.
 @end table
 
-@ifclear DOSHOST
 @node Search
 @section Searching source files
 @cindex searching
@@ -3580,13 +3869,13 @@ There are two commands for searching through the current source file for a
 regular expression.
 
 @table @code
-@item forward-search @var{regexp}
-@itemx search @var{regexp}
 @kindex search
 @kindex forward-search
+@item forward-search @var{regexp}
+@itemx search @var{regexp}
 The command @samp{forward-search @var{regexp}} checks each line,
 starting with the one following the last line listed, for a match for
-@var{regexp}.  It lists the line that is found.  You can use
+@var{regexp}.  It lists the line that is found.  You can use the 
 synonym @samp{search @var{regexp}} or abbreviate the command name as
 @code{fo}.
 
@@ -3596,7 +3885,6 @@ with the one before the last line listed and going backward, for a match
 for @var{regexp}.  It lists the line that is found.  You can abbreviate
 this command as @code{rev}.
 @end table
-@end ifclear
 
 @node Source Path
 @section Specifying source directories
@@ -3614,26 +3902,31 @@ the executable search path is @emph{not} used for this purpose.  Neither is
 the current working directory, unless it happens to be in the source
 path.
 
-If @value{GDBN} cannot find a source file in the source path, and the object
-program records a directory, @value{GDBN} tries that directory too.  If the
-source path is empty, and there is no record of the compilation
-directory, @value{GDBN} will, as a last resort, look in the current
-directory.
+If @value{GDBN} cannot find a source file in the source path, and the
+object program records a directory, @value{GDBN} tries that directory
+too.  If the source path is empty, and there is no record of the
+compilation directory, @value{GDBN} looks in the current directory as a
+last resort.
 
-Whenever you reset or rearrange the source path, @value{GDBN} will clear out
-any information it has cached about where source files are found, where
-each line is in the file, etc.
+Whenever you reset or rearrange the source path, @value{GDBN} clears out
+any information it has cached about where source files are found and where
+each line is in the file.
 
 @kindex directory
-When you start @value{GDBN}, its source path is empty.
+@kindex dir
+When you start @value{GDBN}, its source path includes only @samp{cdir}
+and @samp{cwd}, in that order.
 To add other directories, use the @code{directory} command.
 
 @table @code
 @item directory @var{dirname} @dots{}
+@item dir @var{dirname} @dots{}
 Add directory @var{dirname} to the front of the source path.  Several
-directory names may be given to this command, separated by @samp{:} or
+directory names may be given to this command, separated by @samp{:}
+(@samp{;} on MS-DOS and MS-Windows, where @samp{:} usually appears as
+part of absolute file names) or
 whitespace.  You may specify a directory that is already in the source
-path; this moves it forward, so it will be searched sooner.
+path; this moves it forward, so @value{GDBN} searches it sooner.
 
 @kindex cdir
 @kindex cwd
@@ -3681,11 +3974,14 @@ directories in one command.
 
 You can use the command @code{info line} to map source lines to program
 addresses (and vice versa), and the command @code{disassemble} to display
-a range of addresses as machine instructions.
+a range of addresses as machine instructions.  When run under @sc{gnu} Emacs
+mode, the @code{info line} command causes the arrow to point to the
+line specified.  Also, @code{info line} prints addresses in symbolic form as 
+well as hex.
 
 @table @code
-@item info line @var{linespec}
 @kindex info line
+@item info line @var{linespec}
 Print the starting and ending addresses of the compiled code for
 source line @var{linespec}.  You can specify source lines in any of
 the ways understood by the @code{list} command (@pxref{List, ,Printing
@@ -3696,6 +3992,8 @@ For example, we can use @code{info line} to discover the location of
 the object code for the first line of function
 @code{m4_changequote}:
 
+@c FIXME: I think this example should also show the addresses in
+@c symbolic form, as they usually would be displayed.
 @smallexample
 (@value{GDBP}) info line m4_changecom
 Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
@@ -3710,6 +4008,7 @@ Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
 @end smallexample
 
 @cindex @code{$_} and @code{info line}
+@kindex x@r{, and }@code{info line}
 After @code{info line}, the default address for the @code{x} command
 is changed to the starting address of the line, so that @samp{x/i} is
 sufficient to begin examining the machine code (@pxref{Memory,
@@ -3719,60 +4018,57 @@ variables}).
 
 @table @code
 @kindex disassemble
-@item disassemble
 @cindex assembly instructions
 @cindex instructions, assembly
 @cindex machine instructions
 @cindex listing machine instructions
+@item disassemble
 This specialized command dumps a range of memory as machine
 instructions.  The default memory range is the function surrounding the
 program counter of the selected frame.  A single argument to this
-command is a program counter value; the function surrounding this value
-will be dumped.  Two arguments specify a range of addresses (first
-inclusive, second exclusive) to dump.
+command is a program counter value; @value{GDBN} dumps the function
+surrounding this value.  Two arguments specify a range of addresses
+(first inclusive, second exclusive) to dump.
 @end table
 
-@ifclear H8EXCLUSIVE
-We can use @code{disassemble} to inspect the object code
-range shown in the last @code{info line} example (the example
-shows SPARC machine instructions):
-
+The following example shows the disassembly of a range of addresses of
+HP PA-RISC 2.0 code:
 
 @smallexample
-(@value{GDBP}) disas 0x63e4 0x6404
-Dump of assembler code from 0x63e4 to 0x6404:
-0x63e4 <builtin_init+5340>:     ble 0x63f8 <builtin_init+5360>
-0x63e8 <builtin_init+5344>:     sethi %hi(0x4c00), %o0
-0x63ec <builtin_init+5348>:     ld [%i1+4], %o0
-0x63f0 <builtin_init+5352>:     b 0x63fc <builtin_init+5364>
-0x63f4 <builtin_init+5356>:     ld [%o0+4], %o0
-0x63f8 <builtin_init+5360>:     or %o0, 0x1a4, %o0
-0x63fc <builtin_init+5364>:     call 0x9288 <path_search>
-0x6400 <builtin_init+5368>:     nop
+(@value{GDBP}) disas 0x32c4 0x32e4
+Dump of assembler code from 0x32c4 to 0x32e4:
+0x32c4 <main+204>:      addil 0,dp
+0x32c8 <main+208>:      ldw 0x22c(sr0,r1),r26
+0x32cc <main+212>:      ldil 0x3000,r31
+0x32d0 <main+216>:      ble 0x3f8(sr4,r31)
+0x32d4 <main+220>:      ldo 0(r31),rp
+0x32d8 <main+224>:      addil -0x800,dp
+0x32dc <main+228>:      ldo 0x588(r1),r26
+0x32e0 <main+232>:      ldil 0x3000,r31
 End of assembler dump.
 @end smallexample
-@end ifclear
 
-@ifset H8EXCLUSIVE
-For example, here is the beginning of the output for the
-disassembly of a function @code{fact}:
+Some architectures have more than one commonly-used set of instruction
+mnemonics or other syntax.
 
+@table @code
+@kindex set disassembly-flavor
+@cindex assembly instructions
+@cindex instructions, assembly
+@cindex machine instructions
+@cindex listing machine instructions
+@cindex Intel disassembly flavor
+@cindex AT&T disassembly flavor
+@item set disassembly-flavor @var{instruction-set}
+Select the instruction set to use when disassembling the
+program via the @code{disassemble} or @code{x/i} commands.
+
+Currently this command is only defined for the Intel x86 family.  You
+can set @var{instruction-set} to either @code{intel} or @code{att}.
+The default is @code{att}, the AT&T flavor used by default by Unix
+assemblers for x86-based targets.
+@end table
 
-@smallexample
-(@value{GDBP}) disas fact
-Dump of assembler code for function fact:
-to 0x808c:
-0x802c <fact>: 6d f2           mov.w r2,@@-r7
-0x802e <fact+2>:  6d f3                mov.w r3,@@-r7
-0x8030 <fact+4>:  6d f6                mov.w r6,@@-r7
-0x8032 <fact+6>:  0d 76                mov.w r7,r6
-0x8034 <fact+8>:  6f 70 00 08  mov.w @@(0x8,r7),r0
-0x8038 <fact+12>  19 11                sub.w   r1,r1
- .
- .
- . 
-@end smallexample
-@end ifset
 
 @node Data
 @chapter Examining Data
@@ -3785,25 +4081,23 @@ to 0x808c:
 @c document because it is nonstandard...  Under Epoch it displays in a
 @c different window or something like that.
 The usual way to examine data in your program is with the @code{print}
-command (abbreviated @code{p}), or its synonym @code{inspect}.  
-@ifclear CONLY
-It evaluates and prints the value of an expression of the language your
-program is written in (@pxref{Languages, ,Using @value{GDBN} with Different
-Languages}).
-@end ifclear
-
-@table @code
-@item print @var{exp}
-@itemx print /@var{f} @var{exp}
-@var{exp} is an expression (in the source language).  By default the
-value of @var{exp} is printed in a format appropriate to its data type;
+command (abbreviated @code{p}), or its synonym @code{inspect}.  It
+evaluates and prints the value of an expression of the language your
+program is written in (@pxref{Languages, ,Using @value{GDBN} with
+Different Languages}).
+
+@table @code
+@item print @var{expr}
+@itemx print /@var{f} @var{expr}
+@var{expr} is an expression (in the source language).  By default the
+value of @var{expr} is printed in a format appropriate to its data type;
 you can choose a different format by specifying @samp{/@var{f}}, where
-@var{f} is a letter specifying the format; @pxref{Output Formats,,Output
+@var{f} is a letter specifying the format; see @ref{Output Formats,,Output
 formats}.
 
 @item print
 @itemx print /@var{f}
-If you omit @var{exp}, @value{GDBN} displays the last value again (from the
+If you omit @var{expr}, @value{GDBN} displays the last value again (from the
 @dfn{value history}; @pxref{Value History, ,Value history}).  This allows you to
 conveniently inspect the same value in an alternative format.
 @end table
@@ -3812,13 +4106,10 @@ A more low-level way of examining data is with the @code{x} command.
 It examines data in memory at a specified address and prints it in a
 specified format.  @xref{Memory, ,Examining memory}.
 
-If you are interested in information about types, or about how the fields
-of a struct
-@ifclear CONLY
-or class
-@end ifclear
-are declared, use the @code{ptype @var{exp}}
-command rather than @code{print}. @xref{Symbols, ,Examining the Symbol Table}.
+If you are interested in information about types, or about how the
+fields of a struct or a class are declared, use the @code{ptype @var{exp}}
+command rather than @code{print}.  @xref{Symbols, ,Examining the Symbol
+Table}.
 
 @menu
 * Expressions::                 Expressions
@@ -3831,9 +4122,7 @@ command rather than @code{print}. @xref{Symbols, ,Examining the Symbol Table}.
 * Value History::               Value history
 * Convenience Vars::            Convenience variables
 * Registers::                   Registers
-@ifclear HAVE-FLOAT
 * Floating Point Hardware::     Floating point hardware
-@end ifclear
 @end menu
 
 @node Expressions
@@ -3847,7 +4136,11 @@ by the programming language you are using is valid in an expression in
 and string constants.  It unfortunately does not include symbols defined
 by preprocessor @code{#define} commands.
 
-@ifclear CONLY
+@value{GDBN} supports array constants in expressions input by
+the user.  The syntax is @{@var{element}, @var{element}@dots{}@}.  For example,
+you can use the command @code{print @{1, 2, 3@}} to build up an array in 
+memory that is @code{malloc}ed in the target program.
+
 Because C is so widespread, most of the expressions shown in examples in
 this manual are in C.  @xref{Languages, , Using @value{GDBN} with Different
 Languages}, for information on how to use expressions in other
@@ -3857,13 +4150,12 @@ In this section, we discuss operators that you can use in @value{GDBN}
 expressions regardless of your programming language.
 
 Casts are supported in all languages, not just in C, because it is so
-useful to cast a number into a pointer so as to examine a structure
+useful to cast a number into a pointer in order to examine a structure
 at that address in memory.
 @c FIXME: casts supported---Mod2 true?
-@end ifclear
 
-@value{GDBN} supports these operators in addition to those of programming
-languages:
+@value{GDBN} supports these operators, in addition to those common
+to programming languages:
 
 @table @code
 @item @@
@@ -3874,11 +4166,11 @@ languages:
 @samp{::} allows you to specify a variable in terms of the file or
 function where it is defined.  @xref{Variables, ,Program variables}.
 
-@item @{@var{type}@} @var{addr}
 @cindex @{@var{type}@}
 @cindex type casting memory
 @cindex memory, viewing as typed object
 @cindex casts, to view memory
+@item @{@var{type}@} @var{addr}
 Refers to an object of type @var{type} stored at address @var{addr} in
 memory.  @var{addr} may be any expression whose value is an integer or
 pointer (but parentheses are required around binary operators, just as in
@@ -3893,10 +4185,22 @@ The most common kind of expression to use is the name of a variable
 in your program.
 
 Variables in expressions are understood in the selected stack frame
-(@pxref{Selection, ,Selecting a frame}); they must either be global
-(or static) or be visible according to the scope rules of the
-programming language from the point of execution in that frame.  This
-means that in the function
+(@pxref{Selection, ,Selecting a frame}); they must be either:
+
+@itemize @bullet
+@item
+global (or file-static)
+@end itemize
+
+@noindent or 
+
+@itemize @bullet
+@item
+visible according to the scope rules of the
+programming language from the point of execution in that frame
+@end itemize  
+
+@noindent This means that in the function
 
 @example
 foo (a)
@@ -3925,7 +4229,7 @@ happens, referring to that name has unpredictable effects.  If you wish,
 you can specify a static variable in a particular function or file,
 using the colon-colon notation:
 
-@cindex colon-colon
+@cindex colon-colon, context for variables/functions
 @iftex
 @c info cannot cope with a :: index entry, but why deprive hard copy readers?
 @kindex ::
@@ -3945,14 +4249,12 @@ to print a global value of @code{x} defined in @file{f2.c}:
 (@value{GDBP}) p 'f2.c'::x
 @end example
 
-@ifclear CONLY
 @cindex C++ scope resolution
 This use of @samp{::} is very rarely in conflict with the very similar
 use of the same notation in C++.  @value{GDBN} also supports use of the C++
 scope resolution operator in @value{GDBN} expressions.
 @c FIXME: Um, so what happens in one of those rare cases where it's in
 @c conflict??  --mew
-@end ifclear
 
 @cindex wrong values
 @cindex variable values, wrong
@@ -3962,7 +4264,7 @@ wrong value at certain points in a function---just after entry to a new
 scope, and just before exit.
 @end quotation
 You may see this problem when you are stepping by machine instructions.
-This is because on most machines, it takes more than one instruction to
+This is because, on most machines, it takes more than one instruction to
 set up a stack frame (including local variable definitions); if you are
 stepping by machine instructions, variables may appear to have the wrong
 values until the stack frame is completely built.  On exit, it usually
@@ -3970,6 +4272,33 @@ also takes more than one machine instruction to destroy a stack frame;
 after you begin stepping through that group of instructions, local
 variable definitions may be gone.
 
+This may also happen when the compiler does significant optimizations.
+To be sure of always seeing accurate values, turn off all optimization
+when compiling.
+
+@cindex ``No symbol "foo" in current context''
+Another possible effect of compiler optimizations is to optimize
+unused variables out of existence, or assign variables to registers (as
+opposed to memory addresses).  Depending on the support for such cases
+offered by the debug info format used by the compiler, @value{GDBN}
+might not be able to display values for such local variables.  If that
+happens, @value{GDBN} will print a message like this:
+
+@example
+No symbol "foo" in current context.
+@end example
+
+To solve such problems, either recompile without optimizations, or use a
+different debug info format, if the compiler supports several such
+formats.  For example, @value{NGCC}, the @sc{gnu} C/C++ compiler usually
+supports the @samp{-gstabs} option.  @samp{-gstabs} produces debug info
+in a format that is superior to formats such as COFF.  You may be able
+to use DWARF-2 (@samp{-gdwarf-2}), which is also an effective form for
+debug info.  See @ref{Debugging Options,,Options for Debugging Your
+Program or @sc{gnu} CC, gcc.info, Using @sc{gnu} CC}, for more
+information.
+
+
 @node Arrays
 @section Artificial arrays
 
@@ -3982,8 +4311,8 @@ program.
 
 You can do this by referring to a contiguous span of memory as an
 @dfn{artificial array}, using the binary operator @samp{@@}.  The left
-operand of @samp{@@} should be the first element of the desired array,
-as an individual object.  The right operand should be the desired length
+operand of @samp{@@} should be the first element of the desired array
+and be an individual object.  The right operand should be the desired length
 of the array.  The result is an array value whose elements are all of
 the type of the left argument.  The first element is actually the left
 argument; the second element comes from bytes of memory immediately
@@ -4007,6 +4336,22 @@ subscripting, and are coerced to pointers when used in expressions.
 Artificial arrays most often appear in expressions via the value history
 (@pxref{Value History, ,Value history}), after printing one out.
 
+Another way to create an artificial array is to use a cast.
+This re-interprets a value as if it were an array.
+The value need not be in memory:
+@example
+(@value{GDBP}) p/x (short[2])0x12345678
+$1 = @{0x1234, 0x5678@}
+@end example
+
+As a convenience, if you leave the array length out (as in
+@samp{(@var{type}[])@var{value}}) @value{GDBN} calculates the size to fill
+the value (as @samp{sizeof(@var{value})/sizeof(@var{type})}:
+@example
+(@value{GDBP}) p/x (short[])0x12345678
+$2 = @{0x1234, 0x5678@}
+@end example
+
 Sometimes the artificial array mechanism is not quite enough; in
 moderately complex data structures, the elements of interest may not
 actually be adjacent---for example, if you are interested in the values
@@ -4060,12 +4405,13 @@ Print as integer in octal.
 Print as integer in binary.  The letter @samp{t} stands for ``two''.
 @footnote{@samp{b} cannot be used because these format letters are also
 used with the @code{x} command, where @samp{b} stands for ``byte'';
-@pxref{Memory,,Examining memory}.}
+see @ref{Memory,,Examining memory}.}
 
 @item a
-Print as an address, both absolute in hex and as an offset from the
-nearest preceding symbol.  This format can be used to discover where (in
-what function) an unknown address is located:
+@cindex unknown address, locating
+Print as an address, both absolute in hexadecimal and as an offset from
+the nearest preceding symbol.  You can use this format used to discover
+where (in what function) an unknown address is located:
 
 @example
 (@value{GDBP}) p/a 0x54320
@@ -4124,9 +4470,9 @@ how much memory (counting by units @var{u}) to display.
 
 @item @var{f}, the display format
 The display format is one of the formats used by @code{print},
-or @samp{s} (null-terminated string) or @samp{i} (machine instruction).
-The default is @samp{x} (hexadecimal) initially, or the format from the
-last time you used either @code{x} or @code{print}.
+@samp{s} (null-terminated string), or @samp{i} (machine instruction).
+The default is @samp{x} (hexadecimal) initially.
+The default changes each time you use either @code{x} or @code{print}.
 
 @item @var{u}, the unit size
 The unit size is any of
@@ -4162,19 +4508,19 @@ For example, @samp{x/3uh 0x54320} is a request to display three halfwords
 (@code{h}) of memory, formatted as unsigned decimal integers (@samp{u}),
 starting at address @code{0x54320}.  @samp{x/4xw $sp} prints the four
 words (@samp{w}) of memory above the stack pointer (here, @samp{$sp};
-@pxref{Registers}) in hexadecimal (@samp{x}).
+@pxref{Registers, ,Registers}) in hexadecimal (@samp{x}).
 
 Since the letters indicating unit sizes are all distinct from the
 letters specifying output formats, you do not have to remember whether
-unit size or format comes first; either order will work.  The output
+unit size or format comes first; either order works.  The output
 specifications @samp{4xw} and @samp{4wx} mean exactly the same thing.
-(However, the count @var{n} must come first; @samp{wx4} will not work.)
+(However, the count @var{n} must come first; @samp{wx4} does not work.)
 
 Even though the unit size @var{u} is ignored for the formats @samp{s}
 and @samp{i}, you might still want to use a count @var{n}; for example,
 @samp{3i} specifies that you want to see three machine instructions,
 including any operands.  The command @code{disassemble} gives an
-alternative way of inspecting machine instructions; @pxref{Machine
+alternative way of inspecting machine instructions; see @ref{Machine
 Code,,Source and machine code}.
 
 All the defaults for the arguments to @code{x} are designed to make it
@@ -4206,7 +4552,7 @@ address printed if several units were printed on the last line of output.
 
 If you find that you want to print the value of an expression frequently
 (to see how it changes), you might want to add it to the @dfn{automatic
-display list} so that @value{GDBN} will print its value each time your program stops.
+display list} so that @value{GDBN} prints its value each time your program stops.
 Each expression added to the list is given a number to identify it;
 to remove an expression from the list, you specify that number.
 The automatic display looks like this:
@@ -4226,16 +4572,16 @@ or one of the two formats (@samp{i} and @samp{s}) that are only
 supported by @code{x}; otherwise it uses @code{print}.
 
 @table @code
-@item display @var{exp}
 @kindex display
-Add the expression @var{exp} to the list of expressions to display
+@item display @var{expr}
+Add the expression @var{expr} to the list of expressions to display
 each time your program stops.  @xref{Expressions, ,Expressions}.
 
-@code{display} will not repeat if you press @key{RET} again after using it.
+@code{display} does not repeat if you press @key{RET} again after using it.
 
-@item display/@var{fmt} @var{exp}
+@item display/@var{fmt} @var{expr}
 For @var{fmt} specifying only a display format and not a size or
-count, add the expression @var{exp} to the auto-display list but
+count, add the expression @var{expr} to the auto-display list but
 arrange to display it each time in the specified format @var{fmt}.
 @xref{Output Formats,,Output formats}.
 
@@ -4248,26 +4594,26 @@ doing @samp{x/@var{fmt} @var{addr}}.  @xref{Memory, ,Examining memory}.
 
 For example, @samp{display/i $pc} can be helpful, to see the machine
 instruction about to be executed each time execution stops (@samp{$pc}
-is a common name for the program counter; @pxref{Registers}).
+is a common name for the program counter; @pxref{Registers, ,Registers}).
 
 @table @code
-@item undisplay @var{dnums}@dots{}
-@itemx delete display @var{dnums}@dots{}
 @kindex delete display
 @kindex undisplay
+@item undisplay @var{dnums}@dots{}
+@itemx delete display @var{dnums}@dots{}
 Remove item numbers @var{dnums} from the list of expressions to display.
 
-@code{undisplay} will not repeat if you press @key{RET} after using it.
+@code{undisplay} does not repeat if you press @key{RET} after using it.
 (Otherwise you would just get the error @samp{No display number @dots{}}.)
 
-@item disable display @var{dnums}@dots{}
 @kindex disable display
+@item disable display @var{dnums}@dots{}
 Disable the display of item numbers @var{dnums}.  A disabled display
 item is not printed automatically, but is not forgotten.  It may be
 enabled again later.
 
-@item enable display @var{dnums}@dots{}
 @kindex enable display
+@item enable display @var{dnums}@dots{}
 Enable display of item numbers @var{dnums}.  It becomes effective once
 again in auto display of its expression, until you specify otherwise.
 
@@ -4275,8 +4621,8 @@ again in auto display of its expression, until you specify otherwise.
 Display the current values of the expressions on the list, just as is
 done when your program stops.
 
-@item info display
 @kindex info display
+@item info display
 Print the list of expressions previously set up to display
 automatically, each one with its item number, but without showing the
 values.  This includes disabled expressions, which are marked as such.
@@ -4289,11 +4635,11 @@ sense outside the lexical context for which it was set up.  Such an
 expression is disabled when execution enters a context where one of its
 variables is not defined.  For example, if you give the command
 @code{display last_char} while inside a function with an argument
-@code{last_char}, then this argument will be displayed while your program
+@code{last_char}, @value{GDBN} displays this argument while your program
 continues to stop inside that function.  When it stops elsewhere---where
-there is no variable @code{last_char}---display is disabled.  The next time
-your program stops where @code{last_char} is meaningful, you can enable the
-display expression once again.
+there is no variable @code{last_char}---the display is disabled
+automatically.  The next time your program stops where @code{last_char}
+is meaningful, you can enable the display expression once again.
 
 @node Print Settings
 @section Print settings
@@ -4307,13 +4653,13 @@ and symbols are printed.
 These settings are useful for debugging programs in any language:
 
 @table @code
+@kindex set print address
 @item set print address
 @itemx set print address on
-@kindex set print address
-@value{GDBN} will print memory addresses showing the location of stack
+@value{GDBN} prints memory addresses showing the location of stack
 traces, structure values, pointer values, breakpoints, and so forth,
 even when it also displays the contents of those addresses.  The default
-is on.  For example, this is what a stack frame display looks like, with
+is @code{on}.  For example, this is what a stack frame display looks like with
 @code{set print address on}:
 
 @smallexample
@@ -4343,22 +4689,22 @@ dependent displays from the @value{GDBN} interface.  For example, with
 @code{print address off}, you should get the same text for backtraces on
 all machines---whether or not they involve pointer arguments.
 
-@item show print address
 @kindex show print address
+@item show print address
 Show whether or not addresses are to be printed.
 @end table
 
 When @value{GDBN} prints a symbolic address, it normally prints the
 closest earlier symbol plus an offset.  If that symbol does not uniquely
 identify the address (for example, it is a name whose scope is a single
-source file), you may need to disambiguate.  One way to do this is with
-@code{info line}, for example @code{info line *0x4537}.  Alternately,
+source file), you may need to clarify.  One way to do this is with
+@code{info line}, for example @samp{info line *0x4537}.  Alternately,
 you can set @value{GDBN} to print the source file and line number when
 it prints a symbolic address:
 
 @table @code
-@item set print symbol-filename on
 @kindex set print symbol-filename
+@item set print symbol-filename on
 Tell @value{GDBN} to print the source file name and line number of a
 symbol in the symbolic form of an address.
 
@@ -4366,60 +4712,96 @@ symbol in the symbolic form of an address.
 Do not print source file name and line number of a symbol.  This is the
 default.
 
-@item show print symbol-filename
 @kindex show print symbol-filename
+@item show print symbol-filename
 Show whether or not @value{GDBN} will print the source file name and
 line number of a symbol in the symbolic form of an address.
 @end table
 
+Another situation where it is helpful to show symbol filenames and line
+numbers is when disassembling code; @value{GDBN} shows you the line
+number and source file that corresponds to each instruction.
+
 Also, you may wish to see the symbolic form only if the address being
 printed is reasonably close to the closest earlier symbol:
 
 @table @code
-@item set print max-symbolic-offset @var{max-offset}
 @kindex set print max-symbolic-offset
+@item set print max-symbolic-offset @var{max-offset}
 Tell @value{GDBN} to only display the symbolic form of an address if the
 offset between the closest earlier symbol and the address is less than
-@var{max-offset}.  The default is 0, which means to always print the
-symbolic form of an address, if any symbol precedes it.
+@var{max-offset}.  The default is 0, which tells @value{GDBN} 
+to always print the symbolic form of an address if any symbol precedes it.
 
-@item show print max-symbolic-offset
 @kindex show print max-symbolic-offset
-Ask how large the maximum offset is that @value{GDBN} will print in a
+@item show print max-symbolic-offset
+Ask how large the maximum offset is that @value{GDBN} prints in a
 symbolic address.
 @end table
 
-@table @code
+@cindex wild pointer, interpreting
+@cindex pointer, finding referent
+If you have a pointer and you are not sure where it points, try
+@samp{set print symbol-filename on}.  Then you can determine the name
+and source file location of the variable where it points, using
+@samp{p/a @var{pointer}}.  This interprets the address in symbolic form.
+For example, here @value{GDBN} shows that a variable @code{ptt} points
+at another variable @code{t}, defined in @file{hi2.c}:
+
+@example
+(@value{GDBP}) set print symbol-filename on
+(@value{GDBP}) p/a ptt
+$4 = 0xe008 <t in hi2.c>
+@end example
+
+@quotation
+@emph{Warning:} For pointers that point to a local variable, @samp{p/a}
+does not show the symbol name and filename of the referent, even with
+the appropriate @code{set print} options turned on.
+@end quotation
+
+Other settings control how different kinds of objects are printed:
+
+@table @code
+@kindex set print array
 @item set print array
 @itemx set print array on
-@kindex set print array
-@value{GDBN} will pretty-print arrays.  This format is more convenient to read,
+Pretty print arrays.  This format is more convenient to read,
 but uses more space.  The default is off.
 
 @item set print array off
 Return to compressed format for arrays.
 
-@item show print array
 @kindex show print array
+@item show print array
 Show whether compressed or pretty format is selected for displaying
 arrays.
 
-@item set print elements @var{number-of-elements}
 @kindex set print elements
-If @value{GDBN} is printing a large array, it will stop printing after it has
+@item set print elements @var{number-of-elements}
+Set a limit on how many elements of an array @value{GDBN} will print.
+If @value{GDBN} is printing a large array, it stops printing after it has
 printed the number of elements set by the @code{set print elements} command.
 This limit also applies to the display of strings.
-Setting the number of elements to zero means that the printing is unlimited.
+When @value{GDBN} starts, this limit is set to 200.
+Setting  @var{number-of-elements} to zero means that the printing is unlimited.
 
-@item show print elements
 @kindex show print elements
-Display the number of elements of a large array that @value{GDBN} will print
-before losing patience.
+@item show print elements
+Display the number of elements of a large array that @value{GDBN} will print.
+If the number is 0, then the printing is unlimited.
+
+@kindex set print null-stop
+@item set print null-stop
+Cause @value{GDBN} to stop printing the characters of an array when the first
+@sc{null} is encountered.  This is useful when large arrays actually
+contain only short strings.
+The default is off.
 
-@item set print pretty on
 @kindex set print pretty
-Cause @value{GDBN} to print structures in an indented format with one member per
-line, like this:
+@item set print pretty on
+Cause @value{GDBN} to print structures in an indented format with one member 
+per line, like this:
 
 @smallexample
 @group
@@ -4447,35 +4829,36 @@ meat = 0x54 "Pork"@}
 @noindent
 This is the default format.
 
-@item show print pretty
 @kindex show print pretty
-Show which format @value{GDBN} will use to print structures.
+@item show print pretty
+Show which format @value{GDBN} is using to print structures.
 
-@item set print sevenbit-strings on
 @kindex set print sevenbit-strings
+@item set print sevenbit-strings on
 Print using only seven-bit characters; if this option is set,
-@value{GDBN} will display any eight-bit characters (in strings or character
-values) using the notation @code{\}@var{nnn}.  For example, @kbd{M-a} is
-displayed as @code{\341}.
+@value{GDBN} displays any eight-bit characters (in strings or
+character values) using the notation @code{\}@var{nnn}.  This setting is
+best if you are working in English (@sc{ascii}) and you use the
+high-order bit of characters as a marker or ``meta'' bit.
 
 @item set print sevenbit-strings off
-Print using either seven-bit or eight-bit characters, as required.  This
-is the default.
+Print full eight-bit characters.  This allows the use of more
+international character sets, and is the default.
 
-@item show print sevenbit-strings
 @kindex show print sevenbit-strings
-Show whether or not @value{GDBN} will print only seven-bit characters.
+@item show print sevenbit-strings
+Show whether or not @value{GDBN} is printing only seven-bit characters.
 
-@item set print union on
 @kindex set print union
-Tell @value{GDBN} to print unions which are contained in structures.  This is the
-default setting.
+@item set print union on
+Tell @value{GDBN} to print unions which are contained in structures.  This 
+is the default setting.
 
 @item set print union off
 Tell @value{GDBN} not to print unions which are contained in structures.
 
-@item show print union
 @kindex show print union
+@item show print union
 Ask @value{GDBN} whether or not it will print unions which are contained in
 structures.
 
@@ -4513,39 +4896,39 @@ $1 = @{it = Tree, form = @{...@}@}
 @end smallexample
 @end table
 
-@ifclear CONLY
 @need 1000
 @noindent
 These settings are of interest when debugging C++ programs:
 
 @table @code
+@cindex demangling
+@kindex set print demangle
 @item set print demangle
 @itemx set print demangle on
-@kindex set print demangle
 Print C++ names in their source form rather than in the encoded
 (``mangled'') form passed to the assembler and linker for type-safe
-linkage.  The default is @samp{on}.
+linkage.  The default is on.
 
-@item show print demangle
 @kindex show print demangle
-Show whether C++ names will be printed in mangled or demangled form.
+@item show print demangle
+Show whether C++ names are printed in mangled or demangled form.
 
+@kindex set print asm-demangle
 @item set print asm-demangle
 @itemx set print asm-demangle on
-@kindex set print asm-demangle
 Print C++ names in their source form rather than their mangled form, even
 in assembler code printouts such as instruction disassemblies.
 The default is off.
 
-@item show print asm-demangle
 @kindex show print asm-demangle
-Show whether C++ names in assembly listings will be printed in mangled
+@item show print asm-demangle
+Show whether C++ names in assembly listings are printed in mangled
 or demangled form.
 
-@item set demangle-style @var{style}
 @kindex set demangle-style
 @cindex C++ symbol decoding style
 @cindex symbol decoding style, C++
+@item set demangle-style @var{style}
 Choose among several encoding schemes used by different compilers to
 represent C++ names.  The choices for @var{style} are currently:
 
@@ -4554,7 +4937,11 @@ represent C++ names.  The choices for @var{style} are currently:
 Allow @value{GDBN} to choose a decoding style by inspecting your program.
 
 @item gnu
-Decode based on the GNU C++ compiler (@code{g++}) encoding algorithm.
+Decode based on the @sc{gnu} C++ compiler (@code{g++}) encoding algorithm.  
+This is the default.
+
+@item hp
+Decode based on the HP ANSI C++ (@code{aCC}) encoding algorithm.
 
 @item lucid
 Decode based on the Lucid C++ compiler (@code{lcc}) encoding algorithm.
@@ -4564,15 +4951,17 @@ Decode using the algorithm in the @cite{C++ Annotated Reference Manual}.
 @strong{Warning:} this setting alone is not sufficient to allow
 debugging @code{cfront}-generated executables.  @value{GDBN} would
 require further enhancement to permit that.
+
 @end table
+If you omit @var{style}, you will see a list of possible formats.
 
-@item show demangle-style
 @kindex show demangle-style
+@item show demangle-style
 Display the encoding style currently in use for decoding C++ symbols.
 
+@kindex set print object
 @item set print object
 @itemx set print object on
-@kindex set print object
 When displaying a pointer to an object, identify the @emph{actual}
 (derived) type of the object rather than the @emph{declared} type, using
 the virtual function table.
@@ -4581,34 +4970,49 @@ the virtual function table.
 Display only the declared type of objects, without reference to the
 virtual function table.  This is the default setting.
 
-@item show print object
 @kindex show print object
-Show whether actual, or declared, object types will be displayed.
+@item show print object
+Show whether actual, or declared, object types are displayed.
 
+@kindex set print static-members
+@item set print static-members
+@itemx set print static-members on
+Print static members when displaying a C++ object.  The default is on.
+
+@item set print static-members off
+Do not print static members when displaying a C++ object.
+
+@kindex show print static-members
+@item show print static-members
+Show whether C++ static members are printed, or not.
+
+@c These don't work with HP ANSI C++ yet.
+@kindex set print vtbl
 @item set print vtbl
 @itemx set print vtbl on
-@kindex set print vtbl
 Pretty print C++ virtual function tables.  The default is off.
+(The @code{vtbl} commands do not work on programs compiled with the HP
+ANSI C++ compiler (@code{aCC}).)
 
 @item set print vtbl off
 Do not pretty print C++ virtual function tables.
 
-@item show print vtbl
 @kindex show print vtbl
+@item show print vtbl
 Show whether C++ virtual function tables are pretty printed, or not.
 @end table
-@end ifclear
 
 @node Value History
 @section Value history
 
 @cindex value history
-Values printed by the @code{print} command are saved in the @value{GDBN} @dfn{value
-history} so that you can refer to them in other expressions.  Values are
-kept until the symbol table is re-read or discarded (for example with
-the @code{file} or @code{symbol-file} commands).  When the symbol table
-changes, the value history is discarded, since the values may contain
-pointers back to the types defined in the symbol table.
+Values printed by the @code{print} command are saved in the @value{GDBN} 
+@dfn{value history}.  This allows you to refer to them in other expressions.  
+Values are kept until the symbol table is re-read or discarded 
+(for example with the @code{file} or @code{symbol-file} commands).  
+When the symbol table changes, the value history is discarded, 
+since the values may contain pointers back to the types defined in the 
+symbol table.
 
 @cindex @code{$}
 @cindex @code{$$}
@@ -4669,7 +5073,7 @@ Print ten history values centered on history item number @var{n}.
 
 @item show values +
 Print ten history values just after the values last printed.  If no more
-values are available, produces no display.
+values are available, @code{show values +} produces no display.
 @end table
 
 Pressing @key{RET} to repeat @code{show values @var{n}} has exactly the
@@ -4687,7 +5091,7 @@ of your program.  That is why you can use them freely.
 
 Convenience variables are prefixed with @samp{$}.  Any name preceded by
 @samp{$} can be used for a convenience variable, unless it is one of
-the predefined machine-specific register names (@pxref{Registers}).
+the predefined machine-specific register names (@pxref{Registers, ,Registers}).
 (Value history references, in contrast, are @emph{numbers} preceded
 by @samp{$}.  @xref{Value History, ,Value history}.)
 
@@ -4713,10 +5117,10 @@ that variable already has a value of a different type.  The convenience
 variable, when used as an expression, has the type of its current value.
 
 @table @code
-@item show convenience
 @kindex show convenience
+@item show convenience
 Print a list of convenience variables used so far, and their values.
-Abbreviated @code{show con}.
+Abbreviated @code{show conv}.
 @end table
 
 One of the ways to use a convenience variable is as a counter to be
@@ -4726,15 +5130,17 @@ a field from successive elements of an array of structures:
 @example
 set $i = 0
 print bar[$i++]->contents
-@i{@dots{} repeat that command by typing @key{RET}.}
 @end example
 
+@noindent
+Repeat that command by typing @key{RET}.
+
 Some convenience variables are created automatically by @value{GDBN} and given
 values likely to be useful.
 
 @table @code
-@item $_
 @kindex $_
+@item $_
 The variable @code{$_} is automatically set by the @code{x} command to
 the last address examined (@pxref{Memory, ,Examining memory}).  Other
 commands which provide a default address for @code{x} to examine also
@@ -4743,13 +5149,22 @@ and @code{info breakpoint}.  The type of @code{$_} is @code{void *}
 except when set by the @code{x} command, in which case it is a pointer
 to the type of @code{$__}.
 
-@item $__
 @kindex $__
+@item $__
 The variable @code{$__} is automatically set by the @code{x} command
 to the value found in the last address examined.  Its type is chosen
 to match the format in which the data was printed.
+
+@item $_exitcode
+@kindex $_exitcode
+The variable @code{$_exitcode} is automatically set to the exit code when
+the program being debugged terminates.
 @end table
 
+On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, @value{GDBN} searches for a user or system
+name first, before it searches for a convenience variable.
+
 @node Registers
 @section Registers
 
@@ -4760,21 +5175,22 @@ for each machine; use @code{info registers} to see the names used on
 your machine.
 
 @table @code
-@item info registers
 @kindex info registers
+@item info registers
 Print the names and values of all registers except floating-point
 registers (in the selected stack frame).
 
-@item info all-registers
 @kindex info all-registers
 @cindex floating point registers
+@item info all-registers
 Print the names and values of all registers, including floating-point
 registers.
 
 @item info registers @var{regname} @dots{}
-Print the relativized value of each specified register @var{regname}.  
-@var{regname} may be any register name valid on the machine you are using, with
-or without the initial @samp{$}.
+Print the @dfn{relativized} value of each specified register @var{regname}.
+As discussed in detail below, register values are normally relative to 
+the selected stack frame.  @var{regname} may be any register name valid on 
+the machine you are using, with or without the initial @samp{$}.
 @end table
 
 @value{GDBN} has four ``standard'' register names that are available (in
@@ -4804,7 +5220,7 @@ memory (most machines, nowadays).  This assumes that the innermost
 stack frame is selected; setting @code{$sp} is not allowed when other
 stack frames are selected.  To pop entire frames off the stack,
 regardless of machine architecture, use @code{return};
-@pxref{Returning, ,Returning from a function}.} with
+see @ref{Returning, ,Returning from a function}.} with
 
 @example
 set $sp += 4
@@ -4815,7 +5231,8 @@ your machine even though the machine has different canonical mnemonics,
 so long as there is no conflict.  The @code{info registers} command
 shows the canonical names.  For example, on the SPARC, @code{info
 registers} displays the processor status register as @code{$psr} but you
-can also refer to it as @code{$ps}.
+can also refer to it as @code{$ps}; and on x86-based machines @code{$ps}
+is an alias for the @sc{eflags} register.
 
 @value{GDBN} always considers the contents of an ordinary register as an
 integer when the register is examined in this way.  Some machines have
@@ -4831,8 +5248,8 @@ the operating system is not the same one that your program normally
 sees.  For example, the registers of the 68881 floating point
 coprocessor are always saved in ``extended'' (raw) format, but all C
 programs expect to work with ``double'' (virtual) format.  In such
-cases, @value{GDBN} normally works with the virtual format only (the format that
-makes sense for your program), but the @code{info registers} command
+cases, @value{GDBN} normally works with the virtual format only (the format 
+that makes sense for your program), but the @code{info registers} command
 prints the data in both formats.
 
 Normally, register values are relative to the selected stack frame
@@ -4845,84 +5262,47 @@ frame (with @samp{frame 0}).
 However, @value{GDBN} must deduce where registers are saved, from the machine
 code generated by your compiler.  If some registers are not saved, or if
 @value{GDBN} is unable to locate the saved registers, the selected stack
-frame will make no difference.
-
-@ifset AMD29K
-@table @code
-@item set rstack_high_address @var{address}
-@kindex set rstack_high_address
-@cindex AMD 29K register stack
-@cindex register stack, AMD29K
-On AMD 29000 family processors, registers are saved in a separate
-``register stack''.  There is no way for @value{GDBN} to determine the extent
-of this stack.  Normally, @value{GDBN} just assumes that the stack is ``large
-enough''.  This may result in @value{GDBN} referencing memory locations that
-do not exist.  If necessary, you can get around this problem by
-specifying the ending address of the register stack with the @code{set
-rstack_high_address} command.  The argument should be an address, which
-you will probably want to precede with @samp{0x} to specify in
-hexadecimal.
-
-@item show rstack_high_address
-@kindex show rstack_high_address
-Display the current limit of the register stack, on AMD 29000 family
-processors.
-@end table
-@end ifset
+frame makes no difference.
 
-@ifclear HAVE-FLOAT
 @node Floating Point Hardware
 @section Floating point hardware
 @cindex floating point
 
-@c FIXME! Really host, not target?
-Depending on the host machine architecture, @value{GDBN} may be able to give
+Depending on the configuration, @value{GDBN} may be able to give
 you more information about the status of the floating point hardware.
 
 @table @code
-@item info float
 @kindex info float
+@item info float
 Display hardware-dependent information about the floating
 point unit.  The exact contents and layout vary depending on the
-floating point chip; on some platforms, @samp{info float} is not
-available at all.
+floating point chip.  Currently, @samp{info float} is supported on
+the ARM and x86 machines.
 @end table
-@c FIXME: this is a cop-out.  Try to get examples, explanations.  Only
-@c FIXME...supported currently on arm's and 386's.  Mark properly with
-@c FIXME... m4 macros to isolate general statements from hardware-dep,
-@c FIXME... at that point.
-@end ifclear
 
-@ifclear CONLY
 @node Languages
 @chapter Using @value{GDBN} with Different Languages
 @cindex languages
 
-@ifset MOD2
 Although programming languages generally have common aspects, they are
 rarely expressed in the same manner.  For instance, in ANSI C,
 dereferencing a pointer @code{p} is accomplished by @code{*p}, but in
 Modula-2, it is accomplished by @code{p^}.  Values can also be
-represented (and displayed) differently.  Hex numbers in C are written
-like @samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}.
-@end ifset
+represented (and displayed) differently.  Hex numbers in C appear as 
+@samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}.
 
 @cindex working language
 Language-specific information is built into @value{GDBN} for some languages,
 allowing you to express operations like the above in your program's
 native language, and allowing @value{GDBN} to output values in a manner
 consistent with the syntax of your program's native language.  The
-language you use to build expressions, called the @dfn{working
-language}, can be selected manually, or @value{GDBN} can set it
-automatically.
+language you use to build expressions is called the @dfn{working
+language}.
 
 @menu
 * Setting::                     Switching between source languages
 * Show::                        Displaying the language
-@ifset MOD2
 * Checks::                      Type and range checks
-@end ifset
-
 * Support::                     Supported languages
 @end menu
 
@@ -4932,13 +5312,74 @@ automatically.
 There are two ways to control the working language---either have @value{GDBN}
 set it automatically, or select it manually yourself.  You can use the
 @code{set language} command for either purpose.  On startup, @value{GDBN}
-defaults to setting the language automatically.
+defaults to setting the language automatically.  The working language is
+used to determine how expressions you type are interpreted, how values
+are printed, etc.
+
+In addition to the working language, every source file that
+@value{GDBN} knows about has its own working language.  For some object
+file formats, the compiler might indicate which language a particular
+source file is in.  However, most of the time @value{GDBN} infers the
+language from the name of the file.  The language of a source file
+controls whether C++ names are demangled---this way @code{backtrace} can
+show each frame appropriately for its own language.  There is no way to
+set the language of a source file from within @value{GDBN}, but you can
+set the language associated with a filename extension.  @xref{Show, ,
+Displaying the language}.
+
+This is most commonly a problem when you use a program, such
+as @code{cfront} or @code{f2c}, that generates C but is written in 
+another language.  In that case, make the
+program use @code{#line} directives in its C output; that way
+@value{GDBN} will know the correct language of the source code of the original
+program, and will display that source code, not the generated C code.
 
 @menu
+* Filenames::                   Filename extensions and languages.
 * Manually::                    Setting the working language manually
 * Automatically::               Having @value{GDBN} infer the source language
 @end menu
 
+@node Filenames
+@subsection List of filename extensions and languages
+
+If a source file name ends in one of the following extensions, then
+@value{GDBN} infers that its language is the one indicated.
+
+@table @file
+
+@item .c
+C source file
+
+@item .C
+@itemx .cc
+@itemx .cp
+@itemx .cpp
+@itemx .cxx
+@itemx .c++
+C++ source file
+
+@item .f
+@itemx .F
+Fortran source file
+
+@item .ch
+@itemx .c186
+@itemx .c286
+CHILL source file.
+
+@item .mod
+Modula-2 source file
+
+@item .s
+@itemx .S
+Assembler source file.  This actually behaves almost like C, but
+@value{GDBN} does not skip over function prologues when stepping.
+@end table
+
+In addition, you may set the language associated with a filename
+extension.  @xref{Show, , Displaying the language}.
+
 @node Manually
 @subsection Setting the working language
 
@@ -4950,16 +5391,9 @@ your program.
 If you wish, you may set the language manually.  To do this, issue the
 command @samp{set language @var{lang}}, where @var{lang} is the name of
 a language, such as 
-@ifclear MOD2
-@code{c}.
-@end ifclear
-@ifset MOD2
 @code{c} or @code{modula-2}.
-@end ifset
 For a list of the supported languages, type @samp{set language}.
-@c FIXME: rms: eventually this command should be "help set language".
 
-@ifset MOD2
 Setting the language manually prevents @value{GDBN} from updating the working
 language automatically.  This can lead to confusion if you try
 to debug a program when the working language is not the same as the
@@ -4977,37 +5411,19 @@ might not have the effect you intended.  In C, this means to add
 @code{b} and @code{c} and place the result in @code{a}.  The result
 printed would be the value of @code{a}.  In Modula-2, this means to compare
 @code{a} to the result of @code{b+c}, yielding a @code{BOOLEAN} value.
-@end ifset
 
 @node Automatically
 @subsection Having @value{GDBN} infer the source language
 
-To have @value{GDBN} set the working language automatically, use @samp{set
-language local} or @samp{set language auto}.  @value{GDBN} then infers the
-language that a program was written in by looking at the name of its
-source files, and examining their extensions:
-
-@table @file
-@ifset MOD2
-@item *.mod
-Modula-2 source file
-@end ifset
-
-@item *.c
-C source file
-
-@item *.C
-@itemx *.cc
-C++ source file
-@end table
-
-This information is recorded for each function or procedure in a source
-file.  When your program stops in a frame (usually by encountering a
-breakpoint), @value{GDBN} sets the working language to the language recorded
-for the function in that frame.  If the language for a frame is unknown
-(that is, if the function or block corresponding to the frame was
-defined in a source file that does not have a recognized extension), the
-current working language is not changed, and @value{GDBN} issues a warning.
+To have @value{GDBN} set the working language automatically, use
+@samp{set language local} or @samp{set language auto}.  @value{GDBN}
+then infers the working language.  That is, when your program stops in a
+frame (usually by encountering a breakpoint), @value{GDBN} sets the
+working language to the language recorded for the function in that
+frame.  If the language for a frame is unknown (that is, if the function
+or block corresponding to the frame was defined in a source file that
+does not have a recognized extension), the current working language is
+not changed, and @value{GDBN} issues a warning.
 
 This may not seem necessary for most programs, which are written
 entirely in one source language.  However, program modules and libraries
@@ -5018,12 +5434,12 @@ case frees you from having to set the working language manually.
 @node Show
 @section Displaying the language
 
-The following commands will help you find out which language is the
+The following commands help you find out which language is the
 working language, and also what language source files were written in.
 
 @kindex show language
-@kindex info frame
-@kindex info source
+@kindex info frame@r{, show the source language}
+@kindex info source@r{, show the source language}
 @table @code
 @item show language
 Display the current working language.  This is the
@@ -5031,17 +5447,32 @@ language you can use with commands such as @code{print} to
 build and compute expressions that may involve variables in your program.
 
 @item info frame
-Among the other information listed here (@pxref{Frame Info, ,Information
-about a frame}) is the source language for this frame.  This is the
-language that will become the working language if you ever use an
-identifier that is in this frame.
+Display the source language for this frame.  This language becomes the 
+working language if you use an identifier from this frame.
+@xref{Frame Info, ,Information about a frame}, to identify the other 
+information listed here.
 
 @item info source
-Among the other information listed here (@pxref{Symbols, ,Examining the
-Symbol Table}) is the source language of this source file.
+Display the source language of this source file.
+@xref{Symbols, ,Examining the Symbol Table}, to identify the other 
+information listed here.
+@end table
+
+In unusual circumstances, you may have source files with extensions
+not in the standard list.  You can then set the extension associated
+with a language explicitly:
+
+@kindex set extension-language
+@kindex info extensions
+@table @code
+@item set extension-language @var{.ext} @var{language}
+Set source files with extension @var{.ext} to be assumed to be in
+the source language @var{language}.
+
+@item info extensions
+List all the filename extensions and the associated languages.
 @end table
 
-@ifset MOD2
 @node Checks
 @section Type and range checking
 
@@ -5061,7 +5492,7 @@ by eliminating type mismatches, and providing active checks for range
 errors when your program is running.
 
 @value{GDBN} can check for conditions like the above if you wish.
-Although @value{GDBN} will not check the statements in your program, it
+Although @value{GDBN} does not check the statements in your program, it
 can check expressions entered directly into @value{GDBN} for evaluation via
 the @code{print} command, for example.  As with the working language,
 @value{GDBN} can also decide whether or not to check automatically based on
@@ -5083,28 +5514,29 @@ arguments to operators and functions have to be of the correct type,
 otherwise an error occurs.  These checks prevent type mismatch
 errors from ever causing any run-time problems.  For example,
 
-@example
+@smallexample
 1 + 2 @result{} 3
 @exdent but
 @error{} 1 + 2.3
-@end example
+@end smallexample
 
 The second example fails because the @code{CARDINAL} 1 is not
 type-compatible with the @code{REAL} 2.3.
 
-For expressions you use in @value{GDBN} commands, you can tell the @value{GDBN}
-type checker to skip checking; to treat any mismatches as errors and
-abandon the expression; or only issue warnings when type mismatches
-occur, but evaluate the expression anyway.  When you choose the last of
+For the expressions you use in @value{GDBN} commands, you can tell the 
+@value{GDBN} type checker to skip checking; 
+to treat any mismatches as errors and abandon the expression; 
+or to only issue warnings when type mismatches occur, 
+but evaluate the expression anyway.  When you choose the last of
 these, @value{GDBN} evaluates expressions like the second example above, but
 also issues a warning.
 
-Even though you may turn type checking off, other type-based reasons may
-prevent @value{GDBN} from evaluating an expression.  For instance, @value{GDBN} does not
-know how to add an @code{int} and a @code{struct foo}.  These particular
-type errors have nothing to do with the language in use, and usually
-arise from expressions, such as the one described above, which make
-little sense to evaluate anyway.
+Even if you turn type checking off, there may be other reasons 
+related to type that prevent @value{GDBN} from evaluating an expression.  
+For instance, @value{GDBN} does not know how to add an @code{int} and 
+a @code{struct foo}.  These particular type errors have nothing to do 
+with the language in use, and usually arise from expressions, such as 
+the one described above, which make little sense to evaluate anyway.
 
 Each language defines to what degree it is strict about type.  For
 instance, both Modula-2 and C require the arguments to arithmetical
@@ -5115,7 +5547,7 @@ details on specific languages.
 
 @value{GDBN} provides some additional commands for controlling the type checker:
 
-@kindex set check
+@kindex set check@r{, type}
 @kindex set check type
 @kindex show check type
 @table @code
@@ -5129,7 +5561,7 @@ each language.
 Set type checking on or off, overriding the default setting for the
 current working language.  Issue a warning if the setting does not
 match the language default.  If any type mismatches occur in
-evaluating an expression while typechecking is on, @value{GDBN} prints a
+evaluating an expression while type checking is on, @value{GDBN} prints a
 message and aborts evaluation of the expression.
 
 @item set check type warn
@@ -5139,8 +5571,8 @@ be impossible for other reasons.  For example, @value{GDBN} cannot add
 numbers and structures.
 
 @item show type
-Show the current setting of the type checker, and whether or not @value{GDBN} is
-setting it automatically.
+Show the current setting of the type checker, and whether or not @value{GDBN} 
+is setting it automatically.
 @end table
 
 @cindex range checking
@@ -5176,7 +5608,7 @@ Supported languages}, for further details on specific languages.
 
 @value{GDBN} provides some additional commands for controlling the range checker:
 
-@kindex set check
+@kindex set check@r{, range}
 @kindex set check range
 @kindex show check range
 @table @code
@@ -5189,8 +5621,8 @@ each language.
 @itemx set check range off
 Set range checking on or off, overriding the default setting for the
 current working language.  A warning is issued if the setting does not
-match the language default.  If a range error occurs, then a message
-is printed and evaluation of the expression is aborted.
+match the language default.  If a range error occurs and range checking is on,
+then a message is printed and evaluation of the expression is aborted.
 
 @item set check range warn
 Output messages when the @value{GDBN} range checker detects a range error,
@@ -5203,17 +5635,12 @@ systems).
 Show the current setting of the range checker, and whether or not it is
 being set automatically by @value{GDBN}.
 @end table
-@end ifset
 
 @node Support
 @section Supported languages
 
-@ifset MOD2
-@value{GDBN} 4 supports C, C++, and Modula-2.
-@end ifset
-@ifclear MOD2
-@value{GDBN} 4 supports C, and C++.
-@end ifclear
+@value{GDBN} supports C, C++, Fortran, Java, Chill, assembly, and Modula-2.
+@c This is false ...
 Some @value{GDBN} features may be used in expressions regardless of the
 language you use: the @value{GDBN} @code{@@} and @code{::} operators,
 and the @samp{@{type@}addr} construct (@pxref{Expressions,
@@ -5223,109 +5650,79 @@ language.
 The following sections detail to what degree each source language is
 supported by @value{GDBN}.  These sections are not meant to be language
 tutorials or references, but serve only as a reference guide to what the
-@value{GDBN} expression parser will accept, and what input and output
+@value{GDBN} expression parser accepts, and what input and output
 formats should look like for different languages.  There are many good
 books written on each of these languages; please look to these for a
 language reference or tutorial.
 
-@ifset MOD2
 @menu
-* C::                           C and C++
-* Modula-2::                    Modula-2
+* C::           C and C++
+* Modula-2::    Modula-2
+* Chill::        Chill
 @end menu
 
 @node C
 @subsection C and C++
+
 @cindex C and C++
 @cindex expressions in C or C++
 
 Since C and C++ are so closely related, many features of @value{GDBN} apply
-to both languages.  Whenever this is the case, we discuss both languages
+to both languages.  Whenever this is the case, we discuss those languages
 together.
-@end ifset
-@ifclear MOD2
-@c Cancel this below, under same condition, at end of this chapter!
-@raisesections
-@end ifclear
 
 @cindex C++
 @kindex g++
-@cindex GNU C++
-The C++ debugging facilities are jointly implemented by the GNU C++
+@cindex @sc{gnu} C++
+The C++ debugging facilities are jointly implemented by the C++
 compiler and @value{GDBN}.  Therefore, to debug your C++ code
-effectively, you must compile your C++ programs with the GNU C++
-compiler, @code{g++}.
+effectively, you must compile your C++ programs with a supported
+C++ compiler, such as @sc{gnu} @code{g++}, or the HP ANSI C++
+compiler (@code{aCC}).
 
-For best results when debugging C++ programs, use the stabs debugging
+For best results when using @sc{gnu} C++, use the stabs debugging
 format.  You can select that format explicitly with the @code{g++}
 command-line options @samp{-gstabs} or @samp{-gstabs+}.  See
-@ref{Debugging Options,,Options for Debugging Your Program or GNU CC,
-gcc.info, Using GNU CC}, for more information.
-@end ifclear
-@ifset CONLY
-@node C
-@chapter C Language Support
-@cindex C language
-@cindex expressions in C
+@ref{Debugging Options,,Options for Debugging Your Program or @sc{gnu}
+CC, gcc.info, Using @sc{gnu} CC}, for more information.
 
-Information specific to the C language is built into @value{GDBN} so that you
-can use C expressions while degugging.  This also permits @value{GDBN} to
-output values in a manner consistent with C conventions.
-
-@menu
-* C Operators::                 C operators
-* C Constants::                 C constants
-* Debugging C::                 @value{GDBN} and C
-@end menu
-@end ifset
-@ifclear CONLY
 @menu
 * C Operators::                 C and C++ operators
 * C Constants::                 C and C++ constants
-* Cplus expressions::           C++ expressions
+* C plus plus expressions::     C++ expressions
 * C Defaults::                  Default settings for C and C++
-@ifset MOD2
 * C Checks::                    C and C++ type and range checks
-@end ifset
-
 * Debugging C::                 @value{GDBN} and C
-* Debugging C plus plus::       Special features for C++
+* Debugging C plus plus::       @value{GDBN} features for C++
 @end menu
-@end ifclear
 
-@ifclear CONLY
-@cindex C and C++ operators
 @node C Operators
 @subsubsection C and C++ operators
-@end ifclear
-@ifset CONLY
-@cindex C operators
-@node C Operators
-@section C operators
-@end ifset
+
+@cindex C and C++ operators
 
 Operators must be defined on values of specific types.  For instance,
 @code{+} is defined on numbers, but not on structures.  Operators are
 often defined on groups of types.  
 
-@ifclear CONLY
 For the purposes of C and C++, the following definitions hold:
-@end ifclear
 
 @itemize @bullet
+
 @item
 @emph{Integral types} include @code{int} with any of its storage-class
-specifiers; @code{char}; and @code{enum}.
+specifiers; @code{char}; @code{enum}; and, for C++, @code{bool}.
 
 @item
-@emph{Floating-point types} include @code{float} and @code{double}.
+@emph{Floating-point types} include @code{float}, @code{double}, and
+@code{long double} (if supported by the target platform).
 
 @item
-@emph{Pointer types} include all types defined as @code{(@var{type}
-*)}.
+@emph{Pointer types} include all types defined as @code{(@var{type} *)}.
 
 @item
 @emph{Scalar types} include all of the above.
+
 @end itemize
 
 @noindent
@@ -5345,7 +5742,7 @@ assigned.  Defined on scalar types.
 @item @var{op}=
 Used in an expression of the form @w{@code{@var{a} @var{op}= @var{b}}},
 and translated to @w{@code{@var{a} = @var{a op b}}}.
-@w{@code{@var{op}=}} and @code{=} have the same precendence.
+@w{@code{@var{op}=}} and @code{=} have the same precedence.
 @var{op} is any one of the operators @code{|}, @code{^}, @code{&},
 @code{<<}, @code{>>}, @code{+}, @code{-}, @code{*}, @code{/}, @code{%}.
 
@@ -5406,13 +5803,11 @@ Pointer dereferencing.  Defined on pointer types.  Same precedence as
 @item &
 Address operator.  Defined on variables.  Same precedence as @code{++}.
 
-@ifclear CONLY
 For debugging C++, @value{GDBN} implements a use of @samp{&} beyond what is
 allowed in the C++ language itself: you can use @samp{&(&@var{ref})}
 (or, if you prefer, simply @samp{&&@var{ref}}) to examine the address
 where a C++ reference variable (declared with @samp{&@var{ref}}) is
 stored.
-@end ifclear
 
 @item -
 Negative.  Defined on integral and floating-point types.  Same
@@ -5433,6 +5828,9 @@ Structure member, and pointer-to-structure member.  For convenience,
 pointer based on the stored type information.
 Defined on @code{struct} and @code{union} data.
 
+@item .*@r{, }->*
+Dereferences of pointers to members.
+
 @item []
 Array indexing.  @code{@var{a}[@var{i}]} is defined as
 @code{*(@var{a}+@var{i})}.  Same precedence as @code{->}.
@@ -5440,45 +5838,36 @@ Array indexing.  @code{@var{a}[@var{i}]} is defined as
 @item ()
 Function parameter list.  Same precedence as @code{->}.
 
-@ifclear CONLY
 @item ::
-C++ scope resolution operator.  Defined on
-@code{struct}, @code{union}, and @code{class} types.
-@end ifclear
+C++ scope resolution operator.  Defined on @code{struct}, @code{union},
+and @code{class} types.
 
 @item ::
-Doubled colons
-@ifclear CONLY
-also
-@end ifclear
-represent the @value{GDBN} scope operator (@pxref{Expressions,
-,Expressions}).
-@ifclear CONLY
-Same precedence as @code{::}, above.
-@end ifclear
-@end table
-
-@ifclear CONLY
-@cindex C and C++ constants
+Doubled colons also represent the @value{GDBN} scope operator
+(@pxref{Expressions, ,Expressions}).  Same precedence as @code{::},
+above.
+@end table
+
+If an operator is redefined in the user code, @value{GDBN} usually
+attempts to invoke the redefined version instead of using the operator's
+predefined meaning.
+
+@menu
+* C Constants::             
+@end menu
+
 @node C Constants
 @subsubsection C and C++ constants
 
-@value{GDBN} allows you to express the constants of C and C++ in the
-following ways:
-@end ifclear
-@ifset CONLY
-@cindex C constants
-@node C Constants
-@section C constants
+@cindex C and C++ constants
 
-@value{GDBN} allows you to express the constants of C in the
+@value{GDBN} allows you to express the constants of C and C++ in the
 following ways:
-@end ifset
 
 @itemize @bullet
 @item
 Integer constants are a sequence of digits.  Octal constants are
-specified by a leading @samp{0} (ie. zero), and hexadecimal constants by
+specified by a leading @samp{0} (i.e. zero), and hexadecimal constants by
 a leading @samp{0x} or @samp{0X}.  Constants may also end with a letter
 @samp{l}, specifying that the constant should be treated as a
 @code{long} value.
@@ -5489,6 +5878,11 @@ point, followed by a sequence of digits, and optionally followed by an
 exponent.  An exponent is of the form:
 @samp{@w{e@r{[[}+@r{]|}-@r{]}@var{nnn}}}, where @var{nnn} is another
 sequence of digits.  The @samp{+} is optional for positive exponents.
+A floating-point constant may also end with a letter @samp{f} or
+@samp{F}, specifying that the constant should be treated as being of
+the @code{float} (as opposed to the default @code{double}) type; or with
+a letter @samp{l} or @samp{L}, which specifies a @code{long double}
+constant.
 
 @item
 Enumerated constants consist of enumerated identifiers, or their
@@ -5497,7 +5891,7 @@ integral equivalents.
 @item
 Character constants are a single character surrounded by single quotes
 (@code{'}), or a number---the ordinal value of the corresponding character
-(usually its @sc{ASCII} value).  Within quotes, the single character may
+(usually its @sc{ascii} value).  Within quotes, the single character may
 be represented by a letter or by @dfn{escape sequences}, which are of
 the form @samp{\@var{nnn}}, where @var{nnn} is the octal representation
 of the character's ordinal value; or of the form @samp{\@var{x}}, where
@@ -5519,13 +5913,19 @@ integers, @samp{@{@{1,2@}, @{3,4@}, @{5,6@}@}} is a three-by-two array,
 and @samp{@{&"hi", &"there", &"fred"@}} is a three-element array of pointers.
 @end itemize
 
-@ifclear CONLY
-@node Cplus expressions
+@menu
+* C plus plus expressions::           
+* C Defaults::                  
+* C Checks::                    
+
+* Debugging C::                 
+@end menu
+
+@node C plus plus expressions
 @subsubsection C++ expressions
 
 @cindex expressions in C++
-@value{GDBN} expression handling has a number of extensions to
-interpret a significant subset of C++ expressions.
+@value{GDBN} expression handling can interpret most C++ expressions.
 
 @cindex C++ support, not in @sc{coff}
 @cindex @sc{coff} versus C++
@@ -5536,18 +5936,19 @@ interpret a significant subset of C++ expressions.
 @cindex @sc{xcoff} and C++
 @cindex @sc{elf}/stabs and C++
 @cindex @sc{elf}/@sc{dwarf} and C++
+@c FIXME!! GDB may eventually be able to debug C++ using DWARF; check
+@c periodically whether this has happened...
 @quotation
-@emph{Warning:} Most of these extensions depend on the use of additional
-debugging information in the symbol table, and thus require a rich,
-extendable object code format.  In particular, if your system uses
-a.out, MIPS @sc{ecoff}, RS/6000 @sc{xcoff}, or Sun @sc{elf} with stabs
-extensions to the symbol table, these facilities are all available.
-Where the object code format is standard @sc{coff}, on the other hand,
-most of the C++ support in @value{GDBN} will @emph{not} work, nor can it.
-For the standard SVr4 debugging format, @sc{dwarf} in @sc{elf}, the
-standard is still evolving, so the C++ support in @value{GDBN} is still
-fragile; when this debugging format stabilizes, however, C++ support
-will also be available on systems that use it.
+@emph{Warning:} @value{GDBN} can only debug C++ code if you use the
+proper compiler.  Typically, C++ debugging depends on the use of
+additional debugging information in the symbol table, and thus requires
+special support.  In particular, if your compiler generates a.out, MIPS
+@sc{ecoff}, RS/6000 @sc{xcoff}, or @sc{elf} with stabs extensions to the
+symbol table, these facilities are all available.  (With @sc{gnu} CC,
+you can use the @samp{-gstabs} option to request stabs debugging
+extensions explicitly.)  Where the object code format is standard
+@sc{coff} or @sc{dwarf} in @sc{elf}, on the other hand, most of the C++
+support in @value{GDBN} does @emph{not} work.
 @end quotation
 
 @enumerate
@@ -5569,18 +5970,39 @@ that is, @value{GDBN} allows implicit references to the class instance
 pointer @code{this} following the same rules as C++.
 
 @cindex call overloaded functions
+@cindex overloaded functions, calling
 @cindex type conversions in C++
 @item
-You can call overloaded functions; @value{GDBN} will resolve the function
-call to the right definition, with one restriction---you must use
-arguments of the type required by the function that you want to call.
-@value{GDBN} will not perform conversions requiring constructors or
-user-defined type operators.
+You can call overloaded functions; @value{GDBN} resolves the function
+call to the right definition, with some restrictions.  @value{GDBN} does not
+perform overload resolution involving user-defined type conversions,
+calls to constructors, or instantiations of templates that do not exist
+in the program.  It also cannot handle ellipsis argument lists or
+default arguments.
+
+It does perform integral conversions and promotions, floating-point
+promotions, arithmetic conversions, pointer conversions, conversions of
+class objects to base classes, and standard conversions such as those of
+functions or arrays to pointers; it requires an exact match on the
+number of function arguments.
+
+Overload resolution is always performed, unless you have specified
+@code{set overload-resolution off}.  @xref{Debugging C plus plus,
+,@value{GDBN} features for C++}.
+
+You must specify @code{set overload-resolution off} in order to use an
+explicit function signature to call an overloaded function, as in
+@smallexample
+p 'foo(char,int)'('x', 13)
+@end smallexample
+
+The @value{GDBN} command-completion facility can simplify this;
+see @ref{Completion, ,Command completion}.
 
 @cindex reference declarations
 @item
-@value{GDBN} understands variables declared as C++ references; you can use them in
-expressions just as you do in C++ source---they are automatically
+@value{GDBN} understands variables declared as C++ references; you can use 
+them in expressions just as you do in C++ source---they are automatically
 dereferenced.
 
 In the parameter list shown when @value{GDBN} displays a frame, the values of
@@ -5599,32 +6021,40 @@ resolving name scope by reference to source files, in both C and C++
 debugging (@pxref{Variables, ,Program variables}).
 @end enumerate
 
+In addition, when used with HP's C++ compiler, @value{GDBN} supports
+calling virtual functions correctly, printing out virtual bases of
+objects, calling functions in a base subobject, casting objects, and
+invoking user-defined operators.
+
 @node C Defaults
 @subsubsection C and C++ defaults
+
 @cindex C and C++ defaults
 
 If you allow @value{GDBN} to set type and range checking automatically, they
 both default to @code{off} whenever the working language changes to
-C or C++.  This happens regardless of whether you, or @value{GDBN},
-selected the working language.
+C or C++.  This happens regardless of whether you or @value{GDBN}
+selects the working language.
 
-If you allow @value{GDBN} to set the language automatically, it sets the
-working language to C or C++ on entering code compiled from a source file
-whose name ends with @file{.c}, @file{.C}, or @file{.cc}.
-@xref{Automatically, ,Having @value{GDBN} infer the source language}, for
-further details.
+If you allow @value{GDBN} to set the language automatically, it
+recognizes source files whose names end with @file{.c}, @file{.C}, or
+@file{.cc}, etc, and when @value{GDBN} enters code compiled from one of
+these files, it sets the working language to C or C++.
+@xref{Automatically, ,Having @value{GDBN} infer the source language},
+for further details.
 
-@ifset MOD2
 @c Type checking is (a) primarily motivated by Modula-2, and (b)
 @c unimplemented.  If (b) changes, it might make sense to let this node
-@c appear even if Mod-2 does not, but meanwhile ignore it.  pesch 16jul93.
+@c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93.
+
 @node C Checks
 @subsubsection C and C++ type and range checks
+
 @cindex C and C++ checks
 
 By default, when @value{GDBN} parses C or C++ expressions, type checking
-is not used.  However, if you turn type checking on, @value{GDBN} will
-consider two variables type equivalent if:
+is not used.  However, if you turn type checking on, @value{GDBN}
+considers two variables type equivalent if:
 
 @itemize @bullet
 @item
@@ -5632,7 +6062,7 @@ The two variables are structured and have the same structure, union, or
 enumerated tag.
 
 @item
-Two two variables have the same type name, or types that have been
+The two variables have the same type name, or types that have been
 declared equivalent through @code{typedef}.
 
 @ignore
@@ -5648,36 +6078,28 @@ compilers.)
 Range checking, if turned on, is done on mathematical operations.  Array
 indices are not checked, since they are often used to index a pointer
 that is not itself an array.
-@end ifset
-@end ifclear
 
-@ifclear CONLY
 @node Debugging C
 @subsubsection @value{GDBN} and C
-@end ifclear
-@ifset CONLY
-@node Debugging C
-@section @value{GDBN} and C
-@end ifset
 
 The @code{set print union} and @code{show print union} commands apply to
 the @code{union} type.  When set to @samp{on}, any @code{union} that is
-inside a @code{struct}
-@ifclear CONLY
-or @code{class}
-@end ifclear
-will also be printed.
-Otherwise, it will appear as @samp{@{...@}}.
+inside a @code{struct} or @code{class} is also printed.  Otherwise, it
+appears as @samp{@{...@}}.
 
 The @code{@@} operator aids in the debugging of dynamic arrays, formed
 with pointers and a memory allocation function.  @xref{Expressions,
 ,Expressions}.
 
-@ifclear CONLY
+@menu
+* Debugging C plus plus::       
+@end menu
+
 @node Debugging C plus plus
 @subsubsection @value{GDBN} features for C++
 
 @cindex commands for C++
+
 Some @value{GDBN} commands are particularly useful with C++, and some are
 designed specifically for use with C++.  Here is a summary:
 
@@ -5696,10 +6118,10 @@ classes.
 @xref{Set Breaks, ,Setting breakpoints}.
 
 @cindex C++ exception handling
-@item catch @var{exceptions}
-@itemx info catch
-Debug C++ exception handling using these commands.  @xref{Exception
-Handling, ,Breakpoints and exceptions}.
+@item catch throw
+@itemx catch catch
+Debug C++ exception handling using these commands.  @xref{Set
+Catchpoints, , Setting catchpoints}.
 
 @cindex inheritance
 @item ptype @var{typename}
@@ -5725,6 +6147,27 @@ Choose whether to print derived (actual) or declared types of objects.
 @itemx show print vtbl
 Control the format for printing virtual function tables.
 @xref{Print Settings, ,Print settings}.
+(The @code{vtbl} commands do not work on programs compiled with the HP
+ANSI C++ compiler (@code{aCC}).)
+
+@kindex set overload-resolution
+@cindex overloaded functions, overload resolution
+@item set overload-resolution on
+Enable overload resolution for C++ expression evaluation.  The default
+is on.  For overloaded functions, @value{GDBN} evaluates the arguments
+and searches for a function whose signature matches the argument types,
+using the standard C++ conversion rules (see @ref{C plus plus expressions, ,C++
+expressions}, for details).  If it cannot find a match, it emits a
+message.
+
+@item set overload-resolution off
+Disable overload resolution for C++ expression evaluation.  For
+overloaded functions that are not class member functions, @value{GDBN}
+chooses the first function of the specified name that it finds in the
+symbol table, whether or not its arguments are of the correct type.  For
+overloaded functions that are class member functions, @value{GDBN}
+searches for a function whose signature @emph{exactly} matches the
+argument types.
 
 @item @r{Overloaded symbol names}
 You can specify a particular definition of an overloaded symbol, using
@@ -5734,27 +6177,23 @@ also use the @value{GDBN} command-line word completion facilities to list the
 available choices, or to finish the type list for you.
 @xref{Completion,, Command completion}, for details on how to do this.
 @end table
-@ifclear MOD2
-@c cancels "raisesections" under same conditions near bgn of chapter
-@lowersections
-@end ifclear
 
-@ifset MOD2
 @node Modula-2
 @subsection Modula-2
-@cindex Modula-2
+
+@cindex Modula-2, @value{GDBN} support
 
 The extensions made to @value{GDBN} to support Modula-2 only support
-output from the GNU Modula-2 compiler (which is currently being
+output from the @sc{gnu} Modula-2 compiler (which is currently being
 developed).  Other Modula-2 compilers are not currently supported, and
-attempting to debug executables produced by them will most likely
-result in an error as @value{GDBN} reads in the executable's symbol
+attempting to debug executables produced by them is most likely
+to give an error as @value{GDBN} reads in the executable's symbol
 table.
 
 @cindex expressions in Modula-2
 @menu
 * M2 Operators::                Built-in operators
-* Built-In Func/Proc::           Built-in functions and procedures
+* Built-In Func/Proc::          Built-in functions and procedures
 * M2 Constants::                Modula-2 constants
 * M2 Defaults::                 Default settings for Modula-2
 * Deviations::                  Deviations from standard Modula-2
@@ -5833,7 +6272,7 @@ Same precedence as @code{<}.
 Boolean disjunction.  Defined on boolean types.
 
 @item AND@r{, }&
-Boolean conjuction.  Defined on boolean types.
+Boolean conjunction.  Defined on boolean types.
 
 @item @@
 The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}).
@@ -5881,7 +6320,7 @@ as @code{^}.
 
 @quotation
 @emph{Warning:} Sets and their operations are not yet supported, so @value{GDBN}
-will treat the use of the operator @code{IN}, or the use of operators
+treats the use of the operator @code{IN}, or the use of operators
 @code{+}, @code{-}, @code{*}, @code{/}, @code{=}, , @code{<>}, @code{#},
 @code{<=}, and @code{>=} on sets as an error.
 @end quotation
@@ -5934,13 +6373,13 @@ Returns the absolute value of @var{n}.
 
 @item CAP(@var{c})
 If @var{c} is a lower case letter, it returns its upper case
-equivalent, otherwise it returns its argument
+equivalent, otherwise it returns its argument.
 
 @item CHR(@var{i})
 Returns the character whose ordinal value is @var{i}.
 
 @item DEC(@var{v})
-Decrements the value in the variable @var{v}.  Returns the new value.
+Decrements the value in the variable @var{v} by one.  Returns the new value.
 
 @item DEC(@var{v},@var{i})
 Decrements the value in the variable @var{v} by @var{i}.  Returns the
@@ -5957,7 +6396,7 @@ Returns the floating point equivalent of the integer @var{i}.
 Returns the index of the last member of @var{a}.
 
 @item INC(@var{v})
-Increments the value in the variable @var{v}.  Returns the new value.
+Increments the value in the variable @var{v} by one.  Returns the new value.
 
 @item INC(@var{v},@var{i})
 Increments the value in the variable @var{v} by @var{i}.  Returns the
@@ -5978,8 +6417,8 @@ Returns boolean TRUE if @var{i} is an odd number.
 
 @item ORD(@var{x})
 Returns the ordinal value of its argument.  For example, the ordinal
-value of a character is its ASCII value (on machines supporting the
-ASCII character set).  @var{x} must be of an ordered type, which include
+value of a character is its @sc{ascii} value (on machines supporting the
+@sc{ascii} character set).  @var{x} must be of an ordered type, which include
 integral, character and enumerated types.
 
 @item SIZE(@var{x})
@@ -5994,7 +6433,7 @@ Returns the member of the type @var{t} whose ordinal value is @var{i}.
 
 @quotation
 @emph{Warning:}  Sets and their operations are not yet supported, so
-@value{GDBN} will treat the use of procedures @code{INCL} and @code{EXCL} as
+@value{GDBN} treats the use of procedures @code{INCL} and @code{EXCL} as
 an error.
 @end quotation
 
@@ -6024,7 +6463,7 @@ digits.
 @item
 Character constants consist of a single character enclosed by a pair of
 like quotes, either single (@code{'}) or double (@code{"}).  They may
-also be expressed by their ordinal value (their ASCII value, usually)
+also be expressed by their ordinal value (their @sc{ascii} value, usually)
 followed by a @samp{C}.
 
 @item
@@ -6054,12 +6493,12 @@ Set constants are not yet supported.
 
 If type and range checking are set automatically by @value{GDBN}, they
 both default to @code{on} whenever the working language changes to
-Modula-2.  This happens regardless of whether you, or @value{GDBN},
+Modula-2.  This happens regardless of whether you or @value{GDBN}
 selected the working language.
 
 If you allow @value{GDBN} to set the language automatically, then entering
-code compiled from a file whose name ends with @file{.mod} will set the
-working language to Modula-2. @xref{Automatically, ,Having @value{GDBN} set
+code compiled from a file whose name ends with @file{.mod} sets the
+working language to Modula-2.  @xref{Automatically, ,Having @value{GDBN} set
 the language automatically}, for further details.
 
 @node Deviations
@@ -6080,7 +6519,7 @@ returned a pointer.)
 
 @item
 C escape sequences can be used in strings and characters to represent
-non-printable characters.  @value{GDBN} will print out strings with these
+non-printable characters.  @value{GDBN} prints out strings with these
 escape sequences embedded.  Single non-printable characters are
 printed using the @samp{CHR(@var{nnn})} format.
 
@@ -6111,7 +6550,7 @@ They are of types that have been declared equivalent via a @code{TYPE
 
 @item
 They have been declared on the same line.  (Note:  This is true of the
-GNU Modula-2 compiler, but it may not be true of other compilers.)
+@sc{gnu} Modula-2 compiler, but it may not be true of other compilers.)
 @end itemize
 
 As long as type checking is enabled, any attempt to combine variables
@@ -6126,7 +6565,7 @@ index bounds, and all built-in functions and procedures.
 @kindex .
 @cindex colon, doubled as scope operator
 @ifinfo
-@kindex colon-colon
+@kindex colon-colon@r{, in Modula-2}
 @c Info cannot handle :: but TeX can.
 @end ifinfo
 @iftex
@@ -6150,7 +6589,7 @@ identifier within your program, except another module.
 
 Using the @code{::} operator makes @value{GDBN} search the scope
 specified by @var{scope} for the identifier @var{id}.  If it is not
-found in the specified scope, then @value{GDBN} will search all scopes
+found in the specified scope, then @value{GDBN} searches all scopes
 enclosing the one specified by @var{scope}.
 
 Using the @code{.} operator makes @value{GDBN} search the current scope for
@@ -6171,94 +6610,560 @@ apply to C++, and the last to the C @code{union} type, which has no direct
 analogue in Modula-2.
 
 The @code{@@} operator (@pxref{Expressions, ,Expressions}), while available
-while using any language, is not useful with Modula-2.  Its
+with any language, is not useful with Modula-2.  Its
 intent is to aid the debugging of @dfn{dynamic arrays}, which cannot be
 created in Modula-2 as they can in C or C++.  However, because an
 address can be specified by an integral constant, the construct
-@samp{@{@var{type}@}@var{adrexp}} is still useful.  (@pxref{Expressions, ,Expressions})
+@samp{@{@var{type}@}@var{adrexp}} is still useful.
 
 @cindex @code{#} in Modula-2
 In @value{GDBN} scripts, the Modula-2 inequality operator @code{#} is
 interpreted as the beginning of a comment.  Use @code{<>} instead.
 
-@end ifset
-@end ifclear
+@node Chill
+@subsection Chill
 
-@node Symbols
-@chapter Examining the Symbol Table
+The extensions made to @value{GDBN} to support Chill only support output
+from the @sc{gnu} Chill compiler.  Other Chill compilers are not currently
+supported, and attempting to debug executables produced by them is most
+likely to give an error as @value{GDBN} reads in the executable's symbol
+table.
 
-The commands described in this section allow you to inquire about the
-symbols (names of variables, functions and types) defined in your
-program.  This information is inherent in the text of your program and
-does not change as your program executes.  @value{GDBN} finds it in your
-program's symbol table, in the file indicated when you started @value{GDBN}
-(@pxref{File Options, ,Choosing files}), or by one of the
-file-management commands (@pxref{Files, ,Commands to specify files}).
+@c This used to say "... following Chill related topics ...", but since
+@c menus are not shown in the printed manual, it would look awkward.
+This section covers the Chill related topics and the features
+of @value{GDBN} which support these topics.
 
-@c FIXME! This might be intentionally specific to C and C++; if so, move
-@c to someplace in C section of lang chapter.
-@cindex symbol names
-@cindex names of symbols
-@cindex quoting names
-Occasionally, you may need to refer to symbols that contain unusual
-characters, which @value{GDBN} ordinarily treats as word delimiters.  The
-most frequent case is in referring to static variables in other
-source files (@pxref{Variables,,Program variables}).  File names
-are recorded in object files as debugging symbols, but @value{GDBN} would
-ordinarily parse a typical file name, like @file{foo.c}, as the three words
-@samp{foo} @samp{.} @samp{c}.  To allow @value{GDBN} to recognize
-@samp{foo.c} as a single symbol, enclose it in single quotes; for example,
+@menu
+* How modes are displayed::        How modes are displayed
+* Locations::                        Locations and their accesses
+* Values and their Operations:: Values and their Operations
+* Chill type and range checks:: 
+* Chill defaults::
+@end menu
 
-@example
-p 'foo.c'::x
-@end example
+@node How modes are displayed
+@subsubsection How modes are displayed
 
-@noindent
-looks up the value of @code{x} in the scope of the file @file{foo.c}.
+The Chill Datatype- (Mode) support of @value{GDBN} is directly related
+with the functionality of the @sc{gnu} Chill compiler, and therefore deviates
+slightly from the standard specification of the Chill language. The
+provided modes are:
 
+@c FIXME: this @table's contents effectively disable @code by using @r
+@c on every @item.  So why does it need @code?
 @table @code
-@item info address @var{symbol}
-@kindex info address
-Describe where the data for @var{symbol} is stored.  For a register
-variable, this says which register it is kept in.  For a non-register
-local variable, this prints the stack-frame offset at which the variable
-is always stored.
-
-Note the contrast with @samp{print &@var{symbol}}, which does not work
-at all for a register variable, and for a stack local variable prints
-the exact address of the current instantiation of the variable.
+@item @r{@emph{Discrete modes:}}
+@itemize @bullet
+@item
+@emph{Integer Modes} which are predefined by @code{BYTE, UBYTE, INT,
+UINT, LONG, ULONG},
+@item
+@emph{Boolean Mode} which is predefined by @code{BOOL}, 
+@item
+@emph{Character Mode} which is predefined by @code{CHAR}, 
+@item
+@emph{Set Mode} which is displayed by the keyword @code{SET}.
+@smallexample
+(@value{GDBP}) ptype x
+type = SET (karli = 10, susi = 20, fritzi = 100)
+@end smallexample
+If the type is an unnumbered set the set element values are omitted.
+@item
+@emph{Range Mode} which is displayed by @code{type = <basemode>
+(<lower bound> : <upper bound>)}, where @code{<lower bound>, <upper
+bound>} can be of any discrete literal expression (e.g. set element
+names).
+@end itemize
 
-@item whatis @var{exp}
-@kindex whatis
-Print the data type of expression @var{exp}.  @var{exp} is not
-actually evaluated, and any side-effecting operations (such as
-assignments or function calls) inside it do not take place.
-@xref{Expressions, ,Expressions}.
+@item @r{@emph{Powerset Mode:}}
+A Powerset Mode is displayed by the keyword @code{POWERSET} followed by
+the member mode of the powerset.  The member mode can be any discrete mode.
+@smallexample
+(@value{GDBP}) ptype x
+type = POWERSET SET (egon, hugo, otto)
+@end smallexample
 
-@item whatis
-Print the data type of @code{$}, the last value in the value history.
+@item @r{@emph{Reference Modes:}}
+@itemize @bullet
+@item
+@emph{Bound Reference Mode} which is displayed by the keyword @code{REF}
+followed by the mode name to which the reference is bound.
+@item
+@emph{Free Reference Mode} which is displayed by the keyword @code{PTR}.
+@end itemize
 
-@item ptype @var{typename}
-@kindex ptype
-Print a description of data type @var{typename}.  @var{typename} may be
-the name of a type, or for C code it may have the form
-@ifclear CONLY
-@samp{class @var{class-name}},
-@end ifclear
-@samp{struct @var{struct-tag}}, @samp{union @var{union-tag}} or
-@samp{enum @var{enum-tag}}.
-
-@item ptype @var{exp}
-@itemx ptype
-Print a description of the type of expression @var{exp}.  @code{ptype}
-differs from @code{whatis} by printing a detailed description, instead
-of just the name of the type.
+@item @r{@emph{Procedure mode}}
+The procedure mode is displayed by @code{type = PROC(<parameter list>)
+<return mode> EXCEPTIONS (<exception list>)}. The @code{<parameter
+list>} is a list of the parameter modes.  @code{<return mode>} indicates
+the mode of the result of the procedure if any.  The exceptionlist lists
+all possible exceptions which can be raised by the procedure.
 
-For example, for this variable declaration:
+@ignore
+@item @r{@emph{Instance mode}}
+The instance mode is represented by a structure, which has a static
+type, and is therefore not really of interest. 
+@end ignore
 
-@example
-struct complex @{double real; double imag;@} v;
-@end example
+@item @r{@emph{Synchronization Modes:}} 
+@itemize @bullet
+@item
+@emph{Event Mode} which is displayed by @code{EVENT (<event length>)},
+where @code{(<event length>)} is optional.
+@item
+@emph{Buffer Mode} which is displayed by @code{BUFFER (<buffer length>)
+<buffer element mode>}, where @code{(<buffer length>)} is optional.
+@end itemize
+
+@item @r{@emph{Timing Modes:}} 
+@itemize @bullet
+@item
+@emph{Duration Mode} which is predefined by @code{DURATION}
+@item
+@emph{Absolute Time Mode} which is predefined by @code{TIME}
+@end itemize
+
+@item @r{@emph{Real Modes:}}
+Real Modes are predefined with @code{REAL} and @code{LONG_REAL}.
+
+@item @r{@emph{String Modes:}}
+@itemize @bullet
+@item
+@emph{Character String Mode} which is displayed by @code{CHARS(<string
+length>)}, followed by the keyword @code{VARYING} if the String Mode is
+a varying mode
+@item
+@emph{Bit String Mode} which is displayed by @code{BOOLS(<string
+length>)}.
+@end itemize
+
+@item @r{@emph{Array Mode:}}
+The Array Mode is displayed by the keyword @code{ARRAY(<range>)}
+followed by the element mode (which may in turn be an array mode).
+@smallexample
+(@value{GDBP}) ptype x
+type = ARRAY (1:42) 
+          ARRAY (1:20) 
+             SET (karli = 10, susi = 20, fritzi = 100)
+@end smallexample
+
+@item @r{@emph{Structure Mode}} 
+The Structure mode is displayed by the keyword @code{STRUCT(<field
+list>)}.  The @code{<field list>} consists of names and modes of fields
+of the structure.  Variant structures have the keyword @code{CASE <field>
+OF <variant fields> ESAC} in their field list.  Since the current version
+of the GNU Chill compiler doesn't implement tag processing (no runtime
+checks of variant fields, and therefore no debugging info), the output
+always displays all variant fields.
+@smallexample
+(@value{GDBP}) ptype str
+type = STRUCT (
+    as x,
+    bs x,
+    CASE bs OF
+    (karli):
+        cs a
+    (ott):
+        ds x
+    ESAC
+)
+@end smallexample
+@end table
+
+@node Locations
+@subsubsection Locations and their accesses
+
+A location in Chill is an object which can contain values.
+
+A value of a location is generally accessed by the (declared) name of
+the location.  The output conforms to the specification of values in
+Chill programs.  How values are specified
+is the topic of the next section, @ref{Values and their Operations}.
+
+The pseudo-location @code{RESULT} (or @code{result}) can be used to
+display or change the result of a currently-active procedure:
+
+@smallexample
+set result := EXPR
+@end smallexample
+
+@noindent
+This does the same as the Chill action @code{RESULT EXPR} (which
+is not available in @value{GDBN}).
+
+Values of reference mode locations are printed by @code{PTR(<hex
+value>)} in case of a free reference mode, and by @code{(REF <reference
+mode>) (<hex-value>)} in case of a bound reference.  @code{<hex value>}
+represents the address where the reference points to.  To access the
+value of the location referenced by the pointer, use the dereference
+operator @samp{->}.
+
+Values of procedure mode locations are displayed by @code{@{ PROC
+(<argument modes> ) <return mode> @} <address> <name of procedure
+location>}.  @code{<argument modes>} is a list of modes according to the
+parameter specification of the procedure and @code{<address>} shows the
+address of the entry point. 
+
+@ignore
+Locations of instance modes are displayed just like a structure with two
+fields specifying the @emph{process type} and the @emph{copy number} of
+the investigated instance location@footnote{This comes from the current
+implementation of instances.  They are implemented as a structure (no
+na).  The output should be something like @code{[<name of the process>;
+<instance number>]}.}.  The field names are @code{__proc_type} and
+@code{__proc_copy}.
+
+Locations of synchronization modes are displayed like a structure with
+the field name @code{__event_data} in case of a event mode location, and
+like a structure with the field @code{__buffer_data} in case of a buffer
+mode location (refer to previous paragraph).
+
+Structure Mode locations are printed by @code{[.<field name>: <value>,
+...]}.  The @code{<field name>} corresponds to the structure mode
+definition and the layout of @code{<value>} varies depending of the mode
+of the field.  If the investigated structure mode location is of variant
+structure mode, the variant parts of the structure are enclosed in curled
+braces (@samp{@{@}}).  Fields enclosed by @samp{@{,@}} are residing
+on the same memory location and represent the current values of the
+memory location in their specific modes.  Since no tag processing is done
+all variants are displayed. A variant field is printed by
+@code{(<variant name>) = .<field name>: <value>}.  (who implements the
+stuff ???)
+@smallexample
+(@value{GDBP}) print str1 $4 = [.as: 0, .bs: karli, .<TAG>: { (karli) =
+[.cs: []], (susi) = [.ds: susi]}]
+@end smallexample
+@end ignore
+
+Substructures of string mode-, array mode- or structure mode-values
+(e.g. array slices, fields of structure locations) are accessed using
+certain operations which are described in the next section, @ref{Values
+and their Operations}.
+
+A location value may be interpreted as having a different mode using the
+location conversion.  This mode conversion is written as @code{<mode
+name>(<location>)}.  The user has to consider that the sizes of the modes
+have to be equal otherwise an error occurs.  Furthermore, no range
+checking of the location against the destination mode is performed, and
+therefore the result can be quite confusing.
+
+@smallexample
+(@value{GDBP}) print int (s(3 up 4)) XXX TO be filled in !! XXX
+@end smallexample
+
+@node Values and their Operations
+@subsubsection Values and their Operations
+
+Values are used to alter locations, to investigate complex structures in
+more detail or to filter relevant information out of a large amount of
+data.  There are several (mode dependent) operations defined which enable
+such investigations.  These operations are not only applicable to
+constant values but also to locations, which can become quite useful
+when debugging complex structures.  During parsing the command line
+(e.g. evaluating an expression) @value{GDBN} treats location names as
+the values behind these locations.
+
+This section describes how values have to be specified and which
+operations are legal to be used with such values.
+
+@table @code
+@item Literal Values
+Literal values are specified in the same manner as in @sc{gnu} Chill programs.
+For detailed specification refer to the @sc{gnu} Chill implementation Manual
+chapter 1.5.
+@c FIXME: if the Chill Manual is a Texinfo documents, the above should
+@c be converted to a @ref.
+
+@ignore 
+@itemize @bullet
+@item
+@emph{Integer Literals} are specified in the same manner as in Chill
+programs (refer to the Chill Standard z200/88 chpt 5.2.4.2)
+@item
+@emph{Boolean Literals} are defined by @code{TRUE} and @code{FALSE}.
+@item
+@emph{Character Literals} are defined by @code{'<character>'}. (e.g.
+@code{'M'})
+@item
+@emph{Set Literals} are defined by a name which was specified in a set
+mode.  The value delivered by a Set Literal is the set value.  This is
+comparable to an enumeration in C/C++ language.
+@item
+@emph{Emptiness Literal} is predefined by @code{NULL}.  The value of the
+emptiness literal delivers either the empty reference value, the empty
+procedure value or the empty instance value. 
+
+@item
+@emph{Character String Literals} are defined by a sequence of characters
+enclosed in single- or double quotes.  If a single- or double quote has
+to be part of the string literal it has to be stuffed (specified twice).
+@item
+@emph{Bitstring Literals} are specified in the same manner as in Chill
+programs (refer z200/88 chpt 5.2.4.8).
+@item
+@emph{Floating point literals} are specified in the same manner as in
+(gnu-)Chill programs (refer @sc{gnu} Chill implementation Manual chapter 1.5).
+@end itemize
+@end ignore
+
+@item Tuple Values
+A tuple is specified by @code{<mode name>[<tuple>]}, where @code{<mode
+name>} can be omitted if the mode of the tuple is unambiguous.  This
+unambiguity is derived from the context of a evaluated expression.
+@code{<tuple>} can be one of the following:
+
+@itemize @bullet
+@item @emph{Powerset Tuple}
+@item @emph{Array Tuple}
+@item @emph{Structure Tuple}
+Powerset tuples, array tuples and structure tuples are specified in the
+same manner as in Chill programs refer to z200/88 chpt 5.2.5.
+@end itemize
+
+@item String Element Value
+A string element value is specified by @code{<string value>(<index>)},
+where @code{<index>} is a integer expression.  It delivers a character
+value which is equivalent to the character indexed by @code{<index>} in
+the string.
+
+@item String Slice Value
+A string slice value is specified by @code{<string value>(<slice
+spec>)}, where @code{<slice spec>} can be either a range of integer
+expressions or specified by @code{<start expr> up <size>}.
+@code{<size>} denotes the number of elements which the slice contains.
+The delivered value is a string value, which is part of the specified
+string.
+
+@item Array Element Values
+An array element value is specified by @code{<array value>(<expr>)} and
+delivers a array element value of the mode of the specified array.
+
+@item Array Slice Values
+An array slice is specified by @code{<array value>(<slice spec>)}, where
+@code{<slice spec>} can be either a range specified by expressions or by
+@code{<start expr> up <size>}.  @code{<size>} denotes the number of
+arrayelements the slice contains.  The delivered value is an array value
+which is part of the specified array.
+
+@item Structure Field Values
+A structure field value is derived by @code{<structure value>.<field
+name>}, where @code{<field name>} indicates the name of a field specified
+in the mode definition of the structure.  The mode of the delivered value
+corresponds to this mode definition in the structure definition.
+
+@item Procedure Call Value
+The procedure call value is derived from the return value of the
+procedure@footnote{If a procedure call is used for instance in an
+expression, then this procedure is called with all its side
+effects.  This can lead to confusing results if used carelessly.}.
+
+Values of duration mode locations are represented by @code{ULONG} literals.
+
+Values of time mode locations are represented by @code{TIME(<secs>:<nsecs>)}.
+
+@ignore
+This is not implemented yet:
+@item Built-in Value
+@noindent
+The following built in functions are provided:
+
+@table @code
+@item @code{ADDR()}
+@item @code{NUM()}
+@item @code{PRED()}
+@item @code{SUCC()}
+@item @code{ABS()}
+@item @code{CARD()}
+@item @code{MAX()}
+@item @code{MIN()}
+@item @code{SIZE()}
+@item @code{UPPER()}
+@item @code{LOWER()}
+@item @code{LENGTH()}
+@item @code{SIN()}
+@item @code{COS()}
+@item @code{TAN()}
+@item @code{ARCSIN()}
+@item @code{ARCCOS()}
+@item @code{ARCTAN()}
+@item @code{EXP()}
+@item @code{LN()}
+@item @code{LOG()}
+@item @code{SQRT()}
+@end table
+
+For a detailed description refer to the GNU Chill implementation manual
+chapter 1.6.
+@end ignore
+
+@item Zero-adic Operator Value
+The zero-adic operator value is derived from the instance value for the
+current active process.
+
+@item Expression Values
+The value delivered by an expression is the result of the evaluation of
+the specified expression.  If there are error conditions (mode
+incompatibility, etc.) the evaluation of expressions is aborted with a
+corresponding error message.  Expressions may be parenthesised which
+causes the evaluation of this expression before any other expression
+which uses the result of the parenthesised expression.  The following
+operators are supported by @value{GDBN}:
+
+@table @code
+@item @code{OR, ORIF, XOR}
+@itemx @code{AND, ANDIF}
+@itemx @code{NOT}
+Logical operators defined over operands of boolean mode.
+
+@item @code{=, /=}
+Equality and inequality operators defined over all modes.
+
+@item @code{>, >=}
+@itemx @code{<, <=}
+Relational operators defined over predefined modes.
+
+@item @code{+, -}
+@itemx @code{*, /, MOD, REM}
+Arithmetic operators defined over predefined modes.
+
+@item @code{-}
+Change sign operator.
+
+@item @code{//}
+String concatenation operator.
+
+@item @code{()}
+String repetition operator.
+
+@item @code{->}
+Referenced location operator which can be used either to take the
+address of a location (@code{->loc}), or to dereference a reference
+location (@code{loc->}).
+
+@item @code{OR, XOR}
+@itemx @code{AND}
+@itemx @code{NOT}
+Powerset and bitstring operators.
+
+@item @code{>, >=}
+@itemx @code{<, <=}
+Powerset inclusion operators.
+
+@item @code{IN}
+Membership operator.
+@end table
+@end table
+
+@node Chill type and range checks
+@subsubsection Chill type and range checks
+
+@value{GDBN} considers two Chill variables mode equivalent if the sizes
+of the two modes are equal.  This rule applies recursively to more
+complex datatypes which means that complex modes are treated
+equivalent if all element modes (which also can be complex modes like
+structures, arrays, etc.) have the same size.
+
+Range checking is done on all mathematical operations, assignment, array
+index bounds and all built in procedures.
+
+Strong type checks are forced using the @value{GDBN} command @code{set
+check strong}.  This enforces strong type and range checks on all
+operations where Chill constructs are used (expressions, built in
+functions, etc.) in respect to the semantics as defined in the z.200
+language specification.
+
+All checks can be disabled by the @value{GDBN} command @code{set check
+off}.
+
+@ignore 
+@c Deviations from the Chill Standard Z200/88
+see last paragraph ?
+@end ignore
+
+@node Chill defaults
+@subsubsection Chill defaults
+
+If type and range checking are set automatically by @value{GDBN}, they
+both default to @code{on} whenever the working language changes to
+Chill.  This happens regardless of whether you or @value{GDBN}
+selected the working language.
+
+If you allow @value{GDBN} to set the language automatically, then entering
+code compiled from a file whose name ends with @file{.ch} sets the
+working language to Chill.  @xref{Automatically, ,Having @value{GDBN} set
+the language automatically}, for further details.
+
+@node Symbols
+@chapter Examining the Symbol Table
+
+The commands described in this chapter allow you to inquire about the
+symbols (names of variables, functions and types) defined in your
+program.  This information is inherent in the text of your program and
+does not change as your program executes.  @value{GDBN} finds it in your
+program's symbol table, in the file indicated when you started @value{GDBN}
+(@pxref{File Options, ,Choosing files}), or by one of the
+file-management commands (@pxref{Files, ,Commands to specify files}).
+
+@cindex symbol names
+@cindex names of symbols
+@cindex quoting names
+Occasionally, you may need to refer to symbols that contain unusual
+characters, which @value{GDBN} ordinarily treats as word delimiters.  The
+most frequent case is in referring to static variables in other
+source files (@pxref{Variables,,Program variables}).  File names
+are recorded in object files as debugging symbols, but @value{GDBN} would
+ordinarily parse a typical file name, like @file{foo.c}, as the three words
+@samp{foo} @samp{.} @samp{c}.  To allow @value{GDBN} to recognize
+@samp{foo.c} as a single symbol, enclose it in single quotes; for example,
+
+@example
+p 'foo.c'::x
+@end example
+
+@noindent
+looks up the value of @code{x} in the scope of the file @file{foo.c}.
+
+@table @code
+@kindex info address
+@item info address @var{symbol}
+Describe where the data for @var{symbol} is stored.  For a register
+variable, this says which register it is kept in.  For a non-register
+local variable, this prints the stack-frame offset at which the variable
+is always stored.
+
+Note the contrast with @samp{print &@var{symbol}}, which does not work
+at all for a register variable, and for a stack local variable prints
+the exact address of the current instantiation of the variable.
+
+@kindex whatis
+@item whatis @var{expr}
+Print the data type of expression @var{expr}.  @var{expr} is not
+actually evaluated, and any side-effecting operations (such as
+assignments or function calls) inside it do not take place.
+@xref{Expressions, ,Expressions}.
+
+@item whatis
+Print the data type of @code{$}, the last value in the value history.
+
+@kindex ptype
+@item ptype @var{typename}
+Print a description of data type @var{typename}.  @var{typename} may be
+the name of a type, or for C code it may have the form @samp{class
+@var{class-name}}, @samp{struct @var{struct-tag}}, @samp{union
+@var{union-tag}} or @samp{enum @var{enum-tag}}.
+
+@item ptype @var{expr}
+@itemx ptype
+Print a description of the type of expression @var{expr}.  @code{ptype}
+differs from @code{whatis} by printing a detailed description, instead
+of just the name of the type.
+
+For example, for this variable declaration:
+
+@example
+struct complex @{double real; double imag;@} v;
+@end example
 
 @noindent
 the two commands give this output:
@@ -6279,34 +7184,34 @@ type = struct complex @{
 As with @code{whatis}, using @code{ptype} without an argument refers to
 the type of @code{$}, the last value in the value history.
 
+@kindex info types
 @item info types @var{regexp}
 @itemx info types
-@kindex info types
-Print a brief description of all types whose name matches @var{regexp}
+Print a brief description of all types whose names match @var{regexp}
 (or all types in your program, if you supply no argument).  Each
 complete typename is matched as though it were a complete line; thus,
 @samp{i type value} gives information on all types in your program whose
-name includes the string @code{value}, but @samp{i type ^value$} gives
+names include the string @code{value}, but @samp{i type ^value$} gives
 information only on types whose complete name is @code{value}.
 
 This command differs from @code{ptype} in two ways: first, like
 @code{whatis}, it does not print a detailed description; second, it
 lists all source files where a type is defined.
 
-@item info source
 @kindex info source
+@item info source
 Show the name of the current source file---that is, the source file for
 the function containing the current point of execution---and the language
 it was written in.
 
-@item info sources
 @kindex info sources
+@item info sources
 Print the names of all source files in your program for which there is
 debugging information, organized into two lists: files whose symbols
 have already been read, and files whose symbols will be read when needed.
 
-@item info functions
 @kindex info functions
+@item info functions
 Print the names and data types of all defined functions.
 
 @item info functions @var{regexp}
@@ -6316,8 +7221,8 @@ Thus, @samp{info fun step} finds all functions whose names
 include @code{step}; @samp{info fun ^step} finds those whose names
 start with @code{step}.
 
-@item info variables
 @kindex info variables
+@item info variables
 Print the names and data types of all variables that are declared
 outside of functions (i.e., excluding local variables).
 
@@ -6328,9 +7233,9 @@ variables) whose names contain a match for regular expression
 
 @ignore
 This was never implemented.
+@kindex info methods
 @item info methods
 @itemx info methods @var{regexp}
-@kindex info methods
 The @code{info methods} command permits the user to examine all defined
 methods within C++ program, or (with the @var{regexp} argument) a
 specific set of methods found in the various C++ classes.  Many
@@ -6340,13 +7245,61 @@ from the @code{ptype} command can be overwhelming and hard to use.  The
 which match the regular-expression @var{regexp}.
 @end ignore
 
-@item maint print symbols @var{filename}
-@itemx maint print psymbols @var{filename}
-@itemx maint print msymbols @var{filename}
+@cindex reloading symbols
+Some systems allow individual object files that make up your program to
+be replaced without stopping and restarting your program.  For example,
+in VxWorks you can simply recompile a defective object file and keep on
+running.  If you are running on one of these systems, you can allow
+@value{GDBN} to reload the symbols for automatically relinked modules:
+
+@table @code
+@kindex set symbol-reloading
+@item set symbol-reloading on
+Replace symbol definitions for the corresponding source file when an
+object file with a particular name is seen again.
+
+@item set symbol-reloading off
+Do not replace symbol definitions when re-encountering object files of
+the same name.  This is the default state; if you are not running on a
+system that permits automatically relinking modules, you should leave
+@code{symbol-reloading} off, since otherwise @value{GDBN} may discard symbols
+when linking large programs, that may contain several modules (from
+different directories or libraries) with the same name.
+
+@kindex show symbol-reloading
+@item show symbol-reloading
+Show the current @code{on} or @code{off} setting.
+@end table
+
+@kindex set opaque-type-resolution
+@item set opaque-type-resolution on
+Tell @value{GDBN} to resolve opaque types.  An opaque type is a type
+declared as a pointer to a @code{struct}, @code{class}, or
+@code{union}---for example, @code{struct MyType *}---that is used in one
+source file although the full declaration of @code{struct MyType} is in
+another source file.  The default is on.
+
+A change in the setting of this subcommand will not take effect until
+the next time symbols for a file are loaded.
+
+@item set opaque-type-resolution off
+Tell @value{GDBN} not to resolve opaque types.  In this case, the type
+is printed as follows:
+@smallexample
+@{<no data fields>@}
+@end smallexample
+
+@kindex show opaque-type-resolution
+@item show opaque-type-resolution
+Show whether opaque types are resolved or not.
+
 @kindex maint print symbols
 @cindex symbol dump
 @kindex maint print psymbols
 @cindex partial symbol dump
+@item maint print symbols @var{filename}
+@itemx maint print psymbols @var{filename}
+@itemx maint print msymbols @var{filename}
 Write a dump of debugging symbol data into the file @var{filename}.
 These commands are used to debug the @value{GDBN} symbol-reading code.  Only
 symbols with debugging data are included.  If you use @samp{maint print
@@ -6373,23 +7326,13 @@ experiment, using the @value{GDBN} features for altering execution of the
 program.
 
 For example, you can store new values into variables or memory
-locations,
-@ifclear BARETARGET
-give your program a signal, restart it
-@end ifclear
-@ifset BARETARGET
-restart your program
-@end ifset
-at a different address, or even return prematurely from a function to
-its caller.
+locations, give your program a signal, restart it at a different
+address, or even return prematurely from a function.
 
 @menu
 * Assignment::                  Assignment to variables
 * Jumping::                     Continuing at a different address
-@ifclear BARETARGET
 * Signaling::                   Giving your program a signal
-@end ifclear
-
 * Returning::                   Returning from a function
 * Calling::                     Calling your program's functions
 * Patching::                    Patching your program
@@ -6410,10 +7353,8 @@ print x=4
 @noindent
 stores the value 4 into the variable @code{x}, and then prints the
 value of the assignment expression (which is 4).  
-@ifclear CONLY
 @xref{Languages, ,Using @value{GDBN} with Different Languages}, for more
 information on operators in supported languages.
-@end ifclear
 
 @kindex set variable
 @cindex variables, setting
@@ -6426,10 +7367,10 @@ not printed and is not put in the value history (@pxref{Value History,
 If the beginning of the argument string of the @code{set} command
 appears identical to a @code{set} subcommand, use the @code{set
 variable} command instead of just @code{set}.  This command is identical
-to @code{set} except for its lack of subcommands.  For example, if
-your program has a variable @code{width}, you get
-an error if you try to set a new value with just @samp{set width=13},
-because @value{GDBN} has the command @code{set width}:
+to @code{set} except for its lack of subcommands.  For example, if your
+program has a variable @code{width}, you get an error if you try to set
+a new value with just @samp{set width=13}, because @value{GDBN} has the
+command @code{set width}:
 
 @example
 (@value{GDBP}) whatis width
@@ -6448,12 +7389,47 @@ order to actually set the program's variable @code{width}, use
 (@value{GDBP}) set var width=47
 @end example
 
+Because the @code{set} command has many subcommands that can conflict
+with the names of program variables, it is a good idea to use the
+@code{set variable} command instead of just @code{set}.  For example, if
+your program has a variable @code{g}, you run into problems if you try
+to set a new value with just @samp{set g=4}, because @value{GDBN} has
+the command @code{set gnutarget}, abbreviated @code{set g}:
+
+@example
+@group
+(@value{GDBP}) whatis g
+type = double
+(@value{GDBP}) p g
+$1 = 1
+(@value{GDBP}) set g=4
+(@value{GDBP}) p g
+$2 = 1
+(@value{GDBP}) r
+The program being debugged has been started already.
+Start it from the beginning? (y or n) y
+Starting program: /home/smith/cc_progs/a.out
+"/home/smith/cc_progs/a.out": can't open to read symbols: Invalid bfd target.
+(@value{GDBP}) show g
+The current BFD target is "=4".
+@end group
+@end example
+
+@noindent
+The program variable @code{g} did not change, and you silently set the
+@code{gnutarget} to an invalid value.  In order to set the variable
+@code{g}, use
+
+@example
+(@value{GDBP}) set var g=4
+@end example
+
 @value{GDBN} allows more implicit conversions in assignments than C; you can
 freely store an integer value into a pointer variable or vice versa,
 and you can convert any structure to any other structure that is the
 same length or shorter.
 @comment FIXME: how do structs align/pad in these conversions?
-@comment        /pesch@cygnus.com 18dec1990
+@comment        /doc@cygnus.com 18dec1990
 
 To store values into arbitrary places in memory, use the @samp{@{@dots{}@}}
 construct to generate a value of specified type at a specified address
@@ -6476,12 +7452,14 @@ it stopped, with the @code{continue} command.  You can instead continue at
 an address of your own choosing, with the following commands:
 
 @table @code
-@item jump @var{linespec}
 @kindex jump
-Resume execution at line @var{linespec}.  Execution will stop
+@item jump @var{linespec}
+Resume execution at line @var{linespec}.  Execution stops again
 immediately if there is a breakpoint there.  @xref{List, ,Printing
 source lines}, for a description of the different forms of
-@var{linespec}.
+@var{linespec}.  It is common practice to use the @code{tbreak} command
+in conjunction with @code{jump}.  @xref{Set Breaks, ,Setting
+breakpoints}.
 
 The @code{jump} command does not change the current stack frame, or
 the stack pointer, or the contents of any memory location or any
@@ -6497,32 +7475,34 @@ well acquainted with the machine-language code of your program.
 Resume execution at the instruction at address @var{address}.
 @end table
 
-You can get much the same effect as the @code{jump} command by storing a
-new value into the register @code{$pc}.  The difference is that this
-does not start your program running; it only changes the address where it
-@emph{will} run when it is continued.  For example,
+@c Doesn't work on HP-UX; have to set $pcoqh and $pcoqt.
+On many systems, you can get much the same effect as the @code{jump}
+command by storing a new value into the register @code{$pc}.  The
+difference is that this does not start your program running; it only
+changes the address of where it @emph{will} run when you continue.  For
+example,
 
 @example
 set $pc = 0x485
 @end example
 
 @noindent
-causes the next @code{continue} command or stepping command to execute at
+makes the next @code{continue} command or stepping command execute at
 address @code{0x485}, rather than at the address where your program stopped.
 @xref{Continuing and Stepping, ,Continuing and stepping}.
 
-The most common occasion to use the @code{jump} command is to back up,
-perhaps with more breakpoints set, over a portion of a program that has
-already executed, in order to examine its execution in more detail.
+The most common occasion to use the @code{jump} command is to back
+up---perhaps with more breakpoints set---over a portion of a program
+that has already executed, in order to examine its execution in more
+detail.
 
-@ifclear BARETARGET
 @c @group
 @node Signaling
 @section Giving your program a signal
 
 @table @code
-@item signal @var{signal}
 @kindex signal
+@item signal @var{signal}
 Resume execution where your program stopped, but immediately give it the
 signal @var{signal}.  @var{signal} can be the name or the number of a
 signal.  For example, on many systems @code{signal 2} and @code{signal
@@ -6545,16 +7525,15 @@ causes @value{GDBN} to decide what to do with the signal depending on
 the signal handling tables (@pxref{Signals}).  The @code{signal} command
 passes the signal directly to your program.
 
-@end ifclear
 
 @node Returning
 @section Returning from a function
 
 @table @code
-@item return
-@itemx return @var{expression}
 @cindex returning from a function
 @kindex return
+@item return
+@itemx return @var{expression}
 You can cancel execution of a function call with the @code{return}
 command.  If you give an
 @var{expression} argument, its value is used as the function's return
@@ -6591,25 +7570,26 @@ returned values.
 
 You can use this variant of the @code{print} command if you want to
 execute a function from your program, but without cluttering the output
-with @code{void} returned values.  The result is printed and saved in
-the value history, if it is not void.
+with @code{void} returned values.  If the result is not void, it 
+is printed and saved in the value history. 
+
+For the A29K, a user-controlled variable @code{call_scratch_address},
+specifies the location of a scratch area to be used when @value{GDBN}
+calls a function in the target.  This is necessary because the usual
+method of putting the scratch area on the stack does not work in systems
+that have separate instruction and data spaces.
 
 @node Patching
 @section Patching programs
+
 @cindex patching binaries
 @cindex writing into executables
-@ifclear BARETARGET
 @cindex writing into corefiles
-@end ifclear
 
-By default, @value{GDBN} opens the file containing your program's executable
-code
-@ifclear BARETARGET
-(or the corefile)
-@end ifclear
-read-only.  This prevents accidental alterations
-to machine code; but it also prevents you from intentionally patching
-your program's binary.
+By default, @value{GDBN} opens the file containing your program's
+executable code (or the corefile) read-only.  This prevents accidental
+alterations to machine code; but it also prevents you from intentionally
+patching your program's binary.
 
 If you'd like to be able to patch the binary, you can specify that
 explicitly with the @code{set write} command.  For example, you might
@@ -6617,42 +7597,30 @@ want to turn on internal debugging flags, or even to make emergency
 repairs.
 
 @table @code
+@kindex set write
 @item set write on
 @itemx set write off
-@kindex set write
-If you specify @samp{set write on}, @value{GDBN} will open executable 
-@ifclear BARETARGET
-and core
-@end ifclear
-files for both reading and writing; if you specify @samp{set write
-off} (the default), @value{GDBN} will open them read-only.
+If you specify @samp{set write on}, @value{GDBN} opens executable and
+core files for both reading and writing; if you specify @samp{set write
+off} (the default), @value{GDBN} opens them read-only.
 
 If you have already loaded a file, you must load it again (using the
-@code{exec-file}
-@ifclear BARETARGET
-or @code{core-file}
-@end ifclear
-command) after changing @code{set write}, for your new setting to take
-effect.
+@code{exec-file} or @code{core-file} command) after changing @code{set
+write}, for your new setting to take effect.
 
 @item show write
 @kindex show write
-Display whether executable files 
-@ifclear BARETARGET
-and core files 
-@end ifclear
-will be opened for writing as well as reading.
+Display whether executable files and core files are opened for writing
+as well as reading.
 @end table
 
 @node GDB Files
 @chapter @value{GDBN} Files
 
-@value{GDBN} needs to know the file name of the program to be debugged, both in
-order to read its symbol table and in order to start your program.  
-@ifclear BARETARGET
-To debug a core dump of a previous run, you must also tell @value{GDBN}
-the name of the core dump file.
-@end ifclear
+@value{GDBN} needs to know the file name of the program to be debugged,
+both in order to read its symbol table and in order to start your
+program.  To debug a core dump of a previous run, you must also tell
+@value{GDBN} the name of the core dump file.
 
 @menu
 * Files::                       Commands to specify files
@@ -6661,19 +7629,14 @@ the name of the core dump file.
 
 @node Files
 @section Commands to specify files
-@cindex symbol table
 
-@ifclear BARETARGET
+@cindex symbol table
 @cindex core dump file
-The usual way to specify executable and core dump file names is with
-the command arguments given when you start @value{GDBN} (@pxref{Invocation,
-,Getting In and Out of @value{GDBN}}.
-@end ifclear
-@ifset BARETARGET
-The usual way to specify an executable file name is with
-the command argument given when you start @value{GDBN}, (@pxref{Invocation,
-,Getting In and Out of @value{GDBN}}.
-@end ifset
+
+You may want to specify executable and core dump file names.  The usual
+way to do this is at start-up time, using the arguments to
+@value{GDBN}'s start-up commands (@pxref{Invocation, , Getting In and
+Out of @value{GDBN}}).
 
 Occasionally it is necessary to change to a different file during a
 @value{GDBN} session.  Or you may run @value{GDBN} and forget to specify
@@ -6681,39 +7644,40 @@ a file you want to use.  In these situations the @value{GDBN} commands
 to specify new files are useful.
 
 @table @code
-@item file @var{filename}
 @cindex executable file
 @kindex file
+@item file @var{filename}
 Use @var{filename} as the program to be debugged.  It is read for its
 symbols and for the contents of pure memory.  It is also the program
 executed when you use the @code{run} command.  If you do not specify a
-directory and the file is not found in the @value{GDBN} working directory, @value{GDBN}
-uses the environment variable @code{PATH} as a list of directories to
-search, just as the shell does when looking for a program to run.  You
-can change the value of this variable, for both @value{GDBN} and your program,
-using the @code{path} command.
-
-On systems with memory-mapped files, an auxiliary symbol table file
-@file{@var{filename}.syms} may be available for @var{filename}.  If it
-is, @value{GDBN} will map in the symbol table from
+directory and the file is not found in the @value{GDBN} working directory, 
+@value{GDBN} uses the environment variable @code{PATH} as a list of 
+directories to search, just as the shell does when looking for a program 
+to run.  You can change the value of this variable, for both @value{GDBN} 
+and your program, using the @code{path} command.
+
+On systems with memory-mapped files, an auxiliary file
+@file{@var{filename}.syms} may hold symbol table information for
+@var{filename}.  If so, @value{GDBN} maps in the symbol table from
 @file{@var{filename}.syms}, starting up more quickly.  See the
-descriptions of the options @samp{-mapped} and @samp{-readnow} (available
-on the command line, and with the commands @code{file}, @code{symbol-file},
-or @code{add-symbol-file}), for more information.
+descriptions of the file options @samp{-mapped} and @samp{-readnow}
+(available on the command line, and with the commands @code{file},
+@code{symbol-file}, or @code{add-symbol-file}, described below), 
+for more information.
 
 @item file
 @code{file} with no argument makes @value{GDBN} discard any information it
 has on both executable file and the symbol table.
 
-@item exec-file @r{[} @var{filename} @r{]}
 @kindex exec-file
+@item exec-file @r{[} @var{filename} @r{]}
 Specify that the program to be run (but not the symbol table) is found
-in @var{filename}.  @value{GDBN} will search the environment variable @code{PATH}
+in @var{filename}.  @value{GDBN} searches the environment variable @code{PATH}
 if necessary to locate your program.  Omitting @var{filename} means to
 discard information on the executable file.
 
-@item symbol-file @r{[} @var{filename} @r{]}
 @kindex symbol-file
+@item symbol-file @r{[} @var{filename} @r{]}
 Read symbol table information from file @var{filename}.  @code{PATH} is
 searched when necessary.  Use the @code{file} command to get both symbol
 table and program to run from the same file.
@@ -6721,57 +7685,59 @@ table and program to run from the same file.
 @code{symbol-file} with no argument clears out @value{GDBN} information on your
 program's symbol table.
 
-The @code{symbol-file} command causes @value{GDBN} to forget the contents of its
-convenience variables, the value history, and all breakpoints and
+The @code{symbol-file} command causes @value{GDBN} to forget the contents 
+of its convenience variables, the value history, and all breakpoints and
 auto-display expressions.  This is because they may contain pointers to
 the internal data recording symbols and data types, which are part of
 the old symbol table data being discarded inside @value{GDBN}.
 
-@code{symbol-file} will not repeat if you press @key{RET} again after
+@code{symbol-file} does not repeat if you press @key{RET} again after
 executing it once.
 
-When @value{GDBN} is configured for a particular environment, it will
-understand debugging information in whatever format is the standard
-generated for that environment; you may use either a GNU compiler, or
-other compilers that adhere to the local conventions.  Best results are
-usually obtained from GNU compilers; for example, using @code{@value{GCC}}
-you can generate debugging information for optimized code.
-
-On some kinds of object files, the @code{symbol-file} command does not
-normally read the symbol table in full right away.  Instead, it scans
-the symbol table quickly to find which source files and which symbols
-are present.  The details are read later, one source file at a time,
-as they are needed.
-
-The purpose of this two-stage reading strategy is to make @value{GDBN} start up
-faster.  For the most part, it is invisible except for occasional
-pauses while the symbol table details for a particular source file are
-being read.  (The @code{set verbose} command can turn these pauses
-into messages if desired.  @xref{Messages/Warnings, ,Optional warnings
-and messages}.) 
+When @value{GDBN} is configured for a particular environment, it
+understands debugging information in whatever format is the standard
+generated for that environment; you may use either a @sc{gnu} compiler, or
+other compilers that adhere to the local conventions.
+Best results are usually obtained from @sc{gnu} compilers; for example,
+using @code{@value{GCC}} you can generate debugging information for
+optimized code.
+
+For most kinds of object files, with the exception of old SVR3 systems
+using COFF, the @code{symbol-file} command does not normally read the
+symbol table in full right away.  Instead, it scans the symbol table
+quickly to find which source files and which symbols are present.  The
+details are read later, one source file at a time, as they are needed.
+
+The purpose of this two-stage reading strategy is to make @value{GDBN}
+start up faster.  For the most part, it is invisible except for
+occasional pauses while the symbol table details for a particular source
+file are being read.  (The @code{set verbose} command can turn these
+pauses into messages if desired.  @xref{Messages/Warnings, ,Optional
+warnings and messages}.)
 
 We have not implemented the two-stage strategy for COFF yet.  When the
 symbol table is stored in COFF format, @code{symbol-file} reads the
-symbol table data in full right away.
+symbol table data in full right away.  Note that ``stabs-in-COFF''
+still does the two-stage strategy, since the debug info is actually
+in stabs format.
 
-@item symbol-file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
-@itemx file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
 @kindex readnow
 @cindex reading symbols immediately
 @cindex symbols, reading immediately
 @kindex mapped
 @cindex memory-mapped symbol file
 @cindex saving symbol table
+@item symbol-file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
+@itemx file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
 You can override the @value{GDBN} two-stage strategy for reading symbol
 tables by using the @samp{-readnow} option with any of the commands that
 load symbol table information, if you want to be sure @value{GDBN} has the
 entire symbol table available.  
 
-@ifclear BARETARGET
 If memory-mapped files are available on your system through the
 @code{mmap} system call, you can use another option, @samp{-mapped}, to
 cause @value{GDBN} to write the symbols for your program into a reusable
-file.  Future @value{GDBN} debugging sessions will map in symbol information
+file.  Future @value{GDBN} debugging sessions map in symbol information
 from this auxiliary symbol file (if the program has not changed), rather
 than spending time reading the symbol table from the executable
 program.  Using the @samp{-mapped} option has the same effect as
@@ -6782,7 +7748,7 @@ file has all the symbol information for your program.
 
 The auxiliary symbol file for a program called @var{myprog} is called
 @samp{@var{myprog}.syms}.  Once this file exists (so long as it is newer
-than the corresponding executable), @value{GDBN} will always attempt to use
+than the corresponding executable), @value{GDBN} always attempts to use
 it when you debug @var{myprog}; no special options or commands are
 needed.
 
@@ -6798,9 +7764,9 @@ symbol table.  It cannot be shared across multiple host platforms.
 @c (eg rooted in val of env var GDBSYMS) could exist for mappable symbol
 @c files.
 
-@item core-file @r{[} @var{filename} @r{]}
 @kindex core
 @kindex core-file
+@item core-file @r{[} @var{filename} @r{]}
 Specify the whereabouts of a core dump file to be used as the ``contents
 of memory''.  Traditionally, core files contain only some parts of the
 address space of the process that generated them; @value{GDBN} can access the
@@ -6810,70 +7776,27 @@ executable file itself for other parts.
 to be used.
 
 Note that the core file is ignored when your program is actually running
-under @value{GDBN}.  So, if you have been running your program and you wish to
-debug a core file instead, you must kill the subprocess in which the
-program is running.  To do this, use the @code{kill} command
+under @value{GDBN}.  So, if you have been running your program and you
+wish to debug a core file instead, you must kill the subprocess in which
+the program is running.  To do this, use the @code{kill} command
 (@pxref{Kill Process, ,Killing the child process}).
-@end ifclear
 
-@item load @var{filename}
-@kindex load
-@ifset GENERIC
-Depending on what remote debugging facilities are configured into
-@value{GDBN}, the @code{load} command may be available.  Where it exists, it
-is meant to make @var{filename} (an executable) available for debugging
-on the remote system---by downloading, or dynamic linking, for example.
-@code{load} also records the @var{filename} symbol table in @value{GDBN}, like
-the @code{add-symbol-file} command.
-
-If your @value{GDBN} does not have a @code{load} command, attempting to
-execute it gets the error message ``@code{You can't do that when your
-target is @dots{}}''
-@end ifset
-
-The file is loaded at whatever address is specified in the executable.
-For some object file formats, you can specify the load address when you
-link the program; for other formats, like a.out, the object file format
-specifies a fixed address.
-@c FIXME! This would be a good place for an xref to the GNU linker doc.
-
-@ifset VXWORKS
-On VxWorks, @code{load} will dynamically link @var{filename} on the
-current target system as well as adding its symbols in @value{GDBN}.
-@end ifset
-
-@ifset I960
-@cindex download to Nindy-960
-With the Nindy interface to an Intel 960 board, @code{load} will
-download @var{filename} to the 960 as well as adding its symbols in
-@value{GDBN}.
-@end ifset
-
-@ifset H8
-@cindex download to H8/300 or H8/500
-@cindex H8/300 or H8/500 download
-@cindex download to Hitachi SH
-@cindex Hitachi SH download
-When you select remote debugging to a Hitachi SH, H8/300, or H8/500 board
-(@pxref{Hitachi Remote,,@value{GDBN} and Hitachi Microprocessors}),
-the @code{load} command downloads your program to the Hitachi board and also
-opens it as the current executable target for @value{GDBN} on your host
-(like the @code{file} command).
-@end ifset
-
-@code{load} will not repeat if you press @key{RET} again after using it.
-
-@ifclear BARETARGET
-@item add-symbol-file @var{filename} @var{address}
-@itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
 @kindex add-symbol-file
 @cindex dynamic linking
+@item add-symbol-file @var{filename} @var{address}
+@itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
+@itemx add-symbol-file @var{filename} @var{address} @var{data_address} @var{bss_address}
+@itemx add-symbol-file @var{filename} @r{-T}@var{section} @var{address}
 The @code{add-symbol-file} command reads additional symbol table information
 from the file @var{filename}.  You would use this command when @var{filename}
 has been dynamically loaded (by some other means) into the program that
 is running.  @var{address} should be the memory address at which the
 file has been loaded; @value{GDBN} cannot figure this out for itself.
-You can specify @var{address} as an expression.
+You can specify up to three addresses, in which case they are taken to be
+the addresses of the text, data, and bss segments respectively.
+For complicated cases, you can specify an arbitrary number of @r{-T}@var{section} @var{address}
+pairs, to give an explicit section name and base address for that section.
+You can specify any @var{address} as an expression.
 
 The symbol table of the file @var{filename} is added to the symbol table
 originally read with the @code{symbol-file} command.  You can use the
@@ -6881,70 +7804,112 @@ originally read with the @code{symbol-file} command.  You can use the
 read keeps adding to the old.  To discard all old symbol data instead,
 use the @code{symbol-file} command.
 
-@code{add-symbol-file} will not repeat if you press @key{RET} after using it.
+@code{add-symbol-file} does not repeat if you press @key{RET} after using it.
 
 You can use the @samp{-mapped} and @samp{-readnow} options just as with
 the @code{symbol-file} command, to change how @value{GDBN} manages the symbol
 table information for @var{filename}.
-@end ifclear
 
-@item info files
-@itemx info target
+@kindex add-shared-symbol-file
+@item add-shared-symbol-file
+The @code{add-shared-symbol-file} command can be used only under Harris' CXUX
+operating system for the Motorola 88k.  @value{GDBN} automatically looks for 
+shared libraries, however if @value{GDBN} does not find yours, you can run 
+@code{add-shared-symbol-file}.  It takes no arguments.
+
+@kindex section
+@item section
+The @code{section} command changes the base address of section SECTION of 
+the exec file to ADDR.  This can be used if the exec file does not contain 
+section addresses, (such as in the a.out format), or when the addresses 
+specified in the file itself are wrong.  Each section must be changed 
+separately.  The @code{info files} command, described below, lists all
+the sections and their addresses.
+
 @kindex info files
 @kindex info target
-@code{info files} and @code{info target} are synonymous; both print
-the current target (@pxref{Targets, ,Specifying a Debugging Target}),
-including the
-@ifclear BARETARGET
-names of the executable and core dump files
-@end ifclear
-@ifset BARETARGET
-name of the executable file
-@end ifset
-currently in use by @value{GDBN}, and the files from which symbols were
-loaded.  The command @code{help targets} lists all possible targets
-rather than current ones.
+@item info files
+@itemx info target
+@code{info files} and @code{info target} are synonymous; both print the
+current target (@pxref{Targets, ,Specifying a Debugging Target}),
+including the names of the executable and core dump files currently in
+use by @value{GDBN}, and the files from which symbols were loaded.  The
+command @code{help target} lists all possible targets rather than
+current ones.
+
 @end table
 
 All file-specifying commands allow both absolute and relative file names
-as arguments.  @value{GDBN} always converts the file name to an absolute path
+as arguments.  @value{GDBN} always converts the file name to an absolute file
 name and remembers it that way.
 
-@ifclear BARETARGET
 @cindex shared libraries
-@value{GDBN} supports SunOS, SVR4, and IBM RS/6000 shared libraries.
+@value{GDBN} supports HP-UX, SunOS, SVr4, Irix 5, and IBM RS/6000 shared
+libraries.
+
 @value{GDBN} automatically loads symbol definitions from shared libraries
 when you use the @code{run} command, or when you examine a core file.
-(Before you issue the @code{run} command, @value{GDBN} will not understand
+(Before you issue the @code{run} command, @value{GDBN} does not understand
 references to a function in a shared library, however---unless you are
 debugging a core file).
-@c FIXME: next @value{GDBN} release should permit some refs to undef
-@c FIXME...symbols---eg in a break cmd---assuming they are from a shared lib
+
+On HP-UX, if the program loads a library explicitly, @value{GDBN}
+automatically loads the symbols at the time of the @code{shl_load} call.
+
+@c FIXME: some @value{GDBN} release may permit some refs to undef
+@c FIXME...symbols---eg in a break cmd---assuming they are from a shared
+@c FIXME...lib; check this from time to time when updating manual
 
 @table @code
-@item info share
-@itemx info sharedlibrary
 @kindex info sharedlibrary
 @kindex info share
+@item info share
+@itemx info sharedlibrary
 Print the names of the shared libraries which are currently loaded.
 
-@item sharedlibrary @var{regex}
-@itemx share @var{regex}
 @kindex sharedlibrary
 @kindex share
-This is an obsolescent command; you can use it to explicitly load shared
-object library symbols for files matching a Unix regular expression, but
-as with files loaded automatically, it will only load shared libraries
+@item sharedlibrary @var{regex}
+@itemx share @var{regex}
+Load shared object library symbols for files matching a
+Unix regular expression.
+As with files loaded automatically, it only loads shared libraries
 required by your program for a core file or after typing @code{run}.  If
 @var{regex} is omitted all shared libraries required by your program are
 loaded.
 @end table
-@end ifclear
+
+On HP-UX systems, @value{GDBN} detects the loading of a shared library
+and automatically reads in symbols from the newly loaded library, up to
+a threshold that is initially set but that you can modify if you wish.
+
+Beyond that threshold, symbols from shared libraries must be explicitly
+loaded.  To load these symbols, use the command @code{sharedlibrary
+@var{filename}}.  The base address of the shared library is determined
+automatically by @value{GDBN} and need not be specified.
+
+To display or set the threshold, use the commands:
+
+@table @code
+@kindex set auto-solib-add
+@item set auto-solib-add @var{threshold}
+Set the autoloading size threshold, in megabytes.  If @var{threshold} is
+nonzero, symbols from all shared object libraries will be loaded
+automatically when the inferior begins execution or when the dynamic
+linker informs @value{GDBN} that a new library has been loaded, until
+the symbol table of the program and libraries exceeds this threshold.
+Otherwise, symbols must be loaded manually, using the
+@code{sharedlibrary} command.  The default threshold is 100 megabytes.
+
+@kindex show auto-solib-add
+@item show auto-solib-add
+Display the current autoloading size threshold, in megabytes.
+@end table
 
 @node Symbol Errors
 @section Errors reading symbol files
 
-While reading a symbol file, @value{GDBN} will occasionally encounter problems,
+While reading a symbol file, @value{GDBN} occasionally encounters problems,
 such as symbol types it does not recognize, or known bugs in compiler
 output.  By default, @value{GDBN} does not notify you of such problems, since
 they are relatively common and primarily of interest to people
@@ -6977,7 +7942,7 @@ The symbol information for symbol scope blocks should occur in
 order of increasing addresses.  This error indicates that it does not
 do so.
 
-@value{GDBN} does not circumvent this problem, and will have trouble
+@value{GDBN} does not circumvent this problem, and has trouble
 locating symbols in the source file whose symbols it is reading.  (You
 can often determine what source file is affected by specifying
 @code{set verbose on}.  @xref{Messages/Warnings, ,Optional warnings and
@@ -7004,297 +7969,3096 @@ with this name.
 
 @item unknown symbol type @code{0x@var{nn}}
 
-The symbol information contains new data types that @value{GDBN} does not yet
-know how to read.  @code{0x@var{nn}} is the symbol type of the misunderstood
-information, in hexadecimal.
+The symbol information contains new data types that @value{GDBN} does
+not yet know how to read.  @code{0x@var{nn}} is the symbol type of the
+uncomprehended information, in hexadecimal.
 
-@value{GDBN} circumvents the error by ignoring this symbol information.  This
-will usually allow your program to be debugged, though certain symbols
-will not be accessible.  If you encounter such a problem and feel like
-debugging it, you can debug @code{@value{GDBP}} with itself, breakpoint on
-@code{complain}, then go up to the function @code{read_dbx_symtab} and
-examine @code{*bufp} to see the symbol.
+@value{GDBN} circumvents the error by ignoring this symbol information.
+This usually allows you to debug your program, though certain symbols
+are not accessible.  If you encounter such a problem and feel like
+debugging it, you can debug @code{@value{GDBP}} with itself, breakpoint
+on @code{complain}, then go up to the function @code{read_dbx_symtab}
+and examine @code{*bufp} to see the symbol.
 
 @item stub type has NULL name
-@value{GDBN} could not find the full definition for
-@ifclear CONLY
-a struct or class.
-@end ifclear
-@ifset CONLY
-a struct.
-@end ifset
 
-@ifclear CONLY
-@item const/volatile indicator missing (ok if using g++ v1.x), got@dots{}
+@value{GDBN} could not find the full definition for a struct or class.
 
+@item const/volatile indicator missing (ok if using g++ v1.x), got@dots{}
 The symbol information for a C++ member function is missing some
-information that recent versions of the compiler should have output
-for it.
-@end ifclear
+information that recent versions of the compiler should have output for
+it.
+
+@item info mismatch between compiler and debugger
+
+@value{GDBN} could not parse a type specification output by the compiler.
+
+@end table
+
+@node Targets
+@chapter Specifying a Debugging Target
+
+@cindex debugging target
+@kindex target
+
+A @dfn{target} is the execution environment occupied by your program.
+
+Often, @value{GDBN} runs in the same host environment as your program;
+in that case, the debugging target is specified as a side effect when
+you use the @code{file} or @code{core} commands.  When you need more
+flexibility---for example, running @value{GDBN} on a physically separate
+host, or controlling a standalone system over a serial port or a
+realtime system over a TCP/IP connection---you can use the @code{target}
+command to specify one of the target types configured for @value{GDBN}
+(@pxref{Target Commands, ,Commands for managing targets}).
+
+@menu
+* Active Targets::              Active targets
+* Target Commands::             Commands for managing targets
+* Byte Order::                  Choosing target byte order
+* Remote::                      Remote debugging
+* KOD::                         Kernel Object Display
+
+@end menu
+
+@node Active Targets
+@section Active targets
+
+@cindex stacking targets
+@cindex active targets
+@cindex multiple targets
+
+There are three classes of targets: processes, core files, and
+executable files.  @value{GDBN} can work concurrently on up to three
+active targets, one in each class.  This allows you to (for example)
+start a process and inspect its activity without abandoning your work on
+a core file.
+
+For example, if you execute @samp{gdb a.out}, then the executable file
+@code{a.out} is the only active target.  If you designate a core file as
+well---presumably from a prior run that crashed and coredumped---then
+@value{GDBN} has two active targets and uses them in tandem, looking
+first in the corefile target, then in the executable file, to satisfy
+requests for memory addresses.  (Typically, these two classes of target
+are complementary, since core files contain only a program's
+read-write memory---variables and so on---plus machine status, while
+executable files contain only the program text and initialized data.)
+
+When you type @code{run}, your executable file becomes an active process
+target as well.  When a process target is active, all @value{GDBN}
+commands requesting memory addresses refer to that target; addresses in
+an active core file or executable file target are obscured while the
+process target is active.
+
+Use the @code{core-file} and @code{exec-file} commands to select a new
+core file or executable target (@pxref{Files, ,Commands to specify
+files}).  To specify as a target a process that is already running, use
+the @code{attach} command (@pxref{Attach, ,Debugging an already-running
+process}).
+
+@node Target Commands
+@section Commands for managing targets
+
+@table @code
+@item target @var{type} @var{parameters}
+Connects the @value{GDBN} host environment to a target machine or
+process.  A target is typically a protocol for talking to debugging
+facilities.  You use the argument @var{type} to specify the type or
+protocol of the target machine.
+
+Further @var{parameters} are interpreted by the target protocol, but
+typically include things like device names or host names to connect
+with, process numbers, and baud rates.
+
+The @code{target} command does not repeat if you press @key{RET} again
+after executing the command.
+
+@kindex help target
+@item help target
+Displays the names of all targets available.  To display targets
+currently selected, use either @code{info target} or @code{info files}
+(@pxref{Files, ,Commands to specify files}).
+
+@item help target @var{name}
+Describe a particular target, including any parameters necessary to
+select it.
+
+@kindex set gnutarget
+@item set gnutarget @var{args}
+@value{GDBN} uses its own library BFD to read your files.  @value{GDBN} 
+knows whether it is reading an @dfn{executable},
+a @dfn{core}, or a @dfn{.o} file; however, you can specify the file format 
+with the @code{set gnutarget} command.  Unlike most @code{target} commands, 
+with @code{gnutarget} the @code{target} refers to a program, not a machine.
+
+@quotation
+@emph{Warning:} To specify a file format with @code{set gnutarget},
+you must know the actual BFD name.
+@end quotation
+
+@noindent
+@xref{Files, , Commands to specify files}.
+
+@kindex show gnutarget  
+@item show gnutarget
+Use the @code{show gnutarget} command to display what file format
+@code{gnutarget} is set to read.  If you have not set @code{gnutarget},
+@value{GDBN} will determine the file format for each file automatically,
+and @code{show gnutarget} displays @samp{The current BDF target is "auto"}.
+@end table
+
+Here are some common targets (available, or not, depending on the GDB
+configuration):
+
+@table @code
+@kindex target exec
+@item target exec @var{program}
+An executable file.  @samp{target exec @var{program}} is the same as
+@samp{exec-file @var{program}}.
+
+@kindex target core
+@item target core @var{filename}
+A core dump file.  @samp{target core @var{filename}} is the same as
+@samp{core-file @var{filename}}.
+
+@kindex target remote
+@item target remote @var{dev}
+Remote serial target in GDB-specific protocol.  The argument @var{dev}
+specifies what serial device to use for the connection (e.g.
+@file{/dev/ttya}). @xref{Remote, ,Remote debugging}.  @code{target remote}
+supports the @code{load} command.  This is only useful if you have
+some other way of getting the stub to the target system, and you can put
+it somewhere in memory where it won't get clobbered by the download.
+
+@kindex target sim
+@item target sim
+Builtin CPU simulator.  @value{GDBN} includes simulators for most architectures.
+In general,
+@example
+        target sim
+        load
+        run
+@end example
+@noindent
+works; however, you cannot assume that a specific memory map, device
+drivers, or even basic I/O is available, although some simulators do
+provide these.  For info about any processor-specific simulator details,
+see the appropriate section in @ref{Embedded Processors, ,Embedded
+Processors}.
+
+@end table
+
+Some configurations may include these targets as well:
+
+@table @code
+
+@kindex target nrom
+@item target nrom @var{dev}
+NetROM ROM emulator.  This target only supports downloading.
+
+@end table
+
+Different targets are available on different configurations of @value{GDBN}; 
+your configuration may have more or fewer targets.
+
+Many remote targets require you to download the executable's code
+once you've successfully established a connection.
+
+@table @code
+
+@kindex load @var{filename}
+@item load @var{filename}
+Depending on what remote debugging facilities are configured into
+@value{GDBN}, the @code{load} command may be available.  Where it exists, it
+is meant to make @var{filename} (an executable) available for debugging
+on the remote system---by downloading, or dynamic linking, for example.
+@code{load} also records the @var{filename} symbol table in @value{GDBN}, like
+the @code{add-symbol-file} command.
+
+If your @value{GDBN} does not have a @code{load} command, attempting to
+execute it gets the error message ``@code{You can't do that when your
+target is @dots{}}''
+
+The file is loaded at whatever address is specified in the executable.
+For some object file formats, you can specify the load address when you
+link the program; for other formats, like a.out, the object file format
+specifies a fixed address.
+@c FIXME! This would be a good place for an xref to the GNU linker doc.
+
+@code{load} does not repeat if you press @key{RET} again after using it.
+@end table
+
+@node Byte Order
+@section Choosing target byte order
+
+@cindex choosing target byte order
+@cindex target byte order
+@kindex set endian big
+@kindex set endian little
+@kindex set endian auto
+@kindex show endian
+
+Some types of processors, such as the MIPS, PowerPC, and Hitachi SH,
+offer the ability to run either big-endian or little-endian byte
+orders.  Usually the executable or symbol will include a bit to
+designate the endian-ness, and you will not need to worry about
+which to use.  However, you may still find it useful to adjust
+@value{GDBN}'s idea of processor endian-ness manually.
+
+@table @code
+@kindex set endian big
+@item set endian big
+Instruct @value{GDBN} to assume the target is big-endian.
+
+@kindex set endian little
+@item set endian little
+Instruct @value{GDBN} to assume the target is little-endian.
+
+@kindex set endian auto
+@item set endian auto
+Instruct @value{GDBN} to use the byte order associated with the
+executable.
+
+@item show endian
+Display @value{GDBN}'s current idea of the target byte order.
+
+@end table
+
+Note that these commands merely adjust interpretation of symbolic
+data on the host, and that they have absolutely no effect on the
+target system.
+
+@node Remote
+@section Remote debugging
+@cindex remote debugging
+
+If you are trying to debug a program running on a machine that cannot run
+@value{GDBN} in the usual way, it is often useful to use remote debugging.  
+For example, you might use remote debugging on an operating system kernel, 
+or on a small system which does not have a general purpose operating system
+powerful enough to run a full-featured debugger.
+
+Some configurations of @value{GDBN} have special serial or TCP/IP interfaces
+to make this work with particular debugging targets.  In addition,
+@value{GDBN} comes with a generic serial protocol (specific to @value{GDBN}, 
+but not specific to any particular target system) which you can use if you
+write the remote stubs---the code that runs on the remote system to
+communicate with @value{GDBN}.
+
+Other remote targets may be available in your
+configuration of @value{GDBN}; use @code{help target} to list them.
+
+@menu
+* Remote Serial::               @value{GDBN} remote serial protocol
+@end menu
+
+@node Remote Serial
+@subsection The @value{GDBN} remote serial protocol
+
+@cindex remote serial debugging, overview
+To debug a program running on another machine (the debugging
+@dfn{target} machine), you must first arrange for all the usual
+prerequisites for the program to run by itself.  For example, for a C
+program, you need:
+
+@enumerate
+@item
+A startup routine to set up the C runtime environment; these usually
+have a name like @file{crt0}.  The startup routine may be supplied by
+your hardware supplier, or you may have to write your own.
+
+@item 
+A C subroutine library to support your program's
+subroutine calls, notably managing input and output.
+
+@item
+A way of getting your program to the other machine---for example, a
+download program.  These are often supplied by the hardware
+manufacturer, but you may have to write your own from hardware
+documentation.
+@end enumerate
+
+The next step is to arrange for your program to use a serial port to
+communicate with the machine where @value{GDBN} is running (the @dfn{host}
+machine).  In general terms, the scheme looks like this:
+
+@table @emph
+@item On the host,
+@value{GDBN} already understands how to use this protocol; when everything
+else is set up, you can simply use the @samp{target remote} command
+(@pxref{Targets,,Specifying a Debugging Target}).
+
+@item On the target,
+you must link with your program a few special-purpose subroutines that
+implement the @value{GDBN} remote serial protocol.  The file containing these
+subroutines is called  a @dfn{debugging stub}.
+
+On certain remote targets, you can use an auxiliary program
+@code{gdbserver} instead of linking a stub into your program.
+@xref{Server,,Using the @code{gdbserver} program}, for details.
+@end table
+
+The debugging stub is specific to the architecture of the remote
+machine; for example, use @file{sparc-stub.c} to debug programs on
+@sc{sparc} boards.
+
+@cindex remote serial stub list
+These working remote stubs are distributed with @value{GDBN}:
+
+@table @code
+
+@item i386-stub.c
+@kindex i386-stub.c
+@cindex Intel
+@cindex i386
+For Intel 386 and compatible architectures.
+
+@item m68k-stub.c
+@kindex m68k-stub.c
+@cindex Motorola 680x0
+@cindex m680x0
+For Motorola 680x0 architectures.
+
+@item sh-stub.c
+@kindex sh-stub.c
+@cindex Hitachi
+@cindex SH
+For Hitachi SH architectures.
+
+@item sparc-stub.c
+@kindex sparc-stub.c
+@cindex Sparc
+For @sc{sparc} architectures.
+
+@item sparcl-stub.c
+@kindex sparcl-stub.c
+@cindex Fujitsu
+@cindex SparcLite
+For Fujitsu @sc{sparclite} architectures.
+
+@end table
+
+The @file{README} file in the @value{GDBN} distribution may list other
+recently added stubs.
+
+@menu
+* Stub Contents::       What the stub can do for you
+* Bootstrapping::       What you must do for the stub
+* Debug Session::       Putting it all together
+* Protocol::            Definition of the communication protocol
+* Server::                Using the `gdbserver' program
+* NetWare::                Using the `gdbserve.nlm' program
+@end menu
+
+@node Stub Contents
+@subsubsection What the stub can do for you
+
+@cindex remote serial stub
+The debugging stub for your architecture supplies these three
+subroutines:
+
+@table @code
+@item set_debug_traps
+@kindex set_debug_traps
+@cindex remote serial stub, initialization
+This routine arranges for @code{handle_exception} to run when your
+program stops.  You must call this subroutine explicitly near the
+beginning of your program.
+
+@item handle_exception
+@kindex handle_exception
+@cindex remote serial stub, main routine
+This is the central workhorse, but your program never calls it
+explicitly---the setup code arranges for @code{handle_exception} to
+run when a trap is triggered.
+
+@code{handle_exception} takes control when your program stops during
+execution (for example, on a breakpoint), and mediates communications
+with @value{GDBN} on the host machine.  This is where the communications
+protocol is implemented; @code{handle_exception} acts as the @value{GDBN}
+representative on the target machine.  It begins by sending summary
+information on the state of your program, then continues to execute,
+retrieving and transmitting any information @value{GDBN} needs, until you
+execute a @value{GDBN} command that makes your program resume; at that point,
+@code{handle_exception} returns control to your own code on the target
+machine. 
+
+@item breakpoint
+@cindex @code{breakpoint} subroutine, remote
+Use this auxiliary subroutine to make your program contain a
+breakpoint.  Depending on the particular situation, this may be the only
+way for @value{GDBN} to get control.  For instance, if your target
+machine has some sort of interrupt button, you won't need to call this;
+pressing the interrupt button transfers control to
+@code{handle_exception}---in effect, to @value{GDBN}.  On some machines,
+simply receiving characters on the serial port may also trigger a trap;
+again, in that situation, you don't need to call @code{breakpoint} from
+your own program---simply running @samp{target remote} from the host
+@value{GDBN} session gets control.  
+
+Call @code{breakpoint} if none of these is true, or if you simply want
+to make certain your program stops at a predetermined point for the
+start of your debugging session.
+@end table
+
+@node Bootstrapping
+@subsubsection What you must do for the stub
+
+@cindex remote stub, support routines
+The debugging stubs that come with @value{GDBN} are set up for a particular
+chip architecture, but they have no information about the rest of your
+debugging target machine.
+
+First of all you need to tell the stub how to communicate with the
+serial port.
+
+@table @code
+@item int getDebugChar()
+@kindex getDebugChar
+Write this subroutine to read a single character from the serial port.
+It may be identical to @code{getchar} for your target system; a
+different name is used to allow you to distinguish the two if you wish.
+
+@item void putDebugChar(int)
+@kindex putDebugChar
+Write this subroutine to write a single character to the serial port.
+It may be identical to @code{putchar} for your target system; a 
+different name is used to allow you to distinguish the two if you wish.
+@end table
+
+@cindex control C, and remote debugging
+@cindex interrupting remote targets
+If you want @value{GDBN} to be able to stop your program while it is
+running, you need to use an interrupt-driven serial driver, and arrange
+for it to stop when it receives a @code{^C} (@samp{\003}, the control-C
+character).  That is the character which @value{GDBN} uses to tell the
+remote system to stop.
+
+Getting the debugging target to return the proper status to @value{GDBN}
+probably requires changes to the standard stub; one quick and dirty way
+is to just execute a breakpoint instruction (the ``dirty'' part is that
+@value{GDBN} reports a @code{SIGTRAP} instead of a @code{SIGINT}).
+
+Other routines you need to supply are:
+
+@table @code
+@item void exceptionHandler (int @var{exception_number}, void *@var{exception_address})
+@kindex exceptionHandler
+Write this function to install @var{exception_address} in the exception
+handling tables.  You need to do this because the stub does not have any
+way of knowing what the exception handling tables on your target system
+are like (for example, the processor's table might be in @sc{rom},
+containing entries which point to a table in @sc{ram}).
+@var{exception_number} is the exception number which should be changed;
+its meaning is architecture-dependent (for example, different numbers
+might represent divide by zero, misaligned access, etc).  When this
+exception occurs, control should be transferred directly to
+@var{exception_address}, and the processor state (stack, registers,
+and so on) should be just as it is when a processor exception occurs.  So if
+you want to use a jump instruction to reach @var{exception_address}, it
+should be a simple jump, not a jump to subroutine.
+
+For the 386, @var{exception_address} should be installed as an interrupt
+gate so that interrupts are masked while the handler runs.  The gate
+should be at privilege level 0 (the most privileged level).  The
+@sc{sparc} and 68k stubs are able to mask interrupts themselves without
+help from @code{exceptionHandler}.
+
+@item void flush_i_cache()
+@kindex flush_i_cache
+On @sc{sparc} and @sc{sparclite} only, write this subroutine to flush the
+instruction cache, if any, on your target machine.  If there is no
+instruction cache, this subroutine may be a no-op.
+
+On target machines that have instruction caches, @value{GDBN} requires this
+function to make certain that the state of your program is stable.
+@end table
+
+@noindent
+You must also make sure this library routine is available:
+
+@table @code
+@item void *memset(void *, int, int)
+@kindex memset
+This is the standard library function @code{memset} that sets an area of
+memory to a known value.  If you have one of the free versions of
+@code{libc.a}, @code{memset} can be found there; otherwise, you must
+either obtain it from your hardware manufacturer, or write your own.
+@end table
+
+If you do not use the GNU C compiler, you may need other standard
+library subroutines as well; this varies from one stub to another,
+but in general the stubs are likely to use any of the common library
+subroutines which @code{@value{GCC}} generates as inline code.
+
+
+@node Debug Session
+@subsubsection Putting it all together
+
+@cindex remote serial debugging summary
+In summary, when your program is ready to debug, you must follow these
+steps.
+
+@enumerate
+@item
+Make sure you have the supporting low-level routines
+(@pxref{Bootstrapping,,What you must do for the stub}):
+@display
+@code{getDebugChar}, @code{putDebugChar},
+@code{flush_i_cache}, @code{memset}, @code{exceptionHandler}.
+@end display
+
+@item
+Insert these lines near the top of your program:
+
+@example
+set_debug_traps();
+breakpoint();
+@end example
+
+@item
+For the 680x0 stub only, you need to provide a variable called
+@code{exceptionHook}.  Normally you just use:
+
+@example
+void (*exceptionHook)() = 0;
+@end example
+
+@noindent
+but if before calling @code{set_debug_traps}, you set it to point to a
+function in your program; that function is called when
+@code{@value{GDBN}} continues after stopping on a trap (for example, bus
+error).  The function indicated by @code{exceptionHook} is called with
+one parameter: an @code{int} which is the exception number.
+
+@item
+Compile and link together: your program, the @value{GDBN} debugging stub for
+your target architecture, and the supporting subroutines.
+
+@item
+Make sure you have a serial connection between your target machine and
+the @value{GDBN} host, and identify the serial port on the host.
+
+@item
+@c The "remote" target now provides a `load' command, so we should
+@c document that.  FIXME.
+Download your program to your target machine (or get it there by
+whatever means the manufacturer provides), and start it.
+
+@item
+To start remote debugging, run @value{GDBN} on the host machine, and specify
+as an executable file the program that is running in the remote machine.
+This tells @value{GDBN} how to find your program's symbols and the contents
+of its pure text.
+
+@item
+@cindex serial line, @code{target remote}
+Establish communication using the @code{target remote} command.
+Its argument specifies how to communicate with the target
+machine---either via a devicename attached to a direct serial line, or a
+TCP port (usually to a terminal server which in turn has a serial line
+to the target).  For example, to use a serial line connected to the
+device named @file{/dev/ttyb}:
+
+@example
+target remote /dev/ttyb
+@end example
+
+@cindex TCP port, @code{target remote}
+To use a TCP connection, use an argument of the form
+@code{@var{host}:port}.  For example, to connect to port 2828 on a
+terminal server named @code{manyfarms}:
+
+@example
+target remote manyfarms:2828
+@end example
+@end enumerate
+
+Now you can use all the usual commands to examine and change data and to
+step and continue the remote program.
+
+To resume the remote program and stop debugging it, use the @code{detach}
+command.
+
+@cindex interrupting remote programs
+@cindex remote programs, interrupting
+Whenever @value{GDBN} is waiting for the remote program, if you type the
+interrupt character (often @key{C-C}), @value{GDBN} attempts to stop the
+program.  This may or may not succeed, depending in part on the hardware
+and the serial drivers the remote system uses.  If you type the
+interrupt character once again, @value{GDBN} displays this prompt:
+
+@example
+Interrupted while waiting for the program.
+Give up (and stop debugging it)?  (y or n)
+@end example
+
+If you type @kbd{y}, @value{GDBN} abandons the remote debugging session.
+(If you decide you want to try again later, you can use @samp{target
+remote} again to connect once more.)  If you type @kbd{n}, @value{GDBN}
+goes back to waiting.
+
+@node Protocol
+@subsubsection Communication protocol
+
+@cindex debugging stub, example
+@cindex remote stub, example
+@cindex stub example, remote debugging
+The stub files provided with @value{GDBN} implement the target side of the
+communication protocol, and the @value{GDBN} side is implemented in the
+@value{GDBN} source file @file{remote.c}.  Normally, you can simply allow
+these subroutines to communicate, and ignore the details.  (If you're
+implementing your own stub file, you can still ignore the details: start
+with one of the existing stub files.  @file{sparc-stub.c} is the best
+organized, and therefore the easiest to read.)
+
+However, there may be occasions when you need to know something about
+the protocol---for example, if there is only one serial port to your
+target machine, you might want your program to do something special if
+it recognizes a packet meant for @value{GDBN}.
+
+In the examples below, @samp{<-} and @samp{->} are used to indicate
+transmitted and received data respectfully.
+
+@cindex protocol, @value{GDBN} remote serial
+@cindex serial protocol, @value{GDBN} remote
+@cindex remote serial protocol
+All @value{GDBN} commands and responses (other than acknowledgments)
+are sent as a @var{packet}.  A @var{packet} is introduced with the
+character @samp{$}, this is followed by an optional two-digit
+@var{sequence-id} and the character @samp{:}, the actual
+@var{packet-data}, and the terminating character @samp{#} followed by a
+two-digit @var{checksum}:
+
+@example
+@code{$}@var{packet-data}@code{#}@var{checksum}
+@end example
+@noindent
+or, with the optional @var{sequence-id}:
+@example
+@code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum}
+@end example
+
+@cindex checksum, for @value{GDBN} remote
+@noindent
+The two-digit @var{checksum} is computed as the modulo 256 sum of all
+characters between the leading @samp{$} and the trailing @samp{#} (that
+consisting of both the optional @var{sequence-id}@code{:} and the actual
+@var{packet-data}) (an eight bit unsigned checksum).
+
+@cindex sequence-id, for @value{GDBN} remote
+@noindent
+The two-digit @var{sequence-id}, when present, is returned with the
+acknowledgment.  Beyond that its meaning is poorly defined.
+@value{GDBN} is not known to output @var{sequence-id}s.
+
+When either the host or the target machine receives a packet, the first
+response expected is an acknowledgment: either @samp{+} (to indicate
+the package was received correctly) or @samp{-} (to request
+retransmission):
+
+@example
+<- @code{$}@var{packet-data}@code{#}@var{checksum}
+-> @code{+}
+@end example
+@noindent
+If the received packet included a @var{sequence-id} than that is
+appended to a positive acknowledgment:
+
+@example
+<- @code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum}
+-> @code{+}@var{sequence-id}
+@end example
+
+The host (@value{GDBN}) sends @var{command}s, and the target (the
+debugging stub incorporated in your program) sends a @var{response}.  In
+the case of step and continue @var{command}s, the response is only sent
+when the operation has completed (the target has again stopped).
+
+@var{packet-data} consists of a sequence of characters with the
+exception of @samp{#} and @samp{$} (see @samp{X} packet for an
+exception). @samp{:} can not appear as the third character in a packet.
+Fields within the packet should be separated using @samp{,} and @samp{;}
+(unfortunately some packets chose to use @samp{:}).  Except where
+otherwise noted all numbers are represented in HEX with leading zeros
+suppressed.
+
+Response @var{data} can be run-length encoded to save space.  A @samp{*}
+means that the next character is an @sc{ascii} encoding giving a repeat count
+which stands for that many repetitions of the character preceding the
+@samp{*}.  The encoding is @code{n+29}, yielding a printable character
+where @code{n >=3} (which is where rle starts to win).  The printable
+characters @samp{$}, @samp{#}, @samp{+} and @samp{-} or with a numeric
+value greater than 126 should not be used.
+
+Some remote systems have used a different run-length encoding mechanism
+loosely refered to as the cisco encoding.  Following the @samp{*}
+character are two hex digits that indicate the size of the packet.
+
+So:
+@example
+"@code{0* }"
+@end example
+@noindent
+means the same as "0000".
+
+The error response, returned for some packets includes a two character
+error number.  That number is not well defined.
+
+For any @var{command} not supported by the stub, an empty response
+(@samp{$#00}) should be returned.  That way it is possible to extend the
+protocol.  A newer @value{GDBN} can tell if a packet is supported based
+on that response.
+
+Below is a complete list of all currently defined @var{command}s and
+their corresponding response @var{data}:
+
+@multitable @columnfractions .30 .30 .40
+@item Packet
+@tab Request
+@tab Description
+
+@item extended ops @emph{(optional)}
+@tab @code{!}
+@tab
+Use the extended remote protocol.  Sticky---only needs to be set once.
+The extended remote protocol support the @samp{R} packet.
+@item
+@tab reply @samp{}
+@tab
+Stubs that support the extended remote protocol return @samp{} which,
+unfortunately, is identical to the response returned by stubs that do not
+support protocol extensions.
+
+@item last signal
+@tab @code{?}
+@tab
+Indicate the reason the target halted.  The reply is the same as for step
+and continue.
+@item
+@tab reply
+@tab see below
+
+
+@item reserved
+@tab @code{a}
+@tab Reserved for future use 
+
+@item set program arguments @strong{(reserved)} @emph{(optional)}
+@tab @code{A}@var{arglen}@code{,}@var{argnum}@code{,}@var{arg}@code{,...}
+@tab
+Initialized @samp{argv[]} array passed into program. @var{arglen}
+specifies the number of bytes in the hex encoded byte stream @var{arg}.
+See @file{gdbserver} for more details.
+@item
+@tab reply @code{OK}
+@item
+@tab reply @code{E}@var{NN}
+
+@item set baud @strong{(deprecated)}
+@tab @code{b}@var{baud}
+@tab
+Change the serial line speed to @var{baud}.  JTC: @emph{When does the
+transport layer state change?  When it's received, or after the ACK is
+transmitted.  In either case, there are problems if the command or the
+acknowledgment packet is dropped.} Stan: @emph{If people really wanted
+to add something like this, and get it working for the first time, they
+ought to modify ser-unix.c to send some kind of out-of-band message to a
+specially-setup stub and have the switch happen "in between" packets, so
+that from remote protocol's point of view, nothing actually
+happened.}
+
+@item set breakpoint @strong{(deprecated)}
+@tab @code{B}@var{addr},@var{mode}
+@tab
+Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a
+breakpoint at @var{addr}.  @emph{This has been replaced by the @samp{Z} and
+@samp{z} packets.}
+
+@item continue
+@tab @code{c}@var{addr}
+@tab
+@var{addr} is address to resume. If @var{addr} is omitted, resume at
+current address.
+@item
+@tab reply
+@tab see below
+
+@item continue with signal @emph{(optional)}
+@tab @code{C}@var{sig}@code{;}@var{addr}
+@tab
+Continue with signal @var{sig} (hex signal number).  If
+@code{;}@var{addr} is omitted, resume at same address.
+@item
+@tab reply
+@tab see below
+
+@item toggle debug @emph{(deprecated)}
+@tab @code{d}
+@tab
+toggle debug flag.
+
+@item detach @emph{(optional)}
+@tab @code{D}
+@tab
+Detach @value{GDBN} from the remote system.  Sent to the remote target before
+@value{GDBN} disconnects.
+@item
+@tab reply @emph{no response}
+@tab
+@value{GDBN} does not check for any response after sending this packet
+
+@item reserved
+@tab @code{e}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{E}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{f}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{F}
+@tab Reserved for future use 
+
+@item read registers
+@tab @code{g}
+@tab Read general registers.
+@item
+@tab reply @var{XX...}
+@tab
+Each byte of register data is described by two hex digits.  The bytes
+with the register are transmitted in target byte order.  The size of
+each register and their position within the @samp{g} @var{packet} are
+determined by the @value{GDBN} internal macros @var{REGISTER_RAW_SIZE} and
+@var{REGISTER_NAME} macros.  The specification of several standard
+@code{g} packets is specified below.
+@item
+@tab @code{E}@var{NN}
+@tab for an error.
+
+@item write regs
+@tab @code{G}@var{XX...}
+@tab
+See @samp{g} for a description of the @var{XX...} data.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item reserved
+@tab @code{h}
+@tab Reserved for future use 
+
+@item set thread @emph{(optional)}
+@tab @code{H}@var{c}@var{t...}
+@tab
+Set thread for subsequent operations (@samp{m}, @samp{M}, @samp{g},
+@samp{G}, et.al.).  @var{c} = @samp{c} for thread used in step and
+continue; @var{t...} can be -1 for all threads.  @var{c} = @samp{g} for
+thread used in other operations.  If zero, pick a thread, any thread.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@c FIXME: JTC:
+@c   'H': How restrictive (or permissive) is the thread model.  If a
+@c        thread is selected and stopped, are other threads allowed 
+@c        to continue to execute?  As I mentioned above, I think the
+@c        semantics of each command when a thread is selected must be
+@c        described.  For example:
+@c
+@c        'g':    If the stub supports threads and a specific thread is
+@c                selected, returns the register block from that thread;
+@c                otherwise returns current registers.
+@c
+@c        'G'     If the stub supports threads and a specific thread is
+@c                selected, sets the registers of the register block of
+@c                that thread; otherwise sets current registers.
+
+@item cycle step @strong{(draft)} @emph{(optional)}
+@tab @code{i}@var{addr}@code{,}@var{nnn}
+@tab
+Step the remote target by a single clock cycle.  If @code{,}@var{nnn} is
+present, cycle step @var{nnn} cycles.  If @var{addr} is present, cycle
+step starting at that address.
+
+@item signal then cycle step @strong{(reserved)} @emph{(optional)}
+@tab @code{I}
+@tab
+See @samp{i} and @samp{S} for likely syntax and semantics.
+
+@item reserved
+@tab @code{j}
+@tab Reserved for future use
+
+@item reserved
+@tab @code{J}
+@tab Reserved for future use 
+
+@item kill request @emph{(optional)}
+@tab @code{k}
+@tab
+FIXME: @emph{There is no description of how operate when a specific
+thread context has been selected (ie. does 'k' kill only that thread?)}.
+
+@item reserved
+@tab @code{l}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{L}
+@tab Reserved for future use 
+
+@item read memory
+@tab @code{m}@var{addr}@code{,}@var{length}
+@tab
+Read @var{length} bytes of memory starting at address @var{addr}.
+Neither @value{GDBN} nor the stub assume that sized memory transfers are assumed
+using word alligned accesses. FIXME: @emph{A word aligned memory
+transfer mechanism is needed.}
+@item
+@tab reply @var{XX...}
+@tab
+@var{XX...} is mem contents. Can be fewer bytes than requested if able
+to read only part of the data.  Neither @value{GDBN} nor the stub assume that
+sized memory transfers are assumed using word alligned accesses. FIXME:
+@emph{A word aligned memory transfer mechanism is needed.}
+@item
+@tab reply @code{E}@var{NN}
+@tab @var{NN} is errno
+
+@item write mem
+@tab @code{M}@var{addr},@var{length}@code{:}@var{XX...}
+@tab
+Write @var{length} bytes of memory starting at address @var{addr}.
+@var{XX...} is the data.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab
+for an error (this includes the case where only part of the data was
+written).
+
+@item reserved
+@tab @code{n}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{N}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{o}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{O}
+@tab Reserved for future use 
+
+@item read reg @strong{(reserved)}
+@tab @code{p}@var{n...}
+@tab
+See write register.
+@item
+@tab return @var{r....}
+@tab The hex encoded value of the register in target byte order.
+
+@item write reg @emph{(optional)}
+@tab @code{P}@var{n...}@code{=}@var{r...}
+@tab
+Write register @var{n...} with value @var{r...}, which contains two hex
+digits for each byte in the register (target byte order).
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item general query @emph{(optional)}
+@tab @code{q}@var{query}
+@tab
+Request info about @var{query}.  In general @value{GDBN} @var{query}'s
+have a leading upper case letter.  Custom vendor queries should use a
+company prefix (in lower case) ex: @samp{qfsf.var}.  @var{query} may
+optionally be followed by a @samp{,} or @samp{;} separated list.  Stubs
+must ensure that they match the full @var{query} name.
+@item
+@tab reply @code{XX...}
+@tab Hex encoded data from query.  The reply can not be empty.
+@item
+@tab reply @code{E}@var{NN}
+@tab error reply
+@item
+@tab reply @samp{}
+@tab Indicating an unrecognized @var{query}.
+
+@item general set @emph{(optional)}
+@tab @code{Q}@var{var}@code{=}@var{val}
+@tab
+Set value of @var{var} to @var{val}.  See @samp{q} for a discussing of
+naming conventions.
+
+@item reset @emph{(deprecated)}
+@tab @code{r}
+@tab
+Reset the entire system.
+
+@item remote restart @emph{(optional)}
+@tab @code{R}@var{XX}
+@tab
+Restart the remote server.  @var{XX} while needed has no clear
+definition.  FIXME: @emph{An example interaction explaining how this
+packet is used in extended-remote mode is needed}.
+
+@item step @emph{(optional)}
+@tab @code{s}@var{addr}
+@tab
+@var{addr} is address to resume.  If @var{addr} is omitted, resume at
+same address.
+@item
+@tab reply
+@tab see below
+
+@item step with signal @emph{(optional)}
+@tab @code{S}@var{sig}@code{;}@var{addr}
+@tab
+Like @samp{C} but step not continue.
+@item
+@tab reply
+@tab see below
+
+@item search @emph{(optional)}
+@tab @code{t}@var{addr}@code{:}@var{PP}@code{,}@var{MM}
+@tab
+Search backwards starting at address @var{addr} for a match with pattern
+@var{PP} and mask @var{MM}.  @var{PP} and @var{MM} are 4
+bytes.  @var{addr} must be at least 3 digits.
+
+@item thread alive @emph{(optional)}
+@tab @code{T}@var{XX}
+@tab Find out if the thread XX is alive.
+@item
+@tab reply @code{OK}
+@tab thread is still alive
+@item
+@tab reply @code{E}@var{NN}
+@tab thread is dead
+        
+@item reserved
+@tab @code{u}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{U}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{v}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{V}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{w}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{W}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{x}
+@tab Reserved for future use 
+
+@item write mem (binary) @emph{(optional)}
+@tab @code{X}@var{addr}@code{,}@var{length}@var{:}@var{XX...}
+@tab
+@var{addr} is address, @var{length} is number of bytes, @var{XX...} is
+binary data.  The characters @code{$}, @code{#}, and @code{0x7d} are
+escaped using @code{0x7d}.
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+
+@item reserved
+@tab @code{y}
+@tab Reserved for future use 
+
+@item reserved
+@tab @code{Y}
+@tab Reserved for future use 
+
+@item remove break or watchpoint @strong{(draft)} @emph{(optional)}
+@tab @code{z}@var{t}@code{,}@var{addr}@code{,}@var{length}
+@tab
+See @samp{Z}.
+
+@item insert break or watchpoint @strong{(draft)} @emph{(optional)}
+@tab @code{Z}@var{t}@code{,}@var{addr}@code{,}@var{length}
+@tab
+@var{t} is type: @samp{0} - software breakpoint, @samp{1} - hardware
+breakpoint, @samp{2} - write watchpoint, @samp{3} - read watchpoint,
+@samp{4} - access watchpoint; @var{addr} is address; @var{length} is in
+bytes.  For a software breakpoint, @var{length} specifies the size of
+the instruction to be patched.  For hardware breakpoints and watchpoints
+@var{length} specifies the memory region to be monitored.  To avoid
+potential problems with duplicate packets, the operations should be
+implemented in an ident-potentent way.
+@item
+@tab reply @code{E}@var{NN}
+@tab for an error
+@item
+@tab reply @code{OK}
+@tab for success
+@item
+@tab @samp{}
+@tab If not supported.
+
+@item reserved
+@tab <other>
+@tab Reserved for future use 
+
+@end multitable
+
+The @samp{C}, @samp{c}, @samp{S}, @samp{s} and @samp{?} packets can
+receive any of the below as a reply.  In the case of the @samp{C},
+@samp{c}, @samp{S} and @samp{s} packets, that reply is only returned
+when the target halts.  In the below the exact meaning of @samp{signal
+number} is poorly defined.  In general one of the UNIX signal numbering
+conventions is used.
+
+@multitable @columnfractions .4 .6
+
+@item @code{S}@var{AA}
+@tab @var{AA} is the signal number
+
+@item @code{T}@var{AA}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}
+@tab
+@var{AA} = two hex digit signal number; @var{n...} = register number
+(hex), @var{r...}  = target byte ordered register contents, size defined
+by @code{REGISTER_RAW_SIZE}; @var{n...} = @samp{thread}, @var{r...} =
+thread process ID, this is a hex integer; @var{n...} = other string not
+starting with valid hex digit.  @value{GDBN} should ignore this
+@var{n...}, @var{r...} pair and go on to the next.  This way we can
+extend the protocol.
+
+@item @code{W}@var{AA}
+@tab
+The process exited, and @var{AA} is the exit status.  This is only
+applicable for certains sorts of targets.
+
+@item @code{X}@var{AA}
+@tab
+The process terminated with signal @var{AA}.
+
+@item @code{N}@var{AA}@code{;}@var{tttttttt}@code{;}@var{dddddddd}@code{;}@var{bbbbbbbb} @strong{(obsolete)}
+@tab
+@var{AA} = signal number; @var{tttttttt} = address of symbol "_start";
+@var{dddddddd} = base of data section; @var{bbbbbbbb} = base of bss
+section.  @emph{Note: only used by Cisco Systems targets.  The difference
+between this reply and the "qOffsets" query is that the 'N' packet may
+arrive spontaneously whereas the 'qOffsets' is a query initiated by the
+host debugger.}
+
+@item @code{O}@var{XX...}
+@tab
+@var{XX...} is hex encoding of @sc{ascii} data.  This can happen at any time
+while the program is running and the debugger should continue to wait
+for 'W', 'T', etc.
+
+@end multitable
+
+The following set and query packets have already been defined.
+
+@multitable @columnfractions .2 .2 .6
+
+@item current thread
+@tab @code{q}@code{C}
+@tab Return the current thread id.
+@item
+@tab reply @code{QC}@var{pid}
+@tab
+Where @var{pid} is a HEX encoded 16 bit process id.
+@item
+@tab reply *
+@tab Any other reply implies the old pid.
+
+@item compute CRC of memory block
+@tab @code{q}@code{CRC:}@var{addr}@code{,}@var{length}
+@tab
+@item
+@tab reply @code{E}@var{NN}
+@tab An error (such as memory fault)
+@item
+@tab reply @code{C}@var{CRC32}
+@tab A 32 bit cyclic redundancy check of the specified memory region.
+
+@item query @var{LIST} or @var{threadLIST} @strong{(deprecated)}
+@tab @code{q}@code{L}@var{startflag}@var{threadcount}@var{nextthread}
+@tab
+Obtain thread information from RTOS.  Where: @var{startflag} (one hex
+digit) is one to indicate the first query and zero to indicate a
+subsequent query; @var{threadcount} (two hex digits) is the maximum
+number of threads the response packet can contain; and @var{nextthread}
+(eight hex digits), for subsequent queries (@var{startflag} is zero), is
+returned in the response as @var{argthread}.
+@item
+@tab reply @code{q}@code{M}@var{count}@var{done}@var{argthread}@var{thread...}
+@tab
+Where: @var{count} (two hex digits) is the number of threads being
+returned; @var{done} (one hex digit) is zero to indicate more threads
+and one indicates no further threads; @var{argthreadid} (eight hex
+digits) is @var{nextthread} from the request packet; @var{thread...} is
+a sequence of thread IDs from the target.  @var{threadid} (eight hex
+digits).  See @code{remote.c:parse_threadlist_response()}.
+
+@item query sect offs
+@tab @code{q}@code{Offsets}
+@tab
+Get section offsets that the target used when re-locating the downloaded
+image.  @emph{Note: while a @code{Bss} offset is included in the
+response, @value{GDBN} ignores this and instead applies the @code{Data}
+offset to the @code{Bss} section.}
+@item
+@tab reply @code{Text=}@var{xxx}@code{;Data=}@var{yyy}@code{;Bss=}@var{zzz}
+
+@item thread info request
+@tab @code{q}@code{P}@var{mode}@var{threadid}
+@tab
+Returns information on @var{threadid}.  Where: @var{mode} is a hex
+encoded 32 bit mode; @var{threadid} is a hex encoded 64 bit thread ID.
+@item
+@tab reply *
+@tab
+See @code{remote.c:remote_unpack_thread_info_response()}.
+
+@item remote command
+@tab @code{q}@code{Rcmd,}@var{COMMAND}
+@tab
+@var{COMMAND} (hex encoded) is passed to the local interpreter for
+execution.  Invalid commands should be reported using the output string.
+Before the final result packet, the target may also respond with a
+number of intermediate @code{O}@var{OUTPUT} console output
+packets.  @emph{Implementors should note that providing access to a
+stubs's interpreter may have security implications}.
+@item
+@tab reply @code{OK}
+@tab
+A command response with no output.
+@item
+@tab reply @var{OUTPUT}
+@tab
+A command response with the hex encoded output string @var{OUTPUT}.
+@item
+@tab reply @code{E}@var{NN}
+@tab
+Indicate a badly formed request.
+
+@item
+@tab reply @samp{}
+@tab
+When @samp{q}@samp{Rcmd} is not recognized.
+
+@end multitable
+
+The following @samp{g}/@samp{G} packets have previously been defined.
+In the below, some thirty-two bit registers are transferred as sixty-four
+bits.  Those registers should be zero/sign extended (which?) to fill the
+space allocated.  Register bytes are transfered in target byte order.
+The two nibbles within a register byte are transfered most-significant -
+least-significant.
+
+@multitable @columnfractions .5 .5
+
+@item MIPS32
+@tab
+All registers are transfered as thirty-two bit quantities in the order:
+32 general-purpose; sr; lo; hi; bad; cause; pc; 32 floating-point
+registers; fsr; fir; fp.
+
+@item MIPS64
+@tab
+All registers are transfered as sixty-four bit quantities (including
+thirty-two bit registers such as @code{sr}).  The ordering is the same
+as @code{MIPS32}.
+
+@end multitable
+
+Example sequence of a target being re-started.  Notice how the restart
+does not get any direct output:
+
+@example
+<- @code{R00}
+-> @code{+}
+@emph{target restarts}
+<- @code{?}
+-> @code{+}
+-> @code{T001:1234123412341234}
+<- @code{+}
+@end example
+
+Example sequence of a target being stepped by a single instruction:
+
+@example
+<- @code{G1445...}
+-> @code{+}
+<- @code{s}
+-> @code{+}
+@emph{time passes}
+-> @code{T001:1234123412341234}
+<- @code{+}
+<- @code{g}
+-> @code{+}
+-> @code{1455...}
+<- @code{+}
+@end example
+
+@kindex set remotedebug@r{, serial protocol}
+@kindex show remotedebug@r{, serial protocol}
+@cindex packets, reporting on stdout
+@cindex serial connections, debugging
+If you have trouble with the serial connection, you can use the command
+@code{set remotedebug}.  This makes @value{GDBN} report on all packets sent
+back and forth across the serial line to the remote machine.  The
+packet-debugging information is printed on the @value{GDBN} standard output
+stream.  @code{set remotedebug off} turns it off, and @code{show
+remotedebug} shows you its current state.
+
+@node Server
+@subsubsection Using the @code{gdbserver} program
+
+@kindex gdbserver
+@cindex remote connection without stubs
+@code{gdbserver} is a control program for Unix-like systems, which
+allows you to connect your program with a remote @value{GDBN} via
+@code{target remote}---but without linking in the usual debugging stub.
+
+@code{gdbserver} is not a complete replacement for the debugging stubs,
+because it requires essentially the same operating-system facilities
+that @value{GDBN} itself does.  In fact, a system that can run
+@code{gdbserver} to connect to a remote @value{GDBN} could also run
+@value{GDBN} locally!  @code{gdbserver} is sometimes useful nevertheless,
+because it is a much smaller program than @value{GDBN} itself.  It is
+also easier to port than all of @value{GDBN}, so you may be able to get
+started more quickly on a new system by using @code{gdbserver}.
+Finally, if you develop code for real-time systems, you may find that
+the tradeoffs involved in real-time operation make it more convenient to
+do as much development work as possible on another system, for example
+by cross-compiling.  You can use @code{gdbserver} to make a similar
+choice for debugging.
+
+@value{GDBN} and @code{gdbserver} communicate via either a serial line
+or a TCP connection, using the standard @value{GDBN} remote serial
+protocol.
+
+@table @emph
+@item On the target machine,
+you need to have a copy of the program you want to debug.
+@code{gdbserver} does not need your program's symbol table, so you can
+strip the program if necessary to save space.  @value{GDBN} on the host
+system does all the symbol handling.
+
+To use the server, you must tell it how to communicate with @value{GDBN};
+the name of your program; and the arguments for your program.  The
+syntax is:
+
+@smallexample
+target> gdbserver @var{comm} @var{program} [ @var{args} @dots{} ]
+@end smallexample
+
+@var{comm} is either a device name (to use a serial line) or a TCP
+hostname and portnumber.  For example, to debug Emacs with the argument
+@samp{foo.txt} and communicate with @value{GDBN} over the serial port
+@file{/dev/com1}:
+
+@smallexample
+target> gdbserver /dev/com1 emacs foo.txt
+@end smallexample
+
+@code{gdbserver} waits passively for the host @value{GDBN} to communicate
+with it.
+
+To use a TCP connection instead of a serial line:
+
+@smallexample
+target> gdbserver host:2345 emacs foo.txt
+@end smallexample
+
+The only difference from the previous example is the first argument,
+specifying that you are communicating with the host @value{GDBN} via
+TCP.  The @samp{host:2345} argument means that @code{gdbserver} is to
+expect a TCP connection from machine @samp{host} to local TCP port 2345.
+(Currently, the @samp{host} part is ignored.)  You can choose any number
+you want for the port number as long as it does not conflict with any
+TCP ports already in use on the target system (for example, @code{23} is
+reserved for @code{telnet}).@footnote{If you choose a port number that
+conflicts with another service, @code{gdbserver} prints an error message
+and exits.}  You must use the same port number with the host @value{GDBN}
+@code{target remote} command.
+
+@item On the @value{GDBN} host machine,
+you need an unstripped copy of your program, since @value{GDBN} needs
+symbols and debugging information.  Start up @value{GDBN} as usual,
+using the name of the local copy of your program as the first argument.
+(You may also need the @w{@samp{--baud}} option if the serial line is
+running at anything other than 9600@dmn{bps}.)  After that, use @code{target
+remote} to establish communications with @code{gdbserver}.  Its argument
+is either a device name (usually a serial device, like
+@file{/dev/ttyb}), or a TCP port descriptor in the form
+@code{@var{host}:@var{PORT}}.  For example:
+
+@smallexample
+(@value{GDBP}) target remote /dev/ttyb
+@end smallexample
+
+@noindent
+communicates with the server via serial line @file{/dev/ttyb}, and
+
+@smallexample
+(@value{GDBP}) target remote the-target:2345
+@end smallexample
+
+@noindent
+communicates via a TCP connection to port 2345 on host @w{@file{the-target}}.
+For TCP connections, you must start up @code{gdbserver} prior to using
+the @code{target remote} command.  Otherwise you may get an error whose
+text depends on the host system, but which usually looks something like
+@samp{Connection refused}.
+@end table
+
+@node NetWare
+@subsubsection Using the @code{gdbserve.nlm} program
+
+@kindex gdbserve.nlm
+@code{gdbserve.nlm} is a control program for NetWare systems, which
+allows you to connect your program with a remote @value{GDBN} via
+@code{target remote}.
+
+@value{GDBN} and @code{gdbserve.nlm} communicate via a serial line,
+using the standard @value{GDBN} remote serial protocol.
+
+@table @emph
+@item On the target machine,
+you need to have a copy of the program you want to debug.
+@code{gdbserve.nlm} does not need your program's symbol table, so you
+can strip the program if necessary to save space.  @value{GDBN} on the
+host system does all the symbol handling.
+
+To use the server, you must tell it how to communicate with
+@value{GDBN}; the name of your program; and the arguments for your
+program.  The syntax is:
+
+@smallexample 
+load gdbserve [ BOARD=@var{board} ] [ PORT=@var{port} ]
+              [ BAUD=@var{baud} ] @var{program} [ @var{args} @dots{} ]
+@end smallexample
+
+@var{board} and @var{port} specify the serial line; @var{baud} specifies
+the baud rate used by the connection.  @var{port} and @var{node} default
+to 0, @var{baud} defaults to 9600@dmn{bps}.
+
+For example, to debug Emacs with the argument @samp{foo.txt}and
+communicate with @value{GDBN} over serial port number 2 or board 1 
+using a 19200@dmn{bps} connection:
+
+@smallexample
+load gdbserve BOARD=1 PORT=2 BAUD=19200 emacs foo.txt
+@end smallexample
+
+@item On the @value{GDBN} host machine,
+you need an unstripped copy of your program, since @value{GDBN} needs
+symbols and debugging information.  Start up @value{GDBN} as usual,
+using the name of the local copy of your program as the first argument.
+(You may also need the @w{@samp{--baud}} option if the serial line is
+running at anything other than 9600@dmn{bps}.  After that, use @code{target
+remote} to establish communications with @code{gdbserve.nlm}.  Its
+argument is a device name (usually a serial device, like
+@file{/dev/ttyb}).  For example:
+
+@smallexample
+(@value{GDBP}) target remote /dev/ttyb
+@end smallexample
+
+@noindent
+communications with the server via serial line @file{/dev/ttyb}.
+@end table
+
+@node KOD
+@section Kernel Object Display
+
+@cindex kernel object display
+@cindex kernel object
+@cindex KOD
+
+Some targets support kernel object display.  Using this facility,
+@value{GDBN} communicates specially with the underlying operating system
+and can display information about operating system-level objects such as
+mutexes and other synchronization objects.  Exactly which objects can be
+displayed is determined on a per-OS basis.
+
+Use the @code{set os} command to set the operating system.  This tells
+@value{GDBN} which kernel object display module to initialize:
+
+@example
+(@value{GDBP}) set os cisco
+@end example
+
+If @code{set os} succeeds, @value{GDBN} will display some information
+about the operating system, and will create a new @code{info} command
+which can be used to query the target.  The @code{info} command is named
+after the operating system:
+
+@example
+(@value{GDBP}) info cisco
+List of Cisco Kernel Objects
+Object     Description
+any        Any and all objects
+@end example
+
+Further subcommands can be used to query about particular objects known
+by the kernel.
+
+There is currently no way to determine whether a given operating system
+is supported other than to try it.
+
+
+@node Configurations
+@chapter Configuration-Specific Information
+
+While nearly all @value{GDBN} commands are available for all native and
+cross versions of the debugger, there are some exceptions.  This chapter
+describes things that are only available in certain configurations.
+
+There are three major categories of configurations: native
+configurations, where the host and target are the same, embedded
+operating system configurations, which are usually the same for several
+different processor architectures, and bare embedded processors, which
+are quite different from each other.
+
+@menu
+* Native::
+* Embedded OS::
+* Embedded Processors::
+* Architectures::
+@end menu
+
+@node Native
+@section Native
+
+This section describes details specific to particular native
+configurations.
+
+@menu
+* HP-UX::                       HP-UX
+* SVR4 Process Information::    SVR4 process information
+@end menu
+
+@node HP-UX
+@subsection HP-UX
+
+On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, @value{GDBN} searches for a user or system
+name first, before it searches for a convenience variable.
+
+@node SVR4 Process Information
+@subsection SVR4 process information
+
+@kindex /proc
+@cindex process image
+
+Many versions of SVR4 provide a facility called @samp{/proc} that can be
+used to examine the image of a running process using file-system
+subroutines.  If @value{GDBN} is configured for an operating system with
+this facility, the command @code{info proc} is available to report on
+several kinds of information about the process running your program.
+@code{info proc} works only on SVR4 systems that include the
+@code{procfs} code.  This includes OSF/1 (Digital Unix), Solaris, Irix,
+and Unixware, but not HP-UX or Linux, for example.
+
+@table @code
+@kindex info proc
+@item info proc
+Summarize available information about the process.
+
+@kindex info proc mappings
+@item info proc mappings
+Report on the address ranges accessible in the program, with information
+on whether your program may read, write, or execute each range.
+
+@kindex info proc times
+@item info proc times
+Starting time, user CPU time, and system CPU time for your program and
+its children.
+
+@kindex info proc id
+@item info proc id
+Report on the process IDs related to your program: its own process ID,
+the ID of its parent, the process group ID, and the session ID.
+
+@kindex info proc status
+@item info proc status
+General information on the state of the process.  If the process is
+stopped, this report includes the reason for stopping, and any signal
+received.
+
+@item info proc all
+Show all the above information about the process.
+@end table
+
+@node Embedded OS
+@section Embedded Operating Systems
+
+This section describes configurations involving the debugging of
+embedded operating systems that are available for several different
+architectures.
+
+@menu
+* VxWorks::                     Using @value{GDBN} with VxWorks
+@end menu
+
+@value{GDBN} includes the ability to debug programs running on
+various real-time operating systems.
+
+@node VxWorks
+@subsection Using @value{GDBN} with VxWorks
+
+@cindex VxWorks
+
+@table @code
+
+@kindex target vxworks
+@item target vxworks @var{machinename}
+A VxWorks system, attached via TCP/IP.  The argument @var{machinename}
+is the target system's machine name or IP address.
+
+@end table
+
+On VxWorks, @code{load} links @var{filename} dynamically on the
+current target system as well as adding its symbols in @value{GDBN}.
+
+@value{GDBN} enables developers to spawn and debug tasks running on networked
+VxWorks targets from a Unix host.  Already-running tasks spawned from
+the VxWorks shell can also be debugged.  @value{GDBN} uses code that runs on
+both the Unix host and on the VxWorks target.  The program
+@code{@value{GDBP}} is installed and executed on the Unix host.  (It may be
+installed with the name @code{vxgdb}, to distinguish it from a
+@value{GDB} for debugging programs on the host itself.)
+
+@table @code
+@item VxWorks-timeout @var{args}
+@kindex vxworks-timeout
+All VxWorks-based targets now support the option @code{vxworks-timeout}.  
+This option is set by the user, and  @var{args} represents the number of 
+seconds @value{GDBN} waits for responses to rpc's.  You might use this if 
+your VxWorks target is a slow software simulator or is on the far side 
+of a thin network line.
+@end table
+
+The following information on connecting to VxWorks was current when
+this manual was produced; newer releases of VxWorks may use revised
+procedures.
+
+@kindex INCLUDE_RDB
+To use @value{GDBN} with VxWorks, you must rebuild your VxWorks kernel
+to include the remote debugging interface routines in the VxWorks
+library @file{rdb.a}.  To do this, define @code{INCLUDE_RDB} in the
+VxWorks configuration file @file{configAll.h} and rebuild your VxWorks
+kernel.  The resulting kernel contains @file{rdb.a}, and spawns the
+source debugging task @code{tRdbTask} when VxWorks is booted.  For more
+information on configuring and remaking VxWorks, see the manufacturer's
+manual.
+@c VxWorks, see the @cite{VxWorks Programmer's Guide}.
+
+Once you have included @file{rdb.a} in your VxWorks system image and set
+your Unix execution search path to find @value{GDBN}, you are ready to
+run @value{GDBN}.  From your Unix host, run @code{@value{GDBP}} (or @code{vxgdb},
+depending on your installation).
+
+@value{GDBN} comes up showing the prompt:
+
+@example
+(vxgdb)
+@end example
+
+@menu
+* VxWorks Connection::          Connecting to VxWorks
+* VxWorks Download::            VxWorks download
+* VxWorks Attach::              Running tasks
+@end menu
+
+@node VxWorks Connection
+@subsubsection Connecting to VxWorks
+
+The @value{GDBN} command @code{target} lets you connect to a VxWorks target on the
+network.  To connect to a target whose host name is ``@code{tt}'', type:
+
+@example
+(vxgdb) target vxworks tt
+@end example
+
+@need 750
+@value{GDBN} displays messages like these:
+
+@smallexample
+Attaching remote machine across net... 
+Connected to tt.
+@end smallexample
+
+@need 1000
+@value{GDBN} then attempts to read the symbol tables of any object modules
+loaded into the VxWorks target since it was last booted.  @value{GDBN} locates
+these files by searching the directories listed in the command search
+path (@pxref{Environment, ,Your program's environment}); if it fails
+to find an object file, it displays a message such as:
+
+@example
+prog.o: No such file or directory.
+@end example
+
+When this happens, add the appropriate directory to the search path with
+the @value{GDBN} command @code{path}, and execute the @code{target}
+command again.
+
+@node VxWorks Download
+@subsubsection VxWorks download
+
+@cindex download to VxWorks
+If you have connected to the VxWorks target and you want to debug an
+object that has not yet been loaded, you can use the @value{GDBN}
+@code{load} command to download a file from Unix to VxWorks
+incrementally.  The object file given as an argument to the @code{load}
+command is actually opened twice: first by the VxWorks target in order
+to download the code, then by @value{GDBN} in order to read the symbol
+table.  This can lead to problems if the current working directories on
+the two systems differ.  If both systems have NFS mounted the same
+filesystems, you can avoid these problems by using absolute paths.
+Otherwise, it is simplest to set the working directory on both systems
+to the directory in which the object file resides, and then to reference
+the file by its name, without any path.  For instance, a program
+@file{prog.o} may reside in @file{@var{vxpath}/vw/demo/rdb} in VxWorks
+and in @file{@var{hostpath}/vw/demo/rdb} on the host.  To load this
+program, type this on VxWorks:
+
+@example
+-> cd "@var{vxpath}/vw/demo/rdb"
+@end example
+
+@noindent
+Then, in @value{GDBN}, type:
+
+@example
+(vxgdb) cd @var{hostpath}/vw/demo/rdb 
+(vxgdb) load prog.o
+@end example
+
+@value{GDBN} displays a response similar to this:
+
+@smallexample
+Reading symbol data from wherever/vw/demo/rdb/prog.o... done.
+@end smallexample
+
+You can also use the @code{load} command to reload an object module
+after editing and recompiling the corresponding source file.  Note that
+this makes @value{GDBN} delete all currently-defined breakpoints,
+auto-displays, and convenience variables, and to clear the value
+history.  (This is necessary in order to preserve the integrity of
+debugger's data structures that reference the target system's symbol
+table.)
+
+@node VxWorks Attach
+@subsubsection Running tasks
+
+@cindex running VxWorks tasks
+You can also attach to an existing task using the @code{attach} command as
+follows:
+
+@example
+(vxgdb) attach @var{task}
+@end example
+
+@noindent
+where @var{task} is the VxWorks hexadecimal task ID.  The task can be running
+or suspended when you attach to it.  Running tasks are suspended at
+the time of attachment.
+
+@node Embedded Processors
+@section Embedded Processors
+
+This section goes into details specific to particular embedded
+configurations.
+
+@menu
+* A29K Embedded::               AMD A29K Embedded
+* ARM::                         ARM
+* H8/300::                      Hitachi H8/300
+* H8/500::                      Hitachi H8/500
+* i960::                        Intel i960
+* M32R/D::                      Mitsubishi M32R/D
+* M68K::                        Motorola M68K
+* M88K::                        Motorola M88K
+* MIPS Embedded::               MIPS Embedded
+* PA::                          HP PA Embedded
+* PowerPC:                      PowerPC
+* SH::                          Hitachi SH
+* Sparclet::                    Tsqware Sparclet
+* Sparclite::                   Fujitsu Sparclite
+* ST2000::                      Tandem ST2000
+* Z8000::                       Zilog Z8000
+@end menu
+
+@node A29K Embedded
+@subsection AMD A29K Embedded
+
+@menu
+* A29K UDI::
+* A29K EB29K::
+* Comms (EB29K)::               Communications setup
+* gdb-EB29K::                   EB29K cross-debugging
+* Remote Log::                  Remote log
+@end menu
+
+@table @code
+
+@kindex target adapt
+@item target adapt @var{dev}
+Adapt monitor for A29K.
+
+@kindex target amd-eb
+@item target amd-eb @var{dev} @var{speed} @var{PROG}
+@cindex AMD EB29K
+Remote PC-resident AMD EB29K board, attached over serial lines.
+@var{dev} is the serial device, as for @code{target remote};
+@var{speed} allows you to specify the linespeed; and @var{PROG} is the
+name of the program to be debugged, as it appears to DOS on the PC.
+@xref{A29K EB29K, ,EBMON protocol for AMD29K}.
+
+@end table
+
+@node A29K UDI
+@subsubsection A29K UDI
+
+@cindex UDI
+@cindex AMD29K via UDI
+
+@value{GDBN} supports AMD's UDI (``Universal Debugger Interface'')
+protocol for debugging the a29k processor family.  To use this
+configuration with AMD targets running the MiniMON monitor, you need the
+program @code{MONTIP}, available from AMD at no charge.  You can also
+use @value{GDBN} with the UDI-conformant a29k simulator program
+@code{ISSTIP}, also available from AMD.
+
+@table @code
+@item target udi @var{keyword}
+@kindex udi
+Select the UDI interface to a remote a29k board or simulator, where
+@var{keyword} is an entry in the AMD configuration file @file{udi_soc}.
+This file contains keyword entries which specify parameters used to
+connect to a29k targets.  If the @file{udi_soc} file is not in your
+working directory, you must set the environment variable @samp{UDICONF}
+to its pathname.
+@end table
+
+@node A29K EB29K
+@subsubsection EBMON protocol for AMD29K
+
+@cindex EB29K board
+@cindex running 29K programs
+
+AMD distributes a 29K development board meant to fit in a PC, together
+with a DOS-hosted monitor program called @code{EBMON}.  As a shorthand
+term, this development system is called the ``EB29K''.  To use
+@value{GDBN} from a Unix system to run programs on the EB29K board, you
+must first connect a serial cable between the PC (which hosts the EB29K
+board) and a serial port on the Unix system.  In the following, we
+assume you've hooked the cable between the PC's @file{COM1} port and
+@file{/dev/ttya} on the Unix system.
+
+@node Comms (EB29K)
+@subsubsection Communications setup
+
+The next step is to set up the PC's port, by doing something like this
+in DOS on the PC:
+
+@example
+C:\> MODE com1:9600,n,8,1,none
+@end example
+
+@noindent
+This example---run on an MS DOS 4.0 system---sets the PC port to 9600
+bps, no parity, eight data bits, one stop bit, and no ``retry'' action;
+you must match the communications parameters when establishing the Unix
+end of the connection as well.
+@c FIXME: Who knows what this "no retry action" crud from the DOS manual may
+@c       mean?  It's optional; leave it out? ---doc@cygnus.com, 25feb91 
+@c
+@c It's optional, but it's unwise to omit it: who knows what is the
+@c default value set when the DOS machines boots?  "No retry" means that
+@c the DOS serial device driver won't retry the operation if it fails;
+@c I understand that this is needed because the GDB serial protocol
+@c handles any errors and retransmissions itself. ---Eli Zaretskii, 3sep99
+
+To give control of the PC to the Unix side of the serial line, type
+the following at the DOS console:
+
+@example
+C:\> CTTY com1
+@end example
+
+@noindent
+(Later, if you wish to return control to the DOS console, you can use
+the command @code{CTTY con}---but you must send it over the device that
+had control, in our example over the @file{COM1} serial line).
+
+From the Unix host, use a communications program such as @code{tip} or
+@code{cu} to communicate with the PC; for example,
+
+@example
+cu -s 9600 -l /dev/ttya
+@end example
+
+@noindent
+The @code{cu} options shown specify, respectively, the linespeed and the
+serial port to use.  If you use @code{tip} instead, your command line
+may look something like the following:
+
+@example
+tip -9600 /dev/ttya
+@end example
+
+@noindent
+Your system may require a different name where we show
+@file{/dev/ttya} as the argument to @code{tip}.  The communications
+parameters, including which port to use, are associated with the
+@code{tip} argument in the ``remote'' descriptions file---normally the
+system table @file{/etc/remote}.
+@c FIXME: What if anything needs doing to match the "n,8,1,none" part of
+@c the DOS side's comms setup?  cu can support -o (odd
+@c parity), -e (even parity)---apparently no settings for no parity or
+@c for character size.  Taken from stty maybe...?  John points out tip
+@c can set these as internal variables, eg ~s parity=none; man stty
+@c suggests that it *might* work to stty these options with stdin or
+@c stdout redirected... ---doc@cygnus.com, 25feb91
+@c
+@c There's nothing to be done for the "none" part of the DOS MODE
+@c command.  The rest of the parameters should be matched by the
+@c baudrate, bits, and parity used by the Unix side. ---Eli Zaretskii, 3Sep99
+
+@kindex EBMON
+Using the @code{tip} or @code{cu} connection, change the DOS working
+directory to the directory containing a copy of your 29K program, then
+start the PC program @code{EBMON} (an EB29K control program supplied
+with your board by AMD).  You should see an initial display from
+@code{EBMON} similar to the one that follows, ending with the
+@code{EBMON} prompt @samp{#}---
+
+@example
+C:\> G:
+
+G:\> CD \usr\joe\work29k
+
+G:\USR\JOE\WORK29K> EBMON
+Am29000 PC Coprocessor Board Monitor, version 3.0-18
+Copyright 1990 Advanced Micro Devices, Inc.
+Written by Gibbons and Associates, Inc.
+
+Enter '?' or 'H' for help
+
+PC Coprocessor Type   = EB29K
+I/O Base              = 0x208
+Memory Base           = 0xd0000
+
+Data Memory Size      = 2048KB
+Available I-RAM Range = 0x8000 to 0x1fffff
+Available D-RAM Range = 0x80002000 to 0x801fffff
+
+PageSize              = 0x400
+Register Stack Size   = 0x800
+Memory Stack Size     = 0x1800
+
+CPU PRL               = 0x3
+Am29027 Available     = No
+Byte Write Available  = Yes
+
+# ~.
+@end example
+
+Then exit the @code{cu} or @code{tip} program (done in the example by
+typing @code{~.} at the @code{EBMON} prompt).  @code{EBMON} keeps
+running, ready for @value{GDBN} to take over.
+
+For this example, we've assumed what is probably the most convenient
+way to make sure the same 29K program is on both the PC and the Unix
+system: a PC/NFS connection that establishes ``drive @file{G:}'' on the
+PC as a file system on the Unix host.  If you do not have PC/NFS or
+something similar connecting the two systems, you must arrange some
+other way---perhaps floppy-disk transfer---of getting the 29K program
+from the Unix system to the PC; @value{GDBN} does @emph{not} download it over the
+serial line.
+
+@node gdb-EB29K
+@subsubsection EB29K cross-debugging
+
+Finally, @code{cd} to the directory containing an image of your 29K
+program on the Unix system, and start @value{GDBN}---specifying as argument the
+name of your 29K program:
+
+@example
+cd /usr/joe/work29k
+@value{GDBP} myfoo
+@end example
+
+@need 500
+Now you can use the @code{target} command:
+
+@example
+target amd-eb /dev/ttya 9600 MYFOO
+@c FIXME: test above 'target amd-eb' as spelled, with caps!  caps are meant to
+@c emphasize that this is the name as seen by DOS (since I think DOS is
+@c single-minded about case of letters).  ---doc@cygnus.com, 25feb91
+@end example
+
+@noindent
+In this example, we've assumed your program is in a file called
+@file{myfoo}.  Note that the filename given as the last argument to
+@code{target amd-eb} should be the name of the program as it appears to DOS.
+In our example this is simply @code{MYFOO}, but in general it can include
+a DOS path, and depending on your transfer mechanism may not resemble
+the name on the Unix side.
+
+At this point, you can set any breakpoints you wish; when you are ready
+to see your program run on the 29K board, use the @value{GDBN} command
+@code{run}.
+
+To stop debugging the remote program, use the @value{GDBN} @code{detach}
+command.
+
+To return control of the PC to its console, use @code{tip} or @code{cu}
+once again, after your @value{GDBN} session has concluded, to attach to
+@code{EBMON}.  You can then type the command @code{q} to shut down
+@code{EBMON}, returning control to the DOS command-line interpreter.
+Type @kbd{CTTY con} to return command input to the main DOS console,
+and type @kbd{~.} to leave @code{tip} or @code{cu}.
+
+@node Remote Log
+@subsubsection Remote log
+@kindex eb.log
+@cindex log file for EB29K
+
+The @code{target amd-eb} command creates a file @file{eb.log} in the
+current working directory, to help debug problems with the connection.
+@file{eb.log} records all the output from @code{EBMON}, including echoes
+of the commands sent to it.  Running @samp{tail -f} on this file in
+another window often helps to understand trouble with @code{EBMON}, or
+unexpected events on the PC side of the connection.
+
+@node ARM
+@subsection ARM
+
+@table @code
+
+@kindex target rdi
+@item target rdi @var{dev}
+ARM Angel monitor, via RDI library interface to ADP protocol.  You may
+use this target to communicate with both boards running the Angel
+monitor, or with the EmbeddedICE JTAG debug device.
+@kindex target rdp
+@item target rdp @var{dev}
+ARM Demon monitor.
+
+@end table
+
+@node H8/300
+@subsection Hitachi H8/300
+
+@table @code
+
+@kindex target hms@r{, with H8/300}
+@item target hms @var{dev}
+A Hitachi SH, H8/300, or H8/500 board, attached via serial line to your host.
+Use special commands @code{device} and @code{speed} to control the serial
+line and the communications speed used.
+
+@kindex target e7000@r{, with H8/300}
+@item target e7000 @var{dev}
+E7000 emulator for Hitachi H8 and SH.
+
+@kindex target sh3@r{, with H8/300}
+@kindex target sh3e@r{, with H8/300}
+@item target sh3 @var{dev}
+@item target sh3e @var{dev}
+Hitachi SH-3 and SH-3E target systems.
+
+@end table
+
+@cindex download to H8/300 or H8/500
+@cindex H8/300 or H8/500 download
+@cindex download to Hitachi SH
+@cindex Hitachi SH download
+When you select remote debugging to a Hitachi SH, H8/300, or H8/500
+board, the @code{load} command downloads your program to the Hitachi
+board and also opens it as the current executable target for
+@value{GDBN} on your host (like the @code{file} command).
+
+@value{GDBN} needs to know these things to talk to your
+Hitachi SH, H8/300, or H8/500: 
+
+@enumerate
+@item
+that you want to use @samp{target hms}, the remote debugging interface
+for Hitachi microprocessors, or @samp{target e7000}, the in-circuit
+emulator for the Hitachi SH and the Hitachi 300H.  (@samp{target hms} is
+the default when @value{GDBN} is configured specifically for the Hitachi SH,
+H8/300, or H8/500.)
+
+@item
+what serial device connects your host to your Hitachi board (the first
+serial device available on your host is the default).
+
+@item
+what speed to use over the serial device.
+@end enumerate
+
+@menu
+* Hitachi Boards::      Connecting to Hitachi boards.
+* Hitachi ICE::         Using the E7000 In-Circuit Emulator.
+* Hitachi Special::     Special @value{GDBN} commands for Hitachi micros.
+@end menu
+
+@node Hitachi Boards
+@subsubsection Connecting to Hitachi boards
+
+@c only for Unix hosts
+@kindex device
+@cindex serial device, Hitachi micros
+Use the special @code{@value{GDBP}} command @samp{device @var{port}} if you
+need to explicitly set the serial device.  The default @var{port} is the
+first available port on your host.  This is only necessary on Unix
+hosts, where it is typically something like @file{/dev/ttya}.
+
+@kindex speed
+@cindex serial line speed, Hitachi micros
+@code{@value{GDBP}} has another special command to set the communications
+speed: @samp{speed @var{bps}}.  This command also is only used from Unix
+hosts; on DOS hosts, set the line speed as usual from outside @value{GDBN} with
+the DOS @code{mode} command (for instance,
+@w{@kbd{mode com2:9600,n,8,1,p}} for a 9600@dmn{bps} connection).
+
+The @samp{device} and @samp{speed} commands are available only when you
+use a Unix host to debug your Hitachi microprocessor programs.  If you
+use a DOS host,
+@value{GDBN} depends on an auxiliary terminate-and-stay-resident program
+called @code{asynctsr} to communicate with the development board
+through a PC serial port.  You must also use the DOS @code{mode} command
+to set up the serial port on the DOS side.
+
+The following sample session illustrates the steps needed to start a
+program under @value{GDBN} control on an H8/300.  The example uses a
+sample H8/300 program called @file{t.x}.  The procedure is the same for
+the Hitachi SH and the H8/500.
+
+First hook up your development board.  In this example, we use a
+board attached to serial port @code{COM2}; if you use a different serial
+port, substitute its name in the argument of the @code{mode} command.
+When you call @code{asynctsr}, the auxiliary comms program used by the
+debugger, you give it just the numeric part of the serial port's name;
+for example, @samp{asyncstr 2} below runs @code{asyncstr} on
+@code{COM2}.
+
+@example
+C:\H8300\TEST> asynctsr 2
+C:\H8300\TEST> mode com2:9600,n,8,1,p
+
+Resident portion of MODE loaded
+
+COM2: 9600, n, 8, 1, p
+
+@end example
+
+@quotation
+@emph{Warning:} We have noticed a bug in PC-NFS that conflicts with
+@code{asynctsr}.  If you also run PC-NFS on your DOS host, you may need to
+disable it, or even boot without it, to use @code{asynctsr} to control
+your development board.
+@end quotation
+
+@kindex target hms@r{, and serial protocol}
+Now that serial communications are set up, and the development board is
+connected, you can start up @value{GDBN}.  Call @code{@value{GDBP}} with
+the name of your program as the argument.  @code{@value{GDBP}} prompts
+you, as usual, with the prompt @samp{(@value{GDBP})}.  Use two special
+commands to begin your debugging session: @samp{target hms} to specify
+cross-debugging to the Hitachi board, and the @code{load} command to
+download your program to the board.  @code{load} displays the names of
+the program's sections, and a @samp{*} for each 2K of data downloaded.
+(If you want to refresh @value{GDBN} data on symbols or on the
+executable file without downloading, use the @value{GDBN} commands
+@code{file} or @code{symbol-file}.  These commands, and @code{load}
+itself, are described in @ref{Files,,Commands to specify files}.)
+
+@smallexample
+(eg-C:\H8300\TEST) @value{GDBP} t.x
+@value{GDBN} is free software and you are welcome to distribute copies
+ of it under certain conditions; type "show copying" to see 
+ the conditions.
+There is absolutely no warranty for @value{GDBN}; type "show warranty" 
+for details.
+@value{GDBN} @value{GDBVN}, Copyright 1992 Free Software Foundation, Inc...
+(@value{GDBP}) target hms
+Connected to remote H8/300 HMS system.
+(@value{GDBP}) load t.x
+.text   : 0x8000 .. 0xabde ***********
+.data   : 0xabde .. 0xad30 *
+.stack  : 0xf000 .. 0xf014 *
+@end smallexample
+
+At this point, you're ready to run or debug your program.  From here on,
+you can use all the usual @value{GDBN} commands.  The @code{break} command
+sets breakpoints; the @code{run} command starts your program;
+@code{print} or @code{x} display data; the @code{continue} command
+resumes execution after stopping at a breakpoint.  You can use the
+@code{help} command at any time to find out more about @value{GDBN} commands.
+
+Remember, however, that @emph{operating system} facilities aren't
+available on your development board; for example, if your program hangs,
+you can't send an interrupt---but you can press the @sc{reset} switch!
+
+Use the @sc{reset} button on the development board
+@itemize @bullet
+@item
+to interrupt your program (don't use @kbd{ctl-C} on the DOS host---it has
+no way to pass an interrupt signal to the development board); and
+
+@item
+to return to the @value{GDBN} command prompt after your program finishes
+normally.  The communications protocol provides no other way for @value{GDBN}
+to detect program completion.
+@end itemize
+
+In either case, @value{GDBN} sees the effect of a @sc{reset} on the
+development board as a ``normal exit'' of your program.
+
+@node Hitachi ICE
+@subsubsection Using the E7000 in-circuit emulator
+
+@kindex target e7000@r{, with Hitachi ICE}
+You can use the E7000 in-circuit emulator to develop code for either the
+Hitachi SH or the H8/300H.  Use one of these forms of the @samp{target
+e7000} command to connect @value{GDBN} to your E7000:
+
+@table @code
+@item target e7000 @var{port} @var{speed}
+Use this form if your E7000 is connected to a serial port.  The
+@var{port} argument identifies what serial port to use (for example,
+@samp{com2}).  The third argument is the line speed in bits per second
+(for example, @samp{9600}).
+
+@item target e7000 @var{hostname}
+If your E7000 is installed as a host on a TCP/IP network, you can just
+specify its hostname; @value{GDBN} uses @code{telnet} to connect.
+@end table
+
+@node Hitachi Special
+@subsubsection Special @value{GDBN} commands for Hitachi micros
+
+Some @value{GDBN} commands are available only for the H8/300:
+
+@table @code
+
+@kindex set machine
+@kindex show machine
+@item set machine h8300
+@itemx set machine h8300h
+Condition @value{GDBN} for one of the two variants of the H8/300
+architecture with @samp{set machine}.  You can use @samp{show machine}
+to check which variant is currently in effect.
+
+@end table
+
+@node H8/500
+@subsection H8/500
+
+@table @code
+
+@kindex set memory @var{mod}
+@cindex memory models, H8/500
+@item set memory @var{mod}
+@itemx show memory
+Specify which H8/500 memory model (@var{mod}) you are using with
+@samp{set memory}; check which memory model is in effect with @samp{show
+memory}.  The accepted values for @var{mod} are @code{small},
+@code{big}, @code{medium}, and @code{compact}.
+
+@end table
+
+@node i960
+@subsection Intel i960
+
+@table @code
+
+@kindex target mon960
+@item target mon960 @var{dev}
+MON960 monitor for Intel i960.
+
+@item target nindy @var{devicename}
+An Intel 960 board controlled by a Nindy Monitor.  @var{devicename} is
+the name of the serial device to use for the connection, e.g.
+@file{/dev/ttya}.
+
+@end table
+
+@cindex Nindy
+@cindex i960
+@dfn{Nindy} is a ROM Monitor program for Intel 960 target systems.  When
+@value{GDBN} is configured to control a remote Intel 960 using Nindy, you can
+tell @value{GDBN} how to connect to the 960 in several ways:
+
+@itemize @bullet
+@item
+Through command line options specifying serial port, version of the
+Nindy protocol, and communications speed;
+
+@item
+By responding to a prompt on startup;
+
+@item
+By using the @code{target} command at any point during your @value{GDBN}
+session.  @xref{Target Commands, ,Commands for managing targets}.
+
+@kindex target nindy
+@item target nindy @var{devicename}
+An Intel 960 board controlled by a Nindy Monitor.  @var{devicename} is
+the name of the serial device to use for the connection, e.g.
+@file{/dev/ttya}.
+
+@end itemize
+
+@cindex download to Nindy-960
+With the Nindy interface to an Intel 960 board, @code{load}
+downloads @var{filename} to the 960 as well as adding its symbols in
+@value{GDBN}.
+
+@menu
+* Nindy Startup::               Startup with Nindy
+* Nindy Options::               Options for Nindy
+* Nindy Reset::                 Nindy reset command
+@end menu
+
+@node Nindy Startup
+@subsubsection Startup with Nindy
+
+If you simply start @code{@value{GDBP}} without using any command-line
+options, you are prompted for what serial port to use, @emph{before} you
+reach the ordinary @value{GDBN} prompt:
+
+@example
+Attach /dev/ttyNN -- specify NN, or "quit" to quit:  
+@end example
+
+@noindent
+Respond to the prompt with whatever suffix (after @samp{/dev/tty})
+identifies the serial port you want to use.  You can, if you choose,
+simply start up with no Nindy connection by responding to the prompt
+with an empty line.  If you do this and later wish to attach to Nindy,
+use @code{target} (@pxref{Target Commands, ,Commands for managing targets}).
+
+@node Nindy Options
+@subsubsection Options for Nindy
+
+These are the startup options for beginning your @value{GDBN} session with a
+Nindy-960 board attached:
+
+@table @code
+@item -r @var{port}
+Specify the serial port name of a serial interface to be used to connect
+to the target system.  This option is only available when @value{GDBN} is
+configured for the Intel 960 target architecture.  You may specify
+@var{port} as any of: a full pathname (e.g. @samp{-r /dev/ttya}), a
+device name in @file{/dev} (e.g. @samp{-r ttya}), or simply the unique
+suffix for a specific @code{tty} (e.g. @samp{-r a}).
+
+@item -O
+(An uppercase letter ``O'', not a zero.)  Specify that @value{GDBN} should use
+the ``old'' Nindy monitor protocol to connect to the target system.
+This option is only available when @value{GDBN} is configured for the Intel 960
+target architecture.
+
+@quotation
+@emph{Warning:} if you specify @samp{-O}, but are actually trying to
+connect to a target system that expects the newer protocol, the connection
+fails, appearing to be a speed mismatch.  @value{GDBN} repeatedly
+attempts to reconnect at several different line speeds.  You can abort
+this process with an interrupt.
+@end quotation
+
+@item -brk
+Specify that @value{GDBN} should first send a @code{BREAK} signal to the target
+system, in an attempt to reset it, before connecting to a Nindy target.
+
+@quotation
+@emph{Warning:} Many target systems do not have the hardware that this
+requires; it only works with a few boards.
+@end quotation
+@end table
+
+The standard @samp{-b} option controls the line speed used on the serial
+port.
+
+@c @group
+@node Nindy Reset
+@subsubsection Nindy reset command
+
+@table @code
+@item reset
+@kindex reset
+For a Nindy target, this command sends a ``break'' to the remote target
+system; this is only useful if the target has been equipped with a
+circuit to perform a hard reset (or some other interesting action) when
+a break is detected.
+@end table
+@c @end group
+
+@node M32R/D
+@subsection Mitsubishi M32R/D
+
+@table @code
+
+@kindex target m32r
+@item target m32r @var{dev}
+Mitsubishi M32R/D ROM monitor.
+
+@end table
+
+@node M68K
+@subsection M68k
+
+The Motorola m68k configuration includes ColdFire support, and
+target command for the following ROM monitors.
+
+@table @code
+
+@kindex target abug
+@item target abug @var{dev}
+ABug ROM monitor for M68K.
+
+@kindex target cpu32bug
+@item target cpu32bug @var{dev}
+CPU32BUG monitor, running on a CPU32 (M68K) board.
+
+@kindex target dbug
+@item target dbug @var{dev}
+dBUG ROM monitor for Motorola ColdFire.
+
+@kindex target est
+@item target est @var{dev}
+EST-300 ICE monitor, running on a CPU32 (M68K) board.
+
+@kindex target rom68k
+@item target rom68k @var{dev}
+ROM 68K monitor, running on an M68K IDP board.
+
+@end table
+
+If @value{GDBN} is configured with @code{m68*-ericsson-*}, it will
+instead have only a single special target command:
+
+@table @code
+
+@kindex target es1800
+@item target es1800 @var{dev}
+ES-1800 emulator for M68K.
+
+@end table
+
+[context?]
+
+@table @code
+
+@kindex target rombug
+@item target rombug @var{dev}
+ROMBUG ROM monitor for OS/9000.
+
+@end table
+
+@node M88K
+@subsection M88K
+
+@table @code
+
+@kindex target bug
+@item target bug @var{dev}
+BUG monitor, running on a MVME187 (m88k) board.
+
+@end table
+
+@node MIPS Embedded
+@subsection MIPS Embedded
+
+@cindex MIPS boards
+@value{GDBN} can use the MIPS remote debugging protocol to talk to a
+MIPS board attached to a serial line.  This is available when
+you configure @value{GDBN} with @samp{--target=mips-idt-ecoff}.
+
+@need 1000
+Use these @value{GDBN} commands to specify the connection to your target board:
+
+@table @code
+@item target mips @var{port}
+@kindex target mips @var{port}
+To run a program on the board, start up @code{@value{GDBP}} with the
+name of your program as the argument.  To connect to the board, use the
+command @samp{target mips @var{port}}, where @var{port} is the name of
+the serial port connected to the board.  If the program has not already
+been downloaded to the board, you may use the @code{load} command to
+download it.  You can then use all the usual @value{GDBN} commands.
+
+For example, this sequence connects to the target board through a serial
+port, and loads and runs a program called @var{prog} through the
+debugger:
+
+@example
+host$ @value{GDBP} @var{prog}
+@value{GDBN} is free software and @dots{}
+(@value{GDBP}) target mips /dev/ttyb
+(@value{GDBP}) load @var{prog}
+(@value{GDBP}) run
+@end example
+
+@item target mips @var{hostname}:@var{portnumber}
+On some @value{GDBN} host configurations, you can specify a TCP
+connection (for instance, to a serial line managed by a terminal
+concentrator) instead of a serial port, using the syntax
+@samp{@var{hostname}:@var{portnumber}}.
+
+@item target pmon @var{port}
+@kindex target pmon @var{port}
+PMON ROM monitor.
+
+@item target ddb @var{port}
+@kindex target ddb @var{port}
+NEC's DDB variant of PMON for Vr4300.
+
+@item target lsi @var{port}
+@kindex target lsi @var{port}
+LSI variant of PMON.
+
+@kindex target r3900
+@item target r3900 @var{dev}
+Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips.
+
+@kindex target array
+@item target array @var{dev}
+Array Tech LSI33K RAID controller board.
+
+@end table
+
+
+@noindent
+@value{GDBN} also supports these special commands for MIPS targets:
+
+@table @code
+@item set processor @var{args}
+@itemx show processor
+@kindex set processor @var{args}
+@kindex show processor
+Use the @code{set processor} command to set the type of MIPS
+processor when you want to access processor-type-specific registers.
+For example, @code{set processor @var{r3041}} tells @value{GDBN} 
+to use the CPO registers appropriate for the 3041 chip.
+Use the @code{show processor} command to see what MIPS processor @value{GDBN} 
+is using.  Use the @code{info reg} command to see what registers
+@value{GDBN} is using. 
+
+@item set mipsfpu double
+@itemx set mipsfpu single
+@itemx set mipsfpu none
+@itemx show mipsfpu
+@kindex set mipsfpu
+@kindex show mipsfpu
+@cindex MIPS remote floating point
+@cindex floating point, MIPS remote
+If your target board does not support the MIPS floating point
+coprocessor, you should use the command @samp{set mipsfpu none} (if you
+need this, you may wish to put the command in your @value{GDBINIT}
+file).  This tells @value{GDBN} how to find the return value of
+functions which return floating point values.  It also allows
+@value{GDBN} to avoid saving the floating point registers when calling
+functions on the board.  If you are using a floating point coprocessor
+with only single precision floating point support, as on the @sc{r4650}
+processor, use the command @samp{set mipsfpu single}.  The default
+double precision floating point coprocessor may be selected using
+@samp{set mipsfpu double}.
+
+In previous versions the only choices were double precision or no
+floating point, so @samp{set mipsfpu on} will select double precision
+and @samp{set mipsfpu off} will select no floating point.
+
+As usual, you can inquire about the @code{mipsfpu} variable with
+@samp{show mipsfpu}.
+
+@item set remotedebug @var{n}
+@itemx show remotedebug
+@kindex set remotedebug@r{, MIPS protocol}
+@kindex show remotedebug@r{, MIPS protocol}
+@cindex @code{remotedebug}, MIPS protocol
+@cindex MIPS @code{remotedebug} protocol
+@c FIXME! For this to be useful, you must know something about the MIPS
+@c FIXME...protocol.  Where is it described?
+You can see some debugging information about communications with the board
+by setting the @code{remotedebug} variable.  If you set it to @code{1} using
+@samp{set remotedebug 1}, every packet is displayed.  If you set it
+to @code{2}, every character is displayed.  You can check the current value
+at any time with the command @samp{show remotedebug}.
+
+@item set timeout @var{seconds}
+@itemx set retransmit-timeout @var{seconds}
+@itemx show timeout
+@itemx show retransmit-timeout
+@cindex @code{timeout}, MIPS protocol
+@cindex @code{retransmit-timeout}, MIPS protocol
+@kindex set timeout
+@kindex show timeout
+@kindex set retransmit-timeout
+@kindex show retransmit-timeout
+You can control the timeout used while waiting for a packet, in the MIPS
+remote protocol, with the @code{set timeout @var{seconds}} command.  The
+default is 5 seconds.  Similarly, you can control the timeout used while
+waiting for an acknowledgement of a packet with the @code{set
+retransmit-timeout @var{seconds}} command.  The default is 3 seconds.
+You can inspect both values with @code{show timeout} and @code{show
+retransmit-timeout}.  (These commands are @emph{only} available when
+@value{GDBN} is configured for @samp{--target=mips-idt-ecoff}.)
+
+The timeout set by @code{set timeout} does not apply when @value{GDBN}
+is waiting for your program to stop.  In that case, @value{GDBN} waits
+forever because it has no way of knowing how long the program is going
+to run before stopping.
+@end table
+
+@node PowerPC
+@subsection PowerPC
+
+@table @code
+
+@kindex target dink32
+@item target dink32 @var{dev}
+DINK32 ROM monitor.
+
+@kindex target ppcbug
+@item target ppcbug @var{dev}
+@kindex target ppcbug1
+@item target ppcbug1 @var{dev}
+PPCBUG ROM monitor for PowerPC.
+
+@kindex target sds
+@item target sds @var{dev}
+SDS monitor, running on a PowerPC board (such as Motorola's ADS).
+
+@end table
+
+@node PA
+@subsection HP PA Embedded
+
+@table @code
+
+@kindex target op50n
+@item target op50n @var{dev}
+OP50N monitor, running on an OKI HPPA board.
+
+@kindex target w89k
+@item target w89k @var{dev}
+W89K monitor, running on a Winbond HPPA board.
+
+@end table
+
+@node SH
+@subsection Hitachi SH
+
+@table @code
+
+@kindex target hms@r{, with Hitachi SH}
+@item target hms @var{dev}
+A Hitachi SH board attached via serial line to your host.  Use special
+commands @code{device} and @code{speed} to control the serial line and
+the communications speed used.
+
+@kindex target e7000@r{, with Hitachi SH}
+@item target e7000 @var{dev}
+E7000 emulator for Hitachi SH.
+
+@kindex target sh3@r{, with SH}
+@kindex target sh3e@r{, with SH}
+@item target sh3 @var{dev}
+@item target sh3e @var{dev}
+Hitachi SH-3 and SH-3E target systems.
+
+@end table
+
+@node Sparclet
+@subsection Tsqware Sparclet
+
+@cindex Sparclet
+
+@value{GDBN} enables developers to debug tasks running on 
+Sparclet targets from a Unix host.  
+@value{GDBN} uses code that runs on
+both the Unix host and on the Sparclet target.  The program
+@code{@value{GDBP}} is installed and executed on the Unix host.  
+
+@table @code
+@item timeout @var{args}
+@kindex remotetimeout
+@value{GDBN} supports the option @code{remotetimeout}.  
+This option is set by the user, and  @var{args} represents the number of 
+seconds @value{GDBN} waits for responses.  
+@end table
+
+@kindex Compiling
+When compiling for debugging, include the options @samp{-g} to get debug 
+information and @samp{-Ttext} to relocate the program to where you wish to
+load it on the target.  You may also want to add the options @samp{-n} or 
+@samp{-N} in order to reduce the size of the sections.  Example:
+
+@example
+sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N
+@end example
+
+You can use @code{objdump} to verify that the addresses are what you intended:
+
+@example
+sparclet-aout-objdump --headers --syms prog
+@end example
+
+@kindex Running
+Once you have set
+your Unix execution search path to find @value{GDBN}, you are ready to
+run @value{GDBN}.  From your Unix host, run @code{@value{GDBP}} 
+(or @code{sparclet-aout-gdb}, depending on your installation).
+
+@value{GDBN} comes up showing the prompt:
+
+@example
+(gdbslet)
+@end example
+
+@menu
+* Sparclet File::                Setting the file to debug
+* Sparclet Connection::          Connecting to Sparclet
+* Sparclet Download::            Sparclet download
+* Sparclet Execution::           Running and debugging 
+@end menu
+
+@node Sparclet File
+@subsubsection Setting file to debug
+
+The @value{GDBN} command @code{file} lets you choose with program to debug.
+
+@example
+(gdbslet) file prog
+@end example
+
+@need 1000
+@value{GDBN} then attempts to read the symbol table of @file{prog}.
+@value{GDBN} locates
+the file by searching the directories listed in the command search
+path.
+If the file was compiled with debug information (option "-g"), source
+files will be searched as well.
+@value{GDBN} locates
+the source files by searching the directories listed in the directory search
+path (@pxref{Environment, ,Your program's environment}).
+If it fails
+to find a file, it displays a message such as:
+
+@example
+prog: No such file or directory.
+@end example
+
+When this happens, add the appropriate directories to the search paths with
+the @value{GDBN} commands @code{path} and @code{dir}, and execute the 
+@code{target} command again.
+
+@node Sparclet Connection
+@subsubsection Connecting to Sparclet
+
+The @value{GDBN} command @code{target} lets you connect to a Sparclet target.
+To connect to a target on serial port ``@code{ttya}'', type:
+
+@example
+(gdbslet) target sparclet /dev/ttya
+Remote target sparclet connected to /dev/ttya
+main () at ../prog.c:3 
+@end example
+
+@need 750
+@value{GDBN} displays messages like these:
+
+@example
+Connected to ttya.
+@end example
+
+@node Sparclet Download
+@subsubsection Sparclet download
+
+@cindex download to Sparclet
+Once connected to the Sparclet target, 
+you can use the @value{GDBN}
+@code{load} command to download the file from the host to the target.
+The file name and load offset should be given as arguments to the @code{load}
+command.
+Since the file format is aout, the program must be loaded to the starting 
+address.  You can use @code{objdump} to find out what this value is.  The load
+offset is an offset which is added to the VMA (virtual memory address)
+of each of the file's sections.
+For instance, if the program
+@file{prog} was linked to text address 0x1201000, with data at 0x12010160
+and bss at 0x12010170, in @value{GDBN}, type:
+
+@example
+(gdbslet) load prog 0x12010000
+Loading section .text, size 0xdb0 vma 0x12010000
+@end example
+
+If the code is loaded at a different address then what the program was linked 
+to, you may need to use the @code{section} and @code{add-symbol-file} commands 
+to tell @value{GDBN} where to map the symbol table.
+
+@node Sparclet Execution
+@subsubsection Running and debugging
+
+@cindex running and debugging Sparclet programs
+You can now begin debugging the task using @value{GDBN}'s execution control
+commands, @code{b}, @code{step}, @code{run}, etc.  See the @value{GDBN} 
+manual for the list of commands.
+
+@example
+(gdbslet) b main
+Breakpoint 1 at 0x12010000: file prog.c, line 3.
+(gdbslet) run 
+Starting program: prog
+Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3
+3        char *symarg = 0;
+(gdbslet) step
+4        char *execarg = "hello!";
+(gdbslet)                           
+@end example
+
+@node Sparclite
+@subsection Fujitsu Sparclite
+
+@table @code
+
+@kindex target sparclite
+@item target sparclite @var{dev}
+Fujitsu sparclite boards, used only for the purpose of loading.  
+You must use an additional command to debug the program. 
+For example: target remote @var{dev} using @value{GDBN} standard 
+remote protocol.
+
+@end table
+
+@node ST2000
+@subsection Tandem ST2000
+
+@value{GDBN} may be used with a Tandem ST2000 phone switch, running Tandem's
+STDBUG protocol.
+
+To connect your ST2000 to the host system, see the manufacturer's
+manual.  Once the ST2000 is physically attached, you can run:
+
+@example
+target st2000 @var{dev} @var{speed}
+@end example
 
-@item info mismatch between compiler and debugger
+@noindent
+to establish it as your debugging environment.  @var{dev} is normally
+the name of a serial device, such as @file{/dev/ttya}, connected to the
+ST2000 via a serial line.  You can instead specify @var{dev} as a TCP
+connection (for example, to a serial line attached via a terminal
+concentrator) using the syntax @code{@var{hostname}:@var{portnumber}}.
+
+The @code{load} and @code{attach} commands are @emph{not} defined for
+this target; you must load your program into the ST2000 as you normally
+would for standalone operation.  @value{GDBN} reads debugging information
+(such as symbols) from a separate, debugging version of the program
+available on your host computer.
+@c FIXME!! This is terribly vague; what little content is here is
+@c basically hearsay.
+
+@cindex ST2000 auxiliary commands
+These auxiliary @value{GDBN} commands are available to help you with the ST2000
+environment:
 
-@value{GDBN} could not parse a type specification output by the compiler.
+@table @code
+@item st2000 @var{command}
+@kindex st2000 @var{cmd}
+@cindex STDBUG commands (ST2000)
+@cindex commands to STDBUG (ST2000)
+Send a @var{command} to the STDBUG monitor.  See the manufacturer's
+manual for available commands.
+
+@item connect
+@cindex connect (to STDBUG)
+Connect the controlling terminal to the STDBUG command monitor.  When
+you are done interacting with STDBUG, typing either of two character
+sequences gets you back to the @value{GDBN} command prompt:
+@kbd{@key{RET}~.} (Return, followed by tilde and period) or
+@kbd{@key{RET}~@key{C-d}} (Return, followed by tilde and control-D).
 @end table
 
-@node Targets
-@chapter Specifying a Debugging Target
-@cindex debugging target
-@kindex target
-
-A @dfn{target} is the execution environment occupied by your program.
-@ifclear BARETARGET
-Often, @value{GDBN} runs in the same host environment as your program; in
-that case, the debugging target is specified as a side effect when you
-use the @code{file} or @code{core} commands.  When you need more
-flexibility---for example, running @value{GDBN} on a physically separate
-host, or controlling a standalone system over a serial port or a
-realtime system over a TCP/IP connection---you 
-@end ifclear
-@ifset BARETARGET
-You
-@end ifset
-can use the @code{target} command to specify one of the target types
-configured for @value{GDBN} (@pxref{Target Commands, ,Commands for managing
-targets}).
+@node Z8000
+@subsection Zilog Z8000
 
-@menu
-* Active Targets::              Active targets
-* Target Commands::             Commands for managing targets
-* Remote::                      Remote debugging
-@end menu
+@cindex Z8000
+@cindex simulator, Z8000
+@cindex Zilog Z8000 simulator
 
-@node Active Targets
-@section Active targets
-@cindex stacking targets
-@cindex active targets
-@cindex multiple targets
+When configured for debugging Zilog Z8000 targets, @value{GDBN} includes
+a Z8000 simulator.
 
-@ifclear BARETARGET
-There are three classes of targets: processes, core files, and
-executable files.  @value{GDBN} can work concurrently on up to three active
-targets, one in each class.  This allows you to (for example) start a
-process and inspect its activity without abandoning your work on a core
-file.
+For the Z8000 family, @samp{target sim} simulates either the Z8002 (the
+unsegmented variant of the Z8000 architecture) or the Z8001 (the
+segmented variant).  The simulator recognizes which architecture is
+appropriate by inspecting the object code.
 
-For example, if you execute @samp{gdb a.out}, then the executable file
-@code{a.out} is the only active target.  If you designate a core file as
-well---presumably from a prior run that crashed and coredumped---then
-@value{GDBN} has two active targets and will use them in tandem, looking
-first in the corefile target, then in the executable file, to satisfy
-requests for memory addresses.  (Typically, these two classes of target
-are complementary, since core files contain only a program's
-read-write memory---variables and so on---plus machine status, while
-executable files contain only the program text and initialized data.)
-@end ifclear
+@table @code
+@item target sim @var{args}
+@kindex sim
+@kindex target sim@r{, with Z8000}
+Debug programs on a simulated CPU.  If the simulator supports setup
+options, specify them via @var{args}.
+@end table
 
-When you type @code{run}, your executable file becomes an active process
-target as well.  When a process target is active, all @value{GDBN} commands
-requesting memory addresses refer to that target; addresses in an 
-@ifclear BARETARGET
-active core file or 
-@end ifclear
-executable file target are obscured while the process
-target is active.
-
-@ifset BARETARGET
-Use the @code{exec-file} command to select a
-new executable target (@pxref{Files, ,Commands to specify
-files}).
-@end ifset
-@ifclear BARETARGET
-Use the @code{core-file} and @code{exec-file} commands to select a
-new core file or executable target (@pxref{Files, ,Commands to specify
-files}).  To specify as a target a process that is already running, use
-the @code{attach} command (@pxref{Attach, ,Debugging an
-already-running process}).
-@end ifclear
+@noindent
+After specifying this target, you can debug programs for the simulated
+CPU in the same style as programs for your host computer; use the
+@code{file} command to load a new program image, the @code{run} command
+to run your program, and so on.
 
-@node Target Commands
-@section Commands for managing targets
+As well as making available all the usual machine registers
+(@pxref{Registers, ,Registers}), the Z8000 simulator provides three
+additional items of information as specially named registers:
 
 @table @code
-@item target @var{type} @var{parameters}
-Connects the @value{GDBN} host environment to a target
-@ifset BARETARGET
-machine.
-@end ifset
-@ifclear BARETARGET
-machine or process.  A target is typically a protocol for talking to
-debugging facilities.  You use the argument @var{type} to specify the
-type or protocol of the target machine.
 
-Further @var{parameters} are interpreted by the target protocol, but
-typically include things like device names or host names to connect
-with, process numbers, and baud rates.
-@end ifclear
+@item cycles
+Counts clock-ticks in the simulator.
 
-The @code{target} command will not repeat if you press @key{RET} again
-after executing the command.
+@item insts
+Counts instructions run in the simulator.
 
-@item help target
-@kindex help target
-Displays the names of all targets available.  To display targets
-currently selected, use either @code{info target} or @code{info files}
-(@pxref{Files, ,Commands to specify files}).
+@item time
+Execution time in 60ths of a second.
 
-@item help target @var{name}
-Describe a particular target, including any parameters necessary to
-select it.
 @end table
 
-Here are some common targets (available, or not, depending on the GDB
-configuration):
+You can refer to these values in @value{GDBN} expressions with the usual
+conventions; for example, @w{@samp{b fputc if $cycles>5000}} sets a
+conditional breakpoint that suspends only after at least 5000
+simulated clock ticks.
 
-@table @code
-@item target exec @var{program}
-@kindex target exec
-An executable file.  @samp{target exec @var{program}} is the same as
-@samp{exec-file @var{program}}.
+@node Architectures
+@section Architectures
 
-@ifclear BARETARGET
-@item target core @var{filename}
-@kindex target core
-A core dump file.  @samp{target core @var{filename}} is the same as
-@samp{core-file @var{filename}}.
-@end ifclear
+This section describes characteristics of architectures that affect
+all uses of @value{GDBN} with the architecture, both native and cross.
 
-@ifset REMOTESTUB
-@item target remote @var{dev}
-@kindex target remote
-Remote serial target in GDB-specific protocol.  The argument @var{dev}
-specifies what serial device to use for the connection (e.g.
-@file{/dev/ttya}). @xref{Remote, ,Remote debugging}.
-@end ifset
+@menu
+* A29K::
+* Alpha::
+* MIPS::
+@end menu
 
-@ifset SIMS
-@item target sim
-@kindex target sim
-CPU simulator.  @xref{Simulator,,Simulated CPU Target}.
-@end ifset
+@node A29K
+@subsection A29K
 
-@ifset AMD29K
-@item target udi @var{keyword}
-@kindex target udi
-Remote AMD29K target, using the AMD UDI protocol.  The @var{keyword}
-argument specifies which 29K board or simulator to use.  @xref{UDI29K
-Remote,,@value{GDBN} and the UDI protocol for AMD29K}.
+@table @code
 
-@item target amd-eb @var{dev} @var{speed} @var{PROG}
-@kindex target amd-eb
-@cindex AMD EB29K
-Remote PC-resident AMD EB29K board, attached over serial lines.
-@var{dev} is the serial device, as for @code{target remote};
-@var{speed} allows you to specify the linespeed; and @var{PROG} is the
-name of the program to be debugged, as it appears to DOS on the PC.
-@xref{EB29K Remote, ,@value{GDBN} with a remote EB29K}.
+@kindex set rstack_high_address
+@cindex AMD 29K register stack
+@cindex register stack, AMD29K
+@item set rstack_high_address @var{address}
+On AMD 29000 family processors, registers are saved in a separate
+@dfn{register stack}.  There is no way for @value{GDBN} to determine the
+extent of this stack.  Normally, @value{GDBN} just assumes that the
+stack is ``large enough''.  This may result in @value{GDBN} referencing
+memory locations that do not exist.  If necessary, you can get around
+this problem by specifying the ending address of the register stack with
+the @code{set rstack_high_address} command.  The argument should be an
+address, which you probably want to precede with @samp{0x} to specify in
+hexadecimal.
 
-@end ifset
-@ifset H8
-@item target hms
-@kindex target hms
-A Hitachi SH, H8/300, or H8/500 board, attached via serial line to your host.
-@ifclear H8EXCLUSIVE
-@c Unix only, not currently of interest for H8-only manual
-Use special commands @code{device} and @code{speed} to control the serial
-line and the communications speed used.
-@end ifclear
-@xref{Hitachi Remote,,@value{GDBN} and Hitachi Microprocessors}.
+@kindex show rstack_high_address
+@item show rstack_high_address
+Display the current limit of the register stack, on AMD 29000 family
+processors.
 
-@end ifset
-@ifset I960
-@item target nindy @var{devicename}
-@kindex target nindy
-An Intel 960 board controlled by a Nindy Monitor.  @var{devicename} is
-the name of the serial device to use for the connection, e.g.
-@file{/dev/ttya}.  @xref{i960-Nindy Remote, ,@value{GDBN} with a remote i960 (Nindy)}.
+@end table
 
-@end ifset
-@ifset ST2000
-@item target st2000 @var{dev} @var{speed}
-@kindex target st2000
-A Tandem ST2000 phone switch, running Tandem's STDBUG protocol.  @var{dev}
-is the name of the device attached to the ST2000 serial line;
-@var{speed} is the communication line speed.  The arguments are not used
-if @value{GDBN} is configured to connect to the ST2000 using TCP or Telnet.
-@xref{ST2000 Remote,,@value{GDBN} with a Tandem ST2000}.
+@node Alpha
+@subsection Alpha
 
-@end ifset
-@ifset VXWORKS
-@item target vxworks @var{machinename}
-@kindex target vxworks
-A VxWorks system, attached via TCP/IP.  The argument @var{machinename}
-is the target system's machine name or IP address.
-@xref{VxWorks Remote, ,@value{GDBN} and VxWorks}.
-@end ifset
-@end table
+See the following section.
 
-@ifset GENERIC
-Different targets are available on different configurations of @value{GDBN}; your
-configuration may have more or fewer targets.
-@end ifset
+@node MIPS
+@subsection MIPS
 
-@node Remote
-@section Remote debugging
-@cindex remote debugging
+@cindex stack on Alpha
+@cindex stack on MIPS
+@cindex Alpha stack
+@cindex MIPS stack
+Alpha- and MIPS-based computers use an unusual stack frame, which
+sometimes requires @value{GDBN} to search backward in the object code to
+find the beginning of a function.
 
-If you are trying to debug a program running on a machine that cannot run
-GDB in the usual way, it is often useful to use remote debugging.  For
-example, you might use remote debugging on an operating system kernel, or on
-a small system which does not have a general purpose operating system
-powerful enough to run a full-featured debugger.
+@cindex response time, MIPS debugging
+To improve response time (especially for embedded applications, where
+@value{GDBN} may be restricted to a slow serial line for this search)
+you may want to limit the size of this search, using one of these
+commands:
 
-Some configurations of GDB have special serial or TCP/IP interfaces
-to make this work with particular debugging targets.  In addition,
-GDB comes with a generic serial protocol (specific to GDB, but
-not specific to any particular target system) which you can use if you
-write the remote stubs---the code that will run on the remote system to
-communicate with GDB.
+@table @code
+@cindex @code{heuristic-fence-post} (Alpha,MIPS)
+@item set heuristic-fence-post @var{limit}
+Restrict @value{GDBN} to examining at most @var{limit} bytes in its
+search for the beginning of a function.  A value of @var{0} (the
+default) means there is no limit.  However, except for @var{0}, the
+larger the limit the more bytes @code{heuristic-fence-post} must search
+and therefore the longer it takes to run.
 
-Other remote targets may be available in your
-configuration of GDB; use @code{help targets} to list them.
+@item show heuristic-fence-post
+Display the current limit.
+@end table
 
-@ifset GENERIC
-@c Text on starting up GDB in various specific cases; it goes up front
-@c in manuals configured for any of those particular situations, here
-@c otherwise.
-@menu
-@ifset REMOTESTUB
-* Remote Serial::               @value{GDBN} remote serial protocol
-@end ifset
-@ifset I960
-* i960-Nindy Remote::          @value{GDBN} with a remote i960 (Nindy)
-@end ifset
-@ifset AMD29K
-* UDI29K Remote::               @value{GDBN} and the UDI protocol for AMD29K
-* EB29K Remote::               @value{GDBN} with a remote EB29K
-@end ifset
-@ifset VXWORKS
-* VxWorks Remote::             @value{GDBN} and VxWorks
-@end ifset
-@ifset ST2000
-* ST2000 Remote::               @value{GDBN} with a Tandem ST2000
-@end ifset
-@ifset H8
-* Hitachi Remote::              @value{GDBN} and Hitachi Microprocessors
-@end ifset
-@ifset MIPS
-* MIPS Remote::                        @value{GDBN} and MIPS boards
-@end ifset
-@ifset SIMS
-* Simulator::                   Simulated CPU target
-@end ifset
-@end menu
+@noindent
+These commands are available @emph{only} when @value{GDBN} is configured
+for debugging programs on Alpha or MIPS processors.
 
-@include remote.texi
-@end ifset
 
 @node Controlling GDB
 @chapter Controlling @value{GDBN}
 
-You can alter the way @value{GDBN} interacts with you by using
-the @code{set} command.  For commands controlling how @value{GDBN} displays
-data, @pxref{Print Settings, ,Print settings}; other settings are described here.
+You can alter the way @value{GDBN} interacts with you by using the
+@code{set} command.  For commands controlling how @value{GDBN} displays
+data, see @ref{Print Settings, ,Print settings}.  Other settings are
+described here.
 
 @menu
 * Prompt::                      Prompt
@@ -7307,19 +11071,25 @@ data, @pxref{Print Settings, ,Print settings}; other settings are described here
 
 @node Prompt
 @section Prompt
+
 @cindex prompt
 
 @value{GDBN} indicates its readiness to read a command by printing a string
 called the @dfn{prompt}.  This string is normally @samp{(@value{GDBP})}.  You
 can change the prompt string with the @code{set prompt} command.  For
 instance, when debugging @value{GDBN} with @value{GDBN}, it is useful to change
-the prompt in one of the @value{GDBN} sessions so that you can always tell which
-one you are talking to.
+the prompt in one of the @value{GDBN} sessions so that you can always tell 
+which one you are talking to.
+
+@emph{Note:}  @code{set prompt} does not add a space for you after the
+prompt you set.  This allows you to set a prompt which ends in a space
+or a prompt that does not.
 
 @table @code
-@item set prompt @var{newprompt}
 @kindex set prompt
+@item set prompt @var{newprompt}
 Directs @value{GDBN} to use @var{newprompt} as its prompt string henceforth.
+
 @kindex show prompt
 @item show prompt
 Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}}
@@ -7331,9 +11101,9 @@ Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}}
 @cindex command line editing
 
 @value{GDBN} reads its input commands via the @dfn{readline} interface.  This
-GNU library provides consistent behavior for programs which provide a
-command line interface to the user.  Advantages are @code{emacs}-style
-or @code{vi}-style inline editing of commands, @code{csh}-like history
+@sc{gnu} library provides consistent behavior for programs which provide a
+command line interface to the user.  Advantages are @sc{gnu} Emacs-style
+or @dfn{vi}-style inline editing of commands, @code{csh}-like history
 substitution, and a storage and recall of command history across
 debugging sessions.
 
@@ -7367,14 +11137,16 @@ history facility.
 @cindex history substitution
 @cindex history file
 @kindex set history filename
+@kindex GDBHISTFILE
 @item set history filename @var{fname}
-Set the name of the @value{GDBN} command history file to @var{fname}.  This is
-the file from which @value{GDBN} will read an initial command history
-list or to which it will write this list when it exits.  This list is
-accessed through history expansion or through the history
-command editing characters listed below.  This file defaults to the
-value of the environment variable @code{GDBHISTFILE}, or to
-@file{./.gdb_history} if this variable is not set.
+Set the name of the @value{GDBN} command history file to @var{fname}.
+This is the file where @value{GDBN} reads an initial command history
+list, and where it writes the command history from this session when it
+exits.  You can access this list through history expansion or through
+the history command editing characters listed below.  This file defaults
+to the value of the environment variable @code{GDBHISTFILE}, or to
+@file{./.gdb_history} (@file{./_gdb_history} on MS-DOS) if this variable
+is not set.
 
 @cindex history save
 @kindex set history save
@@ -7389,7 +11161,7 @@ Stop recording command history in a file.
 @cindex history size
 @kindex set history size
 @item set history size @var{size}
-Set the number of commands which @value{GDBN} will keep in its history list.
+Set the number of commands which @value{GDBN} keeps in its history list.
 This defaults to the value of the environment variable
 @code{HISTSIZE}, or to 256 if this variable is not set.
 @end table
@@ -7405,13 +11177,12 @@ is off by default. If you decide to enable history expansion with the
 @code{set history expansion on} command, you may sometimes need to
 follow @kbd{!} (when it is used as logical not, in an expression) with
 a space or a tab to prevent it from being expanded.  The readline
-history facilities will not attempt substitution on the strings
+history facilities do not attempt substitution on the strings
 @kbd{!=} and @kbd{!(}, even when history expansion is enabled.
 
 The commands to control history expansion are:
 
 @table @code
-
 @kindex set history expansion
 @item set history expansion on
 @itemx set history expansion
@@ -7421,7 +11192,7 @@ Enable history expansion.  History expansion is off by default.
 Disable history expansion.
 
 The readline code comes with more complete documentation of
-editing and history expansion features.  Users unfamiliar with @code{emacs}
+editing and history expansion features.  Users unfamiliar with @sc{gnu} Emacs
 or @code{vi} may wish to read it.
 @ifset have-readline-appendices
 @xref{Command Line Editing}.
@@ -7465,28 +11236,29 @@ determines when to wrap lines of output.  Depending on what is being
 printed, @value{GDBN} tries to break the line at a readable place,
 rather than simply letting it overflow onto the following line.
 
-Normally @value{GDBN} knows the size of the screen from the termcap data base
+Normally @value{GDBN} knows the size of the screen from the terminal
+driver software.  For example, on Unix @value{GDBN} uses the termcap data base
 together with the value of the @code{TERM} environment variable and the
-@code{stty rows} and @code{stty cols} settings. If this is not correct,
+@code{stty rows} and @code{stty cols} settings.  If this is not correct,
 you can override it with the @code{set height} and @code{set
 width} commands:
 
 @table @code
-@item set height @var{lpp}
-@itemx show height
-@itemx set width @var{cpl}
-@itemx show width
 @kindex set height
 @kindex set width
 @kindex show width
 @kindex show height
+@item set height @var{lpp}
+@itemx show height
+@itemx set width @var{cpl}
+@itemx show width
 These @code{set} commands specify a screen height of @var{lpp} lines and
 a screen width of @var{cpl} characters.  The associated @code{show}
 commands display the current settings.
 
-If you specify a height of zero lines, @value{GDBN} will not pause during output
-no matter how long the output is.  This is useful if output is to a file
-or to an editor buffer.
+If you specify a height of zero lines, @value{GDBN} does not pause during 
+output no matter how long the output is.  This is useful if output is to a 
+file or to an editor buffer.
 
 Likewise, you can specify @samp{set width 0} to prevent @value{GDBN}
 from wrapping its output.
@@ -7497,44 +11269,55 @@ from wrapping its output.
 @cindex number representation
 @cindex entering numbers
 
-You can always enter numbers in octal, decimal, or hexadecimal in @value{GDBN} by
-the usual conventions: octal numbers begin with @samp{0}, decimal
-numbers end with @samp{.}, and hexadecimal numbers begin with @samp{0x}.
-Numbers that begin with none of these are, by default, entered in base
-10; likewise, the default display for numbers---when no particular
-format is specified---is base 10.  You can change the default base for
-both input and output with the @code{set radix} command.
+You can always enter numbers in octal, decimal, or hexadecimal in
+@value{GDBN} by the usual conventions: octal numbers begin with
+@samp{0}, decimal numbers end with @samp{.}, and hexadecimal numbers
+begin with @samp{0x}.  Numbers that begin with none of these are, by
+default, entered in base 10; likewise, the default display for
+numbers---when no particular format is specified---is base 10.  You can
+change the default base for both input and output with the @code{set
+radix} command.
 
 @table @code
-@kindex set radix
-@item set radix @var{base}
-Set the default base for numeric input and display.  Supported choices
+@kindex set input-radix
+@item set input-radix @var{base}
+Set the default base for numeric input.  Supported choices
 for @var{base} are decimal 8, 10, or 16.  @var{base} must itself be
 specified either unambiguously or using the current default radix; for
 example, any of
 
-@example
+@smallexample
 set radix 012
 set radix 10.
 set radix 0xa
-@end example
+@end smallexample
 
 @noindent
-will set the base to decimal.  On the other hand, @samp{set radix 10}
-will leave the radix unchanged no matter what it was.
+sets the base to decimal.  On the other hand, @samp{set radix 10}
+leaves the radix unchanged no matter what it was.
+
+@kindex set output-radix
+@item set output-radix @var{base}
+Set the default base for numeric display.  Supported choices
+for @var{base} are decimal 8, 10, or 16.  @var{base} must itself be
+specified either unambiguously or using the current default radix.
+
+@kindex show input-radix
+@item show input-radix
+Display the current default base for numeric input.
 
-@kindex show radix
-@item show radix
-Display the current default base for numeric input and display.
+@kindex show output-radix
+@item show output-radix
+Display the current default base for numeric display.
 @end table
 
 @node Messages/Warnings
 @section Optional warnings and messages
 
-By default, @value{GDBN} is silent about its inner workings.  If you are running
-on a slow machine, you may want to use the @code{set verbose} command.
-It will make @value{GDBN} tell you when it does a lengthy internal operation, so
-you will not think it has crashed.
+By default, @value{GDBN} is silent about its inner workings.  If you are
+running on a slow machine, you may want to use the @code{set verbose}
+command.  This makes @value{GDBN} tell you when it does a lengthy
+internal operation, so you will not think it has crashed.
 
 Currently, the messages controlled by @code{set verbose} are those
 which announce that the symbol table for a source file is being read;
@@ -7553,21 +11336,24 @@ Disables @value{GDBN} output of certain informational messages.
 Displays whether @code{set verbose} is on or off.
 @end table
 
-By default, if @value{GDBN} encounters bugs in the symbol table of an object
-file, it is silent; but if you are debugging a compiler, you may find
-this information useful (@pxref{Symbol Errors, ,Errors reading symbol files}).
+By default, if @value{GDBN} encounters bugs in the symbol table of an
+object file, it is silent; but if you are debugging a compiler, you may
+find this information useful (@pxref{Symbol Errors, ,Errors reading
+symbol files}).
 
 @table @code
+
 @kindex set complaints
 @item set complaints @var{limit}
-Permits @value{GDBN} to output @var{limit} complaints about each type of unusual
-symbols before becoming silent about the problem.  Set @var{limit} to
-zero to suppress all complaints; set it to a large number to prevent
-complaints from being suppressed.
+Permits @value{GDBN} to output @var{limit} complaints about each type of
+unusual symbols before becoming silent about the problem.  Set
+@var{limit} to zero to suppress all complaints; set it to a large number
+to prevent complaints from being suppressed.
 
 @kindex show complaints
 @item show complaints
 Displays how many symbol complaints @value{GDBN} is permitted to produce.
+
 @end table
 
 By default, @value{GDBN} is cautious, and asks what sometimes seems to be a
@@ -7584,6 +11370,7 @@ If you are willing to unflinchingly face the consequences of your own
 commands, you can disable this ``feature'':
 
 @table @code
+
 @kindex set confirm
 @cindex flinching
 @cindex confirmation
@@ -7594,50 +11381,23 @@ Disables confirmation requests.
 @item set confirm on
 Enables confirmation requests (the default).
 
-@item show confirm
 @kindex show confirm
+@item show confirm
 Displays state of confirmation requests.
-@end table
-
-@c FIXME this does not really belong here.  But where *does* it belong?
-@cindex reloading symbols
-Some systems allow individual object files that make up your program to
-be replaced without stopping and restarting your program.
-@ifset VXWORKS
-For example, in VxWorks you can simply recompile a defective object file
-and keep on running.
-@end ifset
-If you are running on one of these systems, you can allow @value{GDBN} to
-reload the symbols for automatically relinked modules:
-
-@table @code
-@kindex set symbol-reloading
-@item set symbol-reloading on
-Replace symbol definitions for the corresponding source file when an
-object file with a particular name is seen again.
-
-@item set symbol-reloading off
-Do not replace symbol definitions when re-encountering object files of
-the same name.  This is the default state; if you are not running on a
-system that permits automatically relinking modules, you should leave
-@code{symbol-reloading} off, since otherwise @value{GDBN} may discard symbols
-when linking large programs, that may contain several modules (from
-different directories or libraries) with the same name.
 
-@item show symbol-reloading
-Show the current @code{on} or @code{off} setting.
 @end table
 
 @node Sequences
 @chapter Canned Sequences of Commands
 
 Aside from breakpoint commands (@pxref{Break Commands, ,Breakpoint
-command lists}), @value{GDBN} provides two ways to store sequences of commands
-for execution as a unit: user-defined commands and command files.
+command lists}), @value{GDBN} provides two ways to store sequences of
+commands for execution as a unit: user-defined commands and command
+files.
 
 @menu
 * Define::                      User-defined commands
-* Hooks::                      User-defined command hooks
+* Hooks::                       User-defined command hooks
 * Command Files::               Command files
 * Output::                      Commands for controlled output
 @end menu
@@ -7646,13 +11406,34 @@ for execution as a unit: user-defined commands and command files.
 @section User-defined commands
 
 @cindex user-defined command
-A @dfn{user-defined command} is a sequence of @value{GDBN} commands to which you
-assign a new name as a command.  This is done with the @code{define}
-command.
+A @dfn{user-defined command} is a sequence of @value{GDBN} commands to
+which you assign a new name as a command.  This is done with the
+@code{define} command.  User commands may accept up to 10 arguments
+separated by whitespace.  Arguments are accessed within the user command
+via @var{$arg0@dots{}$arg9}.  A trivial example:
+
+@smallexample
+define adder
+  print $arg0 + $arg1 + $arg2
+@end smallexample
+
+@noindent
+To execute the command use:
+
+@smallexample
+adder 1 2 3
+@end smallexample
+
+@noindent
+This defines the command @code{adder}, which prints the sum of
+its three arguments.  Note the arguments are text substitutions, so they may 
+reference variables, use complex expressions, or even perform inferior
+functions calls.
 
 @table @code
-@item define @var{commandname}
+
 @kindex define
+@item define @var{commandname}
 Define a command named @var{commandname}.  If there is already a command
 by that name, you are asked to confirm that you want to redefine it.
 
@@ -7660,56 +11441,76 @@ The definition of the command is made up of other @value{GDBN} command lines,
 which are given following the @code{define} command.  The end of these
 commands is marked by a line containing @code{end}.
 
-@item document @var{commandname}
+@kindex if
+@kindex else
+@item if
+Takes a single argument, which is an expression to evaluate.
+It is followed by a series of commands that are executed
+only if the expression is true (nonzero).
+There can then optionally be a line @code{else}, followed
+by a series of commands that are only executed if the expression
+was false.  The end of the list is marked by a line containing @code{end}.
+
+@kindex while
+@item while
+The syntax is similar to @code{if}: the command takes a single argument,
+which is an expression to evaluate, and must be followed by the commands to
+execute, one per line, terminated by an @code{end}.
+The commands are executed repeatedly as long as the expression
+evaluates to true.
+
 @kindex document
-Give documentation to the user-defined command @var{commandname}.  The
-command @var{commandname} must already be defined.  This command reads
-lines of documentation just as @code{define} reads the lines of the
-command definition, ending with @code{end}.  After the @code{document}
-command is finished, @code{help} on command @var{commandname} will print
-the documentation you have specified.
+@item document @var{commandname}
+Document the user-defined command @var{commandname}, so that it can be
+accessed by @code{help}.  The command @var{commandname} must already be 
+defined.  This command reads lines of documentation just as @code{define} 
+reads the lines of the command definition, ending with @code{end}.  
+After the @code{document} command is finished, @code{help} on command 
+@var{commandname} displays the documentation you have written.
 
 You may use the @code{document} command again to change the
 documentation of a command.  Redefining the command with @code{define}
 does not change the documentation.
 
-@item help user-defined
 @kindex help user-defined
+@item help user-defined
 List all user-defined commands, with the first line of the documentation
 (if any) for each.
 
+@kindex show user
 @item show user
 @itemx show user @var{commandname}
-@kindex show user
-Display the @value{GDBN} commands used to define @var{commandname} (but not its
-documentation).  If no @var{commandname} is given, display the
+Display the @value{GDBN} commands used to define @var{commandname} (but
+not its documentation).  If no @var{commandname} is given, display the
 definitions for all user-defined commands.
+
 @end table
 
-User-defined commands do not take arguments.  When they are executed, the
+When user-defined commands are executed, the
 commands of the definition are not printed.  An error in any command
 stops execution of the user-defined command.
 
-Commands that would ask for confirmation if used interactively proceed
-without asking when used inside a user-defined command.  Many @value{GDBN} commands
-that normally print messages to say what they are doing omit the messages
-when used in a user-defined command.
+If used interactively, commands that would ask for confirmation proceed
+without asking when used inside a user-defined command.  Many @value{GDBN} 
+commands that normally print messages to say what they are doing omit the 
+messages when used in a user-defined command.
 
 @node Hooks
 @section User-defined command hooks
-@cindex command files
+@cindex command hooks
+@cindex hooks, for commands
 
 You may define @emph{hooks}, which are a special kind of user-defined
 command.  Whenever you run the command @samp{foo}, if the user-defined
 command @samp{hook-foo} exists, it is executed (with no arguments)
 before that command.
 
+@kindex stop@r{, a pseudo-command}
 In addition, a pseudo-command, @samp{stop} exists.  Defining
 (@samp{hook-stop}) makes the associated commands execute every time
 execution stops in your program: before breakpoint commands are run,
 displays are printed, or the stack frame is printed.
 
-@ifclear BARETARGET
 For example, to ignore @code{SIGALRM} signals while
 single-stepping, but treat them normally during normal execution,
 you could define:
@@ -7727,7 +11528,6 @@ define hook-continue
 handle SIGLARM pass
 end
 @end example
-@end ifclear
 
 You can define a hook for any single-word command in @value{GDBN}, but
 not for command aliases; you should define a hook for the basic command
@@ -7739,39 +11539,41 @@ If an error occurs during the execution of your hook, execution of
 (before the command that you actually typed had a chance to run).
 
 If you try to define a hook which does not match any known command, you
-will get a warning from the @code{define} command.
+get a warning from the @code{define} command.
 
 @node Command Files
 @section Command files
 
 @cindex command files
-A command file for @value{GDBN} is a file of lines that are @value{GDBN} commands.  Comments
-(lines starting with @kbd{#}) may also be included.  An empty line in a
-command file does nothing; it does not mean to repeat the last command, as
-it would from the terminal.
+A command file for @value{GDBN} is a file of lines that are @value{GDBN} 
+commands.  Comments (lines starting with @kbd{#}) may also be included.  
+An empty line in a command file does nothing; it does not mean to repeat 
+the last command, as it would from the terminal.
 
 @cindex init file
-@cindex @file{@value{GDBINIT}}
+@cindex @file{.gdbinit}
+@cindex @file{gdb.ini}
 When you start @value{GDBN}, it automatically executes commands from its
-@dfn{init files}.  These are files named @file{@value{GDBINIT}}.
-@value{GDBN} reads the init file (if any) in your home directory, then
-processes command line options and operands, and then reads the init
-file (if any) in the current working directory.  This is so the init
-file in your home directory can set options (such as @code{set
-complaints}) which affect the processing of the command line options and
-operands.  The init files are not executed if you use the @samp{-nx}
-option; @pxref{Mode Options, ,Choosing modes}.
-
-@ifset GENERIC
+@dfn{init files}.  These are files named @file{.gdbinit} on Unix, or
+@file{gdb.ini} on DOS/Windows.  @value{GDBN} reads the init file (if
+any) in your home directory@footnote{On DOS/Windows systems, the home
+directory is the one pointed to by the @code{HOME} environment
+variable.}, then processes command line options and operands, and then
+reads the init file (if any) in the current working directory.  This is
+so the init file in your home directory can set options (such as
+@code{set complaints}) which affect the processing of the command line
+options and operands.  The init files are not executed if you use the
+@samp{-nx} option; @pxref{Mode Options, ,Choosing modes}.
+
 @cindex init file name
 On some configurations of @value{GDBN}, the init file is known by a
 different name (these are typically environments where a specialized
-form of GDB may need to coexist with other forms, hence a different name
-for the specialized version's init file).  These are the environments
-with special init file names:
+form of @value{GDBN} may need to coexist with other forms, hence a
+different name for the specialized version's init file).  These are the
+environments with special init file names:
 
-@itemize @bullet
 @kindex .vxgdbinit
+@itemize @bullet
 @item
 VxWorks (Wind River Systems real-time OS): @samp{.vxgdbinit}
 
@@ -7783,14 +11585,13 @@ OS68K (Enea Data Systems real-time OS): @samp{.os68gdbinit}
 @item
 ES-1800 (Ericsson Telecom AB M68000 emulator): @samp{.esgdbinit}
 @end itemize
-@end ifset
 
 You can also request the execution of a command file with the
 @code{source} command:
 
 @table @code
-@item source @var{filename}
 @kindex source
+@item source @var{filename}
 Execute the command file @var{filename}.
 @end table
 
@@ -7813,13 +11614,13 @@ describes three commands useful for generating exactly the output you
 want.
 
 @table @code
-@item echo @var{text}
 @kindex echo
+@item echo @var{text}
 @c I do not consider backslash-space a standard C escape sequence
 @c because it is not in ANSI.
 Print @var{text}.  Nonprinting characters can be included in
 @var{text} using C escape sequences, such as @samp{\n} to print a
-newline.  @strong{No newline will be printed unless you specify one.}
+newline.  @strong{No newline is printed unless you specify one.}
 In addition to the standard C escape sequences, a backslash followed
 by a space stands for a space.  This is useful for displaying a
 string with spaces at the beginning or the end, since leading and
@@ -7844,25 +11645,29 @@ echo which is continued\n
 echo onto several lines.\n
 @end example
 
-@item output @var{expression}
 @kindex output
+@item output @var{expression}
 Print the value of @var{expression} and nothing but that value: no
 newlines, no @samp{$@var{nn} = }.  The value is not entered in the
-value history either.  @xref{Expressions, ,Expressions}, for more information on
-expressions.
+value history either.  @xref{Expressions, ,Expressions}, for more information 
+on expressions.
 
 @item output/@var{fmt} @var{expression}
 Print the value of @var{expression} in format @var{fmt}.  You can use
 the same formats as for @code{print}.  @xref{Output Formats,,Output
 formats}, for more information.
 
-@item printf @var{string}, @var{expressions}@dots{}
 @kindex printf
+@item printf @var{string}, @var{expressions}@dots{}
 Print the values of the @var{expressions} under the control of
 @var{string}.  The @var{expressions} are separated by commas and may be
 either numbers or pointers.  Their values are printed as specified by
 @var{string}, exactly as if your program were to execute the C
 subroutine
+@c FIXME: the above implies that at least all ANSI C formats are
+@c supported, but it isn't true: %E and %G don't work (or so it seems).
+@c Either this is a bug, or the manual should document what formats are
+@c supported.
 
 @example
 printf (@var{string}, @var{expressions}@dots{});
@@ -7879,12 +11684,12 @@ string are the simple ones that consist of backslash followed by a
 letter.
 @end table
 
-@ifclear DOSHOST
 @node Emacs
-@chapter Using @value{GDBN} under GNU Emacs
+@chapter Using @value{GDBN} under @sc{gnu} Emacs
 
-@cindex emacs
-A special interface allows you to use GNU Emacs to view (and
+@cindex Emacs
+@cindex @sc{gnu} Emacs
+A special interface allows you to use @sc{gnu} Emacs to view (and
 edit) the source files for the program you are debugging with
 @value{GDBN}.
 
@@ -7892,6 +11697,7 @@ To use this interface, use the command @kbd{M-x gdb} in Emacs.  Give the
 executable file you want to debug as an argument.  This command starts
 @value{GDBN} as a subprocess of Emacs, with input and output through a newly
 created Emacs buffer.
+@c (Do not use the @code{-tui} option to run @value{GDBN} from Emacs.)
 
 Using @value{GDBN} under Emacs is just like using @value{GDBN} normally except for two
 things:
@@ -7925,18 +11731,18 @@ source display, and splits the screen to show both your @value{GDBN} session
 and the source.
 
 Explicit @value{GDBN} @code{list} or search commands still produce output as
-usual, but you probably will have no reason to use them.
+usual, but you probably have no reason to use them from Emacs.
 
 @quotation
 @emph{Warning:} If the directory where your program resides is not your
 current directory, it can be easy to confuse Emacs about the location of
-the source files, in which case the auxiliary display buffer will not
+the source files, in which case the auxiliary display buffer does not
 appear to show your source.  @value{GDBN} can find programs by searching your
 environment's @code{PATH} variable, so the @value{GDBN} input and output
-session will proceed normally; but Emacs does not get enough information
+session proceeds normally; but Emacs does not get enough information
 back from @value{GDBN} to locate the source files in this situation.  To
 avoid this problem, either start @value{GDBN} mode from the directory where
-your program resides, or specify a full path name when prompted for the
+your program resides, or specify an absolute file name when prompted for the
 @kbd{M-x gdb} argument.
 
 A similar confusion can result if you use the @value{GDBN} @code{file} command to
@@ -7954,8 +11760,8 @@ Emacs variable @code{gdb-command-name}; for example,
 @end example
 
 @noindent
-(preceded by @kbd{ESC ESC}, or typed in the @code{*scratch*} buffer, or
-in your @file{.emacs} file) will make Emacs call the program named
+(preceded by @kbd{M-:} or @kbd{ESC :}, or typed in the @code{*scratch*} buffer, or
+in your @file{.emacs} file) makes Emacs call the program named
 ``@code{mygdb}'' instead.
 
 In the @value{GDBN} I/O buffer, you can use these special Emacs commands in
@@ -7994,7 +11800,7 @@ command.
 
 @item M-u
 Go up the number of frames indicated by the numeric argument
-(@pxref{Arguments, , Numeric Arguments, emacs, The GNU Emacs Manual}),
+(@pxref{Arguments, , Numeric Arguments, Emacs, The @sc{gnu} Emacs Manual}),
 like the @value{GDBN} @code{up} command.
 
 @emph{Warning:} In Emacs v19, this command is @kbd{C-c C-u}.
@@ -8015,8 +11821,8 @@ argument for @code{disassemble} by typing @kbd{C-x &}.
 You can customize this further by defining elements of the list
 @code{gdb-print-command}; once it is defined, you can format or
 otherwise process numbers picked up by @kbd{C-x &} before they are
-inserted.  A numeric argument to @kbd{C-x &} will both indicate that you
-wish special formatting, and act as an index to pick an element of the
+inserted.  A numeric argument to @kbd{C-x &} indicates that you
+wish special formatting, and also acts as an index to pick an element of the
 list.  If the list element is a string, the number to be inserted is
 formatted using the Emacs function @code{format}; otherwise the number
 is passed as an argument to the corresponding list element.
@@ -8027,7 +11833,7 @@ tells @value{GDBN} to set a breakpoint on the source line point is on.
 
 If you accidentally delete the source-display buffer, an easy way to get
 it back is to type the command @code{f} in the @value{GDBN} buffer, to
-request a frame display; when you run under Emacs, this will recreate
+request a frame display; when you run under Emacs, this recreates
 the source buffer if necessary to show you the context of the current
 frame.
 
@@ -8035,50 +11841,22 @@ The source files displayed in Emacs are in ordinary Emacs buffers
 which are visiting the source files in the usual way.  You can edit
 the files with these buffers if you wish; but keep in mind that @value{GDBN}
 communicates with Emacs in terms of line numbers.  If you add or
-delete lines from the text, the line numbers that @value{GDBN} knows will cease
+delete lines from the text, the line numbers that @value{GDBN} knows cease
 to correspond properly with the code.
 
 @c The following dropped because Epoch is nonstandard.  Reactivate
-@c if/when v19 does something similar. ---pesch@cygnus.com 19dec1990
+@c if/when v19 does something similar. ---doc@cygnus.com 19dec1990
 @ignore
-@kindex emacs epoch environment
-@kindex epoch
+@kindex Emacs Epoch environment
+@kindex Epoch
 @kindex inspect
 
-Version 18 of Emacs has a built-in window system called the @code{epoch}
+Version 18 of @sc{gnu} Emacs has a built-in window system 
+called the @code{epoch}
 environment.  Users of this environment can use a new command,
 @code{inspect} which performs identically to @code{print} except that
 each value is printed in its own window.
 @end ignore
-@end ifclear
-
-@ifset LUCID
-@node Energize
-@chapter Using @value{GDBN} with Energize
-
-@cindex Energize
-The Energize Programming System is an integrated development environment
-that includes a point-and-click interface to many programming tools.
-When you use @value{GDBN} in this environment, you can use the standard
-Energize graphical interface to drive @value{GDBN}; you can also, if you
-choose, type @value{GDBN} commands as usual in a debugging window.  Even if
-you use the graphical interface, the debugging window (which uses Emacs,
-and resembles the standard Emacs interface to @value{GDBN}) displays the
-equivalent commands, so that the history of your debugging session is
-properly reflected.
-
-When Energize starts up a @value{GDBN} session, it uses one of the
-command-line options @samp{-energize} or @samp{-cadillac} (``cadillac''
-is the name of the communications protocol used by the Energize system).
-This option makes @value{GDBN} run as one of the tools in the Energize Tool
-Set: it sends all output to the Energize kernel, and accept input from
-it as well.
-
-See the user manual for the Energize Programming System for 
-information on how to use the Energize graphical interface and the other
-development tools that Energize integrates with @value{GDBN}.
-
-@end ifset
 
 @node GDB Bugs
 @chapter Reporting Bugs in @value{GDBN}
@@ -8107,19 +11885,21 @@ information that enables us to fix the bug.
 If you are not sure whether you have found a bug, here are some guidelines:
 
 @itemize @bullet
-@item
 @cindex fatal signal
 @cindex debugger crash
 @cindex crash of debugger
+@item
 If the debugger gets a fatal signal, for any input whatever, that is a
 @value{GDBN} bug.  Reliable debuggers never crash.
 
-@item
 @cindex error on valid input
-If @value{GDBN} produces an error message for valid input, that is a bug.
-
 @item
+If @value{GDBN} produces an error message for valid input, that is a
+bug.  (Note that if you're cross debugging, the problem may also be
+somewhere in the connection to the target.)
+
 @cindex invalid input
+@item
 If @value{GDBN} does not produce an error message for invalid input,
 that is a bug.  However, you should note that your idea of
 ``invalid input'' might be our idea of ``an extension'' or ``support
@@ -8135,25 +11915,26 @@ for improvement of @value{GDBN} are welcome in any case.
 @cindex bug reports
 @cindex @value{GDBN} bugs, reporting
 
-A number of companies and individuals offer support for GNU products.
+A number of companies and individuals offer support for @sc{gnu} products.
 If you obtained @value{GDBN} from a support organization, we recommend you
 contact that organization first.
 
 You can find contact information for many support companies and
-individuals in the file @file{etc/SERVICE} in the GNU Emacs
+individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
 distribution.
+@c should add a web page ref...
 
-In any event, we also recommend that you send bug reports for @value{GDBN} to one
-of these addresses:
+In any event, we also recommend that you send bug reports for
+@value{GDBN} to this addresses:
 
 @example
-bug-gdb@@prep.ai.mit.edu
-@{ucbvax|mit-eddie|uunet@}!prep.ai.mit.edu!bug-gdb
+bug-gdb@@gnu.org
 @end example
 
 @strong{Do not send bug reports to @samp{info-gdb}, or to
-@samp{help-gdb}, or to any newsgroups.} Most users of @value{GDBN} do not want to
-receive bug reports.  Those that do, have arranged to receive @samp{bug-gdb}.
+@samp{help-gdb}, or to any newsgroups.}  Most users of @value{GDBN} do
+not want to receive bug reports.  Those that do have arranged to receive
+@samp{bug-gdb}.
 
 The mailing list @samp{bug-gdb} has a newsgroup @samp{gnu.gdb.bug} which
 serves as a repeater.  The mailing list and the newsgroup carry exactly
@@ -8167,10 +11948,11 @@ bug reports to the mailing list.
 As a last resort, send bug reports on paper to:
 
 @example
-GNU Debugger Bugs
-Free Software Foundation
-545 Tech Square
-Cambridge, MA 02139
+@sc{gnu} Debugger Bugs
+Free Software Foundation Inc.
+59 Temple Place - Suite 330
+Boston, MA 02111-1307
+USA
 @end example
 
 The fundamental principle of reporting bugs usefully is this:
@@ -8187,10 +11969,10 @@ of that location would fool the debugger into doing the right thing despite
 the bug.  Play it safe and give a specific, complete example.  That is the
 easiest thing for you to do, and the most helpful.
 
-Keep in mind that the purpose of a bug report is to enable us to fix
-the bug if it is new to us.  It is not as important as what happens if
-the bug is already known.  Therefore, always write your bug reports on
-the assumption that the bug has not been reported previously.
+Keep in mind that the purpose of a bug report is to enable us to fix the
+bug.  It may be that the bug has been reported previously, but neither
+you nor we can know that unless your bug report is complete and
+self-contained.
 
 Sometimes people give a few sketchy facts and ask, ``Does this ring a
 bell?''  Those bug reports are useless, and we urge everyone to
@@ -8201,8 +11983,9 @@ To enable us to fix the bug, you should include all these things:
 
 @itemize @bullet
 @item
-The version of @value{GDBN}.  @value{GDBN} announces it if you start with no
-arguments; you can also print it at any time using @code{show version}.
+The version of @value{GDBN}.  @value{GDBN} announces it if you start
+with no arguments; you can also print it at any time using @code{show
+version}.
 
 Without this, we will not know whether there is any point in looking for
 the bug in the current version of @value{GDBN}.
@@ -8213,11 +11996,14 @@ version number.
 
 @item
 What compiler (and its version) was used to compile @value{GDBN}---e.g.
-``@value{GCC}--2.0''.
+``@value{GCC}--2.8.1''.
 
 @item
-What compiler (and its version) was used to compile the program you
-are debugging---e.g.  ``@value{GCC}--2.0''.
+What compiler (and its version) was used to compile the program you are
+debugging---e.g.  ``@value{GCC}--2.8.1'', or ``HP92453-01 A.10.32.03 HP
+C Compiler''.  For GCC, you can say @code{gcc --version} to get this
+information; for other compilers, see the documentation for those
+compilers.
 
 @item
 The command arguments you gave the compiler to compile your example and
@@ -8236,19 +12022,19 @@ reproduce the bug.
 A description of what behavior you observe that you believe is
 incorrect.  For example, ``It gets a fatal signal.''
 
-Of course, if the bug is that @value{GDBN} gets a fatal signal, then we will
-certainly notice it.  But if the bug is incorrect output, we might not
-notice unless it is glaringly wrong.  We are human, after all.  You
-might as well not give us a chance to make a mistake.
+Of course, if the bug is that @value{GDBN} gets a fatal signal, then we
+will certainly notice it.  But if the bug is incorrect output, we might
+not notice unless it is glaringly wrong.  You might as well not give us
+a chance to make a mistake.
 
 Even if the problem you experience is a fatal signal, you should still
-say so explicitly.  Suppose something strange is going on, such as,
-your copy of @value{GDBN} is out of synch, or you have encountered a
-bug in the C library on your system.  (This has happened!)  Your copy
-might crash and ours would not.  If you told us to expect a crash,
-then when ours fails to crash, we would know that the bug was not
-happening for us.  If you had not told us to expect a crash, then we
-would not be able to draw any conclusion from our observations.
+say so explicitly.  Suppose something strange is going on, such as, your
+copy of @value{GDBN} is out of synch, or you have encountered a bug in
+the C library on your system.  (This has happened!)  Your copy might
+crash and ours would not.  If you told us to expect a crash, then when
+ours fails to crash, we would know that the bug was not happening for
+us.  If you had not told us to expect a crash, then we would not be able
+to draw any conclusion from our observations.
 
 @item
 If you wish to suggest changes to the @value{GDBN} source, send us context
@@ -8257,6 +12043,7 @@ it by context, not by line number.
 
 The line numbers in our development sources will not match those in your
 sources.  Your line numbers would convey no useful information to us.
+
 @end itemize
 
 Here are some things that are not necessary:
@@ -8277,7 +12064,7 @@ We recommend that you save your time for something else.
 Of course, if you can find a simpler example to report @emph{instead}
 of the original one, that is a convenience for us.  Errors in the
 output will be easier to spot, running under the debugger will take
-less time, etc.
+less time, and so on.
 
 However, simplification is not vital; if you do not want to do this,
 report the bug anyway and send us the entire test case you used.
@@ -8309,142 +12096,23 @@ things without first using the debugger to find the facts.
 @c The readline documentation is distributed with the readline code 
 @c and consists of the two following files:
 @c     rluser.texinfo
-@c     inc-hist.texi
+@c     inc-hist.texinfo
 @c Use -I with makeinfo to point to the appropriate directory,
 @c environment var TEXINPUTS with TeX.
 @include rluser.texinfo
-@include inc-hist.texi
-
-@ifset NOVEL
-@node Renamed Commands
-@appendix Renamed Commands
-
-The following commands were renamed in GDB 4, in order to make the
-command set as a whole more consistent and easier to use and remember:
-
-@kindex add-syms
-@kindex delete environment
-@kindex info copying
-@kindex info convenience
-@kindex info directories
-@kindex info editing
-@kindex info history
-@kindex info targets
-@kindex info values
-@kindex info version
-@kindex info warranty
-@kindex set addressprint
-@kindex set arrayprint
-@kindex set prettyprint
-@kindex set screen-height
-@kindex set screen-width
-@kindex set unionprint
-@kindex set vtblprint
-@kindex set demangle
-@kindex set asm-demangle
-@kindex set sevenbit-strings
-@kindex set array-max
-@kindex set caution
-@kindex set history write
-@kindex show addressprint
-@kindex show arrayprint
-@kindex show prettyprint
-@kindex show screen-height
-@kindex show screen-width
-@kindex show unionprint
-@kindex show vtblprint
-@kindex show demangle
-@kindex show asm-demangle
-@kindex show sevenbit-strings
-@kindex show array-max
-@kindex show caution
-@kindex show history write
-@kindex unset
-
-@c TEXI2ROFF-KILL
-@ifinfo
-@c END TEXI2ROFF-KILL
-@example
-OLD COMMAND               NEW COMMAND
-@c TEXI2ROFF-KILL
----------------           -------------------------------
-@c END TEXI2ROFF-KILL
-add-syms                  add-symbol-file
-delete environment        unset environment
-info convenience          show convenience
-info copying              show copying
-info directories          show directories
-info editing              show commands
-info history              show values
-info targets              help target
-info values               show values
-info version              show version
-info warranty             show warranty
-set/show addressprint     set/show print address
-set/show array-max        set/show print elements
-set/show arrayprint       set/show print array
-set/show asm-demangle     set/show print asm-demangle
-set/show caution          set/show confirm
-set/show demangle         set/show print demangle
-set/show history write    set/show history save
-set/show prettyprint      set/show print pretty
-set/show screen-height    set/show height
-set/show screen-width     set/show width
-set/show sevenbit-strings set/show print sevenbit-strings
-set/show unionprint       set/show print union
-set/show vtblprint        set/show print vtbl
-
-unset                     [No longer an alias for delete]
-@end example
-@c TEXI2ROFF-KILL
-@end ifinfo
+@include inc-hist.texinfo
 
-@tex
-\vskip \parskip\vskip \baselineskip
-\halign{\tt #\hfil &\qquad#&\tt #\hfil\cr
-{\bf Old Command}         &&{\bf New Command}\cr
-add-syms                  &&add-symbol-file\cr
-delete environment        &&unset environment\cr
-info convenience          &&show convenience\cr
-info copying              &&show copying\cr
-info directories          &&show directories     \cr
-info editing              &&show commands\cr
-info history              &&show values\cr
-info targets              &&help target\cr
-info values               &&show values\cr
-info version              &&show version\cr
-info warranty             &&show warranty\cr
-set{\rm / }show addressprint     &&set{\rm / }show print address\cr
-set{\rm / }show array-max        &&set{\rm / }show print elements\cr
-set{\rm / }show arrayprint       &&set{\rm / }show print array\cr
-set{\rm / }show asm-demangle     &&set{\rm / }show print asm-demangle\cr
-set{\rm / }show caution          &&set{\rm / }show confirm\cr
-set{\rm / }show demangle         &&set{\rm / }show print demangle\cr
-set{\rm / }show history write    &&set{\rm / }show history save\cr
-set{\rm / }show prettyprint      &&set{\rm / }show print pretty\cr
-set{\rm / }show screen-height    &&set{\rm / }show height\cr
-set{\rm / }show screen-width     &&set{\rm / }show width\cr
-set{\rm / }show sevenbit-strings &&set{\rm / }show print sevenbit-strings\cr
-set{\rm / }show unionprint       &&set{\rm / }show print union\cr
-set{\rm / }show vtblprint        &&set{\rm / }show print vtbl\cr
-\cr
-unset                     &&\rm(No longer an alias for delete)\cr
-}
-@end tex
-@c END TEXI2ROFF-KILL
-@end ifset
 
-@ifclear PRECONFIGURED
 @node Formatting Documentation
 @appendix Formatting Documentation
 
-@cindex GDB reference card
+@cindex @value{GDBN} reference card
 @cindex reference card
-The GDB 4 release includes an already-formatted reference card, ready
-for printing with PostScript or GhostScript, in the @file{gdb}
+The @value{GDBN} 4 release includes an already-formatted reference card, ready
+for printing with PostScript or Ghostscript, in the @file{gdb}
 subdirectory of the main source directory@footnote{In
 @file{gdb-@value{GDBVN}/gdb/refcard.ps} of the version @value{GDBVN}
-release.}.  If you can use PostScript or GhostScript with your printer,
+release.}.  If you can use PostScript or Ghostscript with your printer,
 you can print the reference card immediately with @file{refcard.ps}.
 
 The release also includes the source for the reference card.  You
@@ -8454,36 +12122,37 @@ can format it, using @TeX{}, by typing:
 make refcard.dvi
 @end example
 
-The GDB reference card is designed to print in landscape mode on US
-``letter'' size paper; that is, on a sheet 11 inches wide by 8.5 inches
+The @value{GDBN} reference card is designed to print in @dfn{landscape} 
+mode on US ``letter'' size paper; 
+that is, on a sheet 11 inches wide by 8.5 inches
 high.  You will need to specify this form of printing as an option to
 your @sc{dvi} output program.
 
 @cindex documentation
 
-All the documentation for GDB comes as part of the machine-readable
+All the documentation for @value{GDBN} comes as part of the machine-readable
 distribution.  The documentation is written in Texinfo format, which is
 a documentation system that uses a single source file to produce both
 on-line information and a printed manual.  You can use one of the Info
 formatting commands to create the on-line version of the documentation
 and @TeX{} (or @code{texi2roff}) to typeset the printed version.
 
-GDB includes an already formatted copy of the on-line Info version of
-this manual in the @file{gdb} subdirectory.  The main Info file is
-@file{gdb-@var{version-number}/gdb/gdb.info}, and it refers to
+@value{GDBN} includes an already formatted copy of the on-line Info
+version of this manual in the @file{gdb} subdirectory.  The main Info
+file is @file{gdb-@value{GDBVN}/gdb/gdb.info}, and it refers to
 subordinate files matching @samp{gdb.info*} in the same directory.  If
 necessary, you can print out these files, or read them with any editor;
-but they are easier to read using the @code{info} subsystem in GNU Emacs
-or the standalone @code{info} program, available as part of the GNU
-Texinfo distribution.
+but they are easier to read using the @code{info} subsystem in @sc{gnu}
+Emacs or the standalone @code{info} program, available as part of the
+@sc{gnu} Texinfo distribution.
 
 If you want to format these Info files yourself, you need one of the
 Info formatting programs, such as @code{texinfo-format-buffer} or
 @code{makeinfo}.
 
-If you have @code{makeinfo} installed, and are in the top level GDB
-source directory (@file{gdb-@value{GDBVN}}, in the case of version @value{GDBVN}), you can
-make the Info file by typing:
+If you have @code{makeinfo} installed, and are in the top level
+@value{GDBN} source directory (@file{gdb-@value{GDBVN}}, in the case of
+version @value{GDBVN}), you can make the Info file by typing:
 
 @example
 cd gdb
@@ -8504,7 +12173,7 @@ require a file name without any extension or a @samp{.dvi} extension.
 
 @TeX{} also requires a macro definitions file called
 @file{texinfo.tex}.  This file tells @TeX{} how to typeset a document
-written in Texinfo format.  On its own, @TeX{} cannot read, much less
+written in Texinfo format.  On its own, @TeX{} cannot either read or
 typeset a Texinfo file.  @file{texinfo.tex} is distributed with GDB
 and is located in the @file{gdb-@var{version-number}/texinfo}
 directory.
@@ -8512,46 +12181,48 @@ directory.
 If you have @TeX{} and a @sc{dvi} printer program installed, you can
 typeset and print this manual.  First switch to the the @file{gdb}
 subdirectory of the main source directory (for example, to
-@file{gdb-@value{GDBVN}/gdb}) and then type:
+@file{gdb-@value{GDBVN}/gdb}) and type:
 
 @example
 make gdb.dvi
 @end example
 
+Then give @file{gdb.dvi} to your @sc{dvi} printing program.
+
 @node Installing GDB
-@appendix Installing GDB
-@cindex configuring GDB
+@appendix Installing @value{GDBN}
+@cindex configuring @value{GDBN}
 @cindex installation
 
-GDB comes with a @code{configure} script that automates the process
-of preparing GDB for installation; you can then use @code{make} to
+@value{GDBN} comes with a @code{configure} script that automates the process
+of preparing @value{GDBN} for installation; you can then use @code{make} to
 build the @code{gdb} program.
 @iftex
 @c irrelevant in info file; it's as current as the code it lives with.
-@footnote{If you have a more recent version of GDB than @value{GDBVN},
+@footnote{If you have a more recent version of @value{GDBN} than @value{GDBVN},
 look at the @file{README} file in the sources; we may have improved the
 installation procedures since publishing this manual.}
 @end iftex
 
-The GDB distribution includes all the source code you need for GDB in
-a single directory, whose name is usually composed by appending the
-version number to @samp{gdb}.
+The @value{GDBN} distribution includes all the source code you need for 
+@value{GDBN} in a single directory, whose name is usually composed by 
+appending the version number to @samp{gdb}.
 
-For example, the GDB version @value{GDBVN} distribution is in the
+For example, the @value{GDBN} version @value{GDBVN} distribution is in the
 @file{gdb-@value{GDBVN}} directory.  That directory contains:
 
 @table @code
 @item gdb-@value{GDBVN}/configure @r{(and supporting files)}
-script for configuring GDB and all its supporting libraries.
+script for configuring @value{GDBN} and all its supporting libraries
 
 @item gdb-@value{GDBVN}/gdb
-the source specific to GDB itself
+the source specific to @value{GDBN} itself
 
 @item gdb-@value{GDBVN}/bfd
 source for the Binary File Descriptor library
 
 @item gdb-@value{GDBVN}/include
-GNU include files
+@sc{gnu} include files
 
 @item gdb-@value{GDBVN}/libiberty
 source for the @samp{-liberty} free software library
@@ -8560,22 +12231,22 @@ source for the @samp{-liberty} free software library
 source for the library of opcode tables and disassemblers
 
 @item gdb-@value{GDBVN}/readline
-source for the GNU command-line interface
+source for the @sc{gnu} command-line interface
 
 @item gdb-@value{GDBVN}/glob
-source for the GNU filename pattern-matching subroutine
+source for the @sc{gnu} filename pattern-matching subroutine
 
 @item gdb-@value{GDBVN}/mmalloc
-source for the GNU memory-mapped malloc package
+source for the @sc{gnu} memory-mapped malloc package
 @end table
 
-The simplest way to configure and build GDB is to run @code{configure}
+The simplest way to configure and build @value{GDBN} is to run @code{configure}
 from the @file{gdb-@var{version-number}} source directory, which in
 this example is the @file{gdb-@value{GDBVN}} directory.
 
 First switch to the @file{gdb-@var{version-number}} source directory
 if you are not already in it; then run @code{configure}.  Pass the
-identifier for the platform on which GDB will run as an
+identifier for the platform on which @value{GDBN} will run as an
 argument.
 
 For example:
@@ -8588,7 +12259,7 @@ make
 
 @noindent
 where @var{host} is an identifier such as @samp{sun4} or
-@samp{decstation}, that identifies the platform where GDB will run.
+@samp{decstation}, that identifies the platform where @value{GDBN} will run.
 (You can often leave off @var{host}; @code{configure} tries to guess the
 correct value by examining your system.)
 
@@ -8597,6 +12268,7 @@ Running @samp{configure @var{host}} and then running @code{make} builds the
 libraries, then @code{gdb} itself.  The configured source files, and the
 binaries, are left in the corresponding source directories.
 
+@need 750
 @code{configure} is a Bourne-shell (@code{/bin/sh}) script; if your
 system does not recognize this automatically when you run a different
 shell, you may need to run @code{sh} on it explicitly:
@@ -8612,7 +12284,7 @@ creates configuration files for every directory level underneath (unless
 you tell it not to, with the @samp{--norecursion} option).
 
 You can run the @code{configure} script from any of the
-subordinate directories in the GDB distribution if you only want to
+subordinate directories in the @value{GDBN} distribution if you only want to
 configure that subdirectory, but be sure to specify a path to it.
 
 For example, with version @value{GDBVN}, type the following to configure only
@@ -8628,24 +12300,24 @@ cd gdb-@value{GDBVN}/bfd
 You can install @code{@value{GDBP}} anywhere; it has no hardwired paths.
 However, you should make sure that the shell on your path (named by
 the @samp{SHELL} environment variable) is publicly readable.  Remember
-that GDB uses the shell to start your program---some systems refuse to
-let GDB debug child processes whose programs are not readable.
+that @value{GDBN} uses the shell to start your program---some systems refuse to
+let @value{GDBN} debug child processes whose programs are not readable.
 
 @menu
-* Separate Objdir::             Compiling GDB in another directory
+* Separate Objdir::             Compiling @value{GDBN} in another directory
 * Config Names::                Specifying names for hosts and targets
-* configure Options::           Summary of options for configure
+* Configure Options::           Summary of options for configure
 @end menu
 
 @node Separate Objdir
-@section Compiling GDB in another directory
+@section Compiling @value{GDBN} in another directory
 
-If you want to run GDB versions for several host or target machines,
+If you want to run @value{GDBN} versions for several host or target machines,
 you need a different @code{gdb} compiled for each combination of
 host and target.  @code{configure} is designed to make this easy by
 allowing you to generate each configuration in a separate subdirectory,
 rather than in the source directory.  If your @code{make} program
-handles the @samp{VPATH} feature (GNU @code{make} does), running
+handles the @samp{VPATH} feature (@sc{gnu} @code{make} does), running
 @code{make} in each of these directories builds the @code{gdb}
 program specified there.
 
@@ -8654,10 +12326,10 @@ with the @samp{--srcdir} option to specify where to find the source.
 (You also need to specify a path to find @code{configure}
 itself from your working directory.  If the path to @code{configure}
 would be the same as the argument to @samp{--srcdir}, you can leave out
-the @samp{--srcdir} option; it will be assumed.)
+the @samp{--srcdir} option; it is assumed.)
 
-For example, with version @value{GDBVN}, you can build GDB in a separate
-directory for a Sun 4 like this:
+For example, with version @value{GDBVN}, you can build @value{GDBN} in a 
+separate directory for a Sun 4 like this:
 
 @example
 @group
@@ -8673,13 +12345,14 @@ When @code{configure} builds a configuration using a remote source
 directory, it creates a tree for the binaries with the same structure
 (and using the same names) as the tree under the source directory.  In
 the example, you'd find the Sun 4 library @file{libiberty.a} in the
-directory @file{gdb-sun4/libiberty}, and GDB itself in
+directory @file{gdb-sun4/libiberty}, and @value{GDBN} itself in
 @file{gdb-sun4/gdb}.
 
-One popular reason to build several GDB configurations in separate
-directories is to configure GDB for cross-compiling (where GDB
-runs on one machine---the host---while debugging programs that run on
-another machine---the target).  You specify a cross-debugging target by
+One popular reason to build several @value{GDBN} configurations in separate
+directories is to configure @value{GDBN} for cross-compiling (where 
+@value{GDBN} runs on one machine---the @dfn{host}---while debugging 
+programs that run on another machine---the @dfn{target}).  
+You specify a cross-debugging target by
 giving the @samp{--target=@var{target}} option to @code{configure}.
 
 When you run @code{make} to build a program or library, you must run
@@ -8689,7 +12362,7 @@ called @code{configure} (or one of its subdirectories).
 The @code{Makefile} that @code{configure} generates in each source
 directory also runs recursively.  If you type @code{make} in a source
 directory such as @file{gdb-@value{GDBVN}} (or in a separate configured
-directory configured with @samp{--srcdir=@var{path}/gdb-@value{GDBVN}}), you
+directory configured with @samp{--srcdir=@var{dirname}/gdb-@value{GDBVN}}), you
 will build all the required libraries, and then build GDB.
 
 When you have multiple hosts or targets configured in separate
@@ -8713,7 +12386,7 @@ For example, you can use the alias @code{sun4} as a @var{host} argument,
 or as the value for @var{target} in a @code{--target=@var{target}}
 option.  The equivalent full name is @samp{sparc-sun-sunos4}.
 
-The @code{configure} script accompanying GDB does not provide
+The @code{configure} script accompanying @value{GDBN} does not provide
 any query facility to list all supported host and target names or
 aliases.  @code{configure} calls the Bourne shell script
 @code{config.sub} to map abbreviations to full names; you can read the
@@ -8721,40 +12394,40 @@ script, if you wish, or you can use it to test your guesses on
 abbreviations---for example:
 
 @smallexample
+% sh config.sub i386-linux
+i386-pc-linux-gnu
+% sh config.sub alpha-linux
+alpha-unknown-linux-gnu
+% sh config.sub hp9k700
+hppa1.1-hp-hpux
 % sh config.sub sun4
 sparc-sun-sunos4.1.1
 % sh config.sub sun3
 m68k-sun-sunos4.1.1
-% sh config.sub decstation
-mips-dec-ultrix4.2
-% sh config.sub hp300bsd
-m68k-hp-bsd
-% sh config.sub i386v
-i386-unknown-sysv
-% sh config.sub i786v
-Invalid configuration `i786v': machine `i786v' not recognized
+% sh config.sub i986v
+Invalid configuration `i986v': machine `i986v' not recognized
 @end smallexample
 
 @noindent
-@code{config.sub} is also distributed in the GDB source
+@code{config.sub} is also distributed in the @value{GDBN} source
 directory (@file{gdb-@value{GDBVN}}, for version @value{GDBVN}).
 
-@node configure Options
+@node Configure Options
 @section @code{configure} options
 
 Here is a summary of the @code{configure} options and arguments that
 are most often useful for building @value{GDBN}.  @code{configure} also has
 several other options not listed here.  @inforef{What Configure
 Does,,configure.info}, for a full explanation of @code{configure}.
-@c FIXME: Would this be more, or less, useful as an xref (ref to printed
-@c manual in the printed manual, ref to info file only from the info file)?
 
 @example
 configure @r{[}--help@r{]}
           @r{[}--prefix=@var{dir}@r{]}
-          @r{[}--srcdir=@var{path}@r{]}
+          @r{[}--exec-prefix=@var{dir}@r{]}
+          @r{[}--srcdir=@var{dirname}@r{]}
           @r{[}--norecursion@r{]} @r{[}--rm@r{]}
-          @r{[}--target=@var{target}@r{]} @var{host}
+          @r{[}--target=@var{target}@r{]}
+          @var{host}
 @end example
 
 @noindent
@@ -8766,55 +12439,48 @@ You may introduce options with a single @samp{-} rather than
 @item --help
 Display a quick summary of how to invoke @code{configure}.
 
-@item -prefix=@var{dir}
+@item --prefix=@var{dir}
 Configure the source to install programs and files under directory
 @file{@var{dir}}.
 
-@item --srcdir=@var{path}
-@strong{Warning: using this option requires GNU @code{make}, or another
+@item --exec-prefix=@var{dir}
+Configure the source to install programs under directory
+@file{@var{dir}}.
+
+@c avoid splitting the warning from the explanation:
+@need 2000
+@item --srcdir=@var{dirname}
+@strong{Warning: using this option requires @sc{gnu} @code{make}, or another
 @code{make} that implements the @code{VPATH} feature.}@*
 Use this option to make configurations in directories separate from the
-GDB source directories.  Among other things, you can use this to
+@value{GDBN} source directories.  Among other things, you can use this to
 build (or maintain) several configurations simultaneously, in separate
 directories.  @code{configure} writes configuration specific files in
 the current directory, but arranges for them to use the source in the
-directory @var{path}.  @code{configure} will create directories under
+directory @var{dirname}.  @code{configure} creates directories under
 the working directory in parallel to the source directories below
-@var{path}.
+@var{dirname}.
 
 @item --norecursion
 Configure only the directory level where @code{configure} is executed; do not
 propagate configuration to subdirectories.
 
-@item --rm
-@emph{Remove} files otherwise built during configuration.
-
-@c This does not work (yet if ever).  FIXME.
-@c @item --parse=@var{lang} @dots{}
-@c Configure the GDB expression parser to parse the listed languages.
-@c @samp{all} configures GDB for all supported languages.  To get a
-@c list of all supported languages, omit the argument.  Without this
-@c option, GDB is configured to parse all supported languages.
-
 @item --target=@var{target}
-Configure GDB for cross-debugging programs running on the specified
-@var{target}.  Without this option, GDB is configured to debug
-programs that run on the same machine (@var{host}) as GDB itself.
+Configure @value{GDBN} for cross-debugging programs running on the specified
+@var{target}.  Without this option, @value{GDBN} is configured to debug
+programs that run on the same machine (@var{host}) as @value{GDBN} itself.
 
 There is no convenient way to generate a list of all available targets.
 
 @item @var{host} @dots{}
-Configure GDB to run on the specified @var{host}.
+Configure @value{GDBN} to run on the specified @var{host}.
 
 There is no convenient way to generate a list of all available hosts.
 @end table
 
-@noindent
-@code{configure} accepts other options, for compatibility with
-configuring other GNU tools recursively; but these are the only
-options that affect GDB or its supporting libraries.
-@end ifclear
-
+There are many other options available as well, but they are generally
+needed for special purposes only.
 @node Index
 @unnumbered Index
 
@@ -8833,7 +12499,7 @@ options that affect GDB or its supporting libraries.
 \centerline{{\sl\fontname\tensl\/}}
 \centerline{are used for emphasis.}\vfill}
 \page\colophon
-% Blame: pesch@cygnus.com, 1991.
+% Blame: doc@cygnus.com, 1991.
 @end tex
 
 @contents