\input texinfo       @c                    -*- Texinfo -*-
@setfilename binutils.info
@include config.texi

@ifinfo
@format
START-INFO-DIR-ENTRY
* Binutils: (binutils).         The GNU binary utilities.
* ar: (binutils)ar.               Create, modify, and extract from archives
* nm: (binutils)nm.               List symbols from object files
* objcopy: (binutils)objcopy.	  Copy and translate object files
* objdump: (binutils)objdump.     Display information from object files
* ranlib: (binutils)ranlib.       Generate index to archive contents
* readelf: (binutils)readelf.	  Display the contents of ELF format files.
* size: (binutils)size.           List section sizes and total size
* strings: (binutils)strings.     List printable strings from files
* strip: (binutils)strip.         Discard symbols
* c++filt: (binutils)c++filt.	  Filter to demangle encoded C++ symbols
* cxxfilt: (binutils)c++filt.     MS-DOS name for c++filt
* addr2line: (binutils)addr2line. Convert addresses to file and line
* nlmconv: (binutils)nlmconv.     Converts object code into an NLM
* windres: (binutils)windres.	  Manipulate Windows resources
* dlltool: (binutils)dlltool.	  Create files needed to build and use DLLs
END-INFO-DIR-ENTRY
@end format
@end ifinfo

@ifinfo
Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.

      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, with no Front-Cover Texts, and with no
      Back-Cover Texts.  A copy of the license is included in the
      section entitled "GNU Free Documentation License".

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries a copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).

@end ignore
@end ifinfo

@synindex ky cp
@c
@c This file documents the GNU binary utilities "ar", "ld", "objcopy",
@c  "objdump", "nm", "size", "strings", "strip", "readelf" and "ranlib".
@c
@c Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001 Free Software Foundation, Inc.
@c 
@c This text may be freely distributed under the terms of the GNU
@c Free Documentation License.
@c

@setchapternewpage odd
@settitle @sc{gnu} Binary Utilities
@titlepage
@finalout
@title The @sc{gnu} Binary Utilities
@subtitle Version @value{VERSION}
@sp 1
@subtitle May 1993
@author Roland H. Pesch
@author Jeffrey M. Osier
@author Cygnus Support
@page

@tex
{\parskip=0pt \hfill Cygnus Support\par \hfill
\TeX{}info \texinfoversion\par }
@end tex

@vskip 0pt plus 1filll
Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 1998, 2000, 2001 Free Software Foundation, Inc.

      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, with no Front-Cover Texts, and with no
      Back-Cover Texts.  A copy of the license is included in the
      section entitled "GNU Free Documentation License".

@end titlepage

@node Top
@top Introduction

@cindex version
This brief manual contains preliminary documentation for the @sc{gnu} binary
utilities (collectively version @value{VERSION}): 

@iftex
@table @code
@item ar
Create, modify, and extract from archives

@item nm
List symbols from object files

@item objcopy
Copy and translate object files

@item objdump
Display information from object files

@item ranlib
Generate index to archive contents

@item readelf
Display the contents of ELF format files.

@item size
List file section sizes and total size

@item strings
List printable strings from files

@item strip
Discard symbols

@item c++filt
Demangle encoded C++ symbols (on MS-DOS, this program is named
@code{cxxfilt})

@item addr2line
Convert addresses into file names and line numbers

@item nlmconv
Convert object code into a Netware Loadable Module

@item windres
Manipulate Windows resources

@item dlltool
Create the files needed to build and use Dynamic Link Libraries
@end table
@end iftex

This document is distributed under the terms of the GNU Free
Documentation License.  A copy of the license is included in the
section entitled "GNU Free Documentation License".

@menu
* ar::                          Create, modify, and extract from archives
* nm::                          List symbols from object files
* objcopy::			Copy and translate object files
* objdump::                     Display information from object files
* ranlib::                      Generate index to archive contents
* readelf::			Display the contents of ELF format files.
* size::                        List section sizes and total size
* strings::                     List printable strings from files
* strip::                       Discard symbols
* c++filt::			Filter to demangle encoded C++ symbols
* cxxfilt: c++filt.             MS-DOS name for c++filt
* addr2line::			Convert addresses to file and line
* nlmconv::                     Converts object code into an NLM
* windres::			Manipulate Windows resources
* dlltool::			Create files needed to build and use DLLs
* Selecting The Target System:: How these utilities determine the target.
* Reporting Bugs::              Reporting Bugs
* GNU Free Documentation License::  GNU Free Documentation License
* Index::                       Index
@end menu

@node ar
@chapter ar

@kindex ar
@cindex archives
@cindex collections of files
@smallexample
ar [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}]
ar -M [ <mri-script ]
@end smallexample

The @sc{gnu} @code{ar} program creates, modifies, and extracts from
archives.  An @dfn{archive} is a single file holding a collection of
other files in a structure that makes it possible to retrieve
the original individual files (called @dfn{members} of the archive).

The original files' contents, mode (permissions), timestamp, owner, and
group are preserved in the archive, and can be restored on
extraction.  

@cindex name length
@sc{gnu} @code{ar} can maintain archives whose members have names of any
length; however, depending on how @code{ar} is configured on your
system, a limit on member-name length may be imposed for compatibility
with archive formats maintained with other tools.  If it exists, the
limit is often 15 characters (typical of formats related to a.out) or 16
characters (typical of formats related to coff).

@cindex libraries
@code{ar} is considered a binary utility because archives of this sort
are most often used as @dfn{libraries} holding commonly needed
subroutines.

@cindex symbol index
@code{ar} creates an index to the symbols defined in relocatable
object modules in the archive when you specify the modifier @samp{s}.
Once created, this index is updated in the archive whenever @code{ar}
makes a change to its contents (save for the @samp{q} update operation).
An archive with such an index speeds up linking to the library, and
allows routines in the library to call each other without regard to
their placement in the archive.

You may use @samp{nm -s} or @samp{nm --print-armap} to list this index
table.  If an archive lacks the table, another form of @code{ar} called
@code{ranlib} can be used to add just the table.

@cindex compatibility, @code{ar}
@cindex @code{ar} compatibility
@sc{gnu} @code{ar} is designed to be compatible with two different
facilities.  You can control its activity using command-line options,
like the different varieties of @code{ar} on Unix systems; or, if you
specify the single command-line option @samp{-M}, you can control it
with a script supplied via standard input, like the MRI ``librarian''
program.

@menu
* ar cmdline::                  Controlling @code{ar} on the command line
* ar scripts::                  Controlling @code{ar} with a script
@end menu

@page
@node ar cmdline
@section Controlling @code{ar} on the command line

@smallexample
ar [-X32_64] [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}]
@end smallexample

@cindex Unix compatibility, @code{ar}
When you use @code{ar} in the Unix style, @code{ar} insists on at least two
arguments to execute: one keyletter specifying the @emph{operation}
(optionally accompanied by other keyletters specifying
@emph{modifiers}), and the archive name to act on.

Most operations can also accept further @var{member} arguments,
specifying particular files to operate on.

@sc{gnu} @code{ar} allows you to mix the operation code @var{p} and modifier
flags @var{mod} in any order, within the first command-line argument.

If you wish, you may begin the first command-line argument with a
dash.

@cindex operations on archive
The @var{p} keyletter specifies what operation to execute; it may be
any of the following, but you must specify only one of them:

@table @code
@item d
@cindex deleting from archive
@emph{Delete} modules from the archive.  Specify the names of modules to
be deleted as @var{member}@dots{}; the archive is untouched if you
specify no files to delete.

If you specify the @samp{v} modifier, @code{ar} lists each module
as it is deleted.

@item m
@cindex moving in archive
Use this operation to @emph{move} members in an archive.

The ordering of members in an archive can make a difference in how
programs are linked using the library, if a symbol is defined in more
than one member.  

If no modifiers are used with @code{m}, any members you name in the
@var{member} arguments are moved to the @emph{end} of the archive;
you can use the @samp{a}, @samp{b}, or @samp{i} modifiers to move them to a
specified place instead.

@item p
@cindex printing from archive
@emph{Print} the specified members of the archive, to the standard
output file.  If the @samp{v} modifier is specified, show the member
name before copying its contents to standard output.

If you specify no @var{member} arguments, all the files in the archive are
printed.

@item q
@cindex quick append to archive
@emph{Quick append}; Historically, add the files @var{member}@dots{} to the end of
@var{archive}, without checking for replacement.

The modifiers @samp{a}, @samp{b}, and @samp{i} do @emph{not} affect this
operation; new members are always placed at the end of the archive.

The modifier @samp{v} makes @code{ar} list each file as it is appended.

Since the point of this operation is speed, the archive's symbol table
index is not updated, even if it already existed; you can use @samp{ar s} or
@code{ranlib} explicitly to update the symbol table index.

However, too many different systems assume quick append rebuilds the
index, so GNU ar implements @code{q} as a synonym for @code{r}.

@item r
@cindex replacement in archive
Insert the files @var{member}@dots{} into @var{archive} (with
@emph{replacement}). This operation differs from @samp{q} in that any
previously existing members are deleted if their names match those being
added.

If one of the files named in @var{member}@dots{} does not exist, @code{ar}
displays an error message, and leaves undisturbed any existing members
of the archive matching that name.

By default, new members are added at the end of the file; but you may
use one of the modifiers @samp{a}, @samp{b}, or @samp{i} to request
placement relative to some existing member.

The modifier @samp{v} used with this operation elicits a line of
output for each file inserted, along with one of the letters @samp{a} or
@samp{r} to indicate whether the file was appended (no old member
deleted) or replaced.

@item t
@cindex contents of archive
Display a @emph{table} listing the contents of @var{archive}, or those
of the files listed in @var{member}@dots{} that are present in the
archive.  Normally only the member name is shown; if you also want to
see the modes (permissions), timestamp, owner, group, and size, you can
request that by also specifying the @samp{v} modifier.

If you do not specify a @var{member}, all files in the archive
are listed.

@cindex repeated names in archive
@cindex name duplication in archive
If there is more than one file with the same name (say, @samp{fie}) in
an archive (say @samp{b.a}), @samp{ar t b.a fie} lists only the
first instance; to see them all, you must ask for a complete
listing---in our example, @samp{ar t b.a}.
@c WRS only; per Gumby, this is implementation-dependent, and in a more
@c recent case in fact works the other way.

@item x
@cindex extract from archive
@emph{Extract} members (named @var{member}) from the archive.  You can
use the @samp{v} modifier with this operation, to request that
@code{ar} list each name as it extracts it.

If you do not specify a @var{member}, all files in the archive
are extracted.

@end table

A number of modifiers (@var{mod}) may immediately follow the @var{p}
keyletter, to specify variations on an operation's behavior:

@table @code
@item a
@cindex relative placement in archive
Add new files @emph{after} an existing member of the
archive.  If you use the modifier @samp{a}, the name of an existing archive
member must be present as the @var{relpos} argument, before the
@var{archive} specification.

@item b
Add new files @emph{before} an existing member of the
archive.  If you use the modifier @samp{b}, the name of an existing archive
member must be present as the @var{relpos} argument, before the
@var{archive} specification.  (same as @samp{i}).

@item c
@cindex creating archives
@emph{Create} the archive.  The specified @var{archive} is always
created if it did not exist, when you request an update.  But a warning is
issued unless you specify in advance that you expect to create it, by
using this modifier.

@item f
Truncate names in the archive.  @sc{gnu} @code{ar} will normally permit file
names of any length.  This will cause it to create archives which are
not compatible with the native @code{ar} program on some systems.  If
this is a concern, the @samp{f} modifier may be used to truncate file
names when putting them in the archive.

@item i
Insert new files @emph{before} an existing member of the
archive.  If you use the modifier @samp{i}, the name of an existing archive
member must be present as the @var{relpos} argument, before the
@var{archive} specification.  (same as @samp{b}).

@item l
This modifier is accepted but not used.
@c whaffor ar l modifier??? presumably compat; with
@c what???---doc@@cygnus.com, 25jan91 

@item N
Uses the @var{count} parameter.  This is used if there are multiple
entries in the archive with the same name.  Extract or delete instance
@var{count} of the given name from the archive.

@item o
@cindex dates in archive
Preserve the @emph{original} dates of members when extracting them.  If
you do not specify this modifier, files extracted from the archive
are stamped with the time of extraction.

@item P
Use the full path name when matching names in the archive.  @sc{gnu}
@code{ar} can not create an archive with a full path name (such archives
are not POSIX complaint), but other archive creators can.  This option
will cause @sc{gnu} @code{ar} to match file names using a complete path
name, which can be convenient when extracting a single file from an
archive created by another tool.

@item s
@cindex writing archive index
Write an object-file index into the archive, or update an existing one,
even if no other change is made to the archive.  You may use this modifier
flag either with any operation, or alone.  Running @samp{ar s} on an
archive is equivalent to running @samp{ranlib} on it.

@item S
@cindex not writing archive index
Do not generate an archive symbol table.  This can speed up building a
large library in several steps.  The resulting archive can not be used
with the linker.  In order to build a symbol table, you must omit the
@samp{S} modifier on the last execution of @samp{ar}, or you must run
@samp{ranlib} on the archive.

@item u
@cindex updating an archive
Normally, @samp{ar r}@dots{} inserts all files
listed into the archive.  If you would like to insert @emph{only} those
of the files you list that are newer than existing members of the same
names, use this modifier.  The @samp{u} modifier is allowed only for the
operation @samp{r} (replace).  In particular, the combination @samp{qu} is
not allowed, since checking the timestamps would lose any speed
advantage from the operation @samp{q}.

@item v
This modifier requests the @emph{verbose} version of an operation.  Many
operations display additional information, such as filenames processed,
when the modifier @samp{v} is appended.

@item V
This modifier shows the version number of @code{ar}.
@end table

@code{ar} ignores an initial option spelt @code{-X32_64}, for
compatibility with AIX.  The behaviour produced by this option is the
default for GNU @code{ar}.  @code{ar} does not support any of the other
@code{-X} options; in particular, it does not support @code{-X32}
which is the default for AIX @code{ar}.

@node ar scripts
@section Controlling @code{ar} with a script

@smallexample
ar -M [ <@var{script} ]
@end smallexample

@cindex MRI compatibility, @code{ar}
@cindex scripts, @code{ar}
If you use the single command-line option @samp{-M} with @code{ar}, you
can control its operation with a rudimentary command language.  This
form of @code{ar} operates interactively if standard input is coming
directly from a terminal.  During interactive use, @code{ar} prompts for
input (the prompt is @samp{AR >}), and continues executing even after
errors.  If you redirect standard input to a script file, no prompts are
issued, and @code{ar} abandons execution (with a nonzero exit code)
on any error.

The @code{ar} command language is @emph{not} designed to be equivalent
to the command-line options; in fact, it provides somewhat less control
over archives.  The only purpose of the command language is to ease the
transition to @sc{gnu} @code{ar} for developers who already have scripts
written for the MRI ``librarian'' program.

The syntax for the @code{ar} command language is straightforward:
@itemize @bullet
@item
commands are recognized in upper or lower case; for example, @code{LIST}
is the same as @code{list}.  In the following descriptions, commands are
shown in upper case for clarity.

@item
a single command may appear on each line; it is the first word on the
line.

@item
empty lines are allowed, and have no effect.

@item
comments are allowed; text after either of the characters @samp{*}
or @samp{;} is ignored.

@item
Whenever you use a list of names as part of the argument to an @code{ar}
command, you can separate the individual names with either commas or
blanks.  Commas are shown in the explanations below, for clarity.

@item
@samp{+} is used as a line continuation character; if @samp{+} appears
at the end of a line, the text on the following line is considered part
of the current command.
@end itemize

Here are the commands you can use in @code{ar} scripts, or when using
@code{ar} interactively.  Three of them have special significance:

@code{OPEN} or @code{CREATE} specify a @dfn{current archive}, which is
a temporary file required for most of the other commands.

@code{SAVE} commits the changes so far specified by the script.  Prior
to @code{SAVE}, commands affect only the temporary copy of the current
archive.

@table @code
@item ADDLIB @var{archive} 
@itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module})
Add all the contents of @var{archive} (or, if specified, each named
@var{module} from @var{archive}) to the current archive.

Requires prior use of @code{OPEN} or @code{CREATE}.

@item ADDMOD @var{member}, @var{member}, @dots{} @var{member}
@c FIXME! w/Replacement??  If so, like "ar r @var{archive} @var{names}"
@c        else like "ar q..."
Add each named @var{member} as a module in the current archive.

Requires prior use of @code{OPEN} or @code{CREATE}.

@item CLEAR
Discard the contents of the current archive, canceling the effect of
any operations since the last @code{SAVE}.  May be executed (with no
effect) even if  no current archive is specified.

@item CREATE @var{archive}
Creates an archive, and makes it the current archive (required for many
other commands).  The new archive is created with a temporary name; it
is not actually saved as @var{archive} until you use @code{SAVE}.
You can overwrite existing archives; similarly, the contents of any
existing file named @var{archive} will not be destroyed until @code{SAVE}.

@item DELETE @var{module}, @var{module}, @dots{} @var{module}
Delete each listed @var{module} from the current archive; equivalent to
@samp{ar -d @var{archive} @var{module} @dots{} @var{module}}.

Requires prior use of @code{OPEN} or @code{CREATE}.

@item DIRECTORY @var{archive} (@var{module}, @dots{} @var{module})
@itemx DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) @var{outputfile}
List each named @var{module} present in @var{archive}.  The separate
command @code{VERBOSE} specifies the form of the output: when verbose
output is off, output is like that of @samp{ar -t @var{archive}
@var{module}@dots{}}.  When verbose output is on, the listing is like
@samp{ar -tv @var{archive} @var{module}@dots{}}.

Output normally goes to the standard output stream; however, if you
specify @var{outputfile} as a final argument, @code{ar} directs the
output to that file.

@item END
Exit from @code{ar}, with a @code{0} exit code to indicate successful
completion.  This command does not save the output file; if you have
changed the current archive since the last @code{SAVE} command, those
changes are lost.

@item EXTRACT @var{module}, @var{module}, @dots{} @var{module}
Extract each named @var{module} from the current archive, writing them
into the current directory as separate files.  Equivalent to @samp{ar -x
@var{archive} @var{module}@dots{}}.

Requires prior use of @code{OPEN} or @code{CREATE}.

@ignore
@c FIXME Tokens but no commands???
@item FULLDIR

@item HELP
@end ignore

@item LIST
Display full contents of the current archive, in ``verbose'' style
regardless of the state of @code{VERBOSE}.  The effect is like @samp{ar
tv @var{archive}}.  (This single command is a @sc{gnu} @code{ar}
enhancement, rather than present for MRI compatibility.)

Requires prior use of @code{OPEN} or @code{CREATE}.

@item OPEN @var{archive}
Opens an existing archive for use as the current archive (required for
many other commands).  Any changes as the result of subsequent commands
will not actually affect @var{archive} until you next use @code{SAVE}.

@item REPLACE @var{module}, @var{module}, @dots{} @var{module}
In the current archive, replace each existing @var{module} (named in
the @code{REPLACE} arguments) from files in the current working directory.
To execute this command without errors, both the file, and the module in
the current archive, must exist. 

Requires prior use of @code{OPEN} or @code{CREATE}.

@item VERBOSE
Toggle an internal flag governing the output from @code{DIRECTORY}.
When the flag is on, @code{DIRECTORY} output matches output from
@samp{ar -tv }@dots{}.

@item SAVE
Commit your changes to the current archive, and actually save it as a
file with the name specified in the last @code{CREATE} or @code{OPEN}
command. 

Requires prior use of @code{OPEN} or @code{CREATE}.

@end table

@iftex
@node ld
@chapter ld
@cindex linker
@kindex ld
The @sc{gnu} linker @code{ld} is now described in a separate manual.
@xref{Top,, Overview,, Using LD: the @sc{gnu} linker}.
@end iftex

@node nm
@chapter nm
@cindex symbols
@kindex nm

@smallexample
nm [ -a | --debug-syms ]  [ -g | --extern-only ]
   [ -B ]  [ -C | --demangle[=@var{style}] ] [ -D | --dynamic ]
   [ -s | --print-armap ]  [ -A | -o | --print-file-name ]
   [ -n | -v | --numeric-sort ]  [ -p | --no-sort ]
   [ -r | --reverse-sort ]  [ --size-sort ] [ -u | --undefined-only ]
   [ -t @var{radix} | --radix=@var{radix} ] [ -P | --portability ]
   [ --target=@var{bfdname} ] [ -f @var{format} | --format=@var{format} ]
   [ --defined-only ] [-l | --line-numbers ]  [ --no-demangle ]
   [ -V | --version ]  [ -X 32_64 ]  [ --help ]  [ @var{objfile}@dots{} ]
@end smallexample

@sc{gnu} @code{nm} lists the symbols from object files @var{objfile}@dots{}.
If no object files are listed as arguments, @code{nm} assumes the file
@file{a.out}.

For each symbol, @code{nm} shows:

@itemize @bullet
@item
The symbol value, in the radix selected by options (see below), or
hexadecimal by default.

@item
The symbol type.  At least the following types are used; others are, as
well, depending on the object file format.  If lowercase, the symbol is
local; if uppercase, the symbol is global (external).

@c Some more detail on exactly what these symbol types are used for
@c would be nice.
@table @code
@item A
The symbol's value is absolute, and will not be changed by further
linking.

@item B
The symbol is in the uninitialized data section (known as BSS).

@item C
The symbol is common.  Common symbols are uninitialized data.  When
linking, multiple common symbols may appear with the same name.  If the
symbol is defined anywhere, the common symbols are treated as undefined
references.  For more details on common symbols, see the discussion of
--warn-common in @ref{Options,,Linker options,ld.info,The GNU linker}.

@item D
The symbol is in the initialized data section.

@item G
The symbol is in an initialized data section for small objects.  Some
object file formats permit more efficient access to small data objects,
such as a global int variable as opposed to a large global array.

@item I
The symbol is an indirect reference to another symbol.  This is a GNU
extension to the a.out object file format which is rarely used.

@item N
The symbol is a debugging symbol.

@item R
The symbol is in a read only data section.

@item S
The symbol is in an uninitialized data section for small objects.

@item T
The symbol is in the text (code) section.

@item U
The symbol is undefined.

@item V
The symbol is a weak object.  When a weak defined symbol is linked with
a normal defined symbol, the normal defined symbol is used with no error.
When a weak undefined symbol is linked and the symbol is not defined,
the value of the weak symbol becomes zero with no error.

@item W
The symbol is a weak symbol that has not been specifically tagged as a
weak object symbol.  When a weak defined symbol is linked with a normal
defined symbol, the normal defined symbol is used with no error.
When a weak undefined symbol is linked and the symbol is not defined,
the value of the weak symbol becomes zero with no error.

@item -
The symbol is a stabs symbol in an a.out object file.  In this case, the
next values printed are the stabs other field, the stabs desc field, and
the stab type.  Stabs symbols are used to hold debugging information;
for more information, see @ref{Top,Stabs,Stabs Overview,stabs.info, The
``stabs'' debug format}.

@item ?
The symbol type is unknown, or object file format specific.
@end table

@item
The symbol name.
@end itemize

The long and short forms of options, shown here as alternatives, are
equivalent.

@table @code
@item -A
@itemx -o
@itemx --print-file-name 
@cindex input file name
@cindex file name
@cindex source file name
Precede each symbol by the name of the input file (or archive member)
in which it was found, rather than identifying the input file once only,
before all of its symbols.

@item -a
@itemx --debug-syms 
@cindex debugging symbols
Display all symbols, even debugger-only symbols; normally these are not
listed.

@item -B
@cindex @code{nm} format
@cindex @code{nm} compatibility
The same as @samp{--format=bsd} (for compatibility with the MIPS @code{nm}).

@item -C
@itemx --demangle[=@var{style}]
@cindex demangling in nm
Decode (@dfn{demangle}) low-level symbol names into user-level names.
Besides removing any initial underscore prepended by the system, this
makes C++ function names readable. Different compilers have different
mangling styles. The optional demangling style argument can be used to 
choose an appropriate demangling style for your compiler. @xref{c++filt}, 
for more information on demangling.

@item --no-demangle
Do not demangle low-level symbol names.  This is the default.

@item -D
@itemx --dynamic
@cindex dynamic symbols
Display the dynamic symbols rather than the normal symbols.  This is
only meaningful for dynamic objects, such as certain types of shared
libraries.

@item -f @var{format}
@itemx --format=@var{format}
@cindex @code{nm} format
@cindex @code{nm} compatibility
Use the output format @var{format}, which can be @code{bsd},
@code{sysv}, or @code{posix}.  The default is @code{bsd}.
Only the first character of @var{format} is significant; it can be
either upper or lower case.

@item -g
@itemx --extern-only 
@cindex external symbols
Display only external symbols.

@item -l
@itemx --line-numbers
@cindex symbol line numbers
For each symbol, use debugging information to try to find a filename and
line number.  For a defined symbol, look for the line number of the
address of the symbol.  For an undefined symbol, look for the line
number of a relocation entry which refers to the symbol.  If line number
information can be found, print it after the other symbol information.

@item -n
@itemx -v
@itemx --numeric-sort 
Sort symbols numerically by their addresses, rather than alphabetically
by their names. 

@item -p
@itemx --no-sort 
@cindex sorting symbols
Do not bother to sort the symbols in any order; print them in the order
encountered.

@item -P
@itemx --portability
Use the POSIX.2 standard output format instead of the default format.
Equivalent to @samp{-f posix}.

@item -s
@itemx --print-armap
@cindex symbol index, listing
When listing symbols from archive members, include the index: a mapping
(stored in the archive by @code{ar} or @code{ranlib}) of which modules
contain definitions for which names.

@item -r
@itemx --reverse-sort 
Reverse the order of the sort (whether numeric or alphabetic); let the
last come first.

@item --size-sort
Sort symbols by size.  The size is computed as the difference between
the value of the symbol and the value of the symbol with the next higher
value.  The size of the symbol is printed, rather than the value.

@item -t @var{radix}
@itemx --radix=@var{radix}
Use @var{radix} as the radix for printing the symbol values.  It must be
@samp{d} for decimal, @samp{o} for octal, or @samp{x} for hexadecimal.

@item --target=@var{bfdname}
@cindex object code format
Specify an object code format other than your system's default format.
@xref{Target Selection}, for more information.

@item -u
@itemx --undefined-only 
@cindex external symbols
@cindex undefined symbols
Display only undefined symbols (those external to each object file).

@item --defined-only
@cindex external symbols
@cindex undefined symbols
Display only defined symbols for each object file.

@item -V
@itemx --version
Show the version number of @code{nm} and exit.

@item -X
This option is ignored for compatibility with the AIX version of
@code{nm}.  It takes one parameter which must be the string
@code{32_64}.  The default mode of AIX @code{nm} corresponds
to @code{-X 32}, which is not supported by @sc{gnu} @code{nm}.

@item --help
Show a summary of the options to @code{nm} and exit.
@end table

@node objcopy
@chapter objcopy

@smallexample
objcopy [ -F @var{bfdname} | --target=@var{bfdname} ]
        [ -I @var{bfdname} | --input-target=@var{bfdname} ]
        [ -O @var{bfdname} | --output-target=@var{bfdname} ]
        [ -S | --strip-all ]  [ -g | --strip-debug ]
        [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ]
        [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ]
        [ -G @var{symbolname} | --keep-global-symbol=@var{symbolname}]
        [ -L @var{symbolname} | --localize-symbol=@var{symbolname} ]
        [ -W @var{symbolname} | --weaken-symbol=@var{symbolname} ]
        [ -x | --discard-all ]  [ -X | --discard-locals ]
        [ -b @var{byte} | --byte=@var{byte} ]
        [ -i @var{interleave} | --interleave=@var{interleave} ]
        [ -j @var{sectionname} | --only-section=@var{sectionname} ]
        [ -R @var{sectionname} | --remove-section=@var{sectionname} ]
        [ -p | --preserve-dates ] [ --debugging ]
        [ --gap-fill=@var{val} ] [ --pad-to=@var{address} ]
        [ --set-start=@var{val} ] [ --adjust-start=@var{incr} ]
        [ --change-addresses=@var{incr} ]
        [ --change-section-address @var{section}@{=,+,-@}@var{val} ]
        [ --change-section-lma @var{section}@{=,+,-@}@var{val} ]
        [ --change-section-vma @var{section}@{=,+,-@}@var{val} ]
        [ --change-warnings ] [ --no-change-warnings ]
        [ --set-section-flags @var{section}=@var{flags} ]
        [ --add-section @var{sectionname}=@var{filename} ]
        [ --change-leading-char ] [ --remove-leading-char ]
        [ --srec-len=@var{ival} ] [ --srec-forceS3 ]
        [ --redefine-sym @var{old}=@var{new} ] [ --weaken ]
        [ --keep-symbols=@var{filename} ]
        [ --strip-symbols=@var{filename} ]
        [ --keep-global-symbols=@var{filename} ]
        [ --localize-symbols=@var{filename} ]
        [ --weaken-symbols=@var{filename} ]
        [ -v | --verbose ] [ -V | --version ]  [ --help ]
        @var{infile} [@var{outfile}]
@end smallexample

The @sc{gnu} @code{objcopy} utility copies the contents of an object
file to another.  @code{objcopy} uses the @sc{gnu} @sc{bfd} Library to
read and write the object files.  It can write the destination object
file in a format different from that of the source object file.  The
exact behavior of @code{objcopy} is controlled by command-line options.
Note that @code{objcopy} should be able to copy a fully linked file
between any two formats. However, copying a relocatable object file
between any two formats may not work as expected.

@code{objcopy} creates temporary files to do its translations and
deletes them afterward.  @code{objcopy} uses @sc{bfd} to do all its
translation work; it has access to all the formats described in @sc{bfd}
and thus is able to recognize most formats without being told
explicitly.  @xref{BFD,,BFD,ld.info,Using LD}.

@code{objcopy} can be used to generate S-records by using an output
target of @samp{srec} (e.g., use @samp{-O srec}).

@code{objcopy} can be used to generate a raw binary file by using an
output target of @samp{binary} (e.g., use @samp{-O binary}).  When
@code{objcopy} generates a raw binary file, it will essentially produce
a memory dump of the contents of the input object file.  All symbols and
relocation information will be discarded.  The memory dump will start at
the load address of the lowest section copied into the output file.

When generating an S-record or a raw binary file, it may be helpful to
use @samp{-S} to remove sections containing debugging information.  In
some cases @samp{-R} will be useful to remove sections which contain
information that is not needed by the binary file.

Note - @code{objcopy} is not able to change the endianness of its input
files.  If the input format has an endianness, (some formats do not),
@code{objcopy} can only copy the inputs into file formats that have the
same endianness or which have no endianness (eg @samp{srec}).

@table @code
@item @var{infile}
@itemx @var{outfile}
The input and output files, respectively.
If you do not specify @var{outfile}, @code{objcopy} creates a
temporary file and destructively renames the result with
the name of @var{infile}.

@item -I @var{bfdname}	
@itemx --input-target=@var{bfdname}
Consider the source file's object format to be @var{bfdname}, rather than
attempting to deduce it.  @xref{Target Selection}, for more information.

@item -O @var{bfdname}
@itemx --output-target=@var{bfdname}
Write the output file using the object format @var{bfdname}.
@xref{Target Selection}, for more information.

@item -F @var{bfdname}
@itemx --target=@var{bfdname}
Use @var{bfdname} as the object format for both the input and the output
file; i.e., simply transfer data from source to destination with no
translation.  @xref{Target Selection}, for more information.

@item -j @var{sectionname}
@itemx --only-section=@var{sectionname}
Copy only the named section from the input file to the output file.
This option may be given more than once.  Note that using this option
inappropriately may make the output file unusable.

@item -R @var{sectionname}
@itemx --remove-section=@var{sectionname}
Remove any section named @var{sectionname} from the output file.  This
option may be given more than once.  Note that using this option
inappropriately may make the output file unusable.

@item -S
@itemx --strip-all
Do not copy relocation and symbol information from the source file.

@item -g
@itemx --strip-debug
Do not copy debugging symbols from the source file.

@item --strip-unneeded
Strip all symbols that are not needed for relocation processing.

@item -K @var{symbolname}
@itemx --keep-symbol=@var{symbolname}
Copy only symbol @var{symbolname} from the source file.  This option may
be given more than once.

@item -N @var{symbolname}
@itemx --strip-symbol=@var{symbolname}
Do not copy symbol @var{symbolname} from the source file.  This option
may be given more than once.

@item -G @var{symbolname}
@itemx --keep-global-symbol=@var{symbolname}
Keep only symbol @var{symbolname} global.  Make all other symbols local
to the file, so that they are not visible externally.  This option may
be given more than once.

@item -L @var{symbolname}
@itemx --localize-symbol=@var{symbolname}
Make symbol @var{symbolname} local to the file, so that it is not
visible externally.  This option may be given more than once.

@item -W @var{symbolname}
@itemx --weaken-symbol=@var{symbolname}
Make symbol @var{symbolname} weak. This option may be given more than once.

@item -x
@itemx --discard-all
Do not copy non-global symbols from the source file.
@c FIXME any reason to prefer "non-global" to "local" here?

@item -X
@itemx --discard-locals
Do not copy compiler-generated local symbols.
(These usually start with @samp{L} or @samp{.}.)

@item -b @var{byte}
@itemx --byte=@var{byte}
Keep only every @var{byte}th byte of the input file (header data is not
affected).  @var{byte} can be in the range from 0 to @var{interleave}-1,
where @var{interleave} is given by the @samp{-i} or @samp{--interleave}
option, or the default of 4.  This option is useful for creating files
to program @sc{rom}.  It is typically used with an @code{srec} output
target.

@item -i @var{interleave}
@itemx --interleave=@var{interleave}
Only copy one out of every @var{interleave} bytes.  Select which byte to
copy with the @var{-b} or @samp{--byte} option.  The default is 4.
@code{objcopy} ignores this option if you do not specify either @samp{-b} or
@samp{--byte}.

@item -p
@itemx --preserve-dates
Set the access and modification dates of the output file to be the same
as those of the input file.

@item --debugging
Convert debugging information, if possible.  This is not the default
because only certain debugging formats are supported, and the
conversion process can be time consuming.

@item --gap-fill @var{val}
Fill gaps between sections with @var{val}.  This operation applies to
the @emph{load address} (LMA) of the sections.  It is done by increasing
the size of the section with the lower address, and filling in the extra
space created with @var{val}.

@item --pad-to @var{address}
Pad the output file up to the load address @var{address}.  This is
done by increasing the size of the last section.  The extra space is
filled in with the value specified by @samp{--gap-fill} (default zero).

@item --set-start @var{val}
Set the start address of the new file to @var{val}.  Not all object file
formats support setting the start address.

@item --change-start @var{incr}
@itemx --adjust-start @var{incr}
@cindex changing start address
Change the start address by adding @var{incr}.  Not all object file
formats support setting the start address.

@item --change-addresses @var{incr}
@itemx --adjust-vma @var{incr}
@cindex changing object addresses
Change the VMA and LMA addresses of all sections, as well as the start
address, by adding @var{incr}.  Some object file formats do not permit
section addresses to be changed arbitrarily.  Note that this does not
relocate the sections; if the program expects sections to be loaded at a
certain address, and this option is used to change the sections such
that they are loaded at a different address, the program may fail. 

@item --change-section-address @var{section}@{=,+,-@}@var{val}
@itemx --adjust-section-vma @var{section}@{=,+,-@}@var{val}
@cindex changing section address
Set or change both the VMA address and the LMA address of the named
@var{section}.  If @samp{=} is used, the section address is set to
@var{val}.  Otherwise, @var{val} is added to or subtracted from the
section address.  See the comments under @samp{--change-addresses},
above. If @var{section} does not exist in the input file, a warning will
be issued, unless @samp{--no-change-warnings} is used.

@item --change-section-lma @var{section}@{=,+,-@}@var{val}
@cindex changing section LMA
Set or change the LMA address of the named @var{section}.  The LMA
address is the address where the section will be loaded into memory at
program load time.  Normally this is the same as the VMA address, which
is the address of the section at program run time, but on some systems,
especially those where a program is held in ROM, the two can be
different.  If @samp{=} is used, the section address is set to
@var{val}.  Otherwise, @var{val} is added to or subtracted from the
section address.  See the comments under @samp{--change-addresses},
above.  If @var{section} does not exist in the input file, a warning
will be issued, unless @samp{--no-change-warnings} is used.  

@item --change-section-vma @var{section}@{=,+,-@}@var{val}
@cindex changing section VMA
Set or change the VMA address of the named @var{section}.  The VMA
address is the address where the section will be located once the
program has started executing.  Normally this is the same as the LMA
address, which is the address where the section will be loaded into
memory, but on some systems, especially those where a program is held in
ROM, the two can be different.  If @samp{=} is used, the section address
is set to @var{val}.  Otherwise, @var{val} is added to or subtracted
from the section address.  See the comments under
@samp{--change-addresses}, above.  If @var{section} does not exist in
the input file, a warning will be issued, unless
@samp{--no-change-warnings} is used.   

@item --change-warnings
@itemx --adjust-warnings
If @samp{--change-section-address} or @samp{--change-section-lma} or
@samp{--change-section-vma} is used, and the named section does not
exist, issue a warning.  This is the default. 

@item --no-change-warnings
@itemx --no-adjust-warnings
Do not issue a warning if @samp{--change-section-address} or
@samp{--adjust-section-lma} or @samp{--adjust-section-vma} is used, even
if the named section does not exist. 

@item --set-section-flags @var{section}=@var{flags}
Set the flags for the named section.  The @var{flags} argument is a
comma separated string of flag names.  The recognized names are
@samp{alloc}, @samp{contents}, @samp{load}, @samp{noload},
@samp{readonly}, @samp{code}, @samp{data}, @samp{rom}, @samp{share}, and
@samp{debug}.  You can set the @samp{contents} flag for a section which
does not have contents, but it is not meaningful to clear the
@samp{contents} flag of a section which does have contents--just remove
the section instead.  Not all flags are meaningful for all object file
formats.

@item --add-section @var{sectionname}=@var{filename}
Add a new section named @var{sectionname} while copying the file.  The
contents of the new section are taken from the file @var{filename}.  The
size of the section will be the size of the file.  This option only
works on file formats which can support sections with arbitrary names.

@item --change-leading-char
Some object file formats use special characters at the start of
symbols.  The most common such character is underscore, which compilers
often add before every symbol.  This option tells @code{objcopy} to
change the leading character of every symbol when it converts between
object file formats.  If the object file formats use the same leading
character, this option has no effect.  Otherwise, it will add a
character, or remove a character, or change a character, as
appropriate.

@item --remove-leading-char
If the first character of a global symbol is a special symbol leading
character used by the object file format, remove the character.  The
most common symbol leading character is underscore.  This option will
remove a leading underscore from all global symbols.  This can be useful
if you want to link together objects of different file formats with
different conventions for symbol names.  This is different from
@code{--change-leading-char} because it always changes the symbol name
when appropriate, regardless of the object file format of the output
file.

@item --srec-len=@var{ival}
Meaningful only for srec output.  Set the maximum length of the Srecords
being produced to @var{ival}.  This length covers both address, data and
crc fields.

@item --srec-forceS3
Meaningful only for srec output.  Avoid generation of S1/S2 records, 
creating S3-only record format.

@item --redefine-sym @var{old}=@var{new}
Change the name of a symbol @var{old}, to @var{new}.  This can be useful
when one is trying link two things together for which you have no
source, and there are name collisions.

@item --weaken
Change all global symbols in the file to be weak.  This can be useful
when building an object which will be linked against other objects using
the @code{-R} option to the linker.  This option is only effective when
using an object file format which supports weak symbols.

@item --keep-symbols=@var{filename}
Apply @samp{--keep-symbol} option to each symbol listed in the file
@var{filename}.  @var{filename} is simply a flat file, with one symbol
name per line.  Line comments may be introduced by the hash character.
This option may be given more than once.

@item --strip-symbols=@var{filename}
Apply @samp{--strip-symbol} option to each symbol listed in the file
@var{filename}.  @var{filename} is simply a flat file, with one symbol
name per line.  Line comments may be introduced by the hash character.
This option may be given more than once.

@item --keep-global-symbols=@var{filename}
Apply @samp{--keep-global-symbol} option to each symbol listed in the
file @var{filename}.  @var{filename} is simply a flat file, with one
symbol name per line.  Line comments may be introduced by the hash
character.  This option may be given more than once.

@item --localize-symbols=@var{filename}
Apply @samp{--localize-symbol} option to each symbol listed in the file
@var{filename}.  @var{filename} is simply a flat file, with one symbol
name per line.  Line comments may be introduced by the hash character.
This option may be given more than once.

@item --weaken-symbols=@var{filename}
Apply @samp{--weaken-symbol} option to each symbol listed in the file
@var{filename}.  @var{filename} is simply a flat file, with one symbol
name per line.  Line comments may be introduced by the hash character.
This option may be given more than once.

@item -V
@itemx --version
Show the version number of @code{objcopy}.

@item -v
@itemx --verbose
Verbose output: list all object files modified.  In the case of
archives, @samp{objcopy -V} lists all members of the archive.

@item --help
Show a summary of the options to @code{objcopy}.
@end table

@node objdump
@chapter objdump

@cindex object file information
@kindex objdump

@smallexample
objdump [ -a | --archive-headers ] 
        [ -b @var{bfdname} | --target=@var{bfdname} ] 
        [ -C | --demangle[=@var{style}] ]
        [ -d | --disassemble ]
        [ -D | --disassemble-all ]
        [ -z | --disassemble-zeroes ]
        [ -EB | -EL | --endian=@{big | little @} ]
        [ -f | --file-headers ]
        [ --file-start-context ]
        [ -g | --debugging ]
        [ -h | --section-headers | --headers ]
        [ -i | --info ]
        [ -j @var{section} | --section=@var{section} ]
        [ -l | --line-numbers ]
        [ -S | --source ]
        [ -m @var{machine} | --architecture=@var{machine} ]
        [ -M @var{options} | --disassembler-options=@var{options}]
        [ -p | --private-headers ]
        [ -r | --reloc ]
        [ -R | --dynamic-reloc ]
        [ -s | --full-contents ]
        [ -G | --stabs ]
        [ -t | --syms ]
        [ -T | --dynamic-syms ]
        [ -x | --all-headers ]
        [ -w | --wide ]
        [ --start-address=@var{address} ]
        [ --stop-address=@var{address} ]
        [ --prefix-addresses]
        [ --[no-]show-raw-insn ]
        [ --adjust-vma=@var{offset} ]
        [ -V | --version ]
        [ -H | --help ]
        @var{objfile}@dots{}
@end smallexample

@code{objdump} displays information about one or more object files.
The options control what particular information to display.  This
information is mostly useful to programmers who are working on the
compilation tools, as opposed to programmers who just want their
program to compile and work.

@var{objfile}@dots{} are the object files to be examined.  When you
specify archives, @code{objdump} shows information on each of the member
object files.

The long and short forms of options, shown here as alternatives, are
equivalent.  At least one option from the list
@samp{-a,-d,-D,-f,-g,-G,-h,-H,-p,-r,-R,-S,-t,-T,-V,-x} must be given. 

@table @code
@item -a
@itemx --archive-header
@cindex archive headers
If any of the @var{objfile} files are archives, display the archive
header information (in a format similar to @samp{ls -l}).  Besides the
information you could list with @samp{ar tv}, @samp{objdump -a} shows
the object file format of each archive member.

@item --adjust-vma=@var{offset}
@cindex section addresses in objdump
@cindex VMA in objdump
When dumping information, first add @var{offset} to all the section
addresses.  This is useful if the section addresses do not correspond to
the symbol table, which can happen when putting sections at particular
addresses when using a format which can not represent section addresses,
such as a.out.

@item -b @var{bfdname}
@itemx --target=@var{bfdname}
@cindex object code format
Specify that the object-code format for the object files is
@var{bfdname}.  This option may not be necessary; @var{objdump} can
automatically recognize many formats.

For example,
@example
objdump -b oasys -m vax -h fu.o
@end example
@noindent
displays summary information from the section headers (@samp{-h}) of
@file{fu.o}, which is explicitly identified (@samp{-m}) as a VAX object
file in the format produced by Oasys compilers.  You can list the
formats available with the @samp{-i} option.
@xref{Target Selection}, for more information.

@item -C
@itemx --demangle[=@var{style}]
@cindex demangling in objdump
Decode (@dfn{demangle}) low-level symbol names into user-level names.
Besides removing any initial underscore prepended by the system, this
makes C++ function names readable.  Different compilers have different
mangling styles. The optional demangling style argument can be used to 
choose an appropriate demangling style for your compiler. @xref{c++filt}, 
for more information on demangling.

@item -G
@item --debugging
Display debugging information.  This attempts to parse debugging
information stored in the file and print it out using a C like syntax.
Only certain types of debugging information have been implemented.

@item -d
@itemx --disassemble
@cindex disassembling object code
@cindex machine instructions
Display the assembler mnemonics for the machine instructions from
@var{objfile}.  This option only disassembles those sections which are
expected to contain instructions.

@item -D
@itemx --disassemble-all
Like @samp{-d}, but disassemble the contents of all sections, not just
those expected to contain instructions.

@item --prefix-addresses
When disassembling, print the complete address on each line.  This is
the older disassembly format.

@item --disassemble-zeroes
Normally the disassembly output will skip blocks of zeroes.  This
option directs the disassembler to disassemble those blocks, just like
any other data.

@item -EB
@itemx -EL
@itemx --endian=@{big|little@}
@cindex endianness
@cindex disassembly endianness
Specify the endianness of the object files.  This only affects
disassembly.  This can be useful when disassembling a file format which
does not describe endianness information, such as S-records.

@item -f
@itemx --file-header
@cindex object file header
Display summary information from the overall header of
each of the @var{objfile} files.

@item --file-start-context
@cindex source code context
Specify that when displaying interlisted source code/disassembly
(assumes '-S') from a file that has not yet been displayed, extend the
context to the start of the file.

@item -h
@itemx --section-header
@itemx --header
@cindex section headers
Display summary information from the section headers of the
object file.

File segments may be relocated to nonstandard addresses, for example by
using the @samp{-Ttext}, @samp{-Tdata}, or @samp{-Tbss} options to
@code{ld}.  However, some object file formats, such as a.out, do not
store the starting address of the file segments.  In those situations,
although @code{ld} relocates the sections correctly, using @samp{objdump
-h} to list the file section headers cannot show the correct addresses.
Instead, it shows the usual addresses, which are implicit for the
target.

@item --help
Print a summary of the options to @code{objdump} and exit.

@item -i
@itemx --info
@cindex architectures available
@cindex object formats available
Display a list showing all architectures and object formats available
for specification with @samp{-b} or @samp{-m}.

@item -j @var{name}
@itemx --section=@var{name}
@cindex section information
Display information only for section @var{name}.

@item -l
@itemx --line-numbers
@cindex source filenames for object files
Label the display (using debugging information) with the filename and
source line numbers corresponding to the object code or relocs shown.
Only useful with @samp{-d}, @samp{-D}, or @samp{-r}.

@item -m @var{machine}
@itemx --architecture=@var{machine}
@cindex architecture
@cindex disassembly architecture
Specify the architecture to use when disassembling object files.  This
can be useful when disassembling object files which do not describe
architecture information, such as S-records.  You can list the available
architectures with the @samp{-i} option.

@item -M @var{options}
@itemx --disassembler-options=@var{options}
Pass target specific information to the disassembler.  Only supported on
some targets.

If the target is an ARM architecture then this switch can be used to
select which register name set is used during disassembler.  Specifying
@samp{-M reg-name-std} (the default) will select the register names as
used in ARM's instruction set documentation, but with register 13 called
'sp', register 14 called 'lr' and register 15 called 'pc'.  Specifying
@samp{-M reg-names-apcs} will select the name set used by the ARM
Procedure Call Standard, whilst specifying @samp{-M reg-names-raw} will
just use @samp{r} followed by the register number.

There are also two variants on the APCS register naming scheme enabled
by @samp{-M reg-names-atpcs} and @samp{-M reg-names-special-atpcs} which
use the ARM/Thumb Procedure Call Standard naming conventions.  (Either
with the normal register names or the special register names).

This option can also be used for ARM architectures to force the
disassembler to interpret all instructions as Thumb instructions by
using the switch @samp{--disassembler-options=force-thumb}.  This can be
useful when attempting to disassemble thumb code produced by other
compilers.

@item -p
@itemx --private-headers
Print information that is specific to the object file format.  The exact
information printed depends upon the object file format.  For some
object file formats, no additional information is printed.

@item -r
@itemx --reloc
@cindex relocation entries, in object file
Print the relocation entries of the file.  If used with @samp{-d} or
@samp{-D}, the relocations are printed interspersed with the
disassembly.

@item -R
@itemx --dynamic-reloc
@cindex dynamic relocation entries, in object file
Print the dynamic relocation entries of the file.  This is only
meaningful for dynamic objects, such as certain types of shared
libraries.

@item -s
@itemx --full-contents
@cindex sections, full contents
@cindex object file sections
Display the full contents of any sections requested.

@item -S
@itemx --source
@cindex source disassembly
@cindex disassembly, with source
Display source code intermixed with disassembly, if possible.  Implies
@samp{-d}.

@item --show-raw-insn
When disassembling instructions, print the instruction in hex as well as
in symbolic form.  This is the default except when
@code{--prefix-addresses} is used.

@item --no-show-raw-insn
When disassembling instructions, do not print the instruction bytes.
This is the default when @code{--prefix-addresses} is used.

@item -G
@item --stabs
@cindex stab
@cindex .stab
@cindex debug symbols
@cindex ELF object file format
Display the full contents of any sections requested.  Display the
contents of the .stab and .stab.index and .stab.excl sections from an
ELF file.  This is only useful on systems (such as Solaris 2.0) in which
@code{.stab} debugging symbol-table entries are carried in an ELF
section.  In most other file formats, debugging symbol-table entries are
interleaved with linkage symbols, and are visible in the @samp{--syms}
output.  For more information on stabs symbols, see @ref{Top,Stabs,Stabs
Overview,stabs.info, The ``stabs'' debug format}.

@item --start-address=@var{address}
@cindex start-address
Start displaying data at the specified address.  This affects the output
of the @code{-d}, @code{-r} and @code{-s} options.

@item --stop-address=@var{address}
@cindex stop-address
Stop displaying data at the specified address.  This affects the output
of the @code{-d}, @code{-r} and @code{-s} options.

@item -t
@itemx --syms
@cindex symbol table entries, printing
Print the symbol table entries of the file.
This is similar to the information provided by the @samp{nm} program.

@item -T
@itemx --dynamic-syms
@cindex dynamic symbol table entries, printing
Print the dynamic symbol table entries of the file.  This is only
meaningful for dynamic objects, such as certain types of shared
libraries.  This is similar to the information provided by the @samp{nm}
program when given the @samp{-D} (@samp{--dynamic}) option.

@item --version
Print the version number of @code{objdump} and exit.

@item -x
@itemx --all-header
@cindex all header information, object file
@cindex header information, all
Display all available header information, including the symbol table and
relocation entries.  Using @samp{-x} is equivalent to specifying all of
@samp{-a -f -h -r -t}.

@item -w
@itemx --wide
@cindex wide output, printing
Format some lines for output devices that have more than 80 columns.
@end table

@node ranlib
@chapter ranlib

@kindex ranlib
@cindex archive contents
@cindex symbol index

@smallexample
ranlib [-vV] @var{archive}
@end smallexample

@code{ranlib} generates an index to the contents of an archive and
stores it in the archive.  The index lists each symbol defined by a
member of an archive that is a relocatable object file.  

You may use @samp{nm -s} or @samp{nm --print-armap} to list this index.

An archive with such an index speeds up linking to the library and
allows routines in the library to call each other without regard to
their placement in the archive.

The @sc{gnu} @code{ranlib} program is another form of @sc{gnu} @code{ar}; running
@code{ranlib} is completely equivalent to executing @samp{ar -s}.
@xref{ar}.

@table @code
@item -v
@itemx -V
@itemx --version
Show the version number of @code{ranlib}.
@end table

@node size
@chapter size

@kindex size
@cindex section sizes

@smallexample
size [ -A | -B | --format=@var{compatibility} ]
     [ --help ]  [ -d | -o | -x | --radix=@var{number} ]
     [ --target=@var{bfdname} ]  [ -V | --version ]  
     [ @var{objfile}@dots{} ]
@end smallexample

The @sc{gnu} @code{size} utility lists the section sizes---and the total
size---for each of the object or archive files @var{objfile} in its
argument list.  By default, one line of output is generated for each
object file or each module in an archive.

@var{objfile}@dots{} are the object files to be examined.
If none are specified, the file @code{a.out} will be used.

The command line options have the following meanings:

@table @code
@item -A
@itemx -B
@itemx --format=@var{compatibility}
@cindex @code{size} display format
Using one of these options, you can choose whether the output from @sc{gnu}
@code{size} resembles output from System V @code{size} (using @samp{-A},
or @samp{--format=sysv}), or Berkeley @code{size} (using @samp{-B}, or
@samp{--format=berkeley}).  The default is the one-line format similar to
Berkeley's.  
@c Bonus for doc-source readers: you can also say --format=strange (or
@c anything else that starts with 's') for sysv, and --format=boring (or
@c anything else that starts with 'b') for Berkeley.

Here is an example of the Berkeley (default) format of output from
@code{size}: 
@smallexample
$ size --format=Berkeley ranlib size
text    data    bss     dec     hex     filename
294880  81920   11592   388392  5ed28   ranlib
294880  81920   11888   388688  5ee50   size
@end smallexample

@noindent
This is the same data, but displayed closer to System V conventions:

@smallexample
$ size --format=SysV ranlib size
ranlib  :
section         size         addr
.text         294880         8192       
.data          81920       303104       
.bss           11592       385024       
Total         388392    


size  :
section         size         addr
.text         294880         8192       
.data          81920       303104       
.bss           11888       385024       
Total         388688    
@end smallexample

@item --help
Show a summary of acceptable arguments and options.

@item -d
@itemx -o
@itemx -x
@itemx --radix=@var{number}
@cindex @code{size} number format
@cindex radix for section sizes
Using one of these options, you can control whether the size of each
section is given in decimal (@samp{-d}, or @samp{--radix=10}); octal
(@samp{-o}, or @samp{--radix=8}); or hexadecimal (@samp{-x}, or
@samp{--radix=16}).  In @samp{--radix=@var{number}}, only the three
values (8, 10, 16) are supported.  The total size is always given in two
radices; decimal and hexadecimal for @samp{-d} or @samp{-x} output, or
octal and hexadecimal if you're using @samp{-o}.

@item --target=@var{bfdname}
@cindex object code format
Specify that the object-code format for @var{objfile} is
@var{bfdname}.  This option may not be necessary; @code{size} can
automatically recognize many formats.
@xref{Target Selection}, for more information.

@item -V
@itemx --version
Display the version number of @code{size}.
@end table

@node strings
@chapter strings
@kindex strings
@cindex listings strings
@cindex printing strings
@cindex strings, printing

@smallexample
strings [-afov] [-@var{min-len}] [-n @var{min-len}] [-t @var{radix}] [-]
        [--all] [--print-file-name] [--bytes=@var{min-len}]
        [--radix=@var{radix}] [--target=@var{bfdname}]
        [--help] [--version] @var{file}@dots{}
@end smallexample

For each @var{file} given, @sc{gnu} @code{strings} prints the printable
character sequences that are at least 4 characters long (or the number
given with the options below) and are followed by an unprintable
character.  By default, it only prints the strings from the initialized
and loaded sections of object files; for other types of files, it prints
the strings from the whole file.

@code{strings} is mainly useful for determining the contents of non-text
files.

@table @code
@item -a
@itemx --all
@itemx -
Do not scan only the initialized and loaded sections of object files;
scan the whole files.

@item -f
@itemx --print-file-name
Print the name of the file before each string.

@item --help
Print a summary of the program usage on the standard output and exit.

@item -@var{min-len}
@itemx -n @var{min-len}
@itemx --bytes=@var{min-len}
Print sequences of characters that are at least @var{min-len} characters
long, instead of the default 4.

@item -o
Like @samp{-t o}.  Some other versions of @code{strings} have @samp{-o}
act like @samp{-t d} instead.  Since we can not be compatible with both
ways, we simply chose one.

@item -t @var{radix}
@itemx --radix=@var{radix}
Print the offset within the file before each string.  The single
character argument specifies the radix of the offset---@samp{o} for
octal, @samp{x} for hexadecimal, or @samp{d} for decimal.

@item --target=@var{bfdname}
@cindex object code format
Specify an object code format other than your system's default format.
@xref{Target Selection}, for more information.

@item -v
@itemx --version
Print the program version number on the standard output and exit.
@end table

@node strip
@chapter strip

@kindex strip
@cindex removing symbols
@cindex discarding symbols
@cindex symbols, discarding

@smallexample
strip [ -F @var{bfdname} | --target=@var{bfdname} ]
      [ -I @var{bfdname} | --input-target=@var{bfdname} ]
      [ -O @var{bfdname} | --output-target=@var{bfdname} ]
      [ -s | --strip-all ] [ -S | -g | --strip-debug ]
      [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ]
      [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ]
      [ -x | --discard-all ] [ -X | --discard-locals ]
      [ -R @var{sectionname} | --remove-section=@var{sectionname} ]
      [ -o @var{file} ] [ -p | --preserve-dates ]
      [ -v | --verbose ]  [ -V | --version ]  [ --help ]
      @var{objfile}@dots{}
@end smallexample

@sc{gnu} @code{strip} discards all symbols from object files
@var{objfile}.  The list of object files may include archives.
At least one object file must be given.

@code{strip} modifies the files named in its argument,
rather than writing modified copies under different names.

@table @code
@item -F @var{bfdname}
@itemx --target=@var{bfdname}
Treat the original @var{objfile} as a file with the object
code format @var{bfdname}, and rewrite it in the same format.
@xref{Target Selection}, for more information.

@item --help
Show a summary of the options to @code{strip} and exit.

@item -I @var{bfdname}	
@itemx --input-target=@var{bfdname}
Treat the original @var{objfile} as a file with the object
code format @var{bfdname}.
@xref{Target Selection}, for more information.

@item -O @var{bfdname}
@itemx --output-target=@var{bfdname}
Replace @var{objfile} with a file in the output format @var{bfdname}.
@xref{Target Selection}, for more information.

@item -R @var{sectionname}
@itemx --remove-section=@var{sectionname}
Remove any section named @var{sectionname} from the output file.  This
option may be given more than once.  Note that using this option
inappropriately may make the output file unusable.

@item -s
@itemx --strip-all
Remove all symbols.

@item -g
@itemx -S
@itemx --strip-debug
Remove debugging symbols only.

@item --strip-unneeded
Remove all symbols that are not needed for relocation processing.

@item -K @var{symbolname}
@itemx --keep-symbol=@var{symbolname}
Keep only symbol @var{symbolname} from the source file.  This option may
be given more than once.

@item -N @var{symbolname}
@itemx --strip-symbol=@var{symbolname}
Remove symbol @var{symbolname} from the source file. This option may be
given more than once, and may be combined with strip options other than
@code{-K}.

@item -o @var{file}
Put the stripped output in @var{file}, rather than replacing the
existing file.  When this argument is used, only one @var{objfile}
argument may be specified.

@item -p
@itemx --preserve-dates
Preserve the access and modification dates of the file.

@item -x
@itemx --discard-all
Remove non-global symbols.

@item -X
@itemx --discard-locals
Remove compiler-generated local symbols.
(These usually start with @samp{L} or @samp{.}.)

@item -V
@itemx --version
Show the version number for @code{strip}.

@item -v
@itemx --verbose
Verbose output: list all object files modified.  In the case of
archives, @samp{strip -v} lists all members of the archive.
@end table

@node c++filt, addr2line, strip, Top
@chapter c++filt

@kindex c++filt
@cindex demangling C++ symbols

@smallexample
c++filt [ -_ | --strip-underscores ]
        [ -j | --java ]
	[ -n | --no-strip-underscores ]
        [ -s @var{format} | --format=@var{format} ]
        [ --help ]  [ --version ]  [ @var{symbol}@dots{} ]
@end smallexample

@kindex cxxfilt
The C++ and Java languages provides function overloading, which means
that you can write many functions with the same name (providing each
takes parameters of different types).  All C++ and Java function names
are encoded into a low-level assembly label (this process is known as
@dfn{mangling}). The @code{c++filt}
@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
MS-DOS this program is named @code{cxxfilt}.}
program does the inverse mapping: it decodes (@dfn{demangles}) low-level
names into user-level names so that the linker can keep these overloaded
functions from clashing.

Every alphanumeric word (consisting of letters, digits, underscores,
dollars, or periods) seen in the input is a potential label.  If the
label decodes into a C++ name, the C++ name replaces the low-level
name in the output.

You can use @code{c++filt} to decipher individual symbols:

@example
c++filt @var{symbol}
@end example

If no @var{symbol} arguments are given, @code{c++filt} reads symbol
names from the standard input and writes the demangled names to the
standard output.  All results are printed on the standard output.

@table @code
@item -_
@itemx --strip-underscores
On some systems, both the C and C++ compilers put an underscore in front
of every name.  For example, the C name @code{foo} gets the low-level
name @code{_foo}.  This option removes the initial underscore.  Whether
@code{c++filt} removes the underscore by default is target dependent.

@item -j
@itemx --java
Prints demangled names using Java syntax.  The default is to use C++
syntax.

@item -n
@itemx --no-strip-underscores
Do not remove the initial underscore.

@item -s @var{format}
@itemx --format=@var{format}
@sc{gnu} @code{nm} can decode three different methods of mangling, used by
different C++ compilers.  The argument to this option selects which
method it uses:

@table @code
@item gnu
the one used by the @sc{gnu} compiler (the default method)
@item lucid
the one used by the Lucid compiler
@item arm
the one specified by the C++ Annotated Reference Manual
@item hp
the one used by the HP compiler
@item edg
the one used by the EDG compiler
@item gnu-new-abi
the one used by the @sc{gnu} compiler with the new ABI.
@end table

@item --help
Print a summary of the options to @code{c++filt} and exit.

@item --version
Print the version number of @code{c++filt} and exit.
@end table

@quotation
@emph{Warning:} @code{c++filt} is a new utility, and the details of its
user interface are subject to change in future releases.  In particular,
a command-line option may be required in the the future to decode a name
passed as an argument on the command line; in other words, 

@example
c++filt @var{symbol}
@end example

@noindent
may in a future release become

@example
c++filt @var{option} @var{symbol}
@end example
@end quotation

@node addr2line
@chapter addr2line

@kindex addr2line
@cindex address to file name and line number

@smallexample
addr2line [ -b @var{bfdname} | --target=@var{bfdname} ]
          [ -C | --demangle[=@var{style} ]
          [ -e @var{filename} | --exe=@var{filename} ]
          [ -f | --functions ] [ -s | --basename ]
          [ -H | --help ] [ -V | --version ]
          [ addr addr ... ]
@end smallexample

@code{addr2line} translates program addresses into file names and line
numbers.  Given an address and an executable, it uses the debugging
information in the executable to figure out which file name and line
number are associated with a given address.

The executable to use is specified with the @code{-e} option.  The
default is the file @file{a.out}.

@code{addr2line} has two modes of operation.

In the first, hexadecimal addresses are specified on the command line,
and @code{addr2line} displays the file name and line number for each
address.

In the second, @code{addr2line} reads hexadecimal addresses from
standard input, and prints the file name and line number for each
address on standard output.  In this mode, @code{addr2line} may be used
in a pipe to convert dynamically chosen addresses.

The format of the output is @samp{FILENAME:LINENO}.  The file name and
line number for each address is printed on a separate line.  If the
@code{-f} option is used, then each @samp{FILENAME:LINENO} line is
preceded by a @samp{FUNCTIONNAME} line which is the name of the function
containing the address.

If the file name or function name can not be determined,
@code{addr2line} will print two question marks in their place.  If the
line number can not be determined, @code{addr2line} will print 0.

The long and short forms of options, shown here as alternatives, are
equivalent.

@table @code
@item -b @var{bfdname}
@itemx --target=@var{bfdname}
@cindex object code format
Specify that the object-code format for the object files is
@var{bfdname}.

@item -C
@itemx --demangle[=@var{style}]
@cindex demangling in objdump
Decode (@dfn{demangle}) low-level symbol names into user-level names.
Besides removing any initial underscore prepended by the system, this
makes C++ function names readable.  Different compilers have different
mangling styles. The optional demangling style argument can be used to 
choose an appropriate demangling style for your compiler. @xref{c++filt}, 
for more information on demangling.

@item -e @var{filename}
@itemx --exe=@var{filename}
Specify the name of the executable for which addresses should be
translated.  The default file is @file{a.out}.

@item -f
@itemx --functions
Display function names as well as file and line number information.

@item -s
@itemx --basenames
Display only the base of each file name.
@end table

@node nlmconv
@chapter nlmconv

@code{nlmconv} converts a relocatable object file into a NetWare
Loadable Module.

@ignore
@code{nlmconv} currently works with @samp{i386} object
files in @code{coff}, @sc{elf}, or @code{a.out} format, and @sc{SPARC}
object files in @sc{elf}, or @code{a.out} format@footnote{
@code{nlmconv} should work with any @samp{i386} or @sc{sparc} object
format in the Binary File Descriptor library.  It has only been tested
with the above formats.}.
@end ignore

@quotation
@emph{Warning:} @code{nlmconv} is not always built as part of the binary
utilities, since it is only useful for NLM targets.
@end quotation

@smallexample
nlmconv [ -I @var{bfdname} | --input-target=@var{bfdname} ]
        [ -O @var{bfdname} | --output-target=@var{bfdname} ]
        [ -T @var{headerfile} | --header-file=@var{headerfile} ]
        [ -d | --debug]  [ -l @var{linker} | --linker=@var{linker} ]
        [ -h | --help ]  [ -V | --version ]
        @var{infile} @var{outfile}
@end smallexample

@code{nlmconv} converts the relocatable @samp{i386} object file
@var{infile} into the NetWare Loadable Module @var{outfile}, optionally
reading @var{headerfile} for NLM header information.  For instructions
on writing the NLM command file language used in header files, see the
@samp{linkers} section, @samp{NLMLINK} in particular, of the @cite{NLM
Development and Tools Overview}, which is part of the NLM Software
Developer's Kit (``NLM SDK''), available from Novell, Inc.
@code{nlmconv} uses the @sc{gnu} Binary File Descriptor library to read
@var{infile}; see @ref{BFD,,BFD,ld.info,Using LD}, for
more information.

@code{nlmconv} can perform a link step.  In other words, you can list
more than one object file for input if you list them in the definitions
file (rather than simply specifying one input file on the command line).
In this case, @code{nlmconv} calls the linker for you.

@table @code
@item -I @var{bfdname}
@itemx --input-target=@var{bfdname}
Object format of the input file.  @code{nlmconv} can usually determine
the format of a given file (so no default is necessary).
@xref{Target Selection}, for more information.

@item -O @var{bfdname}
@itemx --output-target=@var{bfdname}
Object format of the output file.  @code{nlmconv} infers the output
format based on the input format, e.g. for a @samp{i386} input file the
output format is @samp{nlm32-i386}.
@xref{Target Selection}, for more information.

@item -T @var{headerfile}
@itemx --header-file=@var{headerfile}
Reads @var{headerfile} for NLM header information.  For instructions on
writing the NLM command file language used in header files, see@ see the
@samp{linkers} section, of the @cite{NLM Development and Tools
Overview}, which is part of the NLM Software Developer's Kit, available
from Novell, Inc.

@item -d
@itemx --debug
Displays (on standard error) the linker command line used by @code{nlmconv}.

@item -l @var{linker}
@itemx --linker=@var{linker}
Use @var{linker} for any linking.  @var{linker} can be an absolute or a
relative pathname.

@item -h
@itemx --help
Prints a usage summary.

@item -V
@itemx --version
Prints the version number for @code{nlmconv}.
@end table

@node windres
@chapter windres

@code{windres} may be used to manipulate Windows resources.

@quotation
@emph{Warning:} @code{windres} is not always built as part of the binary
utilities, since it is only useful for Windows targets.
@end quotation

@smallexample
windres [options] [input-file] [output-file]
@end smallexample

@code{windres} reads resources from an input file and copies them into
an output file.  Either file may be in one of three formats:

@table @code
@item rc
A text format read by the Resource Compiler.

@item res
A binary format generated by the Resource Compiler.

@item coff
A COFF object or executable.
@end table

The exact description of these different formats is available in
documentation from Microsoft.

When @code{windres} converts from the @code{rc} format to the @code{res}
format, it is acting like the Windows Resource Compiler.  When
@code{windres} converts from the @code{res} format to the @code{coff}
format, it is acting like the Windows @code{CVTRES} program.

When @code{windres} generates an @code{rc} file, the output is similar
but not identical to the format expected for the input.  When an input
@code{rc} file refers to an external filename, an output @code{rc} file
will instead include the file contents.

If the input or output format is not specified, @code{windres} will
guess based on the file name, or, for the input file, the file contents.
A file with an extension of @file{.rc} will be treated as an @code{rc}
file, a file with an extension of @file{.res} will be treated as a
@code{res} file, and a file with an extension of @file{.o} or
@file{.exe} will be treated as a @code{coff} file.

If no output file is specified, @code{windres} will print the resources
in @code{rc} format to standard output.

The normal use is for you to write an @code{rc} file, use @code{windres}
to convert it to a COFF object file, and then link the COFF file into
your application.  This will make the resources described in the
@code{rc} file available to Windows.

@table @code
@item -i @var{filename}
@itemx --input @var{filename}
The name of the input file.  If this option is not used, then
@code{windres} will use the first non-option argument as the input file
name.  If there are no non-option arguments, then @code{windres} will
read from standard input.  @code{windres} can not read a COFF file from
standard input.

@item -o @var{filename}
@itemx --output @var{filename}
The name of the output file.  If this option is not used, then
@code{windres} will use the first non-option argument, after any used
for the input file name, as the output file name.  If there is no
non-option argument, then @code{windres} will write to standard output.
@code{windres} can not write a COFF file to standard output.

@item -I @var{format}
@itemx --input-format @var{format}
The input format to read.  @var{format} may be @samp{res}, @samp{rc}, or
@samp{coff}.  If no input format is specified, @code{windres} will
guess, as described above.

@item -O @var{format}
@itemx --output-format @var{format}
The output format to generate.  @var{format} may be @samp{res},
@samp{rc}, or @samp{coff}.  If no output format is specified,
@code{windres} will guess, as described above.

@item -F @var{target}
@itemx --target @var{target}
Specify the BFD format to use for a COFF file as input or output.  This
is a BFD target name; you can use the @code{--help} option to see a list
of supported targets.  Normally @code{windres} will use the default
format, which is the first one listed by the @code{--help} option.
@ref{Target Selection}.

@item --preprocessor @var{program}
When @code{windres} reads an @code{rc} file, it runs it through the C
preprocessor first.  This option may be used to specify the preprocessor
to use, including any leading arguments.  The default preprocessor
argument is @code{gcc -E -xc-header -DRC_INVOKED}.

@item --include-dir @var{directory}
Specify an include directory to use when reading an @code{rc} file.
@code{windres} will pass this to the preprocessor as an @code{-I}
option.  @code{windres} will also search this directory when looking for
files named in the @code{rc} file.

@item -D @var{target}
@itemx --define @var{sym}[=@var{val}]
Specify a @code{-D} option to pass to the preprocessor when reading an
@code{rc} file.

@item -v
Enable verbose mode.  This tells you what the preprocessor is if you
didn't specify one.

@item --language @var{val}
Specify the default language to use when reading an @code{rc} file.
@var{val} should be a hexadecimal language code.  The low eight bits are
the language, and the high eight bits are the sublanguage.

@item --use-temp-file
Use a temporary file to instead of using popen to read the output of
the preprocessor. Use this option if the popen implementation is buggy 
on the host (eg., certain non-English language versions of Windows 95 and 
Windows 98 are known to have buggy popen where the output will instead
go the console).

@item --no-use-temp-file
Use popen, not a temporary file, to read the output of the preprocessor.
This is the default behaviour.

@item --help
Prints a usage summary.

@item --version
Prints the version number for @code{windres}.

@item --yydebug
If @code{windres} is compiled with @code{YYDEBUG} defined as @code{1},
this will turn on parser debugging.
@end table


@node dlltool
@chapter Create files needed to build and use DLLs
@cindex DLL
@kindex dlltool

@code{dlltool} may be used to create the files needed to build and use
dynamic link libraries (DLLs).

@quotation
@emph{Warning:} @code{dlltool} is not always built as part of the binary
utilities, since it is only useful for those targets which support DLLs.
@end quotation

@smallexample
dlltool [-d|--input-def @var{def-file-name}]
        [-b|--base-file @var{base-file-name}]
        [-e|--output-exp @var{exports-file-name}]
        [-z|--output-def @var{def-file-name}]
        [-l|--output-lib @var{library-file-name}]        
        [--export-all-symbols] [--no-export-all-symbols]
        [--exclude-symbols @var{list}]
        [--no-default-excludes]
        [-S|--as @var{path-to-assembler}] [-f|--as-flags @var{options}]
        [-D|--dllname @var{name}] [-m|--machine @var{machine}]
        [-a|--add-indirect] [-U|--add-underscore] [-k|--kill-at]
        [-A|--add-stdcall-alias]
        [-x|--no-idata4] [-c|--no-idata5] [-i|--interwork]
        [-n|--nodelete] [-v|--verbose] [-h|--help] [-V|--version]
        [object-file @dots{}]
@end smallexample

@code{dlltool} reads its inputs, which can come from the @samp{-d} and
@samp{-b} options as well as object files specified on the command
line.  It then processes these inputs and if the @samp{-e} option has
been specified it creates a exports file.  If the @samp{-l} option
has been specified it creates a library file and if the @samp{-z} option
has been specified it creates a def file.  Any or all of the -e, -l
and -z options can be present in one invocation of dlltool.

When creating a DLL, along with the source for the DLL, it is necessary
to have three other files.  @code{dlltool} can help with the creation of
these files.

The first file is a @samp{.def} file which specifies which functions are
exported from the DLL, which functions the DLL imports, and so on.  This
is a text file and can be created by hand, or @code{dlltool} can be used
to create it using the @samp{-z} option.  In this case @code{dlltool}
will scan the object files specified on its command line looking for
those functions which have been specially marked as being exported and
put entries for them in the .def file it creates.

In order to mark a function as being exported from a DLL, it needs to
have an @samp{-export:<name_of_function>} entry in the @samp{.drectve}
section of the object file.  This can be done in C by using the
asm() operator:

@smallexample
  asm (".section .drectve");  
  asm (".ascii \"-export:my_func\"");

  int my_func (void) @{ @dots{} @}
@end smallexample

The second file needed for DLL creation is an exports file.  This file
is linked with the object files that make up the body of the DLL and it
handles the interface between the DLL and the outside world.  This is a
binary file and it can be created by giving the @samp{-e} option to
@code{dlltool} when it is creating or reading in a .def file. 

The third file needed for DLL creation is the library file that programs
will link with in order to access the functions in the DLL.  This file
can be created by giving the @samp{-l} option to dlltool when it
is creating or reading in a .def file.

@code{dlltool} builds the library file by hand, but it builds the
exports file by creating temporary files containing assembler statements
and then assembling these.  The @samp{-S} command line option can be
used to specify the path to the assembler that dlltool will use,
and the @samp{-f} option can be used to pass specific flags to that
assembler.  The @samp{-n} can be used to prevent dlltool from deleting
these temporary assembler files when it is done, and if @samp{-n} is
specified twice then this will prevent dlltool from deleting the
temporary object files it used to build the library.

Here is an example of creating a DLL from a source file @samp{dll.c} and
also creating a program (from an object file called @samp{program.o})
that uses that DLL:

@smallexample
  gcc -c dll.c
  dlltool -e exports.o -l dll.lib dll.o
  gcc dll.o exports.o -o dll.dll
  gcc program.o dll.lib -o program
@end smallexample

The command line options have the following meanings:

@table @code

@item -d @var{filename}
@itemx --input-def @var{filename}
@cindex input .def file
Specifies the name of a .def file to be read in and processed.

@item -b @var{filename}
@itemx --base-file @var{filename}
@cindex base files
Specifies the name of a base file to be read in and processed.  The
contents of this file will be added to the relocation section in the
exports file generated by dlltool.

@item -e @var{filename}
@itemx --output-exp @var{filename}
Specifies the name of the export file to be created by dlltool.

@item -z @var{filename}
@itemx --output-def @var{filename}
Specifies the name of the .def file to be created by dlltool.

@item -l @var{filename}
@itemx --output-lib @var{filename}
Specifies the name of the library file to be created by dlltool.

@item --export-all-symbols
Treat all global and weak defined symbols found in the input object
files as symbols to be exported.  There is a small list of symbols which
are not exported by default; see the @code{--no-default-excludes}
option.  You may add to the list of symbols to not export by using the
@code{--exclude-symbols} option.

@item --no-export-all-symbols
Only export symbols explicitly listed in an input .def file or in
@samp{.drectve} sections in the input object files.  This is the default
behaviour.  The @samp{.drectve} sections are created by @samp{dllexport}
attributes in the source code.

@item --exclude-symbols @var{list}
Do not export the symbols in @var{list}.  This is a list of symbol names
separated by comma or colon characters.  The symbol names should not
contain a leading underscore.  This is only meaningful when
@code{--export-all-symbols} is used.

@item --no-default-excludes
When @code{--export-all-symbols} is used, it will by default avoid
exporting certain special symbols.  The current list of symbols to avoid
exporting is @samp{DllMain@@12}, @samp{DllEntryPoint@@0},
@samp{impure_ptr}.  You may use the @code{--no-default-excludes} option
to go ahead and export these special symbols.  This is only meaningful
when @code{--export-all-symbols} is used.

@item -S @var{path}
@itemx --as @var{path}
Specifies the path, including the filename, of the assembler to be used
to create the exports file.

@item -f @var{switches}
@itemx --as-flags @var{switches}
Specifies any specific command line switches to be passed to the
assembler when building the exports file.  This option will work even if
the @samp{-S} option is not used.  This option only takes one argument,
and if it occurs more than once on the command line, then later
occurrences will override earlier occurrences.  So if it is necessary to
pass multiple switches to the assembler they should be enclosed in
double quotes.

@item -D @var{name}
@itemx --dll-name @var{name}
Specifies the name to be stored in the .def file as the name of the DLL
when the @samp{-e} option is used.  If this option is not present, then
the filename given to the @samp{-e} option will be used as the name of
the DLL.

@item -m @var{machine}
@itemx -machine @var{machine}
Specifies the type of machine for which the library file should be
built.  @code{dlltool} has a built in default type, depending upon how
it was created, but this option can be used to override that.  This is
normally only useful when creating DLLs for an ARM processor, when the
contents of the DLL are actually encode using Thumb instructions.

@item -a
@itemx --add-indirect
Specifies that when @code{dlltool} is creating the exports file it
should add a section which allows the exported functions to be
referenced without using the import library.  Whatever the hell that
means! 

@item -U
@itemx --add-underscore
Specifies that when @code{dlltool} is creating the exports file it
should prepend an underscore to the names of the exported functions. 

@item -k
@itemx --kill-at
Specifies that when @code{dlltool} is creating the exports file it
should not append the string @samp{@@ <number>}.  These numbers are
called ordinal numbers and they represent another way of accessing the
function in a DLL, other than by name.

@item -A
@itemx --add-stdcall-alias
Specifies that when @code{dlltool} is creating the exports file it
should add aliases for stdcall symbols without @samp{@@ <number>}
in addition to the symbols with @samp{@@ <number>}.

@item -x
@itemx --no-idata4
Specifies that when @code{dlltool} is creating the exports and library
files it should omit the .idata4 section.  This is for compatibility
with certain operating systems.

@item -c
@itemx --no-idata5
Specifies that when @code{dlltool} is creating the exports and library
files it should omit the .idata5 section.  This is for compatibility
with certain operating systems.

@item -i
@itemx --interwork
Specifies that @code{dlltool} should mark the objects in the library
file and exports file that it produces as supporting interworking
between ARM and Thumb code.

@item -n
@itemx --nodelete
Makes @code{dlltool} preserve the temporary assembler files it used to
create the exports file.  If this option is repeated then dlltool will
also preserve the temporary object files it uses to create the library
file. 

@item -v
@itemx --verbose
Make dlltool describe what it is doing.

@item -h
@itemx --help
Displays a list of command line options and then exits.

@item -V
@itemx --version
Displays dlltool's version number and then exits.

@end table

@node readelf
@chapter readelf

@cindex ELF file information
@kindex readelf

@smallexample
readelf [ -a | --all ] 
        [ -h | --file-header]
        [ -l | --program-headers | --segments]
        [ -S | --section-headers | --sections]
        [ -e | --headers]
        [ -s | --syms | --symbols]
        [ -n | --notes]
        [ -r | --relocs]
        [ -d | --dynamic]
        [ -V | --version-info]
        [ -D | --use-dynamic]
        [ -x <number> | --hex-dump=<number>]
        [ -w[liaprf] | --debug-dump[=info,=line,=abbrev,=pubnames,=ranges,=frames]]
        [      --histogram]
        [ -v | --version]
        [ -H | --help]
        @var{elffile}@dots{}
@end smallexample

@code{readelf} displays information about one or more ELF format object
files.  The options control what particular information to display.

@var{elffile}@dots{} are the object files to be examined.  At the
moment, @code{readelf} does not support examining archives, nor does it
support examing 64 bit ELF files.

The long and short forms of options, shown here as alternatives, are
equivalent.  At least one option besides @samp{-v} or @samp{-H} must be
given. 

@table @code
@item -a
@itemx --all
Equivalent to specifiying @samp{--file-header},
@samp{--program-headers}, @samp{--sections}, @samp{--symbols},
@samp{--relocs}, @samp{--dynamic}, @samp{--notes} and
@samp{--version-info}. 

@item -h
@itemx --file-header
@cindex ELF file header information
Displays the information contained in the ELF header at the start of the
file.

@item -l
@itemx --program-headers
@itemx --segments
@cindex ELF program header information
@cindex ELF segment information
Displays the information contained in the file's segment headers, if it
has any.

@item -S
@itemx --sections
@itemx --section-headers
@cindex ELF section information
Displays the information contained in the file's section headers, if it
has any.

@item -s
@itemx --symbols
@itemx --syms
@cindex ELF symbol table information
Displays the entries in symbol table section of the file, if it has one.

@item -e
@itemx --headers
Display all the headers in the file.  Equivalent to @samp{-h -l -S}.

@item -n
@itemx --notes
@cindex ELF core notes
Displays the contents of the NOTE segment, if it exists.

@item -r
@itemx --relocs
@cindex ELF reloc information
Displays the contents of the file's relocation section, if it ha one.

@item -d
@itemx --dynamic
@cindex ELF dynamic section information
Displays the contents of the file's dynamic section, if it has one.

@item -V
@itemx --version-info
@cindex ELF version sections informations
Displays the contents of the version sections in the file, it they
exist.

@item -D
@itemx --use-dynamic
When displaying symbols, this option makes @code{readelf} use the
symbol table in the file's dynamic section, rather than the one in the
symbols section.

@item -x <number>
@itemx --hex-dump=<number>
Displays the contents of the indicated section as a hexadecimal dump.

@item -w[liaprf]
@itemx --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]
Displays the contents of the debug sections in the file, if any are
present.  If one of the optional letters or words follows the switch
then only data found in those specific sections will be dumped.

@item --histogram
Display a histogram of bucket list lengths when displaying the contents
of the symbol tables.

@item -v
@itemx --version
Display the version number of readelf.

@item -H
@itemx --help
Display the command line options understood by @code{readelf}.

@end table


@node Selecting The Target System
@chapter Selecting the target system

You can specify three aspects of the target system to the @sc{gnu}
binary file utilities, each in several ways:

@itemize @bullet
@item
the target

@item
the architecture

@item
the linker emulation (which applies to the linker only)
@end itemize

In the following summaries, the lists of ways to specify values are in
order of decreasing precedence.  The ways listed first override those
listed later.

The commands to list valid values only list the values for which the
programs you are running were configured.  If they were configured with
@samp{--enable-targets=all}, the commands list most of the available
values, but a few are left out; not all targets can be configured in at
once because some of them can only be configured @dfn{native} (on hosts
with the same type as the target system).

@menu
* Target Selection::            
* Architecture Selection::      
* Linker Emulation Selection::  
@end menu

@node Target Selection
@section Target Selection

A @dfn{target} is an object file format.  A given target may be
supported for multiple architectures (@pxref{Architecture Selection}).
A target selection may also have variations for different operating
systems or architectures.

The command to list valid target values is @samp{objdump -i}
(the first column of output contains the relevant information).

Some sample values are: @samp{a.out-hp300bsd}, @samp{ecoff-littlemips},
@samp{a.out-sunos-big}.

You can also specify a target using a configuration triplet.  This is
the same sort of name that is passed to @file{configure} to specify a
target.  When you use a configuration triplet as an argument, it must be
fully canonicalized.  You can see the canonical version of a triplet by
running the shell script @file{config.sub} which is included with the
sources.

Some sample configuration triplets are: @samp{m68k-hp-bsd},
@samp{mips-dec-ultrix}, @samp{sparc-sun-sunos}.

@subheading @code{objdump} Target

Ways to specify:

@enumerate
@item
command line option: @samp{-b} or @samp{--target}

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

@subheading @code{objcopy} and @code{strip} Input Target

Ways to specify:

@enumerate
@item
command line options: @samp{-I} or @samp{--input-target}, or @samp{-F} or @samp{--target}

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

@subheading @code{objcopy} and @code{strip} Output Target

Ways to specify:

@enumerate
@item
command line options: @samp{-O} or @samp{--output-target}, or @samp{-F} or @samp{--target}

@item
the input target (see ``@code{objcopy} and @code{strip} Input Target'' above)

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

@subheading @code{nm}, @code{size}, and @code{strings} Target

Ways to specify:

@enumerate
@item
command line option: @samp{--target}

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

@subheading Linker Input Target

Ways to specify:

@enumerate
@item
command line option: @samp{-b} or @samp{--format}
(@pxref{Options,,Options,ld.info,Using LD})

@item
script command @code{TARGET}
(@pxref{Option Commands,,Option Commands,ld.info,Using LD})

@item
environment variable @code{GNUTARGET}
(@pxref{Environment,,Environment,ld.info,Using LD})

@item
the default target of the selected linker emulation
(@pxref{Linker Emulation Selection})
@end enumerate

@subheading Linker Output Target

Ways to specify:

@enumerate
@item
command line option: @samp{-oformat}
(@pxref{Options,,Options,ld.info,Using LD})

@item
script command @code{OUTPUT_FORMAT}
(@pxref{Option Commands,,Option Commands,ld.info,Using LD})

@item
the linker input target (see ``Linker Input Target'' above)
@end enumerate

@node Architecture Selection
@section Architecture selection

An @dfn{architecture} is a type of @sc{cpu} on which an object file is
to run.  Its name may contain a colon, separating the name of the
processor family from the name of the particular @sc{cpu}.

The command to list valid architecture values is @samp{objdump -i} (the
second column contains the relevant information).

Sample values: @samp{m68k:68020}, @samp{mips:3000}, @samp{sparc}.

@subheading @code{objdump} Architecture

Ways to specify:

@enumerate
@item
command line option: @samp{-m} or @samp{--architecture}

@item
deduced from the input file
@end enumerate

@subheading @code{objcopy}, @code{nm}, @code{size}, @code{strings} Architecture

Ways to specify:

@enumerate
@item
deduced from the input file
@end enumerate

@subheading Linker Input Architecture

Ways to specify:

@enumerate
@item
deduced from the input file
@end enumerate

@subheading Linker Output Architecture

Ways to specify:

@enumerate
@item
script command @code{OUTPUT_ARCH}
(@pxref{Option Commands,,Option Commands,ld.info,Using LD})

@item
the default architecture from the linker output target
(@pxref{Target Selection})
@end enumerate

@node Linker Emulation Selection
@section Linker emulation selection

A linker @dfn{emulation} is a ``personality'' of the linker, which gives
the linker default values for the other aspects of the target system.
In particular, it consists of

@itemize @bullet
@item
the linker script

@item
the target

@item
several ``hook'' functions that are run at certain stages of the linking
process to do special things that some targets require
@end itemize

The command to list valid linker emulation values is @samp{ld -V}.

Sample values: @samp{hp300bsd}, @samp{mipslit}, @samp{sun4}.

Ways to specify:

@enumerate
@item
command line option: @samp{-m}
(@pxref{Options,,Options,ld.info,Using LD})

@item
environment variable @code{LDEMULATION}

@item
compiled-in @code{DEFAULT_EMULATION} from @file{Makefile},
which comes from @code{EMUL} in @file{config/@var{target}.mt}
@end enumerate

@node Reporting Bugs
@chapter Reporting Bugs
@cindex bugs
@cindex reporting bugs

Your bug reports play an essential role in making the binary utilities
reliable.

Reporting a bug may help you by bringing a solution to your problem, or
it may not.  But in any case the principal function of a bug report is
to help the entire community by making the next version of the binary
utilities work better.  Bug reports are your contribution to their
maintenance.

In order for a bug report to serve its purpose, you must include the
information that enables us to fix the bug.

@menu
* Bug Criteria::                Have you found a bug?
* Bug Reporting::               How to report bugs
@end menu

@node Bug Criteria
@section Have you found a bug?
@cindex bug criteria

If you are not sure whether you have found a bug, here are some guidelines:

@itemize @bullet
@cindex fatal signal
@cindex crash
@item
If a binary utility gets a fatal signal, for any input whatever, that is
a bug.  Reliable utilities never crash.

@cindex error on valid input
@item
If a binary utility produces an error message for valid input, that is a
bug.

@item
If you are an experienced user of binary utilities, your suggestions for
improvement are welcome in any case.
@end itemize

@node Bug Reporting
@section How to report bugs
@cindex bug reports
@cindex bugs, reporting

A number of companies and individuals offer support for @sc{gnu}
products.  If you obtained the binary utilities 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 @sc{gnu} Emacs
distribution.

In any event, we also recommend that you send bug reports for the binary
utilities to @samp{bug-binutils@@gnu.org}.

The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}.  If you are not sure whether to state a
fact or leave it out, state it!

Often people omit facts because they think they know what causes the
problem and assume that some details do not matter.  Thus, you might
assume that the name of a file you use in an example does not matter.
Well, probably it does not, but one cannot be sure.  Perhaps the bug is
a stray memory reference which happens to fetch from the location where
that pathname is stored in memory; perhaps, if the pathname were
different, the contents of that location would fool the utility 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.  Therefore, always write your bug reports on the assumption
that the bug has not been reported previously.

Sometimes people give a few sketchy facts and ask, ``Does this ring a
bell?''  Those bug reports are useless, and we urge everyone to
@emph{refuse to respond to them} except to chide the sender to report
bugs properly.

To enable us to fix the bug, you should include all these things:

@itemize @bullet
@item
The version of the utility.  Each utility announces it if you start it
with the @samp{--version} argument.

Without this, we will not know whether there is any point in looking for
the bug in the current version of the binary utilities.

@item
Any patches you may have applied to the source, including any patches
made to the @code{BFD} library.

@item
The type of machine you are using, and the operating system name and
version number.

@item
What compiler (and its version) was used to compile the utilities---e.g.
``@code{gcc-2.7}''.

@item
The command arguments you gave the utility to observe the bug.  To
guarantee you will not omit something important, list them all.  A copy
of the Makefile (or the output from make) is sufficient.

If we were to try to guess the arguments, we would probably guess wrong
and then we might not encounter the bug.

@item
A complete input file, or set of input files, that will reproduce the
bug.  If the utility is reading an object file or files, then it is
generally most helpful to send the actual object files, uuencoded if
necessary to get them through the mail system.  Note that
@samp{bug-binutils@@gnu.org} is a mailing list, so you should avoid
sending very large files to it.  Making the files available for
anonymous FTP is OK.

If the source files were produced exclusively using @sc{gnu} programs
(e.g., @code{gcc}, @code{gas}, and/or the @sc{gnu} @code{ld}), then it
may be OK to send the source files rather than the object files.  In
this case, be sure to say exactly what version of @code{gcc}, or
whatever, was used to produce the object files.  Also say how
@code{gcc}, or whatever, was configured.

@item
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 the utility 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 the utility 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 source, send us context diffs, as
generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
option.  Always send diffs from the old file to the new file.  If you
wish to discuss something in the @code{ld} source, refer to 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:

@itemize @bullet
@item
A description of the envelope of the bug.

Often people who encounter a bug spend a lot of time investigating
which changes to the input file will make the bug go away and which
changes will not affect it.

This is often time consuming and not very useful, because the way we
will find the bug is by running a single example under the debugger
with breakpoints, not by pure deduction from a series of examples.
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, 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.

@item
A patch for the bug.

A patch for the bug does help us if it is a good one.  But do not omit
the necessary information, such as the test case, on the assumption that
a patch is all we need.  We might see problems with your patch and decide
to fix the problem another way, or we might not understand it at all.

Sometimes with programs as complicated as the binary utilities it is
very hard to construct an example that will make the program follow a
certain path through the code.  If you do not send us the example, we
will not be able to construct one, so we will not be able to verify that
the bug is fixed.

And if we cannot understand what bug you are trying to fix, or why your
patch should be an improvement, we will not install it.  A test case will
help us to understand.

@item
A guess about what the bug is or what it depends on.

Such guesses are usually wrong.  Even we cannot guess right about such
things without first using the debugger to find the facts.
@end itemize

@node GNU Free Documentation License
@chapter GNU Free Documentation License
@cindex GNU Free Documentation License

                GNU Free Documentation License
                
                   Version 1.1, March 2000

 Copyright (C) 2000  Free Software Foundation, Inc.
  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other
written document "free" in the sense of freedom: to assure everyone
the effective freedom to copy and redistribute it, with or without
modifying it, either commercially or noncommercially.  Secondarily,
this License preserves for the author and publisher a way to get
credit for their work, while not being considered responsible for
modifications made by others.

This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense.  It
complements the GNU General Public License, which is a copyleft
license designed for free software.

We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.


1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a
notice placed by the copyright holder saying it can be distributed
under the terms of this License.  The "Document", below, refers to any
such manual or work.  Any member of the public is a licensee, and is
addressed as "you".

A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject.  (For example, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.

The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, whose contents can be viewed and edited directly and
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup has been designed to thwart or discourage
subsequent modification by readers is not Transparent.  A copy that is
not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML designed for human modification.  Opaque formats include
PostScript, PDF, proprietary formats that can be read and edited only
by proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML produced by some word processors for output
purposes only.

The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.


2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and
you may publicly display copies.


3. COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100,
and the Document's license notice requires Cover Texts, you must enclose
the copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.

If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a publicly-accessible computer-network location containing a complete
Transparent copy of the Document, free of added material, which the
general network-using public has access to download anonymously at no
charge using public-standard network protocols.  If you use the latter
option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this
Transparent copy will remain thus accessible at the stated location
until at least one year after the last time you distribute an Opaque
copy (directly or through your agents or retailers) of that edition to
the public.

It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.


4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct
   from that of the Document, and from those of previous versions
   (which should, if there were any, be listed in the History section
   of the Document).  You may use the same title as a previous version
   if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
   responsible for authorship of the modifications in the Modified
   Version, together with at least five of the principal authors of the
   Document (all of its principal authors, if it has less than five).
C. State on the Title page the name of the publisher of the
   Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
   adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
   giving the public permission to use the Modified Version under the
   terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
   and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section entitled "History", and its title, and add to
   it an item stating at least the title, year, new authors, and
   publisher of the Modified Version as given on the Title Page.  If
   there is no section entitled "History" in the Document, create one
   stating the title, year, authors, and publisher of the Document as
   given on its Title Page, then add an item describing the Modified
   Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
   public access to a Transparent copy of the Document, and likewise
   the network locations given in the Document for previous versions
   it was based on.  These may be placed in the "History" section.
   You may omit a network location for a work that was published at
   least four years before the Document itself, or if the original
   publisher of the version it refers to gives permission.
K. In any section entitled "Acknowledgements" or "Dedications",
   preserve the section's title, and preserve in the section all the
   substance and tone of each of the contributor acknowledgements
   and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
   unaltered in their text and in their titles.  Section numbers
   or the equivalent are not considered part of the section titles.
M. Delete any section entitled "Endorsements".  Such a section
   may not be included in the Modified Version.
N. Do not retitle any existing section as "Endorsements"
   or to conflict in title with any Invariant Section.

If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.

You may add a section entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.

You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.


5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice.

The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History"
in the various original documents, forming one section entitled
"History"; likewise combine any sections entitled "Acknowledgements",
and any sections entitled "Dedications".  You must delete all sections
entitled "Endorsements."


6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.


7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, does not as a whole count as a Modified Version
of the Document, provided no compilation copyright is claimed for the
compilation.  Such a compilation is called an "aggregate", and this
License does not apply to the other self-contained works thus compiled
with the Document, on account of their being thus compiled, if they
are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one quarter
of the entire aggregate, the Document's Cover Texts may be placed on
covers that surround only the Document within the aggregate.
Otherwise they must appear on covers around the whole aggregate.


8. TRANSLATION

Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License provided that you also include the
original English version of this License.  In case of a disagreement
between the translation and the original English version of this
License, the original English version will prevail.


9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License.  Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License.  However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.


10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.


ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:

@smallexample
    Copyright (c)  YEAR  YOUR NAME.
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.1
    or any later version published by the Free Software Foundation;
    with the Invariant Sections being LIST THEIR TITLES, with the
    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
    A copy of the license is included in the section entitled "GNU
    Free Documentation License".
@end smallexample

If you have no Invariant Sections, write "with no Invariant Sections"
instead of saying which ones are invariant.  If you have no
Front-Cover Texts, write "no Front-Cover Texts" instead of
"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

@node Index
@unnumbered Index

@printindex cp

@contents
@bye
