		     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 description") 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]
	       [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.

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

`HOST ...'
     Same as `--host=HOST'.  If you omit this, GDB will guess; it's
     quite accurate.

`--target=TARGET'
     Configure GDB for cross-debugging programs running on the specified
     TARGET.  Without this option, GDB is configured to debug programs
     that run on the same machine (HOST) as GDB itself.

     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.  The special value `all' configures
     GDB for debugging programs running on any target it supports.

`--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).

`--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.2.  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
=================

   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:
