		     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++11 compiler.  If you do not have a
C++11 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-libgmp-prefix=DIR'
     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/'.

`--with-mpfr'
     Build GDB with GNU MPFR, a library for multiple-precision
     floating-point computation with correct rounding.  (Done by
     default if GNU MPFR is installed and found at configure time.)
     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 GNU MPFR is not
     available, GDB will fall back to using host floating-point
     arithmetic.  If your host does not have GNU MPFR installed, you
     can get the latest version from `https://www.mpfr.org/'.

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

`--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 prefered
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:
