		     README for GDB release

This is GDB, the GNU source-level debugger.

A summary of new features is in the file `gdb/NEWS'.

Check the GDB home page at http://www.gnu.org/software/gdb/ for up to
date release information, mailing list links and archives, etc.

GDB's bug tracking data base can be found at
http://www.gnu.org/software/gdb/bugs/

Unpacking and Installation -- quick overview
==========================

   The release is provided as a gzipped tar file called
'gdb-VERSION.tar.gz', where VERSION is the version of GDB.

   The GDB debugger sources, the generic GNU include
files, the BFD ("Binary File Descriptor") library, the readline
library, and other libraries all have directories of their own
underneath the gdb-VERSION directory.  The idea is that a variety of GNU
tools can share a common copy of these things.  Be aware of variation
over time--for example don't try to build GDB with a copy of bfd from
a release other than the GDB release (such as a binutils release),
especially if the releases are more than a few weeks apart.
Configuration scripts and makefiles exist to cruise up and down this
directory tree and automatically build all the pieces in the right
order.

   When you unpack the gdb-VERSION.tar.gz file, it will create a
source directory called `gdb-VERSION'.

You can build GDB right in the source directory:

      cd gdb-VERSION
      ./configure --prefix=/usr/local   (or wherever you want)
      make all install

However, we recommend that an empty directory be used instead.
This way you do not clutter your source tree with binary files
and will be able to create different builds with different
configuration options.

You can build GDB in any empty build directory:

      mkdir build
      cd build
      <full path to your sources>/gdb-VERSION/configure [etc...]
      make all install

(Building GDB with DJGPP tools for MS-DOS/MS-Windows is slightly
different; see the file gdb-VERSION/gdb/config/djgpp/README for details.)

   This will configure and build all the libraries as well as GDB.  If
`configure' can't determine your system type, specify one as its
argument, e.g., `./configure sun4' or `./configure decstation'.

   Make sure that your 'configure' line ends in 'gdb-VERSION/configure':

      /berman/migchain/source/gdb-VERSION/configure      # RIGHT
      /berman/migchain/source/gdb-VERSION/gdb/configure  # WRONG

   The GDB package contains several subdirectories, such as 'gdb',
'bfd', and 'readline'.  If your 'configure' line ends in
'gdb-VERSION/gdb/configure', then you are configuring only the gdb
subdirectory, not the whole GDB package.  This leads to build errors
such as:

      make: *** No rule to make target `../bfd/bfd.h', needed by `gdb.o'.  Stop.

   If you get other compiler errors during this stage, see the `Reporting
Bugs' section below; there are a few known problems.

   GDB's `configure' script has many options to enable or disable
different features or dependencies.  These options are not generally
known to the top-level `configure', so if you want to see a complete
list of options, invoke the subdirectory `configure', like:

      /berman/migchain/source/gdb-VERSION/gdb/configure --help

   (Take note of how this differs from the invocation used to actually
configure the build tree.)

   GDB requires a C++17 compiler.  If you do not have a
C++17 compiler for your system, you may be able to download and install
the GNU CC compiler.  It is available via anonymous FTP from the
directory `ftp://ftp.gnu.org/pub/gnu/gcc'.  GDB also requires an ISO
C standard library.  The GDB remote server, GDBserver, builds with some
non-ISO standard libraries - e.g. for Windows CE.

   GDB can optionally be built against various external libraries.
These dependencies are described below in the "`configure options"
section of this README.

   GDB can be used as a cross-debugger, running on a machine of one
type while debugging a program running on a machine of another type.
See below.


More Documentation
******************

   All the documentation for GDB 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 `texi2roff') to typeset the printed version.

   GDB includes an already formatted copy of the on-line Info version
of this manual in the `gdb/doc' subdirectory.  The main Info file is
`gdb-VERSION/gdb/doc/gdb.info', and it refers to subordinate files
matching `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 `info' subsystem in GNU Emacs or the
standalone `info' program, available as part of the GNU Texinfo
distribution.

   If you want to format these Info files yourself, you need one of the
Info formatting programs, such as `texinfo-format-buffer' or
`makeinfo'.

   If you have `makeinfo' installed, and are in the top level GDB
source directory (`gdb-VERSION'), you can make the Info file by
typing:

      cd gdb/doc
      make info

   If you want to typeset and print copies of this manual, you need
TeX, a program to print its DVI output files, and `texinfo.tex', the
Texinfo definitions file.  This file is included in the GDB
distribution, in the directory `gdb-VERSION/texinfo'.

   TeX is a typesetting program; it does not print files directly, but
produces output files called DVI files.  To print a typeset document,
you need a program to print DVI files.  If your system has TeX
installed, chances are it has such a program.  The precise command to
use depends on your system; `lpr -d' is common; another (for PostScript
devices) is `dvips'.  The DVI print command may require a file name
without any extension or a `.dvi' extension.

   TeX also requires a macro definitions file called `texinfo.tex'.
This file tells TeX how to typeset a document written in Texinfo
format.  On its own, TeX cannot read, much less typeset a Texinfo file.
 `texinfo.tex' is distributed with GDB and is located in the
`gdb-VERSION/texinfo' directory.

   If you have TeX and a DVI printer program installed, you can typeset
and print this manual.  First switch to the `gdb' subdirectory of
the main source directory (for example, to `gdb-VERSION/gdb') and then type:

      make doc/gdb.dvi

   If you prefer to have the manual in PDF format, type this from the
`gdb/doc' subdirectory of the main source directory:

      make gdb.pdf

For this to work, you will need the PDFTeX package to be installed.


Installing GDB
**************

   GDB comes with a `configure' script that automates the process of
preparing GDB for installation; you can then use `make' to build the
`gdb' program.

   The GDB distribution includes all the source code you need for GDB in
a single directory.  That directory contains:

`gdb-VERSION/{COPYING,COPYING.LIB}'
     Standard GNU license files.  Please read them.

`gdb-VERSION/bfd'
     source for the Binary File Descriptor library

`gdb-VERSION/config*'
     script for configuring GDB, along with other support files

`gdb-VERSION/gdb'
     the source specific to GDB itself

`gdb-VERSION/include'
     GNU include files

`gdb-VERSION/libiberty'
     source for the `-liberty' free software library

`gdb-VERSION/opcodes'
     source for the library of opcode tables and disassemblers

`gdb-VERSION/readline'
     source for the GNU command-line interface
     NOTE:  The readline library is compiled for use by GDB, but will
     not be installed on your system when "make install" is issued.

`gdb-VERSION/sim'
     source for some simulators (ARM, D10V, SPARC, M32R, MIPS, PPC, V850, etc)

`gdb-VERSION/texinfo'
     The `texinfo.tex' file, which you need in order to make a printed
     manual using TeX.

`gdb-VERSION/etc'
     Coding standards, useful files for editing GDB, and other
     miscellanea.

   Note: the following instructions are for building GDB on Unix or
Unix-like systems.  Instructions for building with DJGPP for
MS-DOS/MS-Windows are in the file gdb/config/djgpp/README.

   The simplest way to configure and build GDB is to run `configure'
from the `gdb-VERSION' directory.

   First switch to the `gdb-VERSION' source directory if you are
not already in it; then run `configure'.

   For example:

      cd gdb-VERSION
      ./configure
      make

   Running `configure' followed by `make' builds the `bfd',
`readline', `mmalloc', and `libiberty' libraries, then `gdb' itself.
The configured source files, and the binaries, are left in the
corresponding source directories.

   `configure' is a Bourne-shell (`/bin/sh') script; if your system
does not recognize this automatically when you run a different shell,
you may need to run `sh' on it explicitly:

      sh configure

   If you run `configure' from a directory that contains source
directories for multiple libraries or programs, `configure' creates
configuration files for every directory level underneath (unless
you tell it not to, with the `--norecursion' option).

   You can install `gdb' anywhere; it has no hardwired paths. However,
you should make sure that the shell on your path (named by the `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.


Compiling GDB in another directory
==================================

   If you want to run GDB versions for several host or target machines,
you need a different `gdb' compiled for each combination of host and
target.  `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 `make' program handles the `VPATH'
feature correctly (GNU `make' and SunOS 'make' are two that should),
running `make' in each of these directories builds the `gdb' program
specified there.

   To build `gdb' in a separate directory, run `configure' with the
`--srcdir' option to specify where to find the source. (You also need
to specify a path to find `configure' itself from your working
directory.  If the path to `configure' would be the same as the
argument to `--srcdir', you can leave out the `--srcdir' option; it
will be assumed.)

   For example, you can build GDB in a separate
directory for a Sun 4 like this:

     cd gdb-VERSION
     mkdir ../gdb-sun4
     cd ../gdb-sun4
     ../gdb-VERSION/configure
     make

   When `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 `libiberty.a' in the
directory `gdb-sun4/libiberty', and GDB itself in `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 giving
the `--target=TARGET' option to `configure'.

   When you run `make' to build a program or library, you must run it
in a configured directory--whatever directory you were in when you
called `configure' (or one of its subdirectories).

   The `Makefile' that `configure' generates in each source directory
also runs recursively.  If you type `make' in a source directory such
as `gdb-VERSION' (or in a separate configured directory configured with
`--srcdir=PATH/gdb-VERSION'), you will build all the required libraries,
and then build GDB.

   When you have multiple hosts or targets configured in separate
directories, you can run `make' on them in parallel (for example, if
they are NFS-mounted on each of the hosts); they will not interfere
with each other.


Specifying names for hosts and targets
======================================

   The specifications used for hosts and targets in the `configure'
script are based on a three-part naming scheme, but some short
predefined aliases are also supported.  The full naming scheme encodes
three pieces of information in the following pattern:

     ARCHITECTURE-VENDOR-OS

   For example, you can use the alias `sun4' as a HOST argument or in a
`--target=TARGET' option.  The equivalent full name is
`sparc-sun-sunos4'.

   The `configure' script accompanying GDB does not provide any query
facility to list all supported host and target names or aliases.
`configure' calls the Bourne shell script `config.sub' to map
abbreviations to full names; you can read the script, if you wish, or
you can use it to test your guesses on abbreviations--for example:

     % 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-pc-sysv
     % sh config.sub i786v
     Invalid configuration `i786v': machine `i786v' not recognized

`config.sub' is also distributed in the GDB source directory.


`configure' options
===================

   Here is a summary of the `configure' options and arguments that are
most often useful for building GDB.  `configure' also has several other
options not listed here.  There are many options to gdb's `configure'
script, some of which are only useful in special situation.
*note : (autoconf.info)Running configure scripts, for a full
explanation of `configure'.

     configure [--help]
               [--prefix=DIR]
               [--srcdir=PATH]
               [--target=TARGET]
	       [--host=HOST]

You may introduce options with a single `-' rather than `--' if you
prefer; but you may abbreviate option names if you use `--'.  Some
more obscure GDB `configure' options are not listed here.

`--help'
     Display a quick summary of how to invoke `configure'.

`-prefix=DIR'
     Configure the source to install programs and files under directory
     `DIR'.

`--srcdir=PATH'
     *Warning: using this option requires GNU `make', or another `make'
     that compatibly implements the `VPATH' feature.*
     Use this option to make configurations in directories separate
     from the GDB source directories.  Among other things, you can use
     this to build (or maintain) several configurations simultaneously,
     in separate directories.  `configure' writes configuration
     specific files in the current directory, but arranges for them to
     use the source in the directory PATH.  `configure' will create
     directories under the working directory in parallel to the source
     directories below PATH.

`--host=HOST'
     Configure GDB to run on the specified HOST.  If you omit this,
     GDB will guess; it's quite accurate.

     The guess is done by running the `config.guess' script, which can
     be found in the root of the binutils-gdb source tree.

     There is no convenient way to generate a list of all available
     hosts.

`--target=TARGET'
     Configure GDB for cross-debugging programs running on the
     specified TARGET.  One way in which GDB supports cross-debugging
     is through the 'target remote' and 'target extended-remote'
     commands for remote debugging.  See the 'Remote debugging'
     section below.

     If this option is not specified, the default is the value of
     HOST, see `--host' above.

     When TARGET matches HOST, GDB will be configured with support for
     native debugging of programs running on the same machine as GDB.

     When TARGET and HOST are different, GDB will only include support
     for cross-debugging programs running on TARGET.

     There is no convenient way to generate a list of all available
     targets.

`--enable-targets=TARGET,TARGET,...'
`--enable-targets=all`
     Configure GDB for cross-debugging programs running on the
     specified list of targets in addition to the target specified
     with `--target' (see above).  The special value `all' configures
     GDB for debugging programs running on any target it supports.

     There is no convenient way to generate a list of all available
     targets.

`--enable-binary-file-formats=FORMAT,FORMAT,...'
`--enable-binary-file-formats=all'
    Configure GDB to only be be able to read selected file formats.
    The special value "all" causes all file formats to be compiled
    in, and is the the default behavior of the option.  This option
    is meant for advanced users who are sure of what they expect,
    if you are unsure which options you will need on your debugging
    sessions, we recommend that you not use this feature.  The
    accepted options are:
      * coff: Main format on Windows systems, this is required to
        compile with windows target support;
      * dbx (also known as a.out): Legacy file format, this is
        recommended if you know you will be dealing with this
        file format;
      * elf: Main format on Linux systems, this is heavily
        recommended when compiling with linux support;
      * macho: Main format on MacOS systems, this is heavily
        recommended when compiling for those targets;
      * mips (also known as ecoff): Main file format for targets
        running on MIPS CPUs, this is heavily recommended when
        supporting those targets;
      * xcoff: Main format on AIX systems, this is required to
        compile for AIX targets and rs6000 CPUs.

`--with-gdb-datadir=PATH'
     Set the GDB-specific data directory.  GDB will look here for
     certain supporting files or scripts.  This defaults to the `gdb'
     subdirectory of `datadir' (which can be set using `--datadir').

`--with-relocated-sources=DIR'
     Sets up the default source path substitution rule so that
     directory names recorded in debug information will be
     automatically adjusted for any directory under DIR.  DIR should
     be a subdirectory of GDB's configured prefix, the one mentioned
     in the `--prefix' or `--exec-prefix' options to configure.  This
     option is useful if GDB is supposed to be moved to a different
     place after it is built.

`--enable-64-bit-bfd'
     Enable 64-bit support in BFD on 32-bit hosts.

`--disable-gdbmi'
     Build GDB without the GDB/MI machine interface.

`--enable-tui'
     Build GDB with the text-mode full-screen user interface (TUI).
     Requires a curses library (ncurses and cursesX are also
     supported).

`--disable-gdb-compile'
    Build GDB without support for the 'compile' command. DWARF support
    is required for this feature.

`--disable-gdb-dwarf-support'
    Build GDB without support for reading DWARF debug information.

`--disable-gdb-mdebug-support'
    Build GDB without support for reading mdebug debug information.

`--with-curses'
     Use the curses library instead of the termcap library, for
     text-mode terminal operations.

`--with-debuginfod'
     Build GDB with libdebuginfod, the debuginfod client library.  Used
     to automatically fetch source files and separate debug files from
     debuginfod servers using the associated executable's build ID.
     Enabled by default if libdebuginfod is installed and found at
     configure time.  debuginfod is packaged with elfutils, starting
     with version 0.178.  You can get the latest version from
     'https://sourceware.org/elfutils/'.

`--with-libunwind-ia64'
     Use the libunwind library for unwinding function call stack on ia64
     target platforms.
     See http://www.nongnu.org/libunwind/index.html for details.

`--with-system-readline'
     Use the readline library installed on the host, rather than the
     library supplied as part of GDB.  Readline 7 or newer is required;
     this is enforced by the build system.

`--with-system-zlib'
     Use the zlib library installed on the host, rather than the
     library supplied as part of GDB.

`--with-expat'
     Build GDB with Expat, a library for XML parsing.  (Done by
     default if libexpat is installed and found at configure time.)
     This library is used to read XML files supplied with GDB.  If it
     is unavailable, some features, such as remote protocol memory
     maps, target descriptions, and shared library lists, that are
     based on XML files, will not be available in GDB.  If your host
     does not have libexpat installed, you can get the latest version
     from `http://expat.sourceforge.net'.

`--with-libiconv-prefix[=DIR]'
     Build GDB with GNU libiconv, a character set encoding conversion
     library.  This is not done by default, as on GNU systems the
     `iconv' that is built in to the C library is sufficient.  If your
     host does not have a working `iconv', you can get the latest
     version of GNU iconv from `https://www.gnu.org/software/libiconv/'.

     GDB's build system also supports building GNU libiconv as part of
     the overall build.  See the GDB manual instructions on how to do
     this.

`--with-lzma'
     Build GDB with LZMA, a compression library.  (Done by default if
     liblzma is installed and found at configure time.)  LZMA is used
     by GDB's "mini debuginfo" feature, which is only useful on
     platforms using the ELF object file format.  If your host does
     not have liblzma installed, you can get the latest version from
     `https://tukaani.org/xz/'.

`--with-gmp=DIR'
`--with-gmp-lib=LIBDIR'
`--with-gmp-include=INCDIR'
     Build GDB using the GMP library installed at the directory DIR.
     If your host does not have GMP installed, you can get the latest
     version at `https://gmplib.org/'.
     The `--with-gmp=gmpinstalldir` option is shorthand for
     `--with-gmp-lib=gmpinstalldir/lib` and
     `--with-gmp-include=gmpinstalldir/include`.

`--with-mpfr=DIR'
`--with-mpfr-lib=LIBDIR'
`--with-mpfr-include=INCDIR'
     Build GDB using GNU MPFR installed at the directory DIR,
     a library for multiple-precision floating-point computation
     with correct rounding.
     This library is used to emulate target floating-point arithmetic
     during expression evaluation when the target uses different
     floating-point formats than the host.
     If your host does not have GNU MPFR installed, you
     can get the latest version from `https://www.mpfr.org/'.

     The `--with-mpfr=mpfrinstalldir` option is shorthand for
     `--with-mpfr-lib=mpfrinstalldir/lib` and
     `--with-mpfr-include=mpfrinstalldir/include`.

`--with-python[=PYTHON]'
     Build GDB with Python scripting support.  (Done by default if
     libpython is present and found at configure time.)  Python makes
     GDB scripting much more powerful than the restricted CLI
     scripting language.  If your host does not have Python installed,
     you can find it on `http://www.python.org/download/'.  The oldest
     version of Python supported by GDB is 3.4.  The optional argument
     PYTHON is used to find the Python headers and libraries.  It can
     be either the name of a Python executable, or the name of the
     directory in which Python is installed.

`--with-guile[=GUILE]'
     Build GDB with GNU Guile scripting support.  (Done by default if
     libguile is present and found at configure time.)  If your host
     does not have Guile installed, you can find it at
     `https://www.gnu.org/software/guile/'.  The optional argument
     GUILE can be a version number, which will cause `configure' to
     try to use that version of Guile; or the file name of a
     `pkg-config' executable, which will be queried to find the
     information needed to compile and link against Guile.

`--enable-source-highlight'
     When printing source code, use source highlighting.  This requires
     libsource-highlight to be installed and is enabled by default
     if the library is found.

`--with-xxhash'
     Use libxxhash for hashing.  This has no user-visible effect but
     speeds up various GDB operations such as symbol loading.  Enabled
     by default if libxxhash is found.

`--with-amd-dbgapi=[auto,yes,no]'
     Whether to use the amd-dbgapi library to support local debugging of
     AMD GCN architecture GPUs.

     When explicitly requesting support for an AMD GCN architecture through
     `--enable-targets' or `--target', there is no need to use
     `--with-amd-dbgapi': `configure' will automatically look for the
     amd-dbgapi library and fail if not found.

     When using --enable-targets=all, support for the AMD GCN architecture will
     only be included if the amd-dbgapi is found.  `--with-amd-dbgapi=yes' can
     be used to make it a failure if the amd-dbgapi library is not found.
     `--with-amd-dbgapi=no' can be used to prevent looking for the amd-dbgapi
     library altogether.

`--without-included-regex'
     Don't use the regex library included with GDB (as part of the
     libiberty library).  This is the default on hosts with version 2
     of the GNU C library.

`--with-sysroot=DIR'
     Use DIR as the default system root directory for libraries whose
     file names begin with `/lib' or `/usr/lib'.  (The value of DIR
     can be modified at run time by using the "set sysroot" command.)
     If DIR is under the GDB configured prefix (set with `--prefix' or
     `--exec-prefix' options), the default system root will be
     automatically adjusted if and when GDB is moved to a different
     location.

`--with-system-gdbinit=FILE'
     Configure GDB to automatically load a system-wide init file.
     FILE should be an absolute file name.  If FILE is in a directory
     under the configured prefix, and GDB is moved to another location
     after being built, the location of the system-wide init file will
     be adjusted accordingly.

`--with-system-gdbinit-dir=DIR'
     Configure GDB to automatically load system-wide init files from
     a directory. Files with extensions `.gdb', `.py' (if Python
     support is enabled) and `.scm' (if Guile support is enabled) are
     supported.  DIR should be an absolute directory name.  If DIR is
     in a directory under the configured prefix, and GDB is moved to
     another location after being built, the location of the system-
     wide init directory will be adjusted accordingly.

`--enable-build-warnings'
     When building the GDB sources, ask the compiler to warn about any
     code which looks even vaguely suspicious.  It passes many
     different warning flags, depending on the exact version of the
     compiler you are using.

`--enable-werror'
     Treat compiler warnings as werrors.  It adds the -Werror flag to
     the compiler, which will fail the compilation if the compiler
     outputs any warning messages.

`--enable-ubsan'
     Enable the GCC undefined behavior sanitizer.  By default this is
     disabled in GDB releases, but enabled when building from git.
     The undefined behavior sanitizer checks for C++ undefined
     behavior.  It has a performance cost, so if you are looking at
     GDB's performance, you should disable it.

`--enable-unit-tests[=yes|no]'
     Enable (i.e., include) support for unit tests when compiling GDB
     and GDBServer.  Note that if this option is not passed, GDB will
     have selftests if it is a development build, and will *not* have
     selftests if it is a non-development build.

`configure' accepts other options, for compatibility with configuring
other GNU tools recursively.


Remote debugging
=================

   Remote debugging is when GDB runs on one machine type (see `--host'
above), while debugging applications running on a possibly different
machine using the 'target remote' or 'target extended-remote'
commands.  The `--target' and `--enable-targets' configure options
control which targets GDB can debug.  Remote debugging is one way in
which GDB can support cross-debugging.  GDB runs on a machine of type
HOST (see `--host' configure option) but can remote debug a machine of
type TARGET (see `--target' and `--enable-targets' configure options).

   The files m68k-stub.c, i386-stub.c, and sparc-stub.c are examples
of remote stubs to be used with remote.c.  They are designed to run
standalone on an m68k, i386, or SPARC cpu and communicate properly
with the remote.c stub over a serial line.

   The directory gdbserver/ contains `gdbserver', a program that
allows remote debugging for Unix applications.  GDBserver is only
supported for some native configurations.

   The file gdbserver/README includes further notes on GDBserver; in
particular, it explains how to build GDBserver for cross-debugging
(where GDBserver runs on the target machine, which is of a different
architecture than the host machine running GDB).


Reporting Bugs in GDB
=====================

   There are several ways of reporting bugs in GDB.  The preferred
method is to use the World Wide Web:

      http://www.gnu.org/software/gdb/bugs/

As an alternative, the bug report can be submitted, via e-mail, to the
address "bug-gdb@gnu.org".

   When submitting a bug, please include the GDB version number, and
how you configured it (e.g., "sun4" or "mach386 host,
i586-intel-synopsys target").  Since GDB supports so many
different configurations, it is important that you be precise about
this.  The simplest way to do this is to include the output from these
commands:

      % gdb --version
      % gdb --config

   For more information on how/whether to report bugs, see the
Reporting Bugs chapter of the GDB manual (gdb/doc/gdb.texinfo).


Graphical interface to GDB -- X Windows, MS Windows
==========================

   Several graphical interfaces to GDB are available.  You should
check:

	https://sourceware.org/gdb/wiki/GDB%20Front%20Ends

for an up-to-date list.

   Emacs users will very likely enjoy the Grand Unified Debugger mode;
try typing `M-x gdb RET'.


Writing Code for GDB
=====================

   There is information about writing code for GDB in the file
`CONTRIBUTE' and at the website:

	http://www.gnu.org/software/gdb/

in particular in the wiki.

   If you are pondering writing anything but a short patch, especially
take note of the information about copyrights and copyright assignment.
It can take quite a while to get all the paperwork done, so
we encourage you to start that process as soon as you decide you are
planning to work on something, or at least well ahead of when you
think you will be ready to submit the patches.


GDB Testsuite
=============

   Included with the GDB distribution is a DejaGNU based testsuite
that can either be used to test your newly built GDB, or for
regression testing a GDB with local modifications.

   Running the testsuite requires the prior installation of DejaGNU,
which is generally available via ftp.  The directory
ftp://sources.redhat.com/pub/dejagnu/ will contain a recent snapshot.
Once DejaGNU is installed, you can run the tests in one of the
following ways:

  (1)	cd gdb-VERSION
	make check-gdb

or

  (2)	cd gdb-VERSION/gdb
	make check

or

  (3)	cd gdb-VERSION/gdb/testsuite
	make site.exp	(builds the site specific file)
	runtest -tool gdb GDB=../gdb    (or GDB=<somepath> as appropriate)

When using a `make'-based method, you can use the Makefile variable
`RUNTESTFLAGS' to pass flags to `runtest', e.g.:

	make RUNTESTFLAGS=--directory=gdb.cp check

If you use GNU make, you can use its `-j' option to run the testsuite
in parallel.  This can greatly reduce the amount of time it takes for
the testsuite to run.  In this case, if you set `RUNTESTFLAGS' then,
by default, the tests will be run serially even under `-j'.  You can
override this and force a parallel run by setting the `make' variable
`FORCE_PARALLEL' to any non-empty value.  Note that the parallel `make
check' assumes that you want to run the entire testsuite, so it is not
compatible with some dejagnu options, like `--directory'.

The last method gives you slightly more control in case of problems
with building one or more test executables or if you are using the
testsuite `standalone', without it being part of the GDB source tree.

See the DejaGNU documentation for further details.


Copyright and License Notices
=============================

Most files maintained by the GDB Project contain a copyright notice
as well as a license notice, usually at the start of the file.

To reduce the length of copyright notices, consecutive years in the
copyright notice can be combined into a single range.  For instance,
the following list of copyright years...

    1986, 1988, 1989, 1991-1993, 1999, 2000, 2007, 2008, 2009, 2010, 2011

... is abbreviated into:

    1986, 1988-1989, 1991-1993, 1999-2000, 2007-2011

Every year of each range, inclusive, is a copyrightable year that
could be listed individually.


(this is for editing this file with GNU emacs)
Local Variables:
mode: text
End:
