\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-2023 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 or symbol+offset 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 or symbol+offset 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}] [@option{--thin}] [@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
Deprecated alias for @option{--thin}.  @option{T} is not recommended because in
many ar implementations @option{T} has a different meaning, as specified by
X/Open System Interface.

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

Note - if an archive has been created in a deterministic manner, eg
via the use of the @option{D} modifier, then replacement will always
happen and the @option{u} modifier will be ineffective.

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

@item --thin
@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}.

@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{-U}|@option{--defined-only}]
   [@option{-V}|@option{--version}]
   [@option{-W}|@option{--no-weak}]
   [@option{-X 32_64}]
   [@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{--unicode=}@var{method}]
   [@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 a non-data, non-code, non-debug read-only 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).
By default both defined and undefined symbols are displayed.

@item -U
@itemx --defined-only
@cindex external symbols
@cindex undefined symbols
Display only defined symbols for each object file.
By default both defined and undefined symbols are displayed.

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

Note - this option does not work if @option{--undefined-only} has been
enabled as undefined symbols have no size.

@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 --unicode=@var{[default|invalid|locale|escape|hex|highlight]}
Controls the display of UTF-8 encoded multibyte characters in strings.
The default (@option{--unicode=default}) is to give them no special
treatment.  The @option{--unicode=locale} option displays the sequence
in the current locale, which may or may not support them.  The options
@option{--unicode=hex} and @option{--unicode=invalid} display them as
hex byte sequences enclosed by either angle brackets or curly braces.

The @option{--unicode=escape} option displays them as escape sequences
(@var{\uxxxx}) and the @option{--unicode=highlight} option displays
them as escape sequences highlighted in red (if supported by the
output device).  The colouring is intended to draw attention to the
presence of unicode sequences where they might not be expected.

@item -W
@itemx --no-weak
Do not display weak symbols.

@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{--strip-section-headers}]
        [@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 --strip-section-headers
Strip section header   This option is specific to ELF files.
Implies @option{--strip-all} and @option{--merge-notes}.

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

This option also copies the date stored in a PE format file's header,
unless the SOURCE_DATE_EPOCH environment variable is defined.  If it
is defined then this variable will be used as the date stored in the
header, interpreted as the number of seconds since the Unix epoch.

@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}, @samp{debug}, and @samp{large}.
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.  The ELF x86-64 specific flag @samp{large} corresponds to
SHF_X86_64_LARGE.

@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
@itemx --compress-debug-sections=zstd
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 the obsoleted zlib-gnu format.  The debug sections are renamed to begin
with @samp{.zdebug}.
@option{--compress-debug-sections=zstd} compresses DWARF debug
sections using zstd.  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.  For a @samp{.zdebug} section, the original
name is 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{-wD}|@option{--dwarf=use-debuginfod}]
        [@option{-wE}|@option{--dwarf=do-not-use-debuginfod}]
        [@option{-L}|@option{--process-links}]
        [@option{--ctf=}@var{section}]
        [@option{--sframe=}@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{--show-all-symbols}]
        [@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{--disassembler-color=[off|terminal|on|extended]}
        [@option{-U} @var{method}] [@option{--unicode=}@var{method}]
        [@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 non-empty
non-bss sections, not just those expected to contain instructions.
@option{-j} may be used to select specific sections.

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 for section @var{name}.  This option may be
specified multiple times.

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

For most architectures it is possible to supply an architecture
name and a machine name, separated by a colon.  For example
@samp{foo:bar} would refer to the @samp{bar} machine type in the
@samp{foo} architecture.  This can be helpful if objdump has been
configured to support multiple architectures.

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{e200z2}, @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}, @option{vle}, and @option{future}.
@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{lsp}, @option{htm},
@option{vsx}, @option{spe} and  @option{spe2} 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

For PE, the available options are:
@table @code
@item header
@item sections
@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 sections, often used in combination with
@option{-j} to request specific sections.  By default all non-empty
non-bss 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 --show-all-symbols
When disassembling, show all the symbols that match a given address,
not just the first one.

@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 --disassembler-color=off
@itemx --disassembler-color=terminal
@itemx --disassembler-color=on|color|colour
@itemx --disassembler-color=extened|extended-color|extened-colour
Enables or disables the use of colored syntax highlighting in
disassembly output.  The default behaviour is determined via a
configure time option.  Note, not all architectures support colored
syntax highlighting, and depending upon the terminal used, colored
output may not actually be legible.

The @option{on} argument adds colors using simple terminal colors.

The @option{terminal} argument does the same, but only if the output
device is a terminal.

The @option{extended-color} argument is similar to the @option{on}
argument, but it uses 8-bit colors.  These may not work on all
terminals.

The @option{off} argument disables colored disassembly.

@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

@include sframe.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 -U @var{[d|i|l|e|x|h]}
@itemx --unicode=@var{[default|invalid|locale|escape|hex|highlight]}
Controls the display of UTF-8 encoded multibyte characters in strings.
The default (@option{--unicode=default}) is to give them no special
treatment.  The @option{--unicode=locale} option displays the sequence
in the current locale, which may or may not support them.  The options
@option{--unicode=hex} and @option{--unicode=invalid} display them as
hex byte sequences enclosed by either angle brackets or curly braces.

The @option{--unicode=escape} option displays them as escape sequences
(@var{\uxxxx}) and the @option{--unicode=highlight} option displays
them as escape sequences highlighted in red (if supported by the
output device).  The colouring is intended to draw attention to the
presence of unicode sequences where they might not be expected.

@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}]
     [@option{-f}]
     [@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
@itemx -h
@itemx -H
@item -?
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
@item -V
@itemx --version
Display the version number of @command{size}.

@item -f
Ignored.  This option is used by other versions of the @command{size}
program, but it is not supported by the GNU Binutils version.

@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{-U} @var{method}] [@option{--unicode=}@var{method}]
        [@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 displayable characters that are at least
@var{min-len} characters long.  If not specified a default minimum
length of 4 is used.  The distinction between displayable and
non-displayable characters depends upon the setting of the 
@option{-e} and @option{-U} options.  Sequences are always terminated
at control characters such as new-line and carriage-return, but not
the tab character.

@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 (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 -U @var{[d|i|l|e|x|h]}
@itemx --unicode=@var{[default|invalid|locale|escape|hex|highlight]}
Controls the display of UTF-8 encoded multibyte characters in strings.
The default (@option{--unicode=default}) is to give them no special
treatment, and instead rely upon the setting of the
@option{--encoding} option.  The other values for this option
automatically enable @option{--encoding=S}.

The @option{--unicode=invalid} option treats them as non-graphic
characters and hence not part of a valid string.  All the remaining
options treat them as valid string characters.

The @option{--unicode=locale} option displays them in the current
locale, which may or may not support UTF-8 encoding.  The
@option{--unicode=hex} option displays them as hex byte sequences
enclosed between @var{<>} characters.  The @option{--unicode=escape}
option displays them as escape sequences (@var{\uxxxx}) and the
@option{--unicode=highlight} option displays them as escape sequences
highlighted in red (if supported by the output device).  The colouring
is intended to draw attention to the presence of unicode sequences
where they might not be expected.

@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{--strip-section-headers}]
      [@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 --strip-section-headers
Strip section headers.  This option is specific to ELF files.  Implies
@option{--strip-all} and @option{--merge-notes}.

@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 or symbol+offset 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 or symbol+offset into file names and line numbers.
Given an address or symbol+offset 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 or symbol+offset 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 or symbol+offset 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.

When symbol+offset is used, +offset is optional, except when the symbol
is ambigious with a hex number. The resolved symbols can be mangled
or unmangled, except unmangled symbols with + are not allowed.

@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}]
        [@option{--deterministic-libraries}] [@option{--non-deterministic-libraries}]
        [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 --deterministic-libraries
@itemx --non-deterministic-libraries
When creating output libraries in response to either the
@option{--output-lib} or @option{--output-delaylib} options either use
the value of zero for any timestamps, user ids and group ids created
(@option{--deterministic-libraries}) or the actual timestamps, user
ids and group ids (@option{--non-deterministic-libraries}).

@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{-U} @var{method}|@option{--unicode=}@var{method}]
        [@option{-X}|@option{--extra-sym-info}|@option{--no-extra-sym-info}]
        [@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{-wD}|@option{--debug-dump=use-debuginfod}]
        [@option{-wE}|@option{--debug-dump=do-not-use-debuginfod}]
        [@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{--sframe=}@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 -U @var{[d|i|l|e|x|h]}
@itemx --unicode=[default|invalid|locale|escape|hex|highlight]
Controls the display of non-ASCII characters in identifier names.
The default (@option{--unicode=locale} or @option{--unicode=default}) is
to treat them as multibyte characters and display them in the current
locale.  All other versions of this option treat the bytes as UTF-8
encoded values and attempt to interpret them.  If they cannot be
interpreted or if the @option{--unicode=invalid} option is used then
they are displayed as a sequence of hex bytes, encloses in curly
parethesis characters.

Using the @option{--unicode=escape} option will display the characters
as as unicode escape sequences (@var{\uxxxx}).  Using the
@option{--unicode=hex} will display the characters as hex byte
sequences enclosed between angle brackets.

Using the @option{--unicode=highlight} will display the characters as 
unicode escape sequences but it will also highlighted them in red,
assuming that colouring is supported by the output device.  The
colouring is intended to draw attention to the presence of unicode
sequences when they might not be expected.

@item -X
@itemx --extra-sym-info
When displaying details of symbols, include extra information not
normally presented.  Currently this just adds the name of the section
referenced by the symbol's index field, if there is one.  In the
future more information may be displayed when this option is enabled.

Enabling this option effectively enables the @option{--wide} option as
well, at least when displaying symbol information.

@item --no-extra-sym-info
Disables the effect of the @option{--extra-sym-info} option.  This
is the default.

@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{--input-abiversion=}@var{version}]
        @option{--output-mach=}@var{machine}
        @option{--output-type=}@var{type}
        @option{--output-osabi=}@var{osabi}
        @option{--output-abiversion=}@var{version}
        @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{--output-abiversion},
@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 --input-abiversion=@var{version}
Set the matching input ELF file ABIVERSION to @var{version}.
@var{version} must be between 0 and 255.  If @option{--input-abiversion}
isn't specified, it will match any ELF ABIVERSIONs.

@item --output-abiversion=@var{version}
Change the ELF ABIVERSION in the ELF header to @var{version}.
@var{version} must be between 0 and 255.

@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.  For more information see:
@emph{https://sourceware.org/elfutils/Debuginfod.html}

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/'.

The DWARF info dumping tools (@command{readelf} and @command{objdump})
have options to control when they should access the debuginfod
servers.  By default this access is enabled.

@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
