\input texinfo       @c                    -*- Texinfo -*-
@setfilename binutils.info
@settitle @sc{gnu} Binary Utilities
@finalout
@synindex ky cp

@c man begin INCLUDE
@include bfdver.texi
@c man end

@copying
@c man begin COPYRIGHT
Copyright @copyright{} 1991-2021 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.3
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''.

@c man end
@end copying

@dircategory Software development
@direntry
* Binutils: (binutils).         The GNU binary utilities.
@end direntry

@dircategory Individual utilities
@direntry
* addr2line: (binutils)addr2line. Convert addresses to file and line.
* ar: (binutils)ar.               Create, modify, and extract from archives.
* c++filt: (binutils)c++filt.	  Filter to demangle encoded C++ symbols.
* cxxfilt: (binutils)c++filt.     MS-DOS name for c++filt.
* dlltool: (binutils)dlltool.	  Create files needed to build and use DLLs.
* 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.
* elfedit: (binutils)elfedit.     Update ELF header and property of ELF files.
* windmc: (binutils)windmc.	  Generator for Windows message resources.
* windres: (binutils)windres.	  Manipulate Windows resources.
@end direntry

@titlepage
@title The @sc{gnu} Binary Utilities
@ifset VERSION_PACKAGE
@subtitle @value{VERSION_PACKAGE}
@end ifset
@subtitle Version @value{VERSION}
@sp 1
@subtitle @value{UPDATED}
@author Roland H. Pesch
@author Jeffrey M. Osier
@author Cygnus Support
@page

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

@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@contents

@node Top
@top Introduction

@cindex version
This brief manual contains documentation for the @sc{gnu} binary
utilities
@ifset VERSION_PACKAGE
@value{VERSION_PACKAGE}
@end ifset
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 elfedit
Update the ELF header and program property of ELF files.

@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 windres
Manipulate Windows resources

@item windmc
Generator for Windows message 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 version 1.3.  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
* 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
* windmc::			Generator for Windows message resources
* windres::			Manipulate Windows resources
* dlltool::			Create files needed to build and use DLLs
* readelf::                     Display the contents of ELF format files
* elfedit::                     Update ELF header and property of ELF files
* Common Options::              Command-line options for all utilities
* Selecting the Target System:: How these utilities determine the target
* debuginfod::                  Using binutils with debuginfod
* Reporting Bugs::              Reporting Bugs
* GNU Free Documentation License::  GNU Free Documentation License
* Binutils Index::              Binutils Index
@end menu

@node ar
@chapter ar

@kindex ar
@cindex archives
@cindex collections of files

@c man title ar create, modify, and extract from archives

@smallexample
ar [-]@var{p}[@var{mod}] [@option{--plugin} @var{name}] [@option{--target} @var{bfdname}] [@option{--output} @var{dirname}] [@option{--record-libdeps} @var{libdeps}] [@var{relpos}] [@var{count}] @var{archive} [@var{member}@dots{}]
ar -M [ <mri-script ]
@end smallexample

@c man begin DESCRIPTION ar

The @sc{gnu} @command{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} @command{ar} can maintain archives whose members have names of any
length; however, depending on how @command{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
@command{ar} is considered a binary utility because archives of this sort
are most often used as @dfn{libraries} holding commonly needed
subroutines.  Since libraries often will depend on other libraries,
@command{ar} can also record the dependencies of a library when the
@option{--record-libdeps} option is specified.

@cindex symbol index
@command{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 @command{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 @command{ar} called
@command{ranlib} can be used to add just the table.

@cindex thin archives
@sc{gnu} @command{ar} can optionally create a @emph{thin} archive,
which contains a symbol index and references to the original copies
of the member files of the archive.  This is useful for building
libraries for use within a local build tree, where the relocatable
objects are expected to remain available, and copying the contents of
each object would only waste time and space.

An archive can either be @emph{thin} or it can be normal.  It cannot
be both at the same time.  Once an archive is created its format
cannot be changed without first deleting it and then creating a new
archive in its place.

Thin archives are also @emph{flattened}, so that adding one thin
archive to another thin archive does not nest it, as would happen with
a normal archive.  Instead the elements of the first archive are added
individually to the second archive.

The paths to the elements of the archive are stored relative to the
archive itself.

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

@c man end

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

@page
@node ar cmdline
@section Controlling @command{ar} on the Command Line

@smallexample
@c man begin SYNOPSIS ar
ar [@option{-X32_64}] [@option{-}]@var{p}[@var{mod}] [@option{--plugin} @var{name}] [@option{--target} @var{bfdname}] [@option{--output} @var{dirname}] [@option{--record-libdeps} @var{libdeps}] [@var{relpos}] [@var{count}] @var{archive} [@var{member}@dots{}]
@c man end
@end smallexample

@cindex Unix compatibility, @command{ar}
When you use @command{ar} in the Unix style, @command{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.

@c man begin OPTIONS ar

@sc{gnu} @command{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 @samp
@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, @command{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 @command{ar} list each file as it is appended.

Since the point of this operation is speed, implementations of
@command{ar} have the option of not updating the archive's symbol
table if one exists.  Too many different systems however assume that
symbol tables are always up-to-date, so @sc{gnu} @command{ar} will
rebuild the table even with a quick append.

Note - @sc{gnu} @command{ar} treats the command @samp{qs} as a
synonym for @samp{r} - replacing already existing files in the
archive and appending new ones at the end.

@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, @command{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 s
@cindex ranlib
Add an index to the archive, or update it if it already exists.  Note
this command is an exception to the rule that there can only be one
command letter, as it is possible to use it as either a command or a
modifier.  In either case it does the same thing.

@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, but if the modifier
@samp{O} is specified, then the corresponding offset of the member is also
displayed.  Finally, in order to see the modes (permissions), timestamp,
owner, group, and size the @samp{v} modifier should be included.

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
@command{ar} list each name as it extracts it.

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

Files cannot be extracted from a thin archive, and there are
restrictions on extracting from archives created with @option{P}: The
paths must not be absolute, may not contain @code{..}, and any
subdirectories in the paths must exist.  If it is desired to avoid
these restrictions then used the @option{--output} option to specify
an output directory.
@end table

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

@table @samp
@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 D
@cindex deterministic archives
@kindex --enable-deterministic-archives
Operate in @emph{deterministic} mode.  When adding files and the archive
index use zero for UIDs, GIDs, timestamps, and use consistent file modes
for all files.  When this option is used, if @command{ar} is used with
identical options and identical input files, multiple runs will create
identical output files regardless of the input files' owners, groups,
file modes, or modification times.

If @file{binutils} was configured with
@option{--enable-deterministic-archives}, then this mode is on by default.
It can be disabled with the @samp{U} modifier, below.

@item f
Truncate names in the archive.  @sc{gnu} @command{ar} will normally permit file
names of any length.  This will cause it to create archives which are
not compatible with the native @command{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
@c This modifier was accepted but not used.
@c whaffor ar l modifier??? presumably compat; with
@c what???---doc@@cygnus.com, 25jan91
Specify dependencies of this library.  The dependencies must immediately
follow this option character, must use the same syntax as the linker
command line, and must be specified within a single argument.  I.e., if
multiple items are needed, they must be quoted to form a single command
line argument.  For example @samp{L "-L/usr/local/lib -lmydep1 -lmydep2"}

@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 O
@cindex offsets of files
Display member offsets inside the archive. Use together with the @samp{t}
option.

@item P
Use the full path name when matching or storing names in the archive.
Archives created with full path names are not POSIX compliant, and
thus may not work with tools other than up to date @sc{gnu} tools.
Modifying such archives with @sc{gnu} @command{ar} without using
@option{P} will remove the full path names unless the archive is a
thin archive.  Note that @option{P} may be useful when adding files to
a thin archive since @option{r} without @option{P} ignores the path
when choosing which element to replace.  Thus
@smallexample
ar rcST archive.a subdir/file1 subdir/file2 file1
@end smallexample
will result in the first @code{subdir/file1} being replaced with
@code{file1} from the current directory.  Adding @option{P} will
prevent this replacement.

@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 T
@cindex creating thin archive
Make the specified @var{archive} a @emph{thin} archive.  If it already
exists and is a regular archive, the existing members must be present
in the same directory as @var{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 U
@cindex deterministic archives
@kindex --enable-deterministic-archives
Do @emph{not} operate in @emph{deterministic} mode.  This is the inverse
of the @samp{D} modifier, above: added files and the archive index will
get their actual UID, GID, timestamp, and file mode values.

This is the default unless @file{binutils} was configured with
@option{--enable-deterministic-archives}.

@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 @command{ar}.
@end table

The @command{ar} program also supports some command-line options which
are neither modifiers nor actions, but which do change its behaviour
in specific ways:

@table @samp
@item --help
Displays the list of command-line options supported by @command{ar}
and then exits.

@item --version
Displays the version information of @command{ar} and then exits.

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

@item --plugin @var{name}
@cindex plugins
The optional command-line switch @option{--plugin @var{name}} causes
@command{ar} to load the plugin called @var{name} which adds support
for more file formats, including object files with link-time
optimization information.

This option is only available if the toolchain has been built with
plugin support enabled.

If @option{--plugin} is not provided, but plugin support has been
enabled then @command{ar} iterates over the files in
@file{$@{libdir@}/bfd-plugins} in alphabetic order and the first
plugin that claims the object in question is used.

Please note that this plugin search directory is @emph{not} the one
used by @command{ld}'s @option{-plugin} option.  In order to make
@command{ar} use the  linker plugin it must be copied into the
@file{$@{libdir@}/bfd-plugins} directory.  For GCC based compilations
the linker plugin is called @file{liblto_plugin.so.0.0.0}.  For Clang
based compilations it is called @file{LLVMgold.so}.  The GCC plugin
is always backwards compatible with earlier versions, so it is
sufficient to just copy the newest one.

@item --target @var{target}
The optional command-line switch @option{--target @var{bfdname}}
specifies that the archive members are in an object code format
different from your system's default format.  See
@xref{Target Selection}, for more information.

@item --output @var{dirname}
The @option{--output} option can be used to specify a path to a
directory into which archive members should be extracted.  If this
option is not specified then the current directory will be used.

Note - although the presence of this option does imply a @option{x} 
extraction operation that option must still be included on the command
line.

@item --record-libdeps @var{libdeps}
The @option{--record-libdeps} option is identical to the @option{l} modifier,
just handled in long form.

@end table
@c man end

@ignore
@c man begin SEEALSO ar
nm(1), ranlib(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node ar scripts
@section Controlling @command{ar} with a Script

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

@cindex MRI compatibility, @command{ar}
@cindex scripts, @command{ar}
If you use the single command-line option @samp{-M} with @command{ar}, you
can control its operation with a rudimentary command language.  This
form of @command{ar} operates interactively if standard input is coming
directly from a terminal.  During interactive use, @command{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 @command{ar} abandons execution (with a nonzero exit code)
on any error.

The @command{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} @command{ar} for developers who already have scripts
written for the MRI ``librarian'' program.

The syntax for the @command{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 @command{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 @command{ar} scripts, or when using
@command{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, @command{ar} directs the
output to that file.

@item END
Exit from @command{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} @command{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 @command{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

@c man title nm list symbols from object files

@smallexample
@c man begin SYNOPSIS nm
nm [@option{-A}|@option{-o}|@option{--print-file-name}]
   [@option{-a}|@option{--debug-syms}]
   [@option{-B}|@option{--format=bsd}]
   [@option{-C}|@option{--demangle}[=@var{style}]]
   [@option{-D}|@option{--dynamic}]
   [@option{-f}@var{format}|@option{--format=}@var{format}]
   [@option{-g}|@option{--extern-only}]
   [@option{-h}|@option{--help}]
   [@option{--ifunc-chars=@var{CHARS}}]
   [@option{-j}|@option{--format=just-symbols}]
   [@option{-l}|@option{--line-numbers}] [@option{--inlines}]
   [@option{-n}|@option{-v}|@option{--numeric-sort}]
   [@option{-P}|@option{--portability}]
   [@option{-p}|@option{--no-sort}]
   [@option{-r}|@option{--reverse-sort}]
   [@option{-S}|@option{--print-size}]
   [@option{-s}|@option{--print-armap}]
   [@option{-t} @var{radix}|@option{--radix=}@var{radix}]
   [@option{-u}|@option{--undefined-only}]
   [@option{-V}|@option{--version}]
   [@option{-X 32_64}]
   [@option{--defined-only}]
   [@option{--no-demangle}]
   [@option{--no-recurse-limit}|@option{--recurse-limit}]]
   [@option{--plugin} @var{name}]
   [@option{--size-sort}]
   [@option{--special-syms}]
   [@option{--synthetic}]
   [@option{--target=}@var{bfdname}]
   [@option{--with-symbol-versions}]
   [@option{--without-symbol-versions}]
   [@var{objfile}@dots{}]
@c man end
@end smallexample

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

For each symbol, @command{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
usually local; if uppercase, the symbol is global (external).  There
are however a few lowercase symbols that are shown for special global
symbols (@code{u}, @code{v} and @code{w}).

@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
@itemx b
The symbol is in the BSS data section.  This section typically
contains zero-initialized or uninitialized data, although the exact
behavior is system dependent.

@item C
@itemx 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.
@ifclear man
For more details on common symbols, see the discussion of
--warn-common in @ref{Options,,Linker options,ld.info,The GNU linker}.
@end ifclear
The lower case @var{c} character is used when the symbol is in a
special section for small commons.

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

@item G
@itemx 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
For PE format files this indicates that the symbol is in a section
specific to the implementation of DLLs.

For ELF format files this indicates that the symbol is an indirect
function.  This is a GNU extension to the standard set of ELF symbol
types.  It indicates a symbol which if referenced by a relocation does
not evaluate to its address, but instead must be invoked at runtime.
The runtime execution will then return the value to be used in the
relocation.

Note - the actual symbols display for GNU indirect symbols is
controlled by the @option{--ifunc-chars} command line option.  If this
option has been provided then the first character in the string will
be used for global indirect function symbols.  If the string contains
a second character then that will be used for local indirect function
symbols.

@item I
The symbol is an indirect reference to another symbol.

@item N
The symbol is a debugging symbol.

@item n
The symbol is in the read-only data section.

@item p
The symbol is in a stack unwind section.

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

@item S
@itemx s
The symbol is in an uninitialized or zero-initialized data section
for small objects.

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

@item U
The symbol is undefined.

@item u
The symbol is a unique global symbol.  This is a GNU extension to the
standard set of ELF symbol bindings.  For such a symbol the dynamic linker
will make sure that in the entire process there is just one symbol with
this name and type in use.

@item V
@itemx 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.  On some
systems, uppercase indicates that a default value has been specified.

@item W
@itemx 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 symbol is determined in a system-specific manner without
error.  On some systems, uppercase indicates that a default value has been
specified.

@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.

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

@item
The symbol name.  If a symbol has version information associated with it,
then the version information is displayed as well.  If the versioned
symbol is undefined or hidden from linker, the version string is displayed
as a suffix to the symbol name, preceded by an @@ character.  For example
@samp{foo@@VER_1}.  If the version is the default version to be used when
resolving unversioned references to the symbol, then it is displayed as a
suffix preceded by two @@ characters.  For example @samp{foo@@@@VER_2}.
@end itemize

@c man end

@c man begin OPTIONS nm
The long and short forms of options, shown here as alternatives, are
equivalent.

@table @env
@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 @command{nm} format
@cindex @command{nm} compatibility
The same as @option{--format=bsd} (for compatibility with the MIPS @command{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 --recurse-limit
@itemx --no-recurse-limit
@itemx --recursion-limit
@itemx --no-recursion-limit
Enables or disables a limit on the amount of recursion performed
whilst demangling strings.  Since the name mangling formats allow for
an infinite level of recursion it is possible to create strings whose
decoding will exhaust the amount of stack space available on the host
machine, triggering a memory fault.  The limit tries to prevent this
from happening by restricting recursion to 2048 levels of nesting.

The default is for this limit to be enabled, but disabling it may be
necessary in order to demangle truly complicated names.  Note however
that if the recursion limit is disabled then stack exhaustion is
possible and any bug reports about such an event will be rejected.

@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 @command{nm} format
@cindex @command{nm} compatibility
Use the output format @var{format}, which can be @code{bsd},
@code{sysv}, @code{posix} or @code{just-symbols}.  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 -h
@itemx --help
Show a summary of the options to @command{nm} and exit.

@item --ifunc-chars=@var{CHARS}
When display GNU indirect function symbols @command{nm} will default
to using the @code{i} character for both local indirect functions and
global indirect functions.  The @option{--ifunc-chars} option allows
the user to specify a string containing one or two characters. The
first character will be used for global indirect function symbols and
the second character, if present, will be used for local indirect
function symbols.

@item j
The same as @option{--format=just-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 --inlines
@cindex objdump inlines
When option @option{-l} is active, if the address belongs to a
function that was inlined, then this option causes the source 
information for all enclosing scopes back to the first non-inlined
function to be printed as well.  For example, if @code{main} inlines
@code{callee1} which inlines @code{callee2}, and address is from
@code{callee2}, the source information for @code{callee1} and @code{main}
will also be printed.

@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 -r
@itemx --reverse-sort
Reverse the order of the sort (whether numeric or alphabetic); let the
last come first.

@item -S
@itemx --print-size
Print both value and size of defined symbols for the @code{bsd} output style.
This option has no effect for object formats that do not record symbol
sizes, unless @samp{--size-sort} is also used in which case a
calculated size is displayed.

@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 @command{ar} or @command{ranlib}) of which modules
contain definitions for which names.

@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 -u
@itemx --undefined-only
@cindex external symbols
@cindex undefined symbols
Display only undefined symbols (those external to each object file).

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

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

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

@item --plugin @var{name}
@cindex plugins
Load the plugin called @var{name} to add support for extra target
types.  This option is only available if the toolchain has been built
with plugin support enabled.

If @option{--plugin} is not provided, but plugin support has been
enabled then @command{nm} iterates over the files in
@file{$@{libdir@}/bfd-plugins} in alphabetic order and the first
plugin that claims the object in question is used.

Please note that this plugin search directory is @emph{not} the one
used by @command{ld}'s @option{-plugin} option.  In order to make
@command{nm} use the  linker plugin it must be copied into the
@file{$@{libdir@}/bfd-plugins} directory.  For GCC based compilations
the linker plugin is called @file{liblto_plugin.so.0.0.0}.  For Clang
based compilations it is called @file{LLVMgold.so}.  The GCC plugin
is always backwards compatible with earlier versions, so it is
sufficient to just copy the newest one.

@item --size-sort
Sort symbols by size.  For ELF objects symbol sizes are read from the
ELF, for other object types the symbol sizes are computed as the
difference between the value of the symbol and the value of the symbol
with the next higher value.  If the @code{bsd} output format is used
the size of the symbol is printed, rather than the value, and
@samp{-S} must be used in order both size and value to be printed.

@item --special-syms
Display symbols which have a target-specific special meaning.  These
symbols are usually used by the target for some special processing and
are not normally helpful when included in the normal symbol lists.
For example for ARM targets this option would skip the mapping symbols
used to mark transitions between ARM code, THUMB code and data.

@item --synthetic
Include synthetic symbols in the output.  These are special symbols
created by the linker for various purposes.  They are not shown by
default since they are not part of the binary's original source code.

@item --with-symbol-versions
@item --without-symbol-versions
Enables or disables the display of symbol version information.  The
version string is displayed as a suffix to the symbol name, preceded
by an @@ character.  For example @samp{foo@@VER_1}.  If the version is
the default version to be used when resolving unversioned references
to the symbol then it is displayed as a suffix preceded by two @@
characters.  For example @samp{foo@@@@VER_2}.  By default, symbol
version information is displayed.

@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.

@end table

@c man end

@ignore
@c man begin SEEALSO nm
ar(1), objdump(1), ranlib(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node objcopy
@chapter objcopy

@c man title objcopy copy and translate object files

@smallexample
@c man begin SYNOPSIS objcopy
objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
        [@option{-I} @var{bfdname}|@option{--input-target=}@var{bfdname}]
        [@option{-O} @var{bfdname}|@option{--output-target=}@var{bfdname}]
        [@option{-B} @var{bfdarch}|@option{--binary-architecture=}@var{bfdarch}]
        [@option{-S}|@option{--strip-all}]
        [@option{-g}|@option{--strip-debug}]
        [@option{--strip-unneeded}]
        [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}]
        [@option{--keep-file-symbols}]
        [@option{--keep-section-symbols}]
        [@option{-N} @var{symbolname}|@option{--strip-symbol=}@var{symbolname}]
        [@option{--strip-unneeded-symbol=}@var{symbolname}]
        [@option{-G} @var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}]
        [@option{--localize-hidden}]
        [@option{-L} @var{symbolname}|@option{--localize-symbol=}@var{symbolname}]
        [@option{--globalize-symbol=}@var{symbolname}]
        [@option{--globalize-symbols=}@var{filename}]
        [@option{-W} @var{symbolname}|@option{--weaken-symbol=}@var{symbolname}]
        [@option{-w}|@option{--wildcard}]
        [@option{-x}|@option{--discard-all}]
        [@option{-X}|@option{--discard-locals}]
        [@option{-b} @var{byte}|@option{--byte=}@var{byte}]
        [@option{-i} [@var{breadth}]|@option{--interleave}[=@var{breadth}]]
        [@option{--interleave-width=}@var{width}]
        [@option{-j} @var{sectionpattern}|@option{--only-section=}@var{sectionpattern}]
        [@option{-R} @var{sectionpattern}|@option{--remove-section=}@var{sectionpattern}]
        [@option{--keep-section=}@var{sectionpattern}]
        [@option{--remove-relocations=}@var{sectionpattern}]
        [@option{-p}|@option{--preserve-dates}]
        [@option{-D}|@option{--enable-deterministic-archives}]
        [@option{-U}|@option{--disable-deterministic-archives}]
        [@option{--debugging}]
        [@option{--gap-fill=}@var{val}]
        [@option{--pad-to=}@var{address}]
        [@option{--set-start=}@var{val}]
        [@option{--adjust-start=}@var{incr}]
        [@option{--change-addresses=}@var{incr}]
        [@option{--change-section-address} @var{sectionpattern}@{=,+,-@}@var{val}]
        [@option{--change-section-lma} @var{sectionpattern}@{=,+,-@}@var{val}]
        [@option{--change-section-vma} @var{sectionpattern}@{=,+,-@}@var{val}]
        [@option{--change-warnings}] [@option{--no-change-warnings}]
        [@option{--set-section-flags} @var{sectionpattern}=@var{flags}]
        [@option{--set-section-alignment} @var{sectionpattern}=@var{align}]
        [@option{--add-section} @var{sectionname}=@var{filename}]
        [@option{--dump-section} @var{sectionname}=@var{filename}]
        [@option{--update-section} @var{sectionname}=@var{filename}]
        [@option{--rename-section} @var{oldname}=@var{newname}[,@var{flags}]]
        [@option{--long-section-names} @{enable,disable,keep@}]
        [@option{--change-leading-char}] [@option{--remove-leading-char}]
        [@option{--reverse-bytes=}@var{num}]
        [@option{--srec-len=}@var{ival}] [@option{--srec-forceS3}]
        [@option{--redefine-sym} @var{old}=@var{new}]
        [@option{--redefine-syms=}@var{filename}]
        [@option{--weaken}]
        [@option{--keep-symbols=}@var{filename}]
        [@option{--strip-symbols=}@var{filename}]
        [@option{--strip-unneeded-symbols=}@var{filename}]
        [@option{--keep-global-symbols=}@var{filename}]
        [@option{--localize-symbols=}@var{filename}]
        [@option{--weaken-symbols=}@var{filename}]
        [@option{--add-symbol} @var{name}=[@var{section}:]@var{value}[,@var{flags}]]
        [@option{--alt-machine-code=}@var{index}]
        [@option{--prefix-symbols=}@var{string}]
        [@option{--prefix-sections=}@var{string}]
        [@option{--prefix-alloc-sections=}@var{string}]
        [@option{--add-gnu-debuglink=}@var{path-to-file}]
        [@option{--only-keep-debug}]
        [@option{--strip-dwo}]
        [@option{--extract-dwo}]
        [@option{--extract-symbol}]
        [@option{--writable-text}]
        [@option{--readonly-text}]
        [@option{--pure}]
        [@option{--impure}]
        [@option{--file-alignment=}@var{num}]
        [@option{--heap=}@var{size}]
        [@option{--image-base=}@var{address}]
        [@option{--section-alignment=}@var{num}]
        [@option{--stack=}@var{size}]
        [@option{--subsystem=}@var{which}:@var{major}.@var{minor}]
        [@option{--compress-debug-sections}]
        [@option{--decompress-debug-sections}]
        [@option{--elf-stt-common=@var{val}}]
        [@option{--merge-notes}]
        [@option{--no-merge-notes}]
        [@option{--verilog-data-width=@var{val}}]
        [@option{-v}|@option{--verbose}]
        [@option{-V}|@option{--version}]
        [@option{--help}] [@option{--info}]
        @var{infile} [@var{outfile}]
@c man end
@end smallexample

@c man begin DESCRIPTION objcopy
The @sc{gnu} @command{objcopy} utility copies the contents of an object
file to another.  @command{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 @command{objcopy} is controlled by command-line options.
Note that @command{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.

@command{objcopy} creates temporary files to do its translations and
deletes them afterward.  @command{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}.

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

@command{objcopy} can be used to generate a raw binary file by using an
output target of @samp{binary} (e.g., use @option{-O binary}).  When
@command{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 @option{-S} to remove sections containing debugging information.  In
some cases @option{-R} will be useful to remove sections which contain
information that is not needed by the binary file.

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

@c man end

@c man begin OPTIONS objcopy

@table @env
@item @var{infile}
@itemx @var{outfile}
The input and output files, respectively.
If you do not specify @var{outfile}, @command{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 -B @var{bfdarch}
@itemx --binary-architecture=@var{bfdarch}
Useful when transforming a architecture-less input file into an object file.
In this case the output architecture can be set to @var{bfdarch}.  This
option will be ignored if the input file has a known @var{bfdarch}.  You
can access this binary data inside a program by referencing the special
symbols that are created by the conversion process.  These symbols are
called _binary_@var{objfile}_start, _binary_@var{objfile}_end and
_binary_@var{objfile}_size.  e.g. you can transform a picture file into
an object file and then access it in your code using these symbols.

@item -j @var{sectionpattern}
@itemx --only-section=@var{sectionpattern}
Copy only the indicated sections 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.  Wildcard
characters are accepted in @var{sectionpattern}.

If the first character of @var{sectionpattern} is the exclamation
point (!) then matching sections will not be copied, even if earlier
use of @option{--only-section} on the same command line would
otherwise copy it.  For example:

@smallexample
  --only-section=.text.* --only-section=!.text.foo
@end smallexample

will copy all sectinos matching '.text.*' but not the section
'.text.foo'.

@item -R @var{sectionpattern}
@itemx --remove-section=@var{sectionpattern}
Remove any section matching @var{sectionpattern} from the output file.
This option may be given more than once.  Note that using this option
inappropriately may make the output file unusable.  Wildcard
characters are accepted in @var{sectionpattern}.  Using both the
@option{-j} and @option{-R} options together results in undefined
behaviour.

If the first character of @var{sectionpattern} is the exclamation
point (!) then matching sections will not be removed even if an
earlier use of @option{--remove-section} on the same command line
would otherwise remove it.  For example:

@smallexample
  --remove-section=.text.* --remove-section=!.text.foo
@end smallexample

will remove all sections matching the pattern '.text.*', but will not
remove the section '.text.foo'.

@item --keep-section=@var{sectionpattern}
When removing sections from the output file, keep sections that match
@var{sectionpattern}.

@item --remove-relocations=@var{sectionpattern}
Remove non-dynamic relocations from the output file for any section
matching @var{sectionpattern}.  This option may be given more than
once.  Note that using this option inappropriately may make the output
file unusable, and attempting to remove a dynamic relocation section
such as @samp{.rela.plt} from an executable or shared library with
@option{--remove-relocations=.plt} will not work.  Wildcard characters
are accepted in @var{sectionpattern}.
For example:

@smallexample
  --remove-relocations=.text.*
@end smallexample

will remove the relocations for all sections matching the pattern
'.text.*'.

If the first character of @var{sectionpattern} is the exclamation
point (!) then matching sections will not have their relocation
removed even if an earlier use of @option{--remove-relocations} on the
same command line would otherwise cause the relocations to be removed.
For example:

@smallexample
  --remove-relocations=.text.* --remove-relocations=!.text.foo
@end smallexample

will remove all relocations for sections matching the pattern
'.text.*', but will not remove relocations for the section
'.text.foo'.

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

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

@item --strip-unneeded
Remove all symbols that are not needed for relocation processing in
addition to debugging symbols and sections stripped by
@option{--strip-debug}.

@item -K @var{symbolname}
@itemx --keep-symbol=@var{symbolname}
When stripping symbols, keep symbol @var{symbolname} even if it would
normally be stripped.  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 --strip-unneeded-symbol=@var{symbolname}
Do not copy symbol @var{symbolname} from the source file unless it is needed
by a relocation.  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.  Note: this option cannot be used in
conjunction with the @option{--globalize-symbol} or
@option{--globalize-symbols} options.

@item --localize-hidden
In an ELF object, mark all symbols that have hidden or internal visibility
as local.  This option applies on top of symbol-specific localization options
such as @option{-L}.

@item -L @var{symbolname}
@itemx --localize-symbol=@var{symbolname}
Convert a global or weak symbol called @var{symbolname} into a local
symbol, so that it is not visible externally.  This option may be
given more than once.  Note - unique symbols are not converted.

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

@item --globalize-symbol=@var{symbolname}
Give symbol @var{symbolname} global scoping so that it is visible
outside of the file in which it is defined.  This option may be given
more than once.  Note: this option cannot be used in conjunction with
the @option{-G} or @option{--keep-global-symbol} options.

@item -w
@itemx --wildcard
Permit regular expressions in @var{symbolname}s used in other command
line options.  The question mark (?), asterisk (*), backslash (\) and
square brackets ([]) operators can be used anywhere in the symbol
name.  If the first character of the symbol name is the exclamation
point (!) then the sense of the switch is reversed for that symbol.
For example:

@smallexample
  -w -W !foo -W fo*
@end smallexample

would cause objcopy to weaken all symbols that start with ``fo''
except for the symbol ``foo''.

@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}
If interleaving has been enabled via the @option{--interleave} option
then start the range of bytes to keep at the @var{byte}th byte.
@var{byte} can be in the range from 0 to @var{breadth}-1, where
@var{breadth} is the value given by the @option{--interleave} option.

@item -i [@var{breadth}]
@itemx --interleave[=@var{breadth}]
Only copy a range out of every @var{breadth} bytes.  (Header data is
not affected).  Select which byte in the range begins the copy with
the @option{--byte} option.  Select the width of the range with the
@option{--interleave-width} option.

This option is useful for creating files to program @sc{rom}.  It is
typically used with an @code{srec} output target.  Note that
@command{objcopy} will complain if you do not specify the
@option{--byte} option as well.

The default interleave breadth is 4, so with @option{--byte} set to 0,
@command{objcopy} would copy the first byte out of every four bytes
from the input to the output.

@item --interleave-width=@var{width}
When used with the @option{--interleave} option, copy @var{width}
bytes at a time.  The start of the range of bytes to be copied is set
by the @option{--byte} option, and the extent of the range is set with
the @option{--interleave} option.

The default value for this option is 1.  The value of @var{width} plus
the @var{byte} value set by the @option{--byte} option must not exceed
the interleave breadth set by the @option{--interleave} option.

This option can be used to create images for two 16-bit flashes interleaved
in a 32-bit bus by passing @option{-b 0 -i 4 --interleave-width=2}
and @option{-b 2 -i 4 --interleave-width=2} to two @command{objcopy}
commands.  If the input was '12345678' then the outputs would be
'1256' and '3478' respectively.

@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 -D
@itemx --enable-deterministic-archives
@cindex deterministic archives
@kindex --enable-deterministic-archives
Operate in @emph{deterministic} mode.  When copying archive members
and writing the archive index, use zero for UIDs, GIDs, timestamps,
and use consistent file modes for all files.

If @file{binutils} was configured with
@option{--enable-deterministic-archives}, then this mode is on by default.
It can be disabled with the @samp{-U} option, below.

@item -U
@itemx --disable-deterministic-archives
@cindex deterministic archives
@kindex --enable-deterministic-archives
Do @emph{not} operate in @emph{deterministic} mode.  This is the
inverse of the @option{-D} option, above: when copying archive members
and writing the archive index, use their actual UID, GID, timestamp,
and file mode values.

This is the default unless @file{binutils} was configured with
@option{--enable-deterministic-archives}.

@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 @option{--gap-fill} (default zero).

@item --set-start @var{val}
Set the start address (also known as the entry 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 (also known as the entry 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{sectionpattern}@{=,+,-@}@var{val}
@itemx --adjust-section-vma @var{sectionpattern}@{=,+,-@}@var{val}
@cindex changing section address
Set or change both the VMA address and the LMA address of any section
matching @var{sectionpattern}.  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
@option{--change-addresses}, above. If @var{sectionpattern} does not
match any sections in the input file, a warning will be issued, unless
@option{--no-change-warnings} is used.

@item --change-section-lma @var{sectionpattern}@{=,+,-@}@var{val}
@cindex changing section LMA
Set or change the LMA address of any sections matching
@var{sectionpattern}.  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 @option{--change-addresses}, above.  If
@var{sectionpattern} does not match any sections in the input file, a
warning will be issued, unless @option{--no-change-warnings} is used.

@item --change-section-vma @var{sectionpattern}@{=,+,-@}@var{val}
@cindex changing section VMA
Set or change the VMA address of any section matching
@var{sectionpattern}.  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 @option{--change-addresses},
above.  If @var{sectionpattern} does not match any sections in the
input file, a warning will be issued, unless
@option{--no-change-warnings} is used.

@item --change-warnings
@itemx --adjust-warnings
If @option{--change-section-address} or @option{--change-section-lma} or
@option{--change-section-vma} is used, and the section pattern does not
match any sections, issue a warning.  This is the default.

@item --no-change-warnings
@itemx --no-adjust-warnings
Do not issue a warning if @option{--change-section-address} or
@option{--adjust-section-lma} or @option{--adjust-section-vma} is used, even
if the section pattern does not match any sections.

@item --set-section-flags @var{sectionpattern}=@var{flags}
Set the flags for any sections matching @var{sectionpattern}.  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{exclude}, @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.  In particular the
@samp{share} flag is only meaningful for COFF format files and not for
ELF format files.

@item --set-section-alignment @var{sectionpattern}=@var{align}
Set the alignment for any sections matching @var{sectionpattern}.
@var{align} specifies the alignment in bytes and must be a power of
two, i.e. 1, 2, 4, 8@dots{}. 

@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.
Note - it may be necessary to use the @option{--set-section-flags}
option to set the attributes of the newly created section.

@item --dump-section @var{sectionname}=@var{filename}
Place the contents of section named @var{sectionname} into the file
@var{filename}, overwriting any contents that may have been there
previously.  This option is the inverse of @option{--add-section}.
This option is similar to the @option{--only-section} option except
that it does not create a formatted file, it just dumps the contents
as raw binary data, without applying any relocations.  The option can
be specified more than once.

@item --update-section @var{sectionname}=@var{filename}
Replace the existing contents of a section named @var{sectionname}
with the contents of file @var{filename}.  The size of the section
will be adjusted to the size of the file.  The section flags for
@var{sectionname} will be unchanged.  For ELF format files the section
to segment mapping will also remain unchanged, something which is not
possible using @option{--remove-section} followed by
@option{--add-section}.  The option can be specified more than once.

Note - it is possible to use @option{--rename-section} and
@option{--update-section} to both update and rename a section from one
command line.  In this case, pass the original section name to
@option{--update-section}, and the original and new section names to
@option{--rename-section}.

@item --add-symbol @var{name}=[@var{section}:]@var{value}[,@var{flags}]
Add a new symbol named @var{name} while copying the file.  This option may be
specified multiple times.  If the @var{section} is given, the symbol will be
associated with and relative to that section, otherwise it will be an ABS
symbol.  Specifying an undefined section will result in a fatal error.  There
is no check for the value, it will be taken as specified.  Symbol flags can
be specified and not all flags will be meaningful for all object file
formats.  By default, the symbol will be global.  The special flag
'before=@var{othersym}' will insert the new symbol in front of the specified
@var{othersym}, otherwise the symbol(s) will be added at the end of the
symbol table in the order they appear.

@item --rename-section @var{oldname}=@var{newname}[,@var{flags}]
Rename a section from @var{oldname} to @var{newname}, optionally
changing the section's flags to @var{flags} in the process.  This has
the advantage over using a linker script to perform the rename in that
the output stays as an object file and does not become a linked
executable.  This option accepts the same set of flags as the
@option{--sect-section-flags} option.

This option is particularly helpful when the input format is binary,
since this will always create a section called .data.  If for example,
you wanted instead to create a section called .rodata containing binary
data you could use the following command line to achieve it:

@smallexample
  objcopy -I binary -O <output_format> -B <architecture> \
   --rename-section .data=.rodata,alloc,load,readonly,data,contents \
   <input_binary_file> <output_object_file>
@end smallexample

@item --long-section-names @{enable,disable,keep@}
Controls the handling of long section names when processing @code{COFF}
and @code{PE-COFF} object formats.  The default behaviour, @samp{keep},
is to preserve long section names if any are present in the input file.
The @samp{enable} and @samp{disable} options forcibly enable or disable
the use of long section names in the output object; when @samp{disable}
is in effect, any long section names in the input object will be truncated.
The @samp{enable} option will only emit long section names if any are
present in the inputs; this is mostly the same as @samp{keep}, but it
is left undefined whether the @samp{enable} option might force the
creation of an empty string table in the output file.

@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 @command{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
@option{--change-leading-char} because it always changes the symbol name
when appropriate, regardless of the object file format of the output
file.

@item --reverse-bytes=@var{num}
Reverse the bytes in a section with output contents.  A section length must
be evenly divisible by the value given in order for the swap to be able to
take place. Reversing takes place before the interleaving is performed.

This option is used typically in generating ROM images for problematic
target systems.  For example, on some target boards, the 32-bit words
fetched from 8-bit ROMs are re-assembled in little-endian byte order
regardless of the CPU byte order.  Depending on the programming model, the
endianness of the ROM may need to be modified.

Consider a simple file with a section containing the following eight
bytes:  @code{12345678}.

Using @samp{--reverse-bytes=2} for the above example, the bytes in the
output file would be ordered @code{21436587}.

Using @samp{--reverse-bytes=4} for the above example, the bytes in the
output file would be ordered @code{43218765}.

By using @samp{--reverse-bytes=2} for the above example, followed by
@samp{--reverse-bytes=4} on the output file, the bytes in the second
output file would be ordered @code{34127856}.

@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 --redefine-syms=@var{filename}
Apply @option{--redefine-sym} to each symbol pair "@var{old} @var{new}"
listed in the file @var{filename}.  @var{filename} is simply a flat file,
with one symbol pair per line.  Line comments may be introduced by the hash
character.  This option may be given more than once.

@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 @option{-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 @option{--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 @option{--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 --strip-unneeded-symbols=@var{filename}
Apply @option{--strip-unneeded-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 @option{--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 @option{--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 --globalize-symbols=@var{filename}
Apply @option{--globalize-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.  Note: this option cannot be
used in conjunction with the @option{-G} or @option{--keep-global-symbol}
options.

@item --weaken-symbols=@var{filename}
Apply @option{--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 --alt-machine-code=@var{index}
If the output architecture has alternate machine codes, use the
@var{index}th code instead of the default one.  This is useful in case
a machine is assigned an official code and the tool-chain adopts the
new code, but other applications still depend on the original code
being used.  For ELF based architectures if the @var{index}
alternative does not exist then the value is treated as an absolute
number to be stored in the e_machine field of the ELF header.

@item --writable-text
Mark the output text as writable.  This option isn't meaningful for all
object file formats.

@item --readonly-text
Make the output text write protected.  This option isn't meaningful for all
object file formats.

@item --pure
Mark the output file as demand paged.  This option isn't meaningful for all
object file formats.

@item --impure
Mark the output file as impure.  This option isn't meaningful for all
object file formats.

@item --prefix-symbols=@var{string}
Prefix all symbols in the output file with @var{string}.

@item --prefix-sections=@var{string}
Prefix all section names in the output file with @var{string}.

@item --prefix-alloc-sections=@var{string}
Prefix all the names of all allocated sections in the output file with
@var{string}.

@item --add-gnu-debuglink=@var{path-to-file}
Creates a .gnu_debuglink section which contains a reference to
@var{path-to-file} and adds it to the output file.  Note: the file at
@var{path-to-file} must exist.  Part of the process of adding the
.gnu_debuglink section involves embedding a checksum of the contents
of the debug info file into the section.

If the debug info file is built in one location but it is going to be
installed at a later time into a different location then do not use
the path to the installed location.  The @option{--add-gnu-debuglink}
option will fail because the installed file does not exist yet.
Instead put the debug info file in the current directory and use the
@option{--add-gnu-debuglink} option without any directory components,
like this:

@smallexample
 objcopy --add-gnu-debuglink=foo.debug
@end smallexample

At debug time the debugger will attempt to look for the separate debug
info file in a set of known locations.  The exact set of these
locations varies depending upon the distribution being used, but it
typically includes:

@table @code

@item * The same directory as the executable.

@item * A sub-directory of the directory containing the executable
called .debug

@item * A global debug directory such as /usr/lib/debug.
@end table

As long as the debug info file has been installed into one of these
locations before the debugger is run everything should work
correctly.

@item --keep-section-symbils
When stripping a file, perhaps with @option{--strip-debug} or
@option{--strip-unneeded}, retain any symbols specifying section names,
which would otherwise get stripped.

@item --keep-file-symbols
When stripping a file, perhaps with @option{--strip-debug} or
@option{--strip-unneeded}, retain any symbols specifying source file names,
which would otherwise get stripped.

@item --only-keep-debug
Strip a file, removing contents of any sections that would not be
stripped by @option{--strip-debug} and leaving the debugging sections
intact.  In ELF files, this preserves all note sections in the output.

Note - the section headers of the stripped sections are preserved,
including their sizes, but the contents of the section are discarded.
The section headers are preserved so that other tools can match up the
debuginfo file with the real executable, even if that executable has
been relocated to a different address space.

The intention is that this option will be used in conjunction with
@option{--add-gnu-debuglink} to create a two part executable.  One a
stripped binary which will occupy less space in RAM and in a
distribution and the second a debugging information file which is only
needed if debugging abilities are required.  The suggested procedure
to create these files is as follows:

@enumerate
@item Link the executable as normal.  Assuming that it is called
@code{foo} then...
@item Run @code{objcopy --only-keep-debug foo foo.dbg} to
create a file containing the debugging info.
@item Run @code{objcopy --strip-debug foo} to create a
stripped executable.
@item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo}
to add a link to the debugging info into the stripped executable.
@end enumerate

Note---the choice of @code{.dbg} as an extension for the debug info
file is arbitrary.  Also the @code{--only-keep-debug} step is
optional.  You could instead do this:

@enumerate
@item Link the executable as normal.
@item Copy @code{foo} to  @code{foo.full}
@item Run @code{objcopy --strip-debug foo}
@item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
@end enumerate

i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
full executable.  It does not have to be a file created by the
@option{--only-keep-debug} switch.

Note---this switch is only intended for use on fully linked files.  It
does not make sense to use it on object files where the debugging
information may be incomplete.  Besides the gnu_debuglink feature
currently only supports the presence of one filename containing
debugging information, not multiple filenames on a one-per-object-file
basis.

@item --strip-dwo
Remove the contents of all DWARF .dwo sections, leaving the
remaining debugging sections and all symbols intact.
This option is intended for use by the compiler as part of
the @option{-gsplit-dwarf} option, which splits debug information
between the .o file and a separate .dwo file.  The compiler
generates all debug information in the same file, then uses
the @option{--extract-dwo} option to copy the .dwo sections to
the .dwo file, then the @option{--strip-dwo} option to remove
those sections from the original .o file.

@item --extract-dwo
Extract the contents of all DWARF .dwo sections.  See the
@option{--strip-dwo} option for more information.

@item --file-alignment @var{num}
Specify the file alignment.  Sections in the file will always begin at
file offsets which are multiples of this number.  This defaults to
512.
[This option is specific to PE targets.]

@item --heap @var{reserve}
@itemx --heap @var{reserve},@var{commit}
Specify the number of bytes of memory to reserve (and optionally commit)
to be used as heap for this program.
[This option is specific to PE targets.]

@item --image-base @var{value}
Use @var{value} as the base address of your program or dll.  This is
the lowest memory location that will be used when your program or dll
is loaded.  To reduce the need to relocate and improve performance of
your dlls, each should have a unique base address and not overlap any
other dlls.  The default is 0x400000 for executables, and 0x10000000
for dlls.
[This option is specific to PE targets.]

@item --section-alignment @var{num}
Sets the section alignment field in the PE header.  Sections in memory
will always begin at addresses which are a multiple of this number.
Defaults to 0x1000.
[This option is specific to PE targets.]

@item --stack @var{reserve}
@itemx --stack @var{reserve},@var{commit}
Specify the number of bytes of memory to reserve (and optionally commit)
to be used as stack for this program.
[This option is specific to PE targets.]

@item --subsystem @var{which}
@itemx --subsystem @var{which}:@var{major}
@itemx --subsystem @var{which}:@var{major}.@var{minor}
Specifies the subsystem under which your program will execute.  The
legal values for @var{which} are @code{native}, @code{windows},
@code{console}, @code{posix}, @code{efi-app}, @code{efi-bsd},
@code{efi-rtd}, @code{sal-rtd}, and @code{xbox}.  You may optionally set
the subsystem version also.  Numeric values are also accepted for
@var{which}.
[This option is specific to PE targets.]

@item --extract-symbol
Keep the file's section flags and symbols but remove all section data.
Specifically, the option:

@itemize
@item removes the contents of all sections;
@item sets the size of every section to zero; and
@item sets the file's start address to zero.
@end itemize

This option is used to build a @file{.sym} file for a VxWorks kernel.
It can also be a useful way of reducing the size of a @option{--just-symbols}
linker input file.

@item --compress-debug-sections
Compress DWARF debug sections using zlib with SHF_COMPRESSED from the
ELF ABI.  Note - if compression would actually make a section
@emph{larger}, then it is not compressed.

@item --compress-debug-sections=none
@itemx --compress-debug-sections=zlib
@itemx --compress-debug-sections=zlib-gnu
@itemx --compress-debug-sections=zlib-gabi
For ELF files, these options control how DWARF debug sections are
compressed.  @option{--compress-debug-sections=none} is equivalent
to @option{--decompress-debug-sections}.
@option{--compress-debug-sections=zlib} and
@option{--compress-debug-sections=zlib-gabi} are equivalent to
@option{--compress-debug-sections}.
@option{--compress-debug-sections=zlib-gnu} compresses DWARF debug
sections using zlib.  The debug sections are renamed to begin with
@samp{.zdebug} instead of @samp{.debug}.  Note - if compression would
actually make a section @emph{larger}, then it is not compressed nor
renamed.

@item --decompress-debug-sections
Decompress DWARF debug sections using zlib.  The original section
names of the compressed sections are restored.

@item --elf-stt-common=yes
@itemx --elf-stt-common=no
For ELF files, these options control whether common symbols should be
converted to the @code{STT_COMMON} or @code{STT_OBJECT} type.
@option{--elf-stt-common=yes} converts common symbol type to
@code{STT_COMMON}. @option{--elf-stt-common=no} converts common symbol
type to @code{STT_OBJECT}.

@item --merge-notes
@itemx --no-merge-notes
For ELF files, attempt (or do not attempt) to reduce the size of any
SHT_NOTE type sections by removing duplicate notes.

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

@item --verilog-data-width=@var{bytes}
For Verilog output, this options controls the number of bytes
converted for each output data element.  The input target controls the
endianness of the conversion.

@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 @command{objcopy}.

@item --info
Display a list showing all architectures and object formats available.
@end table

@c man end

@ignore
@c man begin SEEALSO objcopy
ld(1), objdump(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node objdump
@chapter objdump

@cindex object file information
@kindex objdump

@c man title objdump display information from object files

@smallexample
@c man begin SYNOPSIS objdump
objdump [@option{-a}|@option{--archive-headers}]
        [@option{-b} @var{bfdname}|@option{--target=@var{bfdname}}]
        [@option{-C}|@option{--demangle}[=@var{style}] ]
        [@option{-d}|@option{--disassemble}[=@var{symbol}]]
        [@option{-D}|@option{--disassemble-all}]
        [@option{-z}|@option{--disassemble-zeroes}]
        [@option{-EB}|@option{-EL}|@option{--endian=}@{big | little @}]
        [@option{-f}|@option{--file-headers}]
        [@option{-F}|@option{--file-offsets}]
        [@option{--file-start-context}]
        [@option{-g}|@option{--debugging}]
        [@option{-e}|@option{--debugging-tags}]
        [@option{-h}|@option{--section-headers}|@option{--headers}]
        [@option{-i}|@option{--info}]
        [@option{-j} @var{section}|@option{--section=}@var{section}]
        [@option{-l}|@option{--line-numbers}]
        [@option{-S}|@option{--source}]
        [@option{--source-comment}[=@var{text}]]
        [@option{-m} @var{machine}|@option{--architecture=}@var{machine}]
        [@option{-M} @var{options}|@option{--disassembler-options=}@var{options}]
        [@option{-p}|@option{--private-headers}]
        [@option{-P} @var{options}|@option{--private=}@var{options}]
        [@option{-r}|@option{--reloc}]
        [@option{-R}|@option{--dynamic-reloc}]
        [@option{-s}|@option{--full-contents}]
        [@option{-W[lLiaprmfFsoORtUuTgAck]}|
         @option{--dwarf}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]]
        [@option{-WK}|@option{--dwarf=follow-links}]
        [@option{-WN}|@option{--dwarf=no-follow-links}]
        [@option{-L}|@option{--process-links}]
        [@option{--ctf=}@var{section}]
        [@option{-G}|@option{--stabs}]
        [@option{-t}|@option{--syms}]
        [@option{-T}|@option{--dynamic-syms}]
        [@option{-x}|@option{--all-headers}]
        [@option{-w}|@option{--wide}]
        [@option{--start-address=}@var{address}]
        [@option{--stop-address=}@var{address}]
        [@option{--no-addresses}]
        [@option{--prefix-addresses}]
        [@option{--[no-]show-raw-insn}]
        [@option{--adjust-vma=}@var{offset}]
        [@option{--dwarf-depth=@var{n}}]
        [@option{--dwarf-start=@var{n}}]
        [@option{--ctf-parent=}@var{section}]
        [@option{--no-recurse-limit}|@option{--recurse-limit}]
        [@option{--special-syms}]
        [@option{--prefix=}@var{prefix}]
        [@option{--prefix-strip=}@var{level}]
        [@option{--insn-width=}@var{width}]
        [@option{--visualize-jumps[=color|=extended-color|=off]}
        [@option{-V}|@option{--version}]
        [@option{-H}|@option{--help}]
        @var{objfile}@dots{}
@c man end
@end smallexample

@c man begin DESCRIPTION objdump

@command{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, @command{objdump} shows information on each of the member
object files.

@c man end

@c man begin OPTIONS objdump

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

@table @env
@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 (@option{-h}) of
@file{fu.o}, which is explicitly identified (@option{-m}) as a VAX object
file in the format produced by Oasys compilers.  You can list the
formats available with the @option{-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 --recurse-limit
@itemx --no-recurse-limit
@itemx --recursion-limit
@itemx --no-recursion-limit
Enables or disables a limit on the amount of recursion performed
whilst demangling strings.  Since the name mangling formats allow for
an infinite level of recursion it is possible to create strings whose
decoding will exhaust the amount of stack space available on the host
machine, triggering a memory fault.  The limit tries to prevent this
from happening by restricting recursion to 2048 levels of nesting.

The default is for this limit to be enabled, but disabling it may be
necessary in order to demangle truly complicated names.  Note however
that if the recursion limit is disabled then stack exhaustion is
possible and any bug reports about such an event will be rejected.

@item -g
@itemx --debugging
Display debugging information.  This attempts to parse STABS
debugging format information stored in the file and print it out using
a C like syntax.  If no STABS debugging was found this option
falls back on the @option{-W} option to print any DWARF information in
the file.

@item -e
@itemx --debugging-tags
Like @option{-g}, but the information is generated in a format compatible
with ctags tool.

@item -d
@itemx --disassemble
@itemx --disassemble=@var{symbol}
@cindex disassembling object code
@cindex machine instructions
Display the assembler mnemonics for the machine instructions from the
input file.  This option only disassembles those sections which are 
expected to contain instructions.  If the optional @var{symbol}
argument is given, then display the assembler mnemonics starting at
@var{symbol}.  If @var{symbol} is a function name then disassembly
will stop at the end of the function, otherwise it will stop when the
next symbol is encountered.  If there are no matches for @var{symbol}
then nothing will be displayed.

Note if the @option{--dwarf=follow-links} option is enabled
then any symbol tables in linked debug info files will be read in and
used when disassembling.

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

This option also has a subtle effect on the disassembly of
instructions in code sections.  When option @option{-d} is in effect
objdump will assume that any symbols present in a code section occur
on the boundary between instructions and it will refuse to disassemble
across such a boundary.  When option @option{-D} is in effect however
this assumption is supressed.  This means that it is possible for the
output of @option{-d} and @option{-D} to differ if, for example, data
is stored in code sections.

If the target is an ARM architecture this switch also has the effect
of forcing the disassembler to decode pieces of data found in code
sections as if they were instructions.

Note if the @option{--dwarf=follow-links} option is enabled
then any symbol tables in linked debug info files will be read in and
used when disassembling.

@item --no-addresses
When disassembling, don't print addresses on each line or for symbols
and relocation offsets.  In combination with @option{--no-show-raw-insn}
this may be useful for comparing compiler output.

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

@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-headers
@cindex object file header
Display summary information from the overall header of
each of the @var{objfile} files.

@item -F
@itemx --file-offsets
@cindex object file offsets
When disassembling sections, whenever a symbol is displayed, also
display the file offset of the region of data that is about to be
dumped.  If zeroes are being skipped, then when disassembly resumes,
tell the user how many zeroes were skipped and the file offset of the
location from where the disassembly resumes.  When dumping sections,
display the file offset of the location from where the dump starts.

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

@item -h
@itemx --section-headers
@itemx --headers
@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 @option{-Ttext}, @option{-Tdata}, or @option{-Tbss} options to
@command{ld}.  However, some object file formats, such as a.out, do not
store the starting address of the file segments.  In those situations,
although @command{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.

Note, in some cases it is possible for a section to have both the
READONLY and the NOREAD attributes set.  In such cases the NOREAD
attribute takes precedence, but @command{objdump} will report both
since the exact setting of the flag bits might be important.

@item -H
@itemx --help
Print a summary of the options to @command{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 @option{-b} or @option{-m}.

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

@item -L
@itemx --process-links
Display the contents of non-debug sections found in separate debuginfo
files that are linked to the main file.  This option automatically
implies the @option{-WK} option, and only sections requested by other
command line options will be displayed.

@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 @option{-d}, @option{-D}, or @option{-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 @option{-i} option.

If the target is an ARM architecture then this switch has an
additional effect.  It restricts the disassembly to only those
instructions supported by the architecture specified by @var{machine}.
If it is necessary to use this switch because the input file does not
contain any architecture information, but it is also desired to
disassemble all the instructions use @option{-marm}.

@item -M @var{options}
@itemx --disassembler-options=@var{options}
Pass target specific information to the disassembler.  Only supported on
some targets.  If it is necessary to specify more than one
disassembler option then multiple @option{-M} options can be used or
can be placed together into a comma separated list.

For ARC, @option{dsp} controls the printing of DSP instructions,
@option{spfp} selects the printing of FPX single precision FP
instructions, @option{dpfp} selects the printing of FPX double
precision FP instructions, @option{quarkse_em} selects the printing of
special QuarkSE-EM instructions, @option{fpuda} selects the printing
of double precision assist instructions, @option{fpus} selects the
printing of FPU single precision FP instructions, while @option{fpud}
selects the printing of FPU double precision FP instructions.
Additionally, one can choose to have all the immediates printed in
hexadecimal using @option{hex}.  By default, the short immediates are
printed using the decimal representation, while the long immediate
values are printed as hexadecimal.

@option{cpu=...} allows one to enforce a particular ISA when disassembling
instructions, overriding the @option{-m} value or whatever is in the ELF file.
This might be useful to select ARC EM or HS ISA, because architecture is same
for those and disassembler relies on private ELF header data to decide if code
is for EM or HS.  This option might be specified multiple times - only the
latest value will be used.  Valid values are same as for the assembler
@option{-mcpu=...} option.

If the target is an ARM architecture then this switch can be used to
select which register name set is used during disassembler.  Specifying
@option{-M reg-names-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
@option{-M reg-names-apcs} will select the name set used by the ARM
Procedure Call Standard, whilst specifying @option{-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 @option{-M reg-names-atpcs} and @option{-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 @option{--disassembler-options=force-thumb}.  This can be
useful when attempting to disassemble thumb code produced by other
compilers.

For AArch64 targets this switch can be used to set whether instructions are
disassembled as the most general instruction using the @option{-M no-aliases}
option or whether instruction notes should be generated as comments in the
disasssembly using @option{-M notes}.

For the x86, some of the options duplicate functions of the @option{-m}
switch, but allow finer grained control.
@table @code
@item x86-64
@itemx i386
@itemx i8086
Select disassembly for the given architecture.

@item intel
@itemx att
Select between intel syntax mode and AT&T syntax mode.

@item amd64
@itemx intel64
Select between AMD64 ISA and Intel64 ISA.

@item intel-mnemonic
@itemx att-mnemonic
Select between intel mnemonic mode and AT&T mnemonic mode.
Note: @code{intel-mnemonic} implies @code{intel} and
@code{att-mnemonic} implies @code{att}.

@item addr64
@itemx addr32
@itemx addr16
@itemx data32
@itemx data16
Specify the default address size and operand size.  These five options
will be overridden if @code{x86-64}, @code{i386} or @code{i8086}
appear later in the option string.

@item suffix
When in AT&T mode and also for a limited set of instructions when in Intel
mode, instructs the disassembler to print a mnemonic suffix even when the
suffix could be inferred by the operands or, for certain instructions, the
execution mode's defaults.
@end table

For PowerPC, the @option{-M} argument @option{raw} selects
disasssembly of hardware insns rather than aliases.  For example, you
will see @code{rlwinm} rather than @code{clrlwi}, and @code{addi}
rather than @code{li}.  All of the @option{-m} arguments for
@command{gas} that select a CPU are supported.  These are:
@option{403}, @option{405}, @option{440}, @option{464}, @option{476},
@option{601}, @option{603}, @option{604}, @option{620}, @option{7400},
@option{7410}, @option{7450}, @option{7455}, @option{750cl},
@option{821}, @option{850}, @option{860}, @option{a2}, @option{booke},
@option{booke32}, @option{cell}, @option{com}, @option{e200z4},
@option{e300}, @option{e500}, @option{e500mc}, @option{e500mc64},
@option{e500x2}, @option{e5500}, @option{e6500}, @option{efs},
@option{power4}, @option{power5}, @option{power6}, @option{power7},
@option{power8}, @option{power9}, @option{power10}, @option{ppc},
@option{ppc32}, @option{ppc64}, @option{ppc64bridge}, @option{ppcps},
@option{pwr}, @option{pwr2}, @option{pwr4}, @option{pwr5}, @option{pwr5x},
@option{pwr6}, @option{pwr7}, @option{pwr8}, @option{pwr9}, @option{pwr10},
@option{pwrx}, @option{titan}, and @option{vle}.
@option{32} and @option{64} modify the default or a prior CPU
selection, disabling and enabling 64-bit insns respectively.  In
addition, @option{altivec}, @option{any}, @option{htm}, @option{vsx},
and @option{spe} add capabilities to a previous @emph{or later} CPU
selection.  @option{any} will disassemble any opcode known to
binutils, but in cases where an opcode has two different meanings or
different arguments, you may not see the disassembly you expect.
If you disassemble without giving a CPU selection, a default will be
chosen from information gleaned by BFD from the object files headers,
but the result again may not be as you expect.

For MIPS, this option controls the printing of instruction mnemonic
names and register names in disassembled instructions.  Multiple
selections from the following may be specified as a comma separated
string, and invalid options are ignored:

@table @code
@item no-aliases
Print the 'raw' instruction mnemonic instead of some pseudo
instruction mnemonic.  I.e., print 'daddu' or 'or' instead of 'move',
'sll' instead of 'nop', etc.

@item msa
Disassemble MSA instructions.

@item virt
Disassemble the virtualization ASE instructions.

@item xpa
Disassemble the eXtended Physical Address (XPA) ASE instructions.

@item gpr-names=@var{ABI}
Print GPR (general-purpose register) names as appropriate
for the specified ABI.  By default, GPR names are selected according to
the ABI of the binary being disassembled.

@item fpr-names=@var{ABI}
Print FPR (floating-point register) names as
appropriate for the specified ABI.  By default, FPR numbers are printed
rather than names.

@item cp0-names=@var{ARCH}
Print CP0 (system control coprocessor; coprocessor 0) register names
as appropriate for the CPU or architecture specified by
@var{ARCH}.  By default, CP0 register names are selected according to
the architecture and CPU of the binary being disassembled.

@item hwr-names=@var{ARCH}
Print HWR (hardware register, used by the @code{rdhwr} instruction) names
as appropriate for the CPU or architecture specified by
@var{ARCH}.  By default, HWR names are selected according to
the architecture and CPU of the binary being disassembled.

@item reg-names=@var{ABI}
Print GPR and FPR names as appropriate for the selected ABI.

@item reg-names=@var{ARCH}
Print CPU-specific register names (CP0 register and HWR names)
as appropriate for the selected CPU or architecture.
@end table

For any of the options listed above, @var{ABI} or
@var{ARCH} may be specified as @samp{numeric} to have numbers printed
rather than names, for the selected types of registers.
You can list the available values of @var{ABI} and @var{ARCH} using
the @option{--help} option.

For VAX, you can specify function entry addresses with @option{-M
entry:0xf00ba}.  You can use this multiple times to properly
disassemble VAX binary files that don't contain symbol tables (like
ROM dumps).  In these cases, the function entry mask would otherwise
be decoded as VAX instructions, which would probably lead the rest
of the function being wrongly disassembled.

@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 -P @var{options}
@itemx --private=@var{options}
Print information that is specific to the object file format.  The
argument @var{options} is a comma separated list that depends on the
format (the lists of options is displayed with the help).

For XCOFF, the available options are:
@table @code
@item header
@item aout
@item sections
@item syms
@item relocs
@item lineno,
@item loader
@item except
@item typchk
@item traceback
@item toc
@item ldinfo
@end table

Not all object formats support this option.  In particular the ELF
format does not use it.

@item -r
@itemx --reloc
@cindex relocation entries, in object file
Print the relocation entries of the file.  If used with @option{-d} or
@option{-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.  As for @option{-r}, if used with @option{-d} or
@option{-D}, the relocations are printed interspersed with the
disassembly.

@item -s
@itemx --full-contents
@cindex sections, full contents
@cindex object file sections
Display the full contents of any sections requested.  By default all
non-empty sections are displayed.

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

@item --source-comment[=@var{txt}]
@cindex source disassembly
@cindex disassembly, with source
Like the @option{-S} option, but all source code lines are displayed
with a prefix of @var{txt}.  Typically @var{txt} will be a comment
string which can be used to distinguish the assembler code from the
source code.  If @var{txt} is not provided then a default string of
@var{``# ``} (hash followed by a space), will be used.

@item --prefix=@var{prefix}
@cindex Add prefix to absolute paths
Specify @var{prefix} to add to the absolute paths when used with
@option{-S}.

@item --prefix-strip=@var{level}
@cindex Strip absolute paths
Indicate how many initial directory names to strip off the hardwired
absolute paths. It has no effect without @option{--prefix=}@var{prefix}.

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

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

@item --insn-width=@var{width}
@cindex Instruction width
Display @var{width} bytes on a single line when disassembling
instructions.

@item --visualize-jumps[=color|=extended-color|=off]
Visualize jumps that stay inside a function by drawing ASCII art between
the start and target addresses.  The optional @option{=color} argument
adds color to the output using simple terminal colors.  Alternatively
the @option{=extended-color} argument will add color using 8bit
colors, but these might not work on all terminals.

If it is necessary to disable the @option{visualize-jumps} option
after it has previously been enabled then use
@option{visualize-jumps=off}.

@item -W[lLiaprmfFsoORtUuTgAckK]
@itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]
@include debug.options.texi

@item --dwarf-check
Enable additional checks for consistency of Dwarf information.

@include ctf.options.texi

@item -G
@itemx --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 @option{--syms}
output.

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

@item --stop-address=@var{address}
@cindex stop-address
Stop displaying data at the specified address.  This affects the output
of the @option{-d}, @option{-r} and @option{-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,
although the display format is different.  The format of the output
depends upon the format of the file being dumped, but there are two main
types.  One looks like this:

@smallexample
[  4](sec  3)(fl 0x00)(ty   0)(scl   3) (nx 1) 0x00000000 .bss
[  6](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 fred
@end smallexample

where the number inside the square brackets is the number of the entry
in the symbol table, the @var{sec} number is the section number, the
@var{fl} value are the symbol's flag bits, the @var{ty} number is the
symbol's type, the @var{scl} number is the symbol's storage class and
the @var{nx} value is the number of auxiliary entries associated with
the symbol.  The last two fields are the symbol's value and its name.

The other common output format, usually seen with ELF based files,
looks like this:

@smallexample
00000000 l    d  .bss   00000000 .bss
00000000 g       .text  00000000 fred
@end smallexample

Here the first number is the symbol's value (sometimes referred to as
its address).  The next field is actually a set of characters and
spaces indicating the flag bits that are set on the symbol.  These
characters are described below.  Next is the section with which the
symbol is associated or @emph{*ABS*} if the section is absolute (ie
not connected with any section), or @emph{*UND*} if the section is
referenced in the file being dumped, but not defined there.

After the section name comes another field, a number, which for common
symbols is the alignment and for other symbol is the size.  Finally
the symbol's name is displayed.

The flag characters are divided into 7 groups as follows:
@table @code
@item l
@itemx g
@itemx u
@itemx !
The symbol is a local (l), global (g), unique global (u), neither
global nor local (a space) or both global and local (!).  A
symbol can be neither local or global for a variety of reasons, e.g.,
because it is used for debugging, but it is probably an indication of
a bug if it is ever both local and global.  Unique global symbols are
a GNU extension to the standard set of ELF symbol bindings.  For such
a symbol the dynamic linker will make sure that in the entire process
there is just one symbol with this name and type in use.

@item w
The symbol is weak (w) or strong (a space).

@item C
The symbol denotes a constructor (C) or an ordinary symbol (a space).

@item W
The symbol is a warning (W) or a normal symbol (a space).  A warning
symbol's name is a message to be displayed if the symbol following the
warning symbol is ever referenced.

@item I
@item i
The symbol is an indirect reference to another symbol (I), a function
to be evaluated during reloc processing (i) or a normal symbol (a
space).

@item d
@itemx D
The symbol is a debugging symbol (d) or a dynamic symbol (D) or a
normal symbol (a space).

@item F
@item f
@item O
The symbol is the name of a function (F) or a file (f) or an object
(O) or just a normal symbol (a space).
@end table

@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 @option{-D} (@option{--dynamic}) option.

The output format is similar to that produced by the @option{--syms}
option, except that an extra field is inserted before the symbol's
name, giving the version information associated with the symbol.
If the version is the default version to be used when resolving
unversioned references to the symbol then it's displayed as is,
otherwise it's put into parentheses.

@item --special-syms
When displaying symbols include those which the target considers to be
special in some way and which would not normally be of interest to the
user.

@item -V
@itemx --version
Print the version number of @command{objdump} and exit.

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

@item -w
@itemx --wide
@cindex wide output, printing
Format some lines for output devices that have more than 80 columns.
Also do not truncate symbol names when they are displayed.

@item -z
@itemx --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.
@end table

@c man end

@ignore
@c man begin SEEALSO objdump
nm(1), readelf(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node ranlib
@chapter ranlib

@kindex ranlib
@cindex archive contents
@cindex symbol index

@c man title ranlib generate an index to an archive

@smallexample
@c man begin SYNOPSIS ranlib
ranlib [@option{--plugin} @var{name}] [@option{-DhHvVt}] @var{archive}
@c man end
@end smallexample

@c man begin DESCRIPTION ranlib

@command{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} @command{ranlib} program is another form of @sc{gnu} @command{ar}; running
@command{ranlib} is completely equivalent to executing @samp{ar -s}.
@xref{ar}.

@c man end

@c man begin OPTIONS ranlib

@table @env
@item -h
@itemx -H
@itemx --help
Show usage information for @command{ranlib}.

@item -v
@itemx -V
@itemx --version
Show the version number of @command{ranlib}.

@item -D
@cindex deterministic archives
@kindex --enable-deterministic-archives
Operate in @emph{deterministic} mode.  The symbol map archive member's
header will show zero for the UID, GID, and timestamp.  When this
option is used, multiple runs will produce identical output files.

If @file{binutils} was configured with
@option{--enable-deterministic-archives}, then this mode is on by
default.  It can be disabled with the @samp{-U} option, described
below.

@item -t
Update the timestamp of the symbol map of an archive.

@item -U
@cindex deterministic archives
@kindex --enable-deterministic-archives
Do @emph{not} operate in @emph{deterministic} mode.  This is the
inverse of the @samp{-D} option, above: the archive index will get
actual UID, GID, timestamp, and file mode values.

If @file{binutils} was configured @emph{without}
@option{--enable-deterministic-archives}, then this mode is on by
default.

@end table

@c man end

@ignore
@c man begin SEEALSO ranlib
ar(1), nm(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node size
@chapter size

@kindex size
@cindex section sizes

@c man title size list section sizes and total size of binary files

@smallexample
@c man begin SYNOPSIS size
size [@option{-A}|@option{-B}|@option{-G}|@option{--format=}@var{compatibility}]
     [@option{--help}]
     [@option{-d}|@option{-o}|@option{-x}|@option{--radix=}@var{number}]
     [@option{--common}]
     [@option{-t}|@option{--totals}]
     [@option{--target=}@var{bfdname}] [@option{-V}|@option{--version}]
     [@var{objfile}@dots{}]
@c man end
@end smallexample

@c man begin DESCRIPTION size

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

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

@c man end

@c man begin OPTIONS size

The command-line options have the following meanings:

@table @env
@item -A
@itemx -B
@itemx -G
@itemx --format=@var{compatibility}
@cindex @command{size} display format
Using one of these options, you can choose whether the output from @sc{gnu}
@command{size} resembles output from System V @command{size} (using @option{-A},
or @option{--format=sysv}), or Berkeley @command{size} (using @option{-B}, or
@option{--format=berkeley}).  The default is the one-line format similar to
Berkeley's.  Alternatively, you can choose the GNU format output
(using @option{-G}, or @option{--format=gnu}), this is similar to
Berkeley's output format, but sizes are counted differently.
@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
@command{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

The Berkeley style output counts read only data in the @code{text}
column, not in the @code{data} column, the @code{dec} and @code{hex}
columns both display the sum of the @code{text}, @code{data}, and
@code{bss} columns in decimal and hexadecimal respectively.

The GNU format counts read only data in the @code{data} column, not
the @code{text} column, and only displays the sum of the @code{text},
@code{data}, and @code{bss} columns once, in the @code{total} column.
The @option{--radix} option can be used to change the number base for
all columns.  Here is the same data displayed with GNU conventions:

@smallexample
$ size --format=GNU ranlib size
      text       data        bss      total filename
    279880      96920      11592     388392 ranlib
    279880      96920      11888     388688 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 @command{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 (@option{-d}, or @option{--radix=10}); octal
(@option{-o}, or @option{--radix=8}); or hexadecimal (@option{-x}, or
@option{--radix=16}).  In @option{--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 @option{-d} or @option{-x} output, or
octal and hexadecimal if you're using @option{-o}.

@item --common
Print total size of common symbols in each file.  When using Berkeley
or GNU format these are included in the bss size.

@item -t
@itemx --totals
Show totals of all objects listed (Berkeley or GNU format mode only).

@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; @command{size} can
automatically recognize many formats.
@xref{Target Selection}, for more information.

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

@c man end

@ignore
@c man begin SEEALSO size
ar(1), objdump(1), readelf(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

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

@c man title strings print the sequences of printable characters in files

@smallexample
@c man begin SYNOPSIS strings
strings [@option{-afovV}] [@option{-}@var{min-len}]
        [@option{-n} @var{min-len}] [@option{--bytes=}@var{min-len}]
        [@option{-t} @var{radix}] [@option{--radix=}@var{radix}]
        [@option{-e} @var{encoding}] [@option{--encoding=}@var{encoding}]
        [@option{-}] [@option{--all}] [@option{--print-file-name}]
        [@option{-T} @var{bfdname}] [@option{--target=}@var{bfdname}]
        [@option{-w}] [@option{--include-all-whitespace}]
        [@option{-s}] [@option{--output-separator}@var{sep_string}]
        [@option{--help}] [@option{--version}] @var{file}@dots{}
@c man end
@end smallexample

@c man begin DESCRIPTION strings

For each @var{file} given, @sc{gnu} @command{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.

Depending upon how the strings program was configured it will default
to either displaying all the printable sequences that it can find in
each file, or only those sequences that are in loadable, initialized
data sections.  If the file type is unrecognizable, or if strings is
reading from stdin then it will always display all of the printable
sequences that it can find.

For backwards compatibility any file that occurs after a command-line
option of just @option{-} will also be scanned in full, regardless of
the presence of any @option{-d} option.

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

@c man end

@c man begin OPTIONS strings

@table @env
@item -a
@itemx --all
@itemx -
Scan the whole file, regardless of what sections it contains or
whether those sections are loaded or initialized.  Normally this is
the default behaviour, but strings can be configured so that the
@option{-d} is the default instead.

The @option{-} option is position dependent and forces strings to
perform full scans of any file that is mentioned after the @option{-}
on the command line, even if the @option{-d} option has been
specified.

@item -d
@itemx --data
Only print strings from initialized, loaded data sections in the
file.  This may reduce the amount of garbage in the output, but it
also exposes the strings program to any security flaws that may be
present in the BFD library used to scan and load sections.  Strings
can be configured so that this option is the default behaviour.  In
such cases the @option{-a} option can be used to avoid using the BFD
library and instead just print all of the strings found in the file.

@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 @command{strings} have @option{-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 -e @var{encoding}
@itemx --encoding=@var{encoding}
Select the character encoding of the strings that are to be found.
Possible values for @var{encoding} are: @samp{s} = single-7-bit-byte
characters (ASCII, ISO 8859, etc., default), @samp{S} =
single-8-bit-byte characters, @samp{b} = 16-bit bigendian, @samp{l} =
16-bit littleendian, @samp{B} = 32-bit bigendian, @samp{L} = 32-bit
littleendian.  Useful for finding wide character strings. (@samp{l}
and @samp{b} apply to, for example, Unicode UTF-16/UCS-2 encodings).

@item -T @var{bfdname}
@itemx --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 -V
@itemx --version
Print the program version number on the standard output and exit.

@item -w
@itemx --include-all-whitespace
By default tab and space characters are included in the strings that
are displayed, but other whitespace characters, such a newlines and
carriage returns, are not.  The @option{-w} option changes this so
that all whitespace characters are considered to be part of a string.

@item -s
@itemx --output-separator
By default, output strings are delimited by a new-line. This option
allows you to supply any string to be used as the output record
separator.  Useful with --include-all-whitespace where strings
may contain new-lines internally.
@end table

@c man end

@ignore
@c man begin SEEALSO strings
ar(1), nm(1), objdump(1), ranlib(1), readelf(1)
and the Info entries for @file{binutils}.
@c man end
@end ignore

@node strip
@chapter strip

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

@c man title strip discard symbols and other data from object files

@smallexample
@c man begin SYNOPSIS strip
strip [@option{-F} @var{bfdname} |@option{--target=}@var{bfdname}]
      [@option{-I} @var{bfdname} |@option{--input-target=}@var{bfdname}]
      [@option{-O} @var{bfdname} |@option{--output-target=}@var{bfdname}]
      [@option{-s}|@option{--strip-all}]
      [@option{-S}|@option{-g}|@option{-d}|@option{--strip-debug}]
      [@option{--strip-dwo}]
      [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}]
      [@option{-M}|@option{--merge-notes}][@option{--no-merge-notes}]
      [@option{-N} @var{symbolname} |@option{--strip-symbol=}@var{symbolname}]
      [@option{-w}|@option{--wildcard}]
      [@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}]
      [@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}]
      [@option{--keep-section=}@var{sectionpattern}]
      [@option{--remove-relocations=}@var{sectionpattern}]
      [@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}]
      [@option{-D}|@option{--enable-deterministic-archives}]
      [@option{-U}|@option{--disable-deterministic-archives}]
      [@option{--keep-section-symbols}]
      [@option{--keep-file-symbols}]
      [@option{--only-keep-debug}]
      [@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}]
      [@option{--help}] [@option{--info}]
      @var{objfile}@dots{}
@c man end
@end smallexample

@c man begin DESCRIPTION strip

@sc{gnu} @command{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.

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

@c man end

@c man begin OPTIONS strip

@table @env
@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 @command{strip} and exit.

@item --info
Display a list showing all architectures and object formats available.

@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, in
addition to whatever sections would otherwise be removed.  This
option may be given more than once.  Note that using this option
inappropriately may make the output file unusable.  The wildcard
character @samp{*} may be given at the end of @var{sectionname}.  If
so, then any section starting with @var{sectionname} will be removed.

If the first character of @var{sectionpattern} is the exclamation
point (!) then matching sections will not be removed even if an
earlier use of @option{--remove-section} on the same command line
would otherwise remove it.  For example:

@smallexample
  --remove-section=.text.* --remove-section=!.text.foo
@end smallexample

will remove all sections matching the pattern '.text.*', but will not
remove the section '.text.foo'.

@item --keep-section=@var{sectionpattern}
When removing sections from the output file, keep sections that match
@var{sectionpattern}.

@item --remove-relocations=@var{sectionpattern}
Remove relocations from the output file for any section matching
@var{sectionpattern}.  This option may be given more than once.  Note
that using this option inappropriately may make the output file
unusable.  Wildcard characters are accepted in @var{sectionpattern}.
For example:

@smallexample
  --remove-relocations=.text.*
@end smallexample

will remove the relocations for all sections matching the patter
'.text.*'.

If the first character of @var{sectionpattern} is the exclamation
point (!) then matching sections will not have their relocation
removed even if an earlier use of @option{--remove-relocations} on the
same command line would otherwise cause the relocations to be removed.
For example:

@smallexample
  --remove-relocations=.text.* --remove-relocations=!.text.foo
@end smallexample

will remove all relocations for sections matching the pattern
'.text.*', but will not remove relocations for the section
'.text.foo'.

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

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

@item --strip-dwo
Remove the contents of all DWARF .dwo sections, leaving the
remaining debugging sections and all symbols intact.
See the description of this option in the @command{objcopy} section
for more information.

@item --strip-unneeded
Remove all symbols that are not needed for relocation processing in
addition to debugging symbols and sections stripped by
@option{--strip-debug}.

@item -K @var{symbolname}
@itemx --keep-symbol=@var{symbolname}
When stripping symbols, keep symbol @var{symbolname} even if it would
normally be stripped.  This option may be given more than once.

@item -M
@itemx --merge-notes
@itemx --no-merge-notes
For ELF files, attempt (or do not attempt) to reduce the size of any
SHT_NOTE type sections by removing duplicate notes.  The default is to
attempt this reduction unless stripping debug or DWO information.

@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
@option{-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 -D
@itemx --enable-deterministic-archives
@cindex deterministic archives
@kindex --enable-deterministic-archives
Operate in @emph{deterministic} mode.  When copying archive members
and writing the archive index, use zero for UIDs, GIDs, timestamps,
and use consistent file modes for all files.

If @file{binutils} was configured with
@option{--enable-deterministic-archives}, then this mode is on by default.
It can be disabled with the @samp{-U} option, below.

@item -U
@itemx --disable-deterministic-archives
@cindex deterministic archives
@kindex --enable-deterministic-archives
Do @emph{not} operate in @emph{deterministic} mode.  This is the
inverse of the @option{-D} option, above: when copying archive members
and writing the archive index, use their actual UID, GID, timestamp,
and file mode values.

This is the default unless @file{binutils} was configured with
@option{--enable-deterministic-archives}.

@item -w
@itemx --wildcard
Permit regular expressions in @var{symbolname}s used in other command
line options.  The question mark (?), asterisk (*), backslash (\) and
square brackets ([]) operators can be used anywhere in the symbol
name.  If the first character of the symbol name is the exclamation
point (!) then the sense of the switch is reversed for that symbol.
For example:

@smallexample
  -w -K !foo -K fo*
@end smallexample

would cause strip to only keep symbols that start with the letters
``fo'', but to discard the symbol ``foo''.

@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 --keep-section-symbols
When stripping a file, perhaps with @option{--strip-debug} or
@option{--strip-unneeded}, retain any symbols specifying section names,
which would otherwise get stripped.

@item --keep-file-symbols
When stripping a file, perhaps with @option{--strip-debug} or
@option{--strip-unneeded}, retain any symbols specifying source file names,
which would otherwise get stripped.

@item --only-keep-debug
Strip a file, emptying the contents of any sections that would not be
stripped by @option{--strip-debug} and leaving the debugging sections
intact.  In ELF files, this preserves all the note sections in the
output as well.

Note - the section headers of the stripped sections are preserved,
including their sizes, but the contents of the section are discarded.
The section headers are preserved so that other tools can match up the
debuginfo file with the real executable, even if that executable has
been relocated to a different address space.

The intention is that this option will be used in conjunction with
@option{--add-gnu-debuglink} to create a two part executable.  One a
stripped binary which will occupy less space in RAM and in a
distribution and the second a debugging information file which is only
needed if debugging abilities are required.  The suggested procedure
to create these files is as follows:

@enumerate
@item Link the executable as normal.  Assuming that it is called
@code{foo} then...
@item Run @code{objcopy --only-keep-debug foo foo.dbg} to
create a file containing the debugging info.
@item Run @code{objcopy --strip-debug foo} to create a
stripped executable.
@item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo}
to add a link to the debugging info into the stripped executable.
@end enumerate

Note---the choice of @code{.dbg} as an extension for the debug info
file is arbitrary.  Also the @code{--only-keep-debug} step is
optional.  You could instead do this:

@enumerate
@item Link the executable as normal.
@item Copy @code{foo} to @code{foo.full}
@item Run @code{strip --strip-debug foo}
@item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
@end enumerate

i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
full executable.  It does not have to be a file created by the
@option{--only-keep-debug} switch.

Note---this switch is only intended for use on fully linked files.  It
does not make sense to use it on object files where the debugging
information may be incomplete.  Besides the gnu_debuglink feature
currently only supports the presence of one filename containing
debugging information, not multiple filenames on a one-per-object-file
basis.

@item -V
@itemx --version
Show the version number for @command{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

@c man end

@ignore
@c man begin SEEALSO strip
the Info entries for @file{binutils}.
@c man end
@end ignore

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

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

@c man title cxxfilt demangle C++ and Java symbols

@smallexample
@c man begin SYNOPSIS cxxfilt
c++filt [@option{-_}|@option{--strip-underscore}]
        [@option{-n}|@option{--no-strip-underscore}]
        [@option{-p}|@option{--no-params}]
        [@option{-t}|@option{--types}]
        [@option{-i}|@option{--no-verbose}]
        [@option{-r}|@option{--no-recurse-limit}]
        [@option{-R}|@option{--recurse-limit}]
        [@option{-s} @var{format}|@option{--format=}@var{format}]
        [@option{--help}]  [@option{--version}]  [@var{symbol}@dots{}]
@c man end
@end smallexample

@c man begin DESCRIPTION cxxfilt

@kindex cxxfilt
The C++ and Java languages provide function overloading, which means
that you can write many functions with the same name, providing that
each function takes parameters of different types.  In order to be
able to distinguish these similarly named functions C++ and Java
encode them into a low-level assembler name which uniquely identifies
each different version.  This process is known as @dfn{mangling}. The
@command{c++filt}
@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
MS-DOS this program is named @command{CXXFILT}.}
program does the inverse mapping: it decodes (@dfn{demangles}) low-level
names into user-level names so that they can be read.

Every alphanumeric word (consisting of letters, digits, underscores,
dollars, or periods) seen in the input is a potential mangled name.
If the name decodes into a C++ name, the C++ name replaces the
low-level name in the output, otherwise the original word is output.
In this way you can pass an entire assembler source file, containing
mangled names, through @command{c++filt} and see the same source file
containing demangled names.

You can also use @command{c++filt} to decipher individual symbols by
passing them on the command line:

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

If no @var{symbol} arguments are given, @command{c++filt} reads symbol
names from the standard input instead.  All the results are printed on
the standard output.  The difference between reading names from the
command line versus reading names from the standard input is that
command-line arguments are expected to be just mangled names and no
checking is performed to separate them from surrounding text.  Thus
for example:

@smallexample
c++filt -n _Z1fv
@end smallexample

will work and demangle the name to ``f()'' whereas:

@smallexample
c++filt -n _Z1fv,
@end smallexample

will not work.  (Note the extra comma at the end of the mangled
name which makes it invalid).  This command however will work:

@smallexample
echo _Z1fv, | c++filt -n
@end smallexample

and will display ``f(),'', i.e., the demangled name followed by a
trailing comma.  This behaviour is because when the names are read
from the standard input it is expected that they might be part of an
assembler source file where there might be extra, extraneous
characters trailing after a mangled name.  For example:

@smallexample
    .type   _Z1fv, @@function
@end smallexample

@c man end

@c man begin OPTIONS cxxfilt

@table @env
@item -_
@itemx --strip-underscore
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
@command{c++filt} removes the underscore by default is target dependent.

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

@item -p
@itemx --no-params
When demangling the name of a function, do not display the types of
the function's parameters.

@item -t
@itemx --types
Attempt to demangle types as well as function names.  This is disabled
by default since mangled types are normally only used internally in
the compiler, and they can be confused with non-mangled names.  For example,
a function called ``a'' treated as a mangled type name would be
demangled to ``signed char''.

@item -i
@itemx --no-verbose
Do not include implementation details (if any) in the demangled
output.

@item -r
@itemx -R
@itemx --recurse-limit
@itemx --no-recurse-limit
@itemx --recursion-limit
@itemx --no-recursion-limit
Enables or disables a limit on the amount of recursion performed
whilst demangling strings.  Since the name mangling formats allow for
an infinite level of recursion it is possible to create strings whose
decoding will exhaust the amount of stack space available on the host
machine, triggering a memory fault.  The limit tries to prevent this
from happening by restricting recursion to 2048 levels of nesting.

The default is for this limit to be enabled, but disabling it may be
necessary in order to demangle truly complicated names.  Note however
that if the recursion limit is disabled then stack exhaustion is
possible and any bug reports about such an event will be rejected.

The @option{-r} option is a synonym for the
@option{--no-recurse-limit} option.  The @option{-R} option is a
synonym for the @option{--recurse-limit} option.

@item -s @var{format}
@itemx --format=@var{format}
@command{c++filt} can decode various methods of mangling, used by
different compilers.  The argument to this option selects which
method it uses:

@table @code
@item auto
Automatic selection based on executable (the default method)
@item gnu
the one used by the @sc{gnu} C++ compiler (g++)
@item lucid
the one used by the Lucid compiler (lcc)
@item arm
the one specified by the C++ Annotated Reference Manual
@item hp
the one used by the HP compiler (aCC)
@item edg
the one used by the EDG compiler
@item gnu-v3
the one used by the @sc{gnu} C++ compiler (g++) with the V3 ABI.
@item java
the one used by the @sc{gnu} Java compiler (gcj)
@item gnat
the one used by the @sc{gnu} Ada compiler (GNAT).
@end table

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

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

@c man end

@ignore
@c man begin SEEALSO cxxfilt
the Info entries for @file{binutils}.
@c man end
@end ignore

@quotation
@emph{Warning:} @command{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 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

@c man title addr2line convert addresses into file names and line numbers

@smallexample
@c man begin SYNOPSIS addr2line
addr2line [@option{-a}|@option{--addresses}]
          [@option{-b} @var{bfdname}|@option{--target=}@var{bfdname}]
          [@option{-C}|@option{--demangle}[=@var{style}]]
          [@option{-r}|@option{--no-recurse-limit}]
          [@option{-R}|@option{--recurse-limit}]
          [@option{-e} @var{filename}|@option{--exe=}@var{filename}]
          [@option{-f}|@option{--functions}] [@option{-s}|@option{--basename}]
          [@option{-i}|@option{--inlines}]
          [@option{-p}|@option{--pretty-print}]
          [@option{-j}|@option{--section=}@var{name}]
          [@option{-H}|@option{--help}] [@option{-V}|@option{--version}]
          [addr addr @dots{}]
@c man end
@end smallexample

@c man begin DESCRIPTION addr2line

@command{addr2line} translates addresses into file names and line numbers.
Given an address in an executable or an offset in a section of a relocatable
object, it uses the debugging information to figure out which file name and
line number are associated with it.

The executable or relocatable object to use is specified with the @option{-e}
option.  The default is the file @file{a.out}.  The section in the relocatable
object to use is specified with the @option{-j} option.

@command{addr2line} has two modes of operation.

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

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

The format of the output is @samp{FILENAME:LINENO}.  By default
each input address generates one line of output.

Two options can generate additional lines before each
@samp{FILENAME:LINENO} line (in that order).

If the @option{-a} option is used then a line with the input address
is displayed.

If the @option{-f} option is used, then a line with the
@samp{FUNCTIONNAME} is displayed.  This is the name of the function
containing the address.

One option can generate additional lines after the
@samp{FILENAME:LINENO} line.

If the @option{-i} option is used and the code at the given address is
present there because of inlining by the compiler then additional
lines are displayed afterwards.  One or two extra lines (if the
@option{-f} option is used) are displayed for each inlined function.

Alternatively if the @option{-p} option is used then each input
address generates a single, long, output line containing the address,
the function name, the file name and the line number.  If the
@option{-i} option has also been used then any inlined functions will
be displayed in the same manner, but on separate lines, and prefixed
by the text @samp{(inlined by)}.

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

@c man end

@c man begin OPTIONS addr2line

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

@table @env
@item -a
@itemx --addresses
Display the address before the function name, file and line number
information.  The address is printed with a @samp{0x} prefix to easily
identify it.

@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.

@item -i
@itemx --inlines
If the address belongs to a function that was inlined, the source
information for all enclosing scopes back to the first non-inlined
function will also be printed.  For example, if @code{main} inlines
@code{callee1} which inlines @code{callee2}, and address is from
@code{callee2}, the source information for @code{callee1} and @code{main}
will also be printed.

@item -j
@itemx --section
Read offsets relative to the specified section instead of absolute addresses.

@item -p
@itemx --pretty-print
Make the output more human friendly: each location are printed on one line.
If option @option{-i} is specified, lines for all enclosing scopes are
prefixed with @samp{(inlined by)}.

@item -r
@itemx -R
@itemx --recurse-limit
@itemx --no-recurse-limit
@itemx --recursion-limit
@itemx --no-recursion-limit
Enables or disables a limit on the amount of recursion performed
whilst demangling strings.  Since the name mangling formats allow for
an infinite level of recursion it is possible to create strings whose
decoding will exhaust the amount of stack space available on the host
machine, triggering a memory fault.  The limit tries to prevent this
from happening by restricting recursion to 2048 levels of nesting.

The default is for this limit to be enabled, but disabling it may be
necessary in order to demangle truly complicated names.  Note however
that if the recursion limit is disabled then stack exhaustion is
possible and any bug reports about such an event will be rejected.

The @option{-r} option is a synonym for the
@option{--no-recurse-limit} option.  The @option{-R} option is a
synonym for the @option{--recurse-limit} option.

Note this option is only effective if the @option{-C} or
@option{--demangle} option has been enabled.

@end table

@c man end

@ignore
@c man begin SEEALSO addr2line
Info entries for @file{binutils}.
@c man end
@end ignore

@node windmc
@chapter windmc

@command{windmc} may be used to generator Windows message resources.

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

@c man title windmc generates Windows message resources

@smallexample
@c man begin SYNOPSIS windmc
windmc [options] input-file
@c man end
@end smallexample

@c man begin DESCRIPTION windmc

@command{windmc} reads message definitions from an input file (.mc) and
translate them into a set of output files.  The output files may be of
four kinds:

@table @code
@item h
A C header file containing the message definitions.

@item rc
A resource file compilable by the @command{windres} tool.

@item bin
One or more binary files containing the resource data for a specific
message language.

@item dbg
A C include file that maps message id's to their symbolic name.
@end table

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

When @command{windmc} converts from the @code{mc} format to the @code{bin}
format, @code{rc}, @code{h}, and optional @code{dbg} it is acting like the
Windows Message Compiler.

@c man end

@c man begin OPTIONS windmc

@table @env
@item -a
@itemx --ascii_in
Specifies that the input file specified is ASCII. This is the default
behaviour.

@item -A
@itemx --ascii_out
Specifies that messages in the output @code{bin} files should be in ASCII
format.

@item -b
@itemx --binprefix
Specifies that @code{bin} filenames should have to be prefixed by the
basename of the source file.

@item -c
@itemx --customflag
Sets the customer bit in all message id's.

@item -C @var{codepage}
@itemx --codepage_in @var{codepage}
Sets the default codepage to be used to convert input file to UTF16. The
default is ocdepage 1252.

@item -d
@itemx --decimal_values
Outputs the constants in the header file in decimal. Default is using
hexadecimal output.

@item -e @var{ext}
@itemx --extension @var{ext}
The extension for the header file. The default is .h extension.

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

@item -h @var{path}
@itemx --headerdir @var{path}
The target directory of the generated header file. The default is the
current directory.

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

@item -m @var{characters}
@itemx --maxlength @var{characters}
Instructs @command{windmc} to generate a warning if the length
of any message exceeds the number specified.

@item -n
@itemx --nullterminate
Terminate message text in @code{bin} files by zero. By default they are
terminated by CR/LF.

@item -o
@itemx --hresult_use
Not yet implemented. Instructs @code{windmc} to generate an OLE2 header
file, using HRESULT definitions. Status codes are used if the flag is not
specified.

@item -O @var{codepage}
@itemx --codepage_out @var{codepage}
Sets the default codepage to be used to output text files. The default
is ocdepage 1252.

@item -r @var{path}
@itemx --rcdir @var{path}
The target directory for the generated @code{rc} script and the generated
@code{bin} files that the resource compiler script includes. The default
is the current directory.

@item -u
@itemx --unicode_in
Specifies that the input file is UTF16.

@item -U
@itemx --unicode_out
Specifies that messages in the output @code{bin} file should be in UTF16
format. This is the default behaviour.

@item -v
@item --verbose
Enable verbose mode.

@item -V
@item --version
Prints the version number for @command{windmc}.

@item -x @var{path}
@itemx --xdgb @var{path}
The path of the @code{dbg} C include file that maps message id's to the
symbolic name. No such file is generated without specifying the switch.
@end table

@c man end

@ignore
@c man begin SEEALSO windmc
the Info entries for @file{binutils}.
@c man end
@end ignore

@node windres
@chapter windres

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

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

@c man title windres manipulate Windows resources

@smallexample
@c man begin SYNOPSIS windres
windres [options] [input-file] [output-file]
@c man end
@end smallexample

@c man begin DESCRIPTION windres

@command{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 @command{windres} converts from the @code{rc} format to the @code{res}
format, it is acting like the Windows Resource Compiler.  When
@command{windres} converts from the @code{res} format to the @code{coff}
format, it is acting like the Windows @code{CVTRES} program.

When @command{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, @command{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, @command{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 @command{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.

@c man end

@c man begin OPTIONS windres

@table @env
@item -i @var{filename}
@itemx --input @var{filename}
The name of the input file.  If this option is not used, then
@command{windres} will use the first non-option argument as the input file
name.  If there are no non-option arguments, then @command{windres} will
read from standard input.  @command{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
@command{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 @command{windres} will write to standard output.
@command{windres} can not write a COFF file to standard output.  Note,
for compatibility with @command{rc} the option @option{-fo} is also
accepted, but its use is not recommended.

@item -J @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, @command{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,
@command{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 @option{--help} option to see a list
of supported targets.  Normally @command{windres} will use the default
format, which is the first one listed by the @option{--help} option.
@ifclear man
@ref{Target Selection}.
@end ifclear

@item --preprocessor @var{program}
When @command{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.  The default preprocessor is @code{gcc}.

@item --preprocessor-arg @var{option}
When @command{windres} reads an @code{rc} file, it runs it through
the C preprocessor first.  This option may be used to specify additional
text to be passed to preprocessor on its command line.
This option can be used multiple times to add multiple options to the
preprocessor command line.
If the @option{--preprocessor} option has not been specified then a
default set of preprocessor arguments will be used, with any
@option{--preprocessor-arg} options being placed after them on the
command line.  These default arguments are @code{-E},
@code{-xc-header} and @code{-DRC_INVOKED}.

@item -I @var{directory}
@itemx --include-dir @var{directory}
Specify an include directory to use when reading an @code{rc} file.
@command{windres} will pass this to the preprocessor as an @option{-I}
option.  @command{windres} will also search this directory when looking for
files named in the @code{rc} file.  If the argument passed to this command
matches any of the supported @var{formats} (as described in the @option{-J}
option), it will issue a deprecation warning, and behave just like the
@option{-J} option.  New programs should not use this behaviour.  If a
directory happens to match a @var{format}, simple prefix it with @samp{./}
to disable the backward compatibility.

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

@item -U @var{target}
@itemx --undefine @var{sym}
Specify a @option{-U} option to pass to the preprocessor when reading an
@code{rc} file.

@item -r
Ignored for compatibility with rc.

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

@item -c @var{val}
@item --codepage @var{val}
Specify the default codepage to use when reading an @code{rc} file.
@var{val} should be a hexadecimal prefixed by @samp{0x} or decimal
codepage code. The valid range is from zero up to 0xffff, but the
validity of the codepage is host and configuration dependent.

@item -l @var{val}
@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 -h
@item --help
Prints a usage summary.

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

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

@c man end

@ignore
@c man begin SEEALSO windres
the Info entries for @file{binutils}.
@c man end
@end ignore

@node dlltool
@chapter dlltool
@cindex DLL
@kindex dlltool

@command{dlltool} is used to create the files needed to create dynamic
link libraries (DLLs) on systems which understand PE format image
files such as Windows.  A DLL contains an export table which contains
information that the runtime loader needs to resolve references from a
referencing program.

The export table is generated by this program by reading in a
@file{.def} file or scanning the @file{.a} and @file{.o} files which
will be in the DLL.  A @file{.o} file can contain information in
special @samp{.drectve} sections with export information.

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

@c man title dlltool create files needed to build and use DLLs

@smallexample
@c man begin SYNOPSIS dlltool
dlltool [@option{-d}|@option{--input-def} @var{def-file-name}]
        [@option{-b}|@option{--base-file} @var{base-file-name}]
        [@option{-e}|@option{--output-exp} @var{exports-file-name}]
        [@option{-z}|@option{--output-def} @var{def-file-name}]
        [@option{-l}|@option{--output-lib} @var{library-file-name}]
        [@option{-y}|@option{--output-delaylib} @var{library-file-name}]
        [@option{--export-all-symbols}] [@option{--no-export-all-symbols}]
        [@option{--exclude-symbols} @var{list}]
        [@option{--no-default-excludes}]
        [@option{-S}|@option{--as} @var{path-to-assembler}] [@option{-f}|@option{--as-flags} @var{options}]
        [@option{-D}|@option{--dllname} @var{name}] [@option{-m}|@option{--machine} @var{machine}]
        [@option{-a}|@option{--add-indirect}]
        [@option{-U}|@option{--add-underscore}] [@option{--add-stdcall-underscore}]
        [@option{-k}|@option{--kill-at}] [@option{-A}|@option{--add-stdcall-alias}]
        [@option{-p}|@option{--ext-prefix-alias} @var{prefix}]
        [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}]
        [@option{--use-nul-prefixed-import-tables}]
        [@option{-I}|@option{--identify} @var{library-file-name}] [@option{--identify-strict}]
        [@option{-i}|@option{--interwork}]
        [@option{-n}|@option{--nodelete}] [@option{-t}|@option{--temp-prefix} @var{prefix}]
        [@option{-v}|@option{--verbose}]
        [@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
        [@option{--no-leading-underscore}] [@option{--leading-underscore}]
        [object-file @dots{}]
@c man end
@end smallexample

@c man begin DESCRIPTION dlltool

@command{dlltool} reads its inputs, which can come from the @option{-d} and
@option{-b} options as well as object files specified on the command
line.  It then processes these inputs and if the @option{-e} option has
been specified it creates a exports file.  If the @option{-l} option
has been specified it creates a library file and if the @option{-z} option
has been specified it creates a def file.  Any or all of the @option{-e},
@option{-l} and @option{-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.  @command{dlltool} can help with the creation of
these files.

The first file is a @file{.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 @command{dlltool} can be used
to create it using the @option{-z} option.  In this case @command{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 @file{.def} file it creates.

In order to mark a function as being exported from a DLL, it needs to
have an @option{-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 @option{-e} option to
@command{dlltool} when it is creating or reading in a @file{.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 (an `import
library').  This file can be created by giving the @option{-l} option to
dlltool when it is creating or reading in a @file{.def} file.

If the @option{-y} option is specified, dlltool generates a delay-import
library that can be used instead of the normal import library to allow
a program to link to the dll only as soon as an imported function is
called for the first time. The resulting executable will need to be
linked to the static delayimp library containing __delayLoadHelper2(),
which in turn will import LoadLibraryA and GetProcAddress from kernel32.

@command{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 @option{-S} command-line option can be
used to specify the path to the assembler that dlltool will use,
and the @option{-f} option can be used to pass specific flags to that
assembler.  The @option{-n} can be used to prevent dlltool from deleting
these temporary assembler files when it is done, and if @option{-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


@command{dlltool} may also be used to query an existing import library
to determine the name of the DLL to which it is associated.  See the
description of the @option{-I} or @option{--identify} option.

@c man end

@c man begin OPTIONS dlltool

The command-line options have the following meanings:

@table @env

@item -d @var{filename}
@itemx --input-def @var{filename}
@cindex input .def file
Specifies the name of a @file{.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 @file{.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 -y @var{filename}
@itemx --output-delaylib @var{filename}
Specifies the name of the delay-import 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 @option{--no-default-excludes}
option.  You may add to the list of symbols to not export by using the
@option{--exclude-symbols} option.

@item --no-export-all-symbols
Only export symbols explicitly listed in an input @file{.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
@option{--export-all-symbols} is used.

@item --no-default-excludes
When @option{--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 @option{--no-default-excludes} option
to go ahead and export these special symbols.  This is only meaningful
when @option{--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{options}
@itemx --as-flags @var{options}
Specifies any specific command-line options to be passed to the
assembler when building the exports file.  This option will work even if
the @option{-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 options 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 @file{.def} file as the name of
the DLL when the @option{-e} option is used.  If this option is not
present, then the filename given to the @option{-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.  @command{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 @command{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 @command{dlltool} is creating the exports file it
should prepend an underscore to the names of @emph{all} exported symbols.

@item --no-leading-underscore
@item --leading-underscore
Specifies whether standard symbol should be forced to be prefixed, or
not.

@item --add-stdcall-underscore
Specifies that when @command{dlltool} is creating the exports file it
should prepend an underscore to the names of exported @emph{stdcall}
functions. Variable names and non-stdcall function names are not modified.
This option is useful when creating GNU-compatible import libs for third
party DLLs that were built with MS-Windows tools.

@item -k
@itemx --kill-at
Specifies that @samp{@@<number>} suffixes should be omitted from the names
of stdcall functions that will be imported from the DLL.  This is
useful when creating an import library for a DLL which exports stdcall
functions but without the usual @samp{@@<number>} symbol name suffix.

This does not change the naming of symbols provided by the import library
to programs linked against it, but only the entries in the import table
(ie the .idata section).

@item -A
@itemx --add-stdcall-alias
Specifies that when @command{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 -p
@itemx --ext-prefix-alias @var{prefix}
Causes @command{dlltool} to create external aliases for all DLL
imports with the specified prefix.  The aliases are created for both
external and import symbols with no leading underscore.

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

@item --use-nul-prefixed-import-tables
Specifies that when @command{dlltool} is creating the exports and library
files it should prefix the @code{.idata4} and @code{.idata5} by zero an
element. This emulates old gnu import library generation of
@code{dlltool}. By default this option is turned off.

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

@item -I @var{filename}
@itemx --identify @var{filename}
Specifies that @command{dlltool} should inspect the import library
indicated by @var{filename} and report, on @code{stdout}, the name(s)
of the associated DLL(s).  This can be performed in addition to any
other operations indicated by the other options and arguments.
@command{dlltool} fails if the import library does not exist or is not
actually an import library. See also @option{--identify-strict}.

@item --identify-strict
Modifies the behavior of the @option{--identify} option, such
that an error is reported if @var{filename} is associated with
more than one DLL.

@item -i
@itemx --interwork
Specifies that @command{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 @command{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 -t @var{prefix}
@itemx --temp-prefix @var{prefix}
Makes @command{dlltool} use @var{prefix} when constructing the names of
temporary assembler and object files.  By default, the temp file prefix
is generated from the pid.

@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

@c man end

@menu
* def file format::             The format of the dlltool @file{.def} file
@end menu

@node def file format
@section The format of the @command{dlltool} @file{.def} file

A @file{.def} file contains any number of the following commands:

@table @asis

@item @code{NAME} @var{name} @code{[ ,} @var{base} @code{]}
The result is going to be named @var{name}@code{.exe}.

@item @code{LIBRARY} @var{name} @code{[ ,} @var{base} @code{]}
The result is going to be named @var{name}@code{.dll}.
Note: If you want to use LIBRARY as name then you need to quote.  Otherwise
this will fail due a necessary hack for libtool (see PR binutils/13710 for more
details).

@item @code{EXPORTS ( ( (} @var{name1} @code{[ = } @var{name2} @code{] ) | ( } @var{name1} @code{=} @var{module-name} @code{.} @var{external-name} @code{) ) [ == } @var{its_name} @code{]}
@item @code{[} @var{integer} @code{] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *}
Declares @var{name1} as an exported symbol from the DLL, with optional
ordinal number @var{integer}, or declares @var{name1} as an alias
(forward) of the function @var{external-name} in the DLL.
If @var{its_name} is specified, this name is used as string in export table.
@var{module-name}.
Note: The @code{EXPORTS} has to be the last command in .def file, as keywords
are treated - beside @code{LIBRARY} - as simple name-identifiers.
If you want to use LIBRARY as name then you need to quote it.

@item @code{IMPORTS ( (} @var{internal-name} @code{=} @var{module-name} @code{.} @var{integer} @code{) | [} @var{internal-name} @code{= ]} @var{module-name} @code{.} @var{external-name} @code{) [ == ) @var{its_name} @code{]} *}
Declares that @var{external-name} or the exported function whose
ordinal number is @var{integer} is to be imported from the file
@var{module-name}.  If @var{internal-name} is specified then this is
the name that the imported function will be referred to in the body of
the DLL.
If @var{its_name} is specified, this name is used as string in import table.
Note: The @code{IMPORTS} has to be the last command in .def file, as keywords
are treated - beside @code{LIBRARY} - as simple name-identifiers.
If you want to use LIBRARY as name then you need to quote it.

@item @code{DESCRIPTION} @var{string}
Puts @var{string} into the output @file{.exp} file in the
@code{.rdata} section.

@item @code{STACKSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]}
@item @code{HEAPSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]}
Generates @code{--stack} or @code{--heap}
@var{number-reserve},@var{number-commit} in the output @code{.drectve}
section.  The linker will see this and act upon it.

@item @code{CODE} @var{attr} @code{+}
@item @code{DATA} @var{attr} @code{+}
@item @code{SECTIONS (} @var{section-name} @var{attr}@code{ + ) *}
Generates @code{--attr} @var{section-name} @var{attr} in the output
@code{.drectve} section, where @var{attr} is one of @code{READ},
@code{WRITE}, @code{EXECUTE} or @code{SHARED}.  The linker will see
this and act upon it.

@end table

@ignore
@c man begin SEEALSO dlltool
The Info pages for @file{binutils}.
@c man end
@end ignore

@node readelf
@chapter readelf

@cindex ELF file information
@kindex readelf

@c man title readelf display information about ELF files

@smallexample
@c man begin SYNOPSIS readelf
readelf [@option{-a}|@option{--all}]
        [@option{-h}|@option{--file-header}]
        [@option{-l}|@option{--program-headers}|@option{--segments}]
        [@option{-S}|@option{--section-headers}|@option{--sections}]
        [@option{-g}|@option{--section-groups}]
        [@option{-t}|@option{--section-details}]
        [@option{-e}|@option{--headers}]
        [@option{-s}|@option{--syms}|@option{--symbols}]
        [@option{--dyn-syms}|@option{--lto-syms}]
        [@option{--sym-base=[0|8|10|16]}]
        [@option{--demangle@var{=style}}|@option{--no-demangle}]
        [@option{--quiet}]
        [@option{--recurse-limit}|@option{--no-recurse-limit}]
        [@option{-n}|@option{--notes}]
        [@option{-r}|@option{--relocs}]
        [@option{-u}|@option{--unwind}]
        [@option{-d}|@option{--dynamic}]
        [@option{-V}|@option{--version-info}]
        [@option{-A}|@option{--arch-specific}]
        [@option{-D}|@option{--use-dynamic}]
        [@option{-L}|@option{--lint}|@option{--enable-checks}]
        [@option{-x} <number or name>|@option{--hex-dump=}<number or name>]
        [@option{-p} <number or name>|@option{--string-dump=}<number or name>]
        [@option{-R} <number or name>|@option{--relocated-dump=}<number or name>]
        [@option{-z}|@option{--decompress}]
        [@option{-c}|@option{--archive-index}]
        [@option{-w[lLiaprmfFsoORtUuTgAck]}|
         @option{--debug-dump}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]]
        [@option{-wK}|@option{--debug-dump=follow-links}]
        [@option{-wN}|@option{--debug-dump=no-follow-links}]
        [@option{-P}|@option{--process-links}]
        [@option{--dwarf-depth=@var{n}}]
        [@option{--dwarf-start=@var{n}}]
        [@option{--ctf=}@var{section}]
        [@option{--ctf-parent=}@var{section}]
        [@option{--ctf-symbols=}@var{section}]
        [@option{--ctf-strings=}@var{section}]
        [@option{-I}|@option{--histogram}]
        [@option{-v}|@option{--version}]
        [@option{-W}|@option{--wide}]
        [@option{-T}|@option{--silent-truncation}]
        [@option{-H}|@option{--help}]
        @var{elffile}@dots{}
@c man end
@end smallexample

@c man begin DESCRIPTION readelf

@command{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.  32-bit and
64-bit ELF files are supported, as are archives containing ELF files.

This program performs a similar function to @command{objdump} but it
goes into more detail and it exists independently of the @sc{bfd}
library, so if there is a bug in @sc{bfd} then readelf will not be
affected.

@c man end

@c man begin OPTIONS readelf

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 @env
@item -a
@itemx --all
Equivalent to specifying @option{--file-header},
@option{--program-headers}, @option{--sections}, @option{--symbols},
@option{--relocs}, @option{--dynamic}, @option{--notes},
@option{--version-info}, @option{--arch-specific}, @option{--unwind},
@option{--section-groups} and @option{--histogram}.

Note - this option does not enable @option{--use-dynamic} itself, so
if that option is not present on the command line then dynamic symbols
and dynamic relocs will not be displayed.

@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 --quiet
@cindex quiet
Suppress "no symbols" diagnostic.

@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 -g
@itemx --section-groups
@cindex ELF section group information
Displays the information contained in the file's section groups, if it
has any.

@item -t
@itemx --section-details
@cindex ELF section information
Displays the detailed section information. Implies @option{-S}.

@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.
If a symbol has version information associated with it then this is
displayed as well.  The version string is displayed as a suffix to the
symbol name, preceded by an @@ character.  For example
@samp{foo@@VER_1}.  If the version is the default version to be used
when resolving unversioned references to the symbol then it is
displayed as a suffix preceded by two @@ characters.  For example
@samp{foo@@@@VER_2}.

@item --dyn-syms
@cindex ELF dynamic symbol table information
Displays the entries in dynamic symbol table section of the file, if it
has one.  The output format is the same as the format used by the
@option{--syms} option.

@item --lto-syms
@cindex LTO symbol table
Displays the contents of any LTO symbol tables in the file.

@item --sym-base=[0|8|10|16]
@cindex symbol table size base
Forces the size field of the symbol table to use the given base.  Any
unrecognized options will be treated as @samp{0}.  @option{--sym-base=0}
represents the default and legacy behaviour.  This will output sizes as decimal
for numbers less than 100000.  For sizes 100000 and greater hexadecimal notation
will be used with a 0x prefix.
@option{--sym-base=8} will give the symbol sizes in octal.
@option{--sym-base=10} will always give the symbol sizes in decimal.
@option{--sym-base=16} will always give the symbol sizes in hexadecimal with a
0x prefix.

@item -C
@itemx --demangle[=@var{style}]
@cindex demangling in nm
Decode (@dfn{demangle}) low-level symbol names into user-level names.
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 --recurse-limit
@itemx --no-recurse-limit
@itemx --recursion-limit
@itemx --no-recursion-limit
Enables or disables a limit on the amount of recursion performed
whilst demangling strings.  Since the name mangling formats allow for
an infinite level of recursion it is possible to create strings whose
decoding will exhaust the amount of stack space available on the host
machine, triggering a memory fault.  The limit tries to prevent this
from happening by restricting recursion to 2048 levels of nesting.

The default is for this limit to be enabled, but disabling it may be
necessary in order to demangle truly complicated names.  Note however
that if the recursion limit is disabled then stack exhaustion is
possible and any bug reports about such an event will be rejected.

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

@item -n
@itemx --notes
@cindex ELF notes
Displays the contents of the NOTE segments and/or sections, if any.

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

@item -u
@itemx --unwind
@cindex unwind information
Displays the contents of the file's unwind section, if it has one.  Only
the unwind sections for IA64 ELF files, as well as ARM unwind tables
(@code{.ARM.exidx} / @code{.ARM.extab}) are currently supported.  If
support is not yet implemented for your architecture you could try
dumping the contents of the @var{.eh_frames} section using the
@option{--debug-dump=frames} or @option{--debug-dump=frames-interp}
options.

@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 information
Displays the contents of the version sections in the file, it they
exist.

@item -A
@itemx --arch-specific
Displays architecture-specific information in the file, if there
is any.

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

When displaying relocations, this option makes @command{readelf}
display the dynamic relocations rather than the static relocations.

@item -L
@itemx --lint
@itemx --enable-checks
Displays warning messages about possible problems with the file(s)
being examined.  If used on its own then all of the contents of the
file(s) will be examined.  If used with one of the dumping options
then the warning messages will only be produced for the things being
displayed.

@item -x <number or name>
@itemx --hex-dump=<number or name>
Displays the contents of the indicated section as a hexadecimal bytes.
A number identifies a particular section by index in the section table;
any other string identifies all sections with that name in the object file.

@item -R <number or name>
@itemx --relocated-dump=<number or name>
Displays the contents of the indicated section as a hexadecimal
bytes.  A number identifies a particular section by index in the
section table; any other string identifies all sections with that name
in the object file.  The contents of the section will be relocated
before they are displayed.

@item -p <number or name>
@itemx --string-dump=<number or name>
Displays the contents of the indicated section as printable strings.
A number identifies a particular section by index in the section table;
any other string identifies all sections with that name in the object file.

@item -z
@itemx --decompress
Requests that the section(s) being dumped by @option{x}, @option{R} or
@option{p} options are decompressed before being displayed.  If the
section(s) are not compressed then they are displayed as is.

@item -c
@itemx --archive-index
@cindex Archive file symbol index information
Displays the file symbol index information contained in the header part
of binary archives.  Performs the same function as the @option{t}
command to @command{ar}, but without using the BFD library.  @xref{ar}.

@item -w[lLiaprmfFsOoRtUuTgAckK]
@itemx --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]
@include debug.options.texi

@item -P
@itemx --process-links
Display the contents of non-debug sections found in separate debuginfo
files that are linked to the main file.  This option automatically
implies the @option{-wK} option, and only sections requested by other
command line options will be displayed.

@include ctf.options.texi
@item --ctf-symbols=@var{section}
@item --ctf-strings=@var{section}
Specify the name of another section from which the CTF file can inherit
strings and symbols.  By default, the @code{.symtab} and its linked
string table are used.

If either of @option{--ctf-symbols} or @option{--ctf-strings} is specified, the
other must be specified as well.

@item -I
@itemx --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 -W
@itemx --wide
Don't break output lines to fit into 80 columns. By default
@command{readelf} breaks section header and segment listing lines for
64-bit ELF files, so that they fit into 80 columns. This option causes
@command{readelf} to print each section header resp. each segment one a
single line, which is far more readable on terminals wider than 80 columns.

@item -T
@itemx --silent-truncation
Normally when readelf is displaying a symbol name, and it has to
truncate the name to fit into an 80 column display, it will add a
suffix of @code{[...]} to the name.  This command line option
disables this behaviour, allowing 5 more characters of the name to be
displayed and restoring the old behaviour of readelf (prior to release
2.35).

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

@end table

@c man end

@ignore
@c man begin SEEALSO readelf
objdump(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node elfedit
@chapter elfedit

@cindex Update ELF header
@kindex elfedit

@c man title elfedit update ELF header and program property of ELF files

@smallexample
@c man begin SYNOPSIS elfedit
elfedit [@option{--input-mach=}@var{machine}]
        [@option{--input-type=}@var{type}]
        [@option{--input-osabi=}@var{osabi}]
        @option{--output-mach=}@var{machine}
        @option{--output-type=}@var{type}
        @option{--output-osabi=}@var{osabi}
        @option{--enable-x86-feature=}@var{feature}
        @option{--disable-x86-feature=}@var{feature}
        [@option{-v}|@option{--version}]
        [@option{-h}|@option{--help}]
        @var{elffile}@dots{}
@c man end
@end smallexample

@c man begin DESCRIPTION elfedit

@command{elfedit} updates the ELF header and program property of ELF
files which have the matching ELF machine and file types.  The options
control how and which fields in the ELF header and program property
should be updated.

@var{elffile}@dots{} are the ELF files to be updated.  32-bit and
64-bit ELF files are supported, as are archives containing ELF files.
@c man end

@c man begin OPTIONS elfedit

The long and short forms of options, shown here as alternatives, are
equivalent. At least one of the @option{--output-mach},
@option{--output-type}, @option{--output-osabi},
@option{--enable-x86-feature} and @option{--disable-x86-feature}
options must be given.

@table @env

@item --input-mach=@var{machine}
Set the matching input ELF machine type to @var{machine}.  If
@option{--input-mach} isn't specified, it will match any ELF
machine types.

The supported ELF machine types are, @var{i386}, @var{IAMCU}, @var{L1OM},
@var{K1OM} and @var{x86-64}.

@item --output-mach=@var{machine}
Change the ELF machine type in the ELF header to @var{machine}.  The
supported ELF machine types are the same as @option{--input-mach}.

@item --input-type=@var{type}
Set the matching input ELF file type to @var{type}.  If
@option{--input-type} isn't specified, it will match any ELF file types.

The supported ELF file types are, @var{rel}, @var{exec} and @var{dyn}.

@item --output-type=@var{type}
Change the ELF file type in the ELF header to @var{type}.  The
supported ELF types are the same as @option{--input-type}.

@item --input-osabi=@var{osabi}
Set the matching input ELF file OSABI to @var{osabi}.  If
@option{--input-osabi} isn't specified, it will match any ELF OSABIs.

The supported ELF OSABIs are, @var{none}, @var{HPUX}, @var{NetBSD},
@var{GNU}, @var{Linux} (alias for @var{GNU}),
@var{Solaris}, @var{AIX}, @var{Irix},
@var{FreeBSD}, @var{TRU64}, @var{Modesto}, @var{OpenBSD}, @var{OpenVMS},
@var{NSK}, @var{AROS} and @var{FenixOS}.

@item --output-osabi=@var{osabi}
Change the ELF OSABI in the ELF header to @var{osabi}.  The
supported ELF OSABI are the same as @option{--input-osabi}.

@item --enable-x86-feature=@var{feature}
Set the @var{feature} bit in program property in @var{exec} or @var{dyn}
ELF files with machine types of @var{i386} or @var{x86-64}.  The
supported features are, @var{ibt}, @var{shstk}, @var{lam_u48} and
@var{lam_u57}.

@item --disable-x86-feature=@var{feature}
Clear the @var{feature} bit in program property in @var{exec} or
@var{dyn} ELF files with machine types of @var{i386} or @var{x86-64}.
The supported features are the same as @option{--enable-x86-feature}.

Note: @option{--enable-x86-feature} and @option{--disable-x86-feature}
are available only on hosts with @samp{mmap} support.

@item -v
@itemx --version
Display the version number of @command{elfedit}.

@item -h
@itemx --help
Display the command-line options understood by @command{elfedit}.

@end table

@c man end

@ignore
@c man begin SEEALSO elfedit
readelf(1), and the Info entries for @file{binutils}.
@c man end
@end ignore

@node Common Options
@chapter Common Options

The following command-line options are supported by all of the
programs described in this manual.

@c man begin OPTIONS
@table @env
@include at-file.texi
@c man end

@item --help
Display the command-line options supported by the program.

@item --version
Display the version number of the program.

@c man begin OPTIONS
@end table
@c man end

@node Selecting the Target System
@chapter Selecting the Target System

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

@itemize @bullet
@item
the target

@item
the architecture
@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
@option{--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::
@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 @command{objdump} Target

Ways to specify:

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

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

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

Ways to specify:

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

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

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

Ways to specify:

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

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

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@end enumerate

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

Ways to specify:

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

@item
environment variable @code{GNUTARGET}

@item
deduced from the input file
@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 @command{objdump} Architecture

Ways to specify:

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

@item
deduced from the input file
@end enumerate

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

Ways to specify:

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

@node debuginfod
@chapter debuginfod
@cindex separate debug files

debuginfod is a web service that indexes ELF/DWARF debugging resources
by build-id and serves them over HTTP.

Binutils can be built with the debuginfod client library
@code{libdebuginfod} using the @option{--with-debuginfod} configure option.
This option is enabled by default if @code{libdebuginfod} is installed
and found at configure time. This allows @command{objdump} and
@command{readelf} to automatically query debuginfod servers for
separate debug files when the files are otherwise not found.

debuginfod is packaged with elfutils, starting with version 0.178.
You can get the latest version from `https://sourceware.org/elfutils/'.

@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.

@ifset BUGURL
In any event, we also recommend that you send bug reports for the binary
utilities to @value{BUGURL}.
@end ifset

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?''  This cannot help us fix a bug, so it is basically useless.  We
respond by asking for enough details to enable us to investigate.
You might as well expedite matters by sending them to begin with.

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 @option{--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.

If the source files were produced exclusively using @sc{gnu} programs
(e.g., @command{gcc}, @command{gas}, and/or the @sc{gnu} @command{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 @command{gcc}, or
whatever, was used to produce the object files.  Also say how
@command{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 sync, 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 @command{diff} with the @option{-u}, @option{-c}, or @option{-p}
option.  Always send diffs from the old file to the new file.  If you
wish to discuss something in the @command{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
@appendix GNU Free Documentation License

@include fdl.texi

@node Binutils Index
@unnumbered Binutils Index

@printindex cp

@bye
