Home | History | Annotate | Line # | Download | only in doc
      1 \input texinfo       @c                    -*- Texinfo -*-
      2 @setfilename binutils.info
      3 @settitle @sc{gnu} Binary Utilities
      4 @finalout
      5 @synindex ky cp
      6 
      7 @c man begin INCLUDE
      8 @include bfdver.texi
      9 @c man end
     10 
     11 @copying
     12 @c man begin COPYRIGHT
     13 Copyright @copyright{} 1991-2025 Free Software Foundation, Inc.
     14 
     15 Permission is granted to copy, distribute and/or modify this document
     16 under the terms of the GNU Free Documentation License, Version 1.3
     17 or any later version published by the Free Software Foundation;
     18 with no Invariant Sections, with no Front-Cover Texts, and with no
     19 Back-Cover Texts.  A copy of the license is included in the
     20 section entitled ``GNU Free Documentation License''.
     21 
     22 @c man end
     23 @end copying
     24 
     25 @dircategory Software development
     26 @direntry
     27 * Binutils: (binutils).         The GNU binary utilities.
     28 @end direntry
     29 
     30 @dircategory Individual utilities
     31 @direntry
     32 * addr2line: (binutils)addr2line. Convert addresses to file and line.
     33 * ar: (binutils)ar.               Create, modify, and extract from archives.
     34 * c++filt: (binutils)c++filt.	  Filter to demangle encoded C++ symbols.
     35 * cxxfilt: (binutils)c++filt.     MS-DOS name for c++filt.
     36 * dlltool: (binutils)dlltool.	  Create files needed to build and use DLLs.
     37 * nm: (binutils)nm.               List symbols from object files.
     38 * objcopy: (binutils)objcopy.	  Copy and translate object files.
     39 * objdump: (binutils)objdump.     Display information from object files.
     40 * ranlib: (binutils)ranlib.       Generate index to archive contents.
     41 * readelf: (binutils)readelf.	  Display the contents of ELF format files.
     42 * size: (binutils)size.           List section sizes and total size.
     43 * strings: (binutils)strings.     List printable strings from files.
     44 * strip: (binutils)strip.         Discard symbols.
     45 * elfedit: (binutils)elfedit.     Update ELF header and property of ELF files.
     46 * windmc: (binutils)windmc.	  Generator for Windows message resources.
     47 * windres: (binutils)windres.	  Manipulate Windows resources.
     48 @end direntry
     49 
     50 @titlepage
     51 @title The @sc{gnu} Binary Utilities
     52 @ifset VERSION_PACKAGE
     53 @subtitle @value{VERSION_PACKAGE}
     54 @end ifset
     55 @subtitle Version @value{VERSION}
     56 @sp 1
     57 @subtitle @value{UPDATED}
     58 @author Roland H. Pesch
     59 @author Jeffrey M. Osier
     60 @author Cygnus Support
     61 @page
     62 
     63 @tex
     64 {\parskip=0pt \hfill Cygnus Support\par \hfill
     65 Texinfo \texinfoversion\par }
     66 @end tex
     67 
     68 @vskip 0pt plus 1filll
     69 @insertcopying
     70 @end titlepage
     71 @contents
     72 
     73 @node Top
     74 @top Introduction
     75 
     76 @cindex version
     77 This brief manual contains documentation for the @sc{gnu} binary
     78 utilities
     79 @ifset VERSION_PACKAGE
     80 @value{VERSION_PACKAGE}
     81 @end ifset
     82 version @value{VERSION}:
     83 
     84 @iftex
     85 @table @code
     86 @item ar
     87 Create, modify, and extract from archives
     88 
     89 @item nm
     90 List symbols from object files
     91 
     92 @item objcopy
     93 Copy and translate object files
     94 
     95 @item objdump
     96 Display information from object files
     97 
     98 @item ranlib
     99 Generate index to archive contents
    100 
    101 @item readelf
    102 Display the contents of ELF format files.
    103 
    104 @item size
    105 List file section sizes and total size
    106 
    107 @item strings
    108 List printable strings from files
    109 
    110 @item strip
    111 Discard symbols
    112 
    113 @item elfedit
    114 Update the ELF header and program property of ELF files.
    115 
    116 @item c++filt
    117 Demangle encoded C++ symbols (on MS-DOS, this program is named
    118 @code{cxxfilt})
    119 
    120 @item addr2line
    121 Convert addresses or symbol+offset into file names and line numbers
    122 
    123 @item windres
    124 Manipulate Windows resources
    125 
    126 @item windmc
    127 Generator for Windows message resources
    128 
    129 @item dlltool
    130 Create the files needed to build and use Dynamic Link Libraries
    131 @end table
    132 @end iftex
    133 
    134 This document is distributed under the terms of the GNU Free
    135 Documentation License version 1.3.  A copy of the license is included
    136 in the section entitled ``GNU Free Documentation License''.
    137 
    138 @menu
    139 * ar::                          Create, modify, and extract from archives
    140 * nm::                          List symbols from object files
    141 * objcopy::			Copy and translate object files
    142 * objdump::                     Display information from object files
    143 * ranlib::                      Generate index to archive contents
    144 * size::                        List section sizes and total size
    145 * strings::                     List printable strings from files
    146 * strip::                       Discard symbols
    147 * c++filt::			Filter to demangle encoded C++ symbols
    148 * cxxfilt: c++filt.             MS-DOS name for c++filt
    149 * addr2line::			Convert addresses or symbol+offset to file and line
    150 * windmc::			Generator for Windows message resources
    151 * windres::			Manipulate Windows resources
    152 * dlltool::			Create files needed to build and use DLLs
    153 * readelf::                     Display the contents of ELF format files
    154 * elfedit::                     Update ELF header and property of ELF files
    155 * Common Options::              Command-line options for all utilities
    156 * Selecting the Target System:: How these utilities determine the target
    157 * debuginfod::                  Using binutils with debuginfod
    158 * Reporting Bugs::              Reporting Bugs
    159 * GNU Free Documentation License::  GNU Free Documentation License
    160 * Binutils Index::              Binutils Index
    161 @end menu
    162 
    163 @node ar
    164 @chapter ar
    165 
    166 @kindex ar
    167 @cindex archives
    168 @cindex collections of files
    169 
    170 @c man title ar create, modify, and extract from archives
    171 
    172 @smallexample
    173 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{}]
    174 ar -M [ <mri-script ]
    175 @end smallexample
    176 
    177 @c man begin DESCRIPTION ar
    178 
    179 The @sc{gnu} @command{ar} program creates, modifies, and extracts from
    180 archives.  An @dfn{archive} is a single file holding a collection of
    181 other files in a structure that makes it possible to retrieve
    182 the original individual files (called @dfn{members} of the archive).
    183 
    184 The original files' contents, mode (permissions), timestamp, owner, and
    185 group are preserved in the archive, and can be restored on
    186 extraction.
    187 
    188 @cindex name length
    189 @sc{gnu} @command{ar} can maintain archives whose members have names of any
    190 length; however, depending on how @command{ar} is configured on your
    191 system, a limit on member-name length may be imposed for compatibility
    192 with archive formats maintained with other tools.  If it exists, the
    193 limit is often 15 characters (typical of formats related to a.out) or 16
    194 characters (typical of formats related to coff).
    195 
    196 @cindex libraries
    197 @command{ar} is considered a binary utility because archives of this sort
    198 are most often used as @dfn{libraries} holding commonly needed
    199 subroutines.  Since libraries often will depend on other libraries,
    200 @command{ar} can also record the dependencies of a library when the
    201 @option{--record-libdeps} option is specified.
    202 
    203 @cindex symbol index
    204 @command{ar} creates an index to the symbols defined in relocatable
    205 object modules in the archive when you specify the modifier @samp{s}.
    206 Once created, this index is updated in the archive whenever @command{ar}
    207 makes a change to its contents (save for the @samp{q} update operation).
    208 An archive with such an index speeds up linking to the library, and
    209 allows routines in the library to call each other without regard to
    210 their placement in the archive.
    211 
    212 You may use @samp{nm -s} or @samp{nm --print-armap} to list this index
    213 table.  If an archive lacks the table, another form of @command{ar} called
    214 @command{ranlib} can be used to add just the table.
    215 
    216 @cindex thin archives
    217 @sc{gnu} @command{ar} can optionally create a @emph{thin} archive,
    218 which contains a symbol index and references to the original copies
    219 of the member files of the archive.  This is useful for building
    220 libraries for use within a local build tree, where the relocatable
    221 objects are expected to remain available, and copying the contents of
    222 each object would only waste time and space.
    223 
    224 An archive can either be @emph{thin} or it can be normal.  It cannot
    225 be both at the same time.  Once an archive is created its format
    226 cannot be changed without first deleting it and then creating a new
    227 archive in its place.
    228 
    229 Thin archives are also @emph{flattened}, so that adding one thin
    230 archive to another thin archive does not nest it, as would happen with
    231 a normal archive.  Instead the elements of the first archive are added
    232 individually to the second archive.
    233 
    234 The paths to the elements of the archive are stored relative to the
    235 archive itself.
    236 
    237 @cindex compatibility, @command{ar}
    238 @cindex @command{ar} compatibility
    239 @sc{gnu} @command{ar} is designed to be compatible with two different
    240 facilities.  You can control its activity using command-line options,
    241 like the different varieties of @command{ar} on Unix systems; or, if you
    242 specify the single command-line option @option{-M}, you can control it
    243 with a script supplied via standard input, like the MRI ``librarian''
    244 program.
    245 
    246 @c man end
    247 
    248 @menu
    249 * ar cmdline::                  Controlling @command{ar} on the command line
    250 * ar scripts::                  Controlling @command{ar} with a script
    251 @end menu
    252 
    253 @page
    254 @node ar cmdline
    255 @section Controlling @command{ar} on the Command Line
    256 
    257 @smallexample
    258 @c man begin SYNOPSIS ar
    259 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{}]
    260 @c man end
    261 @end smallexample
    262 
    263 @cindex Unix compatibility, @command{ar}
    264 When you use @command{ar} in the Unix style, @command{ar} insists on at least two
    265 arguments to execute: one keyletter specifying the @emph{operation}
    266 (optionally accompanied by other keyletters specifying
    267 @emph{modifiers}), and the archive name to act on.
    268 
    269 Most operations can also accept further @var{member} arguments,
    270 specifying particular files to operate on.
    271 
    272 @c man begin OPTIONS ar
    273 
    274 @sc{gnu} @command{ar} allows you to mix the operation code @var{p} and modifier
    275 flags @var{mod} in any order, within the first command-line argument.
    276 
    277 If you wish, you may begin the first command-line argument with a
    278 dash.
    279 
    280 @cindex operations on archive
    281 The @var{p} keyletter specifies what operation to execute; it may be
    282 any of the following, but you must specify only one of them:
    283 
    284 @table @samp
    285 @item d
    286 @cindex deleting from archive
    287 @emph{Delete} modules from the archive.  Specify the names of modules to
    288 be deleted as @var{member}@dots{}; the archive is untouched if you
    289 specify no files to delete.
    290 
    291 If you specify the @samp{v} modifier, @command{ar} lists each module
    292 as it is deleted.
    293 
    294 @item m
    295 @cindex moving in archive
    296 Use this operation to @emph{move} members in an archive.
    297 
    298 The ordering of members in an archive can make a difference in how
    299 programs are linked using the library, if a symbol is defined in more
    300 than one member.
    301 
    302 If no modifiers are used with @code{m}, any members you name in the
    303 @var{member} arguments are moved to the @emph{end} of the archive;
    304 you can use the @samp{a}, @samp{b}, or @samp{i} modifiers to move them to a
    305 specified place instead.
    306 
    307 @item p
    308 @cindex printing from archive
    309 @emph{Print} the specified members of the archive, to the standard
    310 output file.  If the @samp{v} modifier is specified, show the member
    311 name before copying its contents to standard output.
    312 
    313 If you specify no @var{member} arguments, all the files in the archive are
    314 printed.
    315 
    316 @item q
    317 @cindex quick append to archive
    318 @emph{Quick append}; Historically, add the files @var{member}@dots{} to the end of
    319 @var{archive}, without checking for replacement.
    320 
    321 The modifiers @samp{a}, @samp{b}, and @samp{i} do @emph{not} affect this
    322 operation; new members are always placed at the end of the archive.
    323 
    324 The modifier @samp{v} makes @command{ar} list each file as it is appended.
    325 
    326 Since the point of this operation is speed, implementations of
    327 @command{ar} have the option of not updating the archive's symbol
    328 table if one exists.  Too many different systems however assume that
    329 symbol tables are always up-to-date, so @sc{gnu} @command{ar} will
    330 rebuild the table even with a quick append.
    331 
    332 Note - @sc{gnu} @command{ar} treats the command @samp{qs} as a
    333 synonym for @samp{r} - replacing already existing files in the
    334 archive and appending new ones at the end.
    335 
    336 @item r
    337 @cindex replacement in archive
    338 Insert the files @var{member}@dots{} into @var{archive} (with
    339 @emph{replacement}). This operation differs from @samp{q} in that any
    340 previously existing members are deleted if their names match those being
    341 added.
    342 
    343 If one of the files named in @var{member}@dots{} does not exist, @command{ar}
    344 displays an error message, and leaves undisturbed any existing members
    345 of the archive matching that name.
    346 
    347 By default, new members are added at the end of the file; but you may
    348 use one of the modifiers @samp{a}, @samp{b}, or @samp{i} to request
    349 placement relative to some existing member.
    350 
    351 The modifier @samp{v} used with this operation elicits a line of
    352 output for each file inserted, along with one of the letters @samp{a} or
    353 @samp{r} to indicate whether the file was appended (no old member
    354 deleted) or replaced.
    355 
    356 @item s
    357 @cindex ranlib
    358 Add an index to the archive, or update it if it already exists.  Note
    359 this command is an exception to the rule that there can only be one
    360 command letter, as it is possible to use it as either a command or a
    361 modifier.  In either case it does the same thing.
    362 
    363 @item t
    364 @cindex contents of archive
    365 Display a @emph{table} listing the contents of @var{archive}, or those
    366 of the files listed in @var{member}@dots{} that are present in the
    367 archive.  Normally only the member name is shown, but if the modifier
    368 @samp{O} is specified, then the corresponding offset of the member is also
    369 displayed.  Finally, in order to see the modes (permissions), timestamp,
    370 owner, group, and size the @samp{v} modifier should be included.
    371 
    372 If you do not specify a @var{member}, all files in the archive
    373 are listed.
    374 
    375 @cindex repeated names in archive
    376 @cindex name duplication in archive
    377 If there is more than one file with the same name (say, @samp{fie}) in
    378 an archive (say @samp{b.a}), @samp{ar t b.a fie} lists only the
    379 first instance; to see them all, you must ask for a complete
    380 listing---in our example, @samp{ar t b.a}.
    381 @c WRS only; per Gumby, this is implementation-dependent, and in a more
    382 @c recent case in fact works the other way.
    383 
    384 @item x
    385 @cindex extract from archive
    386 @emph{Extract} members (named @var{member}) from the archive.  You can
    387 use the @samp{v} modifier with this operation, to request that
    388 @command{ar} list each name as it extracts it.
    389 
    390 If you do not specify a @var{member}, all files in the archive
    391 are extracted.
    392 
    393 Files cannot be extracted from a thin archive, and there are
    394 restrictions on extracting from archives created with @option{P}: The
    395 paths must not be absolute, may not contain @code{..}, and any
    396 subdirectories in the paths must exist.  If it is desired to avoid
    397 these restrictions then used the @option{--output} option to specify
    398 an output directory.
    399 @end table
    400 
    401 A number of modifiers (@var{mod}) may immediately follow the @var{p}
    402 keyletter, to specify variations on an operation's behavior:
    403 
    404 @table @samp
    405 @item a
    406 @cindex relative placement in archive
    407 Add new files @emph{after} an existing member of the
    408 archive.  If you use the modifier @samp{a}, the name of an existing archive
    409 member must be present as the @var{relpos} argument, before the
    410 @var{archive} specification.
    411 
    412 @item b
    413 Add new files @emph{before} an existing member of the
    414 archive.  If you use the modifier @samp{b}, the name of an existing archive
    415 member must be present as the @var{relpos} argument, before the
    416 @var{archive} specification.  (same as @samp{i}).
    417 
    418 @item c
    419 @cindex creating archives
    420 @emph{Create} the archive.  The specified @var{archive} is always
    421 created if it did not exist, when you request an update.  But a warning is
    422 issued unless you specify in advance that you expect to create it, by
    423 using this modifier.
    424 
    425 @item D
    426 @cindex deterministic archives
    427 @kindex --enable-deterministic-archives
    428 Operate in @emph{deterministic} mode.  When adding files and the archive
    429 index use zero for UIDs, GIDs, timestamps, and use consistent file modes
    430 for all files.  When this option is used, if @command{ar} is used with
    431 identical options and identical input files, multiple runs will create
    432 identical output files regardless of the input files' owners, groups,
    433 file modes, or modification times.
    434 
    435 If @file{binutils} was configured with
    436 @option{--enable-deterministic-archives}, then this mode is on by default.
    437 It can be disabled with the @samp{U} modifier, below.
    438 
    439 @item f
    440 Truncate names in the archive.  @sc{gnu} @command{ar} will normally permit file
    441 names of any length.  This will cause it to create archives which are
    442 not compatible with the native @command{ar} program on some systems.  If
    443 this is a concern, the @samp{f} modifier may be used to truncate file
    444 names when putting them in the archive.
    445 
    446 @item i
    447 Insert new files @emph{before} an existing member of the
    448 archive.  If you use the modifier @samp{i}, the name of an existing archive
    449 member must be present as the @var{relpos} argument, before the
    450 @var{archive} specification.  (same as @samp{b}).
    451 
    452 @item l
    453 @c This modifier was accepted but not used.
    454 @c whaffor ar l modifier??? presumably compat; with
    455 @c what???---doc@@cygnus.com, 25jan91
    456 Specify dependencies of this library.  The dependencies must immediately
    457 follow this option character, must use the same syntax as the linker
    458 command line, and must be specified within a single argument.  I.e., if
    459 multiple items are needed, they must be quoted to form a single command
    460 line argument.  For example @samp{l "-L/usr/local/lib -lmydep1 -lmydep2"}
    461 
    462 @item N
    463 Uses the @var{count} parameter.  This is used if there are multiple
    464 entries in the archive with the same name.  Extract or delete instance
    465 @var{count} of the given name from the archive.
    466 
    467 @item o
    468 @cindex dates in archive
    469 Preserve the @emph{original} dates of members when extracting them.  If
    470 you do not specify this modifier, files extracted from the archive
    471 are stamped with the time of extraction.
    472 
    473 @item O
    474 @cindex offsets of files
    475 Display member offsets inside the archive. Use together with the @samp{t}
    476 option.
    477 
    478 @item P
    479 Use the full path name when matching or storing names in the archive.
    480 Archives created with full path names are not POSIX compliant, and
    481 thus may not work with tools other than up to date @sc{gnu} tools.
    482 Modifying such archives with @sc{gnu} @command{ar} without using
    483 @option{P} will remove the full path names unless the archive is a
    484 thin archive.  Note that @option{P} may be useful when adding files to
    485 a thin archive since @option{r} without @option{P} ignores the path
    486 when choosing which element to replace.  Thus
    487 @smallexample
    488 ar rcST archive.a subdir/file1 subdir/file2 file1
    489 @end smallexample
    490 will result in the first @code{subdir/file1} being replaced with
    491 @code{file1} from the current directory.  Adding @option{P} will
    492 prevent this replacement.
    493 
    494 @item s
    495 @cindex writing archive index
    496 Write an object-file index into the archive, or update an existing one,
    497 even if no other change is made to the archive.  You may use this modifier
    498 flag either with any operation, or alone.  Running @samp{ar s} on an
    499 archive is equivalent to running @samp{ranlib} on it.
    500 
    501 @item S
    502 @cindex not writing archive index
    503 Do not generate an archive symbol table.  This can speed up building a
    504 large library in several steps.  The resulting archive can not be used
    505 with the linker.  In order to build a symbol table, you must omit the
    506 @samp{S} modifier on the last execution of @samp{ar}, or you must run
    507 @samp{ranlib} on the archive.
    508 
    509 @item T
    510 Deprecated alias for @option{--thin}.  @option{T} is not recommended because in
    511 many ar implementations @option{T} has a different meaning, as specified by
    512 X/Open System Interface.
    513 
    514 @item u
    515 @cindex updating an archive
    516 Normally, @samp{ar r}@dots{} inserts all files
    517 listed into the archive.  If you would like to insert @emph{only} those
    518 of the files you list that are newer than existing members of the same
    519 names, use this modifier.  The @samp{u} modifier is allowed only for the
    520 operation @samp{r} (replace).  In particular, the combination @samp{qu} is
    521 not allowed, since checking the timestamps would lose any speed
    522 advantage from the operation @samp{q}.
    523 
    524 Note - if an archive has been created in a deterministic manner, eg
    525 via the use of the @option{D} modifier, then replacement will always
    526 happen and the @option{u} modifier will be ineffective.
    527 
    528 @item U
    529 @cindex deterministic archives
    530 @kindex --enable-deterministic-archives
    531 Do @emph{not} operate in @emph{deterministic} mode.  This is the inverse
    532 of the @samp{D} modifier, above: added files and the archive index will
    533 get their actual UID, GID, timestamp, and file mode values.
    534 
    535 This is the default unless @file{binutils} was configured with
    536 @option{--enable-deterministic-archives}.
    537 
    538 @item v
    539 This modifier requests the @emph{verbose} version of an operation.  Many
    540 operations display additional information, such as filenames processed,
    541 when the modifier @samp{v} is appended.
    542 
    543 @item V
    544 This modifier shows the version number of @command{ar}.
    545 @end table
    546 
    547 The @command{ar} program also supports some command-line options which
    548 are neither modifiers nor actions, but which do change its behaviour
    549 in specific ways:
    550 
    551 @table @samp
    552 @item --help
    553 Displays the list of command-line options supported by @command{ar}
    554 and then exits.
    555 
    556 @item --version
    557 Displays the version information of @command{ar} and then exits.
    558 
    559 @item -X32_64
    560 @command{ar} ignores an initial option spelled @samp{-X32_64}, for
    561 compatibility with AIX.  The behaviour produced by this option is the
    562 default for @sc{gnu} @command{ar}.  @command{ar} does not support any
    563 of the other @samp{-X} options; in particular, it does not support
    564 @option{-X32} which is the default for AIX @command{ar}.
    565 
    566 @item --plugin @var{name}
    567 @cindex plugins
    568 The optional command-line switch @option{--plugin @var{name}} causes
    569 @command{ar} to load the plugin called @var{name} which adds support
    570 for more file formats, including object files with link-time
    571 optimization information.
    572 
    573 This option is only available if the toolchain has been built with
    574 plugin support enabled.
    575 
    576 If @option{--plugin} is not provided, but plugin support has been
    577 enabled then @command{ar} iterates over the files in
    578 @file{$@{libdir@}/bfd-plugins} in alphabetic order and the first
    579 plugin that claims the object in question is used.
    580 
    581 Please note that this plugin search directory is @emph{not} the one
    582 used by @command{ld}'s @option{-plugin} option.  In order to make
    583 @command{ar} use the  linker plugin it must be copied into the
    584 @file{$@{libdir@}/bfd-plugins} directory.  For GCC based compilations
    585 the linker plugin is called @file{liblto_plugin.so.0.0.0}.  For Clang
    586 based compilations it is called @file{LLVMgold.so}.  The GCC plugin
    587 is always backwards compatible with earlier versions, so it is
    588 sufficient to just copy the newest one.
    589 
    590 @item --target @var{target}
    591 The optional command-line switch @option{--target @var{bfdname}}
    592 specifies that the archive members are in an object code format
    593 different from your system's default format.  See
    594 @xref{Target Selection}, for more information.
    595 
    596 @item --output @var{dirname}
    597 The @option{--output} option can be used to specify a path to a
    598 directory into which archive members should be extracted.  If this
    599 option is not specified then the current directory will be used.
    600 
    601 Note - although the presence of this option does imply a @option{x} 
    602 extraction operation that option must still be included on the command
    603 line.
    604 
    605 @item --record-libdeps @var{libdeps}
    606 The @option{--record-libdeps} option is identical to the @option{l} modifier,
    607 just handled in long form.
    608 
    609 @item --thin
    610 @cindex creating thin archive
    611 Make the specified @var{archive} a @emph{thin} archive.  If it already
    612 exists and is a regular archive, the existing members must be present
    613 in the same directory as @var{archive}.
    614 
    615 @end table
    616 @c man end
    617 
    618 @ignore
    619 @c man begin SEEALSO ar
    620 nm(1), ranlib(1), and the Info entries for @file{binutils}.
    621 @c man end
    622 @end ignore
    623 
    624 @node ar scripts
    625 @section Controlling @command{ar} with a Script
    626 
    627 @smallexample
    628 ar -M [ <@var{script} ]
    629 @end smallexample
    630 
    631 @cindex MRI compatibility, @command{ar}
    632 @cindex scripts, @command{ar}
    633 If you use the single command-line option @samp{-M} with @command{ar}, you
    634 can control its operation with a rudimentary command language.  This
    635 form of @command{ar} operates interactively if standard input is coming
    636 directly from a terminal.  During interactive use, @command{ar} prompts for
    637 input (the prompt is @samp{AR >}), and continues executing even after
    638 errors.  If you redirect standard input to a script file, no prompts are
    639 issued, and @command{ar} abandons execution (with a nonzero exit code)
    640 on any error.
    641 
    642 The @command{ar} command language is @emph{not} designed to be equivalent
    643 to the command-line options; in fact, it provides somewhat less control
    644 over archives.  The only purpose of the command language is to ease the
    645 transition to @sc{gnu} @command{ar} for developers who already have scripts
    646 written for the MRI ``librarian'' program.
    647 
    648 The syntax for the @command{ar} command language is straightforward:
    649 @itemize @bullet
    650 @item
    651 commands are recognized in upper or lower case; for example, @code{LIST}
    652 is the same as @code{list}.  In the following descriptions, commands are
    653 shown in upper case for clarity.
    654 
    655 @item
    656 a single command may appear on each line; it is the first word on the
    657 line.
    658 
    659 @item
    660 empty lines are allowed, and have no effect.
    661 
    662 @item
    663 comments are allowed; text after either of the characters @samp{*}
    664 or @samp{;} is ignored.
    665 
    666 @item
    667 Whenever you use a list of names as part of the argument to an @command{ar}
    668 command, you can separate the individual names with either commas or
    669 blanks.  Commas are shown in the explanations below, for clarity.
    670 
    671 @item
    672 @samp{+} is used as a line continuation character; if @samp{+} appears
    673 at the end of a line, the text on the following line is considered part
    674 of the current command.
    675 @end itemize
    676 
    677 Here are the commands you can use in @command{ar} scripts, or when using
    678 @command{ar} interactively.  Three of them have special significance:
    679 
    680 @code{OPEN} or @code{CREATE} specify a @dfn{current archive}, which is
    681 a temporary file required for most of the other commands.
    682 
    683 @code{SAVE} commits the changes so far specified by the script.  Prior
    684 to @code{SAVE}, commands affect only the temporary copy of the current
    685 archive.
    686 
    687 @table @code
    688 @item ADDLIB @var{archive}
    689 @itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module})
    690 Add all the contents of @var{archive} (or, if specified, each named
    691 @var{module} from @var{archive}) to the current archive.
    692 
    693 Requires prior use of @code{OPEN} or @code{CREATE}.
    694 
    695 @item ADDMOD @var{member}, @var{member}, @dots{} @var{member}
    696 @c FIXME! w/Replacement??  If so, like "ar r @var{archive} @var{names}"
    697 @c        else like "ar q..."
    698 Add each named @var{member} as a module in the current archive.
    699 
    700 Requires prior use of @code{OPEN} or @code{CREATE}.
    701 
    702 @item CLEAR
    703 Discard the contents of the current archive, canceling the effect of
    704 any operations since the last @code{SAVE}.  May be executed (with no
    705 effect) even if  no current archive is specified.
    706 
    707 @item CREATE @var{archive}
    708 Creates an archive, and makes it the current archive (required for many
    709 other commands).  The new archive is created with a temporary name; it
    710 is not actually saved as @var{archive} until you use @code{SAVE}.
    711 You can overwrite existing archives; similarly, the contents of any
    712 existing file named @var{archive} will not be destroyed until @code{SAVE}.
    713 
    714 @item DELETE @var{module}, @var{module}, @dots{} @var{module}
    715 Delete each listed @var{module} from the current archive; equivalent to
    716 @samp{ar -d @var{archive} @var{module} @dots{} @var{module}}.
    717 
    718 Requires prior use of @code{OPEN} or @code{CREATE}.
    719 
    720 @item DIRECTORY @var{archive} (@var{module}, @dots{} @var{module})
    721 @itemx DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) @var{outputfile}
    722 List each named @var{module} present in @var{archive}.  The separate
    723 command @code{VERBOSE} specifies the form of the output: when verbose
    724 output is off, output is like that of @samp{ar -t @var{archive}
    725 @var{module}@dots{}}.  When verbose output is on, the listing is like
    726 @samp{ar -tv @var{archive} @var{module}@dots{}}.
    727 
    728 Output normally goes to the standard output stream; however, if you
    729 specify @var{outputfile} as a final argument, @command{ar} directs the
    730 output to that file.
    731 
    732 @item END
    733 Exit from @command{ar}, with a @code{0} exit code to indicate successful
    734 completion.  This command does not save the output file; if you have
    735 changed the current archive since the last @code{SAVE} command, those
    736 changes are lost.
    737 
    738 @item EXTRACT @var{module}, @var{module}, @dots{} @var{module}
    739 Extract each named @var{module} from the current archive, writing them
    740 into the current directory as separate files.  Equivalent to @samp{ar -x
    741 @var{archive} @var{module}@dots{}}.
    742 
    743 Requires prior use of @code{OPEN} or @code{CREATE}.
    744 
    745 @ignore
    746 @c FIXME Tokens but no commands???
    747 @item FULLDIR
    748 
    749 @item HELP
    750 @end ignore
    751 
    752 @item LIST
    753 Display full contents of the current archive, in ``verbose'' style
    754 regardless of the state of @code{VERBOSE}.  The effect is like @samp{ar
    755 tv @var{archive}}.  (This single command is a @sc{gnu} @command{ar}
    756 enhancement, rather than present for MRI compatibility.)
    757 
    758 Requires prior use of @code{OPEN} or @code{CREATE}.
    759 
    760 @item OPEN @var{archive}
    761 Opens an existing archive for use as the current archive (required for
    762 many other commands).  Any changes as the result of subsequent commands
    763 will not actually affect @var{archive} until you next use @code{SAVE}.
    764 
    765 @item REPLACE @var{module}, @var{module}, @dots{} @var{module}
    766 In the current archive, replace each existing @var{module} (named in
    767 the @code{REPLACE} arguments) from files in the current working directory.
    768 To execute this command without errors, both the file, and the module in
    769 the current archive, must exist.
    770 
    771 Requires prior use of @code{OPEN} or @code{CREATE}.
    772 
    773 @item VERBOSE
    774 Toggle an internal flag governing the output from @code{DIRECTORY}.
    775 When the flag is on, @code{DIRECTORY} output matches output from
    776 @samp{ar -tv }@dots{}.
    777 
    778 @item SAVE
    779 Commit your changes to the current archive, and actually save it as a
    780 file with the name specified in the last @code{CREATE} or @code{OPEN}
    781 command.
    782 
    783 Requires prior use of @code{OPEN} or @code{CREATE}.
    784 
    785 @end table
    786 
    787 @iftex
    788 @node ld
    789 @chapter ld
    790 @cindex linker
    791 @kindex ld
    792 The @sc{gnu} linker @command{ld} is now described in a separate manual.
    793 @xref{Top,, Overview,, Using LD: the @sc{gnu} linker}.
    794 @end iftex
    795 
    796 @node nm
    797 @chapter nm
    798 @cindex symbols
    799 @kindex nm
    800 
    801 @c man title nm list symbols from object files
    802 
    803 @smallexample
    804 @c man begin SYNOPSIS nm
    805 nm [@option{-A}|@option{-o}|@option{--print-file-name}]
    806    [@option{-a}|@option{--debug-syms}]
    807    [@option{-B}|@option{--format=bsd}]
    808    [@option{-C}|@option{--demangle}[=@var{style}]]
    809    [@option{-D}|@option{--dynamic}]
    810    [@option{-f}@var{format}|@option{--format=}@var{format}]
    811    [@option{-g}|@option{--extern-only}]
    812    [@option{-h}|@option{--help}]
    813    [@option{--ifunc-chars=@var{CHARS}}]
    814    [@option{-j}|@option{--format=just-symbols}]
    815    [@option{-l}|@option{--line-numbers}] [@option{--inlines}]
    816    [@option{-n}|@option{-v}|@option{--numeric-sort}]
    817    [@option{-P}|@option{--portability}]
    818    [@option{-p}|@option{--no-sort}]
    819    [@option{-r}|@option{--reverse-sort}]
    820    [@option{-S}|@option{--print-size}]
    821    [@option{-s}|@option{--print-armap}]
    822    [@option{-t} @var{radix}|@option{--radix=}@var{radix}]
    823    [@option{-u}|@option{--undefined-only}]
    824    [@option{-U}|@option{--defined-only}]
    825    [@option{-V}|@option{--version}]
    826    [@option{-W}|@option{--no-weak}]
    827    [@option{-X 32_64}]
    828    [@option{--no-demangle}]
    829    [@option{--no-recurse-limit}|@option{--recurse-limit}]]
    830    [@option{--plugin} @var{name}]
    831    [@option{--size-sort}]
    832    [@option{--special-syms}]
    833    [@option{--synthetic}]
    834    [@option{--target=}@var{bfdname}]
    835    [@option{--unicode=}@var{method}]
    836    [@option{--with-symbol-versions}]
    837    [@option{--without-symbol-versions}]
    838    [@var{objfile}@dots{}]
    839 @c man end
    840 @end smallexample
    841 
    842 @c man begin DESCRIPTION nm
    843 @sc{gnu} @command{nm} lists the symbols from object files @var{objfile}@dots{}.
    844 If no object files are listed as arguments, @command{nm} assumes the file
    845 @file{a.out}.
    846 
    847 For each symbol, @command{nm} shows:
    848 
    849 @itemize @bullet
    850 @item
    851 The symbol value, in the radix selected by options (see below), or
    852 hexadecimal by default.
    853 
    854 @item
    855 The symbol type.  At least the following types are used; others are, as
    856 well, depending on the object file format.  If lowercase, the symbol is
    857 usually local; if uppercase, the symbol is global (external).  There
    858 are however a few lowercase symbols that are shown for special global
    859 symbols (@code{u}, @code{v} and @code{w}).
    860 
    861 @c Some more detail on exactly what these symbol types are used for
    862 @c would be nice.
    863 @table @code
    864 @item A
    865 The symbol's value is absolute, and will not be changed by further
    866 linking.
    867 
    868 @item B
    869 @itemx b
    870 The symbol is in the BSS data section.  This section typically
    871 contains zero-initialized or uninitialized data, although the exact
    872 behavior is system dependent.
    873 
    874 @item C
    875 @itemx c
    876 The symbol is common.  Common symbols are uninitialized data.  When
    877 linking, multiple common symbols may appear with the same name.  If the
    878 symbol is defined anywhere, the common symbols are treated as undefined
    879 references.
    880 @ifclear man
    881 For more details on common symbols, see the discussion of
    882 --warn-common in @ref{Options,,Linker options,ld,The GNU linker}.
    883 @end ifclear
    884 The lower case @var{c} character is used when the symbol is in a
    885 special section for small commons.
    886 
    887 @item D
    888 @itemx d
    889 The symbol is in the initialized data section.
    890 
    891 @item G
    892 @itemx g
    893 The symbol is in an initialized data section for small objects.  Some
    894 object file formats permit more efficient access to small data objects,
    895 such as a global int variable as opposed to a large global array.
    896 
    897 @item i
    898 For PE format files this indicates that the symbol is in a section
    899 specific to the implementation of DLLs.
    900 
    901 For ELF format files this indicates that the symbol is an indirect
    902 function.  This is a GNU extension to the standard set of ELF symbol
    903 types.  It indicates a symbol which if referenced by a relocation does
    904 not evaluate to its address, but instead must be invoked at runtime.
    905 The runtime execution will then return the value to be used in the
    906 relocation.
    907 
    908 Note - the actual symbols display for GNU indirect symbols is
    909 controlled by the @option{--ifunc-chars} command line option.  If this
    910 option has been provided then the first character in the string will
    911 be used for global indirect function symbols.  If the string contains
    912 a second character then that will be used for local indirect function
    913 symbols.
    914 
    915 @item I
    916 The symbol is an indirect reference to another symbol.
    917 
    918 @item N
    919 The symbol is a debugging symbol.
    920 
    921 @item n
    922 The symbol is in a non-data, non-code, non-debug read-only section.
    923 
    924 @item p
    925 The symbol is in a stack unwind section.
    926 
    927 @item R
    928 @itemx r
    929 The symbol is in a read only data section.
    930 
    931 @item S
    932 @itemx s
    933 The symbol is in an uninitialized or zero-initialized data section
    934 for small objects.
    935 
    936 @item T
    937 @itemx t
    938 The symbol is in the text (code) section.
    939 
    940 @item U
    941 The symbol is undefined.
    942 
    943 @item u
    944 The symbol is a unique global symbol.  This is a GNU extension to the
    945 standard set of ELF symbol bindings.  For such a symbol the dynamic linker
    946 will make sure that in the entire process there is just one symbol with
    947 this name and type in use.
    948 
    949 @item V
    950 @itemx v
    951 The symbol is a weak object.  When a weak defined symbol is linked with
    952 a normal defined symbol, the normal defined symbol is used with no error.
    953 When a weak undefined symbol is linked and the symbol is not defined,
    954 the value of the weak symbol becomes zero with no error.  On some
    955 systems, uppercase indicates that a default value has been specified.
    956 
    957 @item W
    958 @itemx w
    959 The symbol is a weak symbol that has not been specifically tagged as a
    960 weak object symbol.  When a weak defined symbol is linked with a normal
    961 defined symbol, the normal defined symbol is used with no error.
    962 When a weak undefined symbol is linked and the symbol is not defined,
    963 the value of the symbol is determined in a system-specific manner without
    964 error.  On some systems, uppercase indicates that a default value has been
    965 specified.
    966 
    967 @item -
    968 The symbol is a stabs symbol in an a.out object file.  In this case, the
    969 next values printed are the stabs other field, the stabs desc field, and
    970 the stab type.  Stabs symbols are used to hold debugging information.
    971 
    972 @item ?
    973 The symbol type is unknown, or object file format specific.
    974 @end table
    975 
    976 @item
    977 The symbol name.  If a symbol has version information associated with it,
    978 then the version information is displayed as well.  If the versioned
    979 symbol is undefined or hidden from linker, the version string is displayed
    980 as a suffix to the symbol name, preceded by an @@ character.  For example
    981 @samp{foo@@VER_1}.  If the version is the default version to be used when
    982 resolving unversioned references to the symbol, then it is displayed as a
    983 suffix preceded by two @@ characters.  For example @samp{foo@@@@VER_2}.
    984 @end itemize
    985 
    986 @c man end
    987 
    988 @c man begin OPTIONS nm
    989 The long and short forms of options, shown here as alternatives, are
    990 equivalent.
    991 
    992 @table @env
    993 @item -A
    994 @itemx -o
    995 @itemx --print-file-name
    996 @cindex input file name
    997 @cindex file name
    998 @cindex source file name
    999 Precede each symbol by the name of the input file (or archive member)
   1000 in which it was found, rather than identifying the input file once only,
   1001 before all of its symbols.
   1002 
   1003 @item -a
   1004 @itemx --debug-syms
   1005 @cindex debugging symbols
   1006 Display all symbols, even debugger-only symbols; normally these are not
   1007 listed.
   1008 
   1009 @item -B
   1010 @cindex @command{nm} format
   1011 @cindex @command{nm} compatibility
   1012 The same as @option{--format=bsd} (for compatibility with the MIPS @command{nm}).
   1013 
   1014 @item -C
   1015 @itemx --demangle[=@var{style}]
   1016 @cindex demangling in nm
   1017 Decode (@dfn{demangle}) low-level symbol names into user-level names.
   1018 Besides removing any initial underscore prepended by the system, this
   1019 makes C++ function names readable. Different compilers have different
   1020 mangling styles. The optional demangling style argument can be used to
   1021 choose an appropriate demangling style for your compiler. @xref{c++filt},
   1022 for more information on demangling.
   1023 
   1024 @item --no-demangle
   1025 Do not demangle low-level symbol names.  This is the default.
   1026 
   1027 @item --recurse-limit
   1028 @itemx --no-recurse-limit
   1029 @itemx --recursion-limit
   1030 @itemx --no-recursion-limit
   1031 Enables or disables a limit on the amount of recursion performed
   1032 whilst demangling strings.  Since the name mangling formats allow for
   1033 an infinite level of recursion it is possible to create strings whose
   1034 decoding will exhaust the amount of stack space available on the host
   1035 machine, triggering a memory fault.  The limit tries to prevent this
   1036 from happening by restricting recursion to 2048 levels of nesting.
   1037 
   1038 The default is for this limit to be enabled, but disabling it may be
   1039 necessary in order to demangle truly complicated names.  Note however
   1040 that if the recursion limit is disabled then stack exhaustion is
   1041 possible and any bug reports about such an event will be rejected.
   1042 
   1043 @item -D
   1044 @itemx --dynamic
   1045 @cindex dynamic symbols
   1046 Display the dynamic symbols rather than the normal symbols.  This is
   1047 only meaningful for dynamic objects, such as certain types of shared
   1048 libraries.
   1049 
   1050 @item -f @var{format}
   1051 @itemx --format=@var{format}
   1052 @cindex @command{nm} format
   1053 @cindex @command{nm} compatibility
   1054 Use the output format @var{format}, which can be @code{bsd},
   1055 @code{sysv}, @code{posix} or @code{just-symbols}.  The default is @code{bsd}.
   1056 Only the first character of @var{format} is significant; it can be
   1057 either upper or lower case.
   1058 
   1059 @item -g
   1060 @itemx --extern-only
   1061 @cindex external symbols
   1062 Display only external symbols.
   1063 
   1064 @item -h
   1065 @itemx --help
   1066 Show a summary of the options to @command{nm} and exit.
   1067 
   1068 @item --ifunc-chars=@var{CHARS}
   1069 When display GNU indirect function symbols @command{nm} will default
   1070 to using the @code{i} character for both local indirect functions and
   1071 global indirect functions.  The @option{--ifunc-chars} option allows
   1072 the user to specify a string containing one or two characters. The
   1073 first character will be used for global indirect function symbols and
   1074 the second character, if present, will be used for local indirect
   1075 function symbols.
   1076 
   1077 @item j
   1078 The same as @option{--format=just-symbols}.
   1079 
   1080 @item -l
   1081 @itemx --line-numbers
   1082 @cindex symbol line numbers
   1083 For each symbol, use debugging information to try to find a filename and
   1084 line number.  For a defined symbol, look for the line number of the
   1085 address of the symbol.  For an undefined symbol, look for the line
   1086 number of a relocation entry which refers to the symbol.  If line number
   1087 information can be found, print it after the other symbol information.
   1088 
   1089 @item --inlines
   1090 @cindex objdump inlines
   1091 When option @option{-l} is active, if the address belongs to a
   1092 function that was inlined, then this option causes the source 
   1093 information for all enclosing scopes back to the first non-inlined
   1094 function to be printed as well.  For example, if @code{main} inlines
   1095 @code{callee1} which inlines @code{callee2}, and address is from
   1096 @code{callee2}, the source information for @code{callee1} and @code{main}
   1097 will also be printed.
   1098 
   1099 @item -n
   1100 @itemx -v
   1101 @itemx --numeric-sort
   1102 Sort symbols numerically by their addresses, rather than alphabetically
   1103 by their names.
   1104 
   1105 @item -p
   1106 @itemx --no-sort
   1107 @cindex sorting symbols
   1108 Do not bother to sort the symbols in any order; print them in the order
   1109 encountered.
   1110 
   1111 @item -P
   1112 @itemx --portability
   1113 Use the POSIX.2 standard output format instead of the default format.
   1114 Equivalent to @samp{-f posix}.
   1115 
   1116 @item -r
   1117 @itemx --reverse-sort
   1118 Reverse the order of the sort (whether numeric or alphabetic); let the
   1119 last come first.
   1120 
   1121 @item -S
   1122 @itemx --print-size
   1123 Print both value and size of defined symbols for the @code{bsd} output style.
   1124 This option has no effect for object formats that do not record symbol
   1125 sizes, unless @samp{--size-sort} is also used in which case a
   1126 calculated size is displayed.
   1127 
   1128 @item -s
   1129 @itemx --print-armap
   1130 @cindex symbol index, listing
   1131 When listing symbols from archive members, include the index: a mapping
   1132 (stored in the archive by @command{ar} or @command{ranlib}) of which modules
   1133 contain definitions for which names.
   1134 
   1135 @item -t @var{radix}
   1136 @itemx --radix=@var{radix}
   1137 Use @var{radix} as the radix for printing the symbol values.  It must be
   1138 @samp{d} for decimal, @samp{o} for octal, or @samp{x} for hexadecimal.
   1139 
   1140 @item -u
   1141 @itemx --undefined-only
   1142 @cindex external symbols
   1143 @cindex undefined symbols
   1144 Display only undefined symbols (those external to each object file).
   1145 By default both defined and undefined symbols are displayed.
   1146 
   1147 @item -U
   1148 @itemx --defined-only
   1149 @cindex external symbols
   1150 @cindex undefined symbols
   1151 Display only defined symbols for each object file.
   1152 By default both defined and undefined symbols are displayed.
   1153 
   1154 @item -V
   1155 @itemx --version
   1156 Show the version number of @command{nm} and exit.
   1157 
   1158 @item -X
   1159 This option is ignored for compatibility with the AIX version of
   1160 @command{nm}.  It takes one parameter which must be the string
   1161 @option{32_64}.  The default mode of AIX @command{nm} corresponds
   1162 to @option{-X 32}, which is not supported by @sc{gnu} @command{nm}.
   1163 
   1164 @item --plugin @var{name}
   1165 @cindex plugins
   1166 Load the plugin called @var{name} to add support for extra target
   1167 types.  This option is only available if the toolchain has been built
   1168 with plugin support enabled.
   1169 
   1170 If @option{--plugin} is not provided, but plugin support has been
   1171 enabled then @command{nm} iterates over the files in
   1172 @file{$@{libdir@}/bfd-plugins} in alphabetic order and the first
   1173 plugin that claims the object in question is used.
   1174 
   1175 Please note that this plugin search directory is @emph{not} the one
   1176 used by @command{ld}'s @option{-plugin} option.  In order to make
   1177 @command{nm} use the  linker plugin it must be copied into the
   1178 @file{$@{libdir@}/bfd-plugins} directory.  For GCC based compilations
   1179 the linker plugin is called @file{liblto_plugin.so.0.0.0}.  For Clang
   1180 based compilations it is called @file{LLVMgold.so}.  The GCC plugin
   1181 is always backwards compatible with earlier versions, so it is
   1182 sufficient to just copy the newest one.
   1183 
   1184 @item --size-sort
   1185 Sort symbols by size.  For ELF objects symbol sizes are read from the
   1186 ELF, for other object types the symbol sizes are computed as the
   1187 difference between the value of the symbol and the value of the symbol
   1188 with the next higher value.  If the @code{bsd} output format is used
   1189 the size of the symbol is printed, rather than the value, and
   1190 @samp{-S} must be used in order both size and value to be printed.
   1191 
   1192 Note - this option does not work if @option{--undefined-only} has been
   1193 enabled as undefined symbols have no size.
   1194 
   1195 @item --special-syms
   1196 Display symbols which have a target-specific special meaning.  These
   1197 symbols are usually used by the target for some special processing and
   1198 are not normally helpful when included in the normal symbol lists.
   1199 For example for ARM targets this option would skip the mapping symbols
   1200 used to mark transitions between ARM code, THUMB code and data.
   1201 
   1202 @item --synthetic
   1203 Include synthetic symbols in the output.  These are special symbols
   1204 created by the linker for various purposes.  They are not shown by
   1205 default since they are not part of the binary's original source code.
   1206 
   1207 @item --unicode=@var{[default|invalid|locale|escape|hex|highlight]}
   1208 Controls the display of UTF-8 encoded multibyte characters in strings.
   1209 The default (@option{--unicode=default}) is to give them no special
   1210 treatment.  The @option{--unicode=locale} option displays the sequence
   1211 in the current locale, which may or may not support them.  The options
   1212 @option{--unicode=hex} and @option{--unicode=invalid} display them as
   1213 hex byte sequences enclosed by either angle brackets or curly braces.
   1214 
   1215 The @option{--unicode=escape} option displays them as escape sequences
   1216 (@var{\uxxxx}) and the @option{--unicode=highlight} option displays
   1217 them as escape sequences highlighted in red (if supported by the
   1218 output device).  The colouring is intended to draw attention to the
   1219 presence of unicode sequences where they might not be expected.
   1220 
   1221 @item -W
   1222 @itemx --no-weak
   1223 Do not display weak symbols.
   1224 
   1225 @item --with-symbol-versions
   1226 @item --without-symbol-versions
   1227 Enables or disables the display of symbol version information.  The
   1228 version string is displayed as a suffix to the symbol name, preceded
   1229 by an @@ character.  For example @samp{foo@@VER_1}.  If the version is
   1230 the default version to be used when resolving unversioned references
   1231 to the symbol then it is displayed as a suffix preceded by two @@
   1232 characters.  For example @samp{foo@@@@VER_2}.  By default, symbol
   1233 version information is displayed.
   1234 
   1235 @item --target=@var{bfdname}
   1236 @cindex object code format
   1237 Specify an object code format other than your system's default format.
   1238 @xref{Target Selection}, for more information.
   1239 
   1240 @end table
   1241 
   1242 @c man end
   1243 
   1244 @ignore
   1245 @c man begin SEEALSO nm
   1246 ar(1), objdump(1), ranlib(1), and the Info entries for @file{binutils}.
   1247 @c man end
   1248 @end ignore
   1249 
   1250 @node objcopy
   1251 @chapter objcopy
   1252 
   1253 @c man title objcopy copy and translate object files
   1254 
   1255 @smallexample
   1256 @c man begin SYNOPSIS objcopy
   1257 objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
   1258         [@option{-I} @var{bfdname}|@option{--input-target=}@var{bfdname}]
   1259         [@option{-O} @var{bfdname}|@option{--output-target=}@var{bfdname}]
   1260         [@option{-B} @var{bfdarch}|@option{--binary-architecture=}@var{bfdarch}]
   1261         [@option{-S}|@option{--strip-all}]
   1262         [@option{-g}|@option{--strip-debug}]
   1263         [@option{--strip-unneeded}]
   1264         [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}]
   1265         [@option{--keep-file-symbols}]
   1266         [@option{--keep-section-symbols}]
   1267         [@option{-N} @var{symbolname}|@option{--strip-symbol=}@var{symbolname}]
   1268         [@option{--strip-unneeded-symbol=}@var{symbolname}]
   1269         [@option{-G} @var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}]
   1270         [@option{--localize-hidden}]
   1271         [@option{-L} @var{symbolname}|@option{--localize-symbol=}@var{symbolname}]
   1272         [@option{--globalize-symbol=}@var{symbolname}]
   1273         [@option{--globalize-symbols=}@var{filename}]
   1274         [@option{-W} @var{symbolname}|@option{--weaken-symbol=}@var{symbolname}]
   1275         [@option{-w}|@option{--wildcard}]
   1276         [@option{-x}|@option{--discard-all}]
   1277         [@option{-X}|@option{--discard-locals}]
   1278         [@option{-b} @var{byte}|@option{--byte=}@var{byte}]
   1279         [@option{-i} [@var{breadth}]|@option{--interleave}[=@var{breadth}]]
   1280         [@option{--interleave-width=}@var{width}]
   1281         [@option{-j} @var{sectionpattern}|@option{--only-section=}@var{sectionpattern}]
   1282         [@option{-R} @var{sectionpattern}|@option{--remove-section=}@var{sectionpattern}]
   1283         [@option{--keep-section=}@var{sectionpattern}]
   1284         [@option{--remove-relocations=}@var{sectionpattern}]
   1285         [@option{--strip-section-headers}]
   1286         [@option{-p}|@option{--preserve-dates}]
   1287         [@option{-D}|@option{--enable-deterministic-archives}]
   1288         [@option{-U}|@option{--disable-deterministic-archives}]
   1289         [@option{--debugging}]
   1290         [@option{--gap-fill=}@var{val}]
   1291         [@option{--pad-to=}@var{address}]
   1292         [@option{--set-start=}@var{val}]
   1293         [@option{--adjust-start=}@var{incr}]
   1294         [@option{--change-addresses=}@var{incr}]
   1295         [@option{--change-section-address} @var{sectionpattern}@{=,+,-@}@var{val}]
   1296         [@option{--change-section-lma} @var{sectionpattern}@{=,+,-@}@var{val}]
   1297         [@option{--change-section-vma} @var{sectionpattern}@{=,+,-@}@var{val}]
   1298         [@option{--change-warnings}] [@option{--no-change-warnings}]
   1299         [@option{--set-section-flags} @var{sectionpattern}=@var{flags}]
   1300         [@option{--set-section-alignment} @var{sectionpattern}=@var{align}]
   1301         [@option{--add-section} @var{sectionname}=@var{filename}]
   1302         [@option{--dump-section} @var{sectionname}=@var{filename}]
   1303         [@option{--update-section} @var{sectionname}=@var{filename}]
   1304         [@option{--rename-section} @var{oldname}=@var{newname}[,@var{flags}]]
   1305         [@option{--long-section-names} @{enable,disable,keep@}]
   1306         [@option{--change-leading-char}] [@option{--remove-leading-char}]
   1307         [@option{--reverse-bytes=}@var{num}]
   1308         [@option{--srec-len=}@var{ival}] [@option{--srec-forceS3}]
   1309         [@option{--redefine-sym} @var{old}=@var{new}]
   1310         [@option{--redefine-syms=}@var{filename}]
   1311         [@option{--weaken}]
   1312         [@option{--keep-symbols=}@var{filename}]
   1313         [@option{--strip-symbols=}@var{filename}]
   1314         [@option{--strip-unneeded-symbols=}@var{filename}]
   1315         [@option{--keep-global-symbols=}@var{filename}]
   1316         [@option{--localize-symbols=}@var{filename}]
   1317         [@option{--weaken-symbols=}@var{filename}]
   1318         [@option{--add-symbol} @var{name}=[@var{section}:]@var{value}[,@var{flags}]]
   1319         [@option{--alt-machine-code=}@var{index}]
   1320         [@option{--prefix-symbols=}@var{string}]
   1321         [@option{--prefix-sections=}@var{string}]
   1322         [@option{--prefix-alloc-sections=}@var{string}]
   1323         [@option{--add-gnu-debuglink=}@var{path-to-file}]
   1324         [@option{--only-keep-debug}]
   1325         [@option{--strip-dwo}]
   1326         [@option{--extract-dwo}]
   1327         [@option{--extract-symbol}]
   1328         [@option{--writable-text}]
   1329         [@option{--readonly-text}]
   1330         [@option{--pure}]
   1331         [@option{--impure}]
   1332         [@option{--file-alignment=}@var{num}]
   1333         [@option{--heap=}@var{reserve}[,@var{commit}]]
   1334         [@option{--image-base=}@var{address}]
   1335         [@option{--section-alignment=}@var{num}]
   1336         [@option{--stack=}@var{reserve}[,@var{commit}]]
   1337         [@option{--subsystem=}@var{which}:@var{major}.@var{minor}]
   1338         [@option{--compress-debug-sections}]
   1339         [@option{--decompress-debug-sections}]
   1340         [@option{--elf-stt-common=@var{val}}]
   1341         [@option{--merge-notes}]
   1342         [@option{--no-merge-notes}]
   1343         [@option{--verilog-data-width=@var{val}}]
   1344         [@option{-v}|@option{--verbose}]
   1345         [@option{-V}|@option{--version}]
   1346         [@option{--help}] [@option{--info}]
   1347         @var{infile} [@var{outfile}]
   1348 @c man end
   1349 @end smallexample
   1350 
   1351 @c man begin DESCRIPTION objcopy
   1352 The @sc{gnu} @command{objcopy} utility copies the contents of an object
   1353 file to another.  @command{objcopy} uses the @sc{gnu} @sc{bfd} Library to
   1354 read and write the object files.  It can write the destination object
   1355 file in a format different from that of the source object file.  The
   1356 exact behavior of @command{objcopy} is controlled by command-line options.
   1357 Note that @command{objcopy} should be able to copy a fully linked file
   1358 between any two formats. However, copying a relocatable object file
   1359 between any two formats may not work as expected.
   1360 
   1361 @command{objcopy} creates temporary files to do its translations and
   1362 deletes them afterward.  @command{objcopy} uses @sc{bfd} to do all its
   1363 translation work; it has access to all the formats described in @sc{bfd}
   1364 and thus is able to recognize most formats without being told
   1365 explicitly.  @xref{BFD,,BFD,ld,Using LD}.
   1366 
   1367 @command{objcopy} can be used to generate S-records by using an output
   1368 target of @samp{srec} (e.g., use @samp{-O srec}).
   1369 
   1370 @command{objcopy} can be used to generate a raw binary file by using an
   1371 output target of @samp{binary} (e.g., use @option{-O binary}).  When
   1372 @command{objcopy} generates a raw binary file, it will essentially produce
   1373 a memory dump of the contents of the input object file.  All symbols and
   1374 relocation information will be discarded.  The memory dump will start at
   1375 the load address of the lowest section copied into the output file.
   1376 
   1377 When generating an S-record or a raw binary file, it may be helpful to
   1378 use @option{-S} to remove sections containing debugging information.  In
   1379 some cases @option{-R} will be useful to remove sections which contain
   1380 information that is not needed by the binary file.
   1381 
   1382 Note---@command{objcopy} is not able to change the endianness of its input
   1383 files.  If the input format has an endianness (some formats do not),
   1384 @command{objcopy} can only copy the inputs into file formats that have the
   1385 same endianness or which have no endianness (e.g., @samp{srec}).
   1386 (However, see the @option{--reverse-bytes} option.)
   1387 
   1388 @c man end
   1389 
   1390 @c man begin OPTIONS objcopy
   1391 
   1392 @table @env
   1393 @item @var{infile}
   1394 @itemx @var{outfile}
   1395 The input and output files, respectively.
   1396 If you do not specify @var{outfile}, @command{objcopy} creates a
   1397 temporary file and destructively renames the result with
   1398 the name of @var{infile}.
   1399 
   1400 @item -I @var{bfdname}
   1401 @itemx --input-target=@var{bfdname}
   1402 Consider the source file's object format to be @var{bfdname}, rather than
   1403 attempting to deduce it.  @xref{Target Selection}, for more information.
   1404 
   1405 @item -O @var{bfdname}
   1406 @itemx --output-target=@var{bfdname}
   1407 Write the output file using the object format @var{bfdname}.
   1408 @xref{Target Selection}, for more information.
   1409 
   1410 @item -F @var{bfdname}
   1411 @itemx --target=@var{bfdname}
   1412 Use @var{bfdname} as the object format for both the input and the output
   1413 file; i.e., simply transfer data from source to destination with no
   1414 translation.  @xref{Target Selection}, for more information.
   1415 
   1416 @item -B @var{bfdarch}
   1417 @itemx --binary-architecture=@var{bfdarch}
   1418 Useful when transforming a architecture-less input file into an object file.
   1419 In this case the output architecture can be set to @var{bfdarch}.  This
   1420 option will be ignored if the input file has a known @var{bfdarch}.  You
   1421 can access this binary data inside a program by referencing the special
   1422 symbols that are created by the conversion process.  These symbols are
   1423 called _binary_@var{objfile}_start, _binary_@var{objfile}_end and
   1424 _binary_@var{objfile}_size.  e.g. you can transform a picture file into
   1425 an object file and then access it in your code using these symbols.
   1426 
   1427 @item -j @var{sectionpattern}
   1428 @itemx --only-section=@var{sectionpattern}
   1429 Copy only the indicated sections from the input file to the output file.
   1430 This option may be given more than once.  Note that using this option
   1431 inappropriately may make the output file unusable.  Wildcard
   1432 characters are accepted in @var{sectionpattern}.
   1433 
   1434 If the first character of @var{sectionpattern} is the exclamation
   1435 point (!) then matching sections will not be copied, even if earlier
   1436 use of @option{--only-section} on the same command line would
   1437 otherwise copy it.  For example:
   1438 
   1439 @smallexample
   1440   --only-section=.text.* --only-section=!.text.foo
   1441 @end smallexample
   1442 
   1443 will copy all sectinos matching '.text.*' but not the section
   1444 '.text.foo'.
   1445 
   1446 @item -R @var{sectionpattern}
   1447 @itemx --remove-section=@var{sectionpattern}
   1448 Remove any section matching @var{sectionpattern} from the output file.
   1449 This option may be given more than once.  Note that using this option
   1450 inappropriately may make the output file unusable.  Wildcard
   1451 characters are accepted in @var{sectionpattern}.  Using both the
   1452 @option{-j} and @option{-R} options together results in undefined
   1453 behaviour.
   1454 
   1455 If the first character of @var{sectionpattern} is the exclamation
   1456 point (!) then matching sections will not be removed even if an
   1457 earlier use of @option{--remove-section} on the same command line
   1458 would otherwise remove it.  For example:
   1459 
   1460 @smallexample
   1461   --remove-section=.text.* --remove-section=!.text.foo
   1462 @end smallexample
   1463 
   1464 will remove all sections matching the pattern '.text.*', but will not
   1465 remove the section '.text.foo'.
   1466 
   1467 @item --keep-section=@var{sectionpattern}
   1468 When removing sections from the output file, keep sections that match
   1469 @var{sectionpattern}.
   1470 
   1471 @item --remove-relocations=@var{sectionpattern}
   1472 Remove non-dynamic relocations from the output file for any section
   1473 matching @var{sectionpattern}.  This option may be given more than
   1474 once.  Note that using this option inappropriately may make the output
   1475 file unusable, and attempting to remove a dynamic relocation section
   1476 such as @samp{.rela.plt} from an executable or shared library with
   1477 @option{--remove-relocations=.plt} will not work.  Wildcard characters
   1478 are accepted in @var{sectionpattern}.
   1479 For example:
   1480 
   1481 @smallexample
   1482   --remove-relocations=.text.*
   1483 @end smallexample
   1484 
   1485 will remove the relocations for all sections matching the pattern
   1486 '.text.*'.
   1487 
   1488 If the first character of @var{sectionpattern} is the exclamation
   1489 point (!) then matching sections will not have their relocation
   1490 removed even if an earlier use of @option{--remove-relocations} on the
   1491 same command line would otherwise cause the relocations to be removed.
   1492 For example:
   1493 
   1494 @smallexample
   1495   --remove-relocations=.text.* --remove-relocations=!.text.foo
   1496 @end smallexample
   1497 
   1498 will remove all relocations for sections matching the pattern
   1499 '.text.*', but will not remove relocations for the section
   1500 '.text.foo'.
   1501 
   1502 @item --strip-section-headers
   1503 Strip section header   This option is specific to ELF files.
   1504 Implies @option{--strip-all} and @option{--merge-notes}.
   1505 
   1506 @item -S
   1507 @itemx --strip-all
   1508 Do not copy relocation and symbol information from the source file.
   1509 Also deletes debug sections.
   1510 
   1511 @item -g
   1512 @itemx --strip-debug
   1513 Do not copy debugging symbols or sections from the source file.
   1514 
   1515 @item --strip-unneeded
   1516 Remove all symbols that are not needed for relocation processing in
   1517 addition to debugging symbols and sections stripped by
   1518 @option{--strip-debug}.
   1519 
   1520 @item -K @var{symbolname}
   1521 @itemx --keep-symbol=@var{symbolname}
   1522 When stripping symbols, keep symbol @var{symbolname} even if it would
   1523 normally be stripped.  This option may be given more than once.
   1524 
   1525 @item -N @var{symbolname}
   1526 @itemx --strip-symbol=@var{symbolname}
   1527 Do not copy symbol @var{symbolname} from the source file.  This option
   1528 may be given more than once.
   1529 
   1530 @item --strip-unneeded-symbol=@var{symbolname}
   1531 Do not copy symbol @var{symbolname} from the source file unless it is needed
   1532 by a relocation.  This option may be given more than once.
   1533 
   1534 @item -G @var{symbolname}
   1535 @itemx --keep-global-symbol=@var{symbolname}
   1536 Keep only symbol @var{symbolname} global.  Make all other symbols local
   1537 to the file, so that they are not visible externally.  This option may
   1538 be given more than once.  Note: this option cannot be used in
   1539 conjunction with the @option{--globalize-symbol} or
   1540 @option{--globalize-symbols} options.
   1541 
   1542 @item --localize-hidden
   1543 In an ELF object, mark all symbols that have hidden or internal visibility
   1544 as local.  This option applies on top of symbol-specific localization options
   1545 such as @option{-L}.
   1546 
   1547 @item -L @var{symbolname}
   1548 @itemx --localize-symbol=@var{symbolname}
   1549 Convert a global or weak symbol called @var{symbolname} into a local
   1550 symbol, so that it is not visible externally.  This option may be
   1551 given more than once.  Note - unique symbols are not converted.
   1552 
   1553 @item -W @var{symbolname}
   1554 @itemx --weaken-symbol=@var{symbolname}
   1555 Make symbol @var{symbolname} weak. This option may be given more than once.
   1556 
   1557 @item --globalize-symbol=@var{symbolname}
   1558 Give symbol @var{symbolname} global scoping so that it is visible
   1559 outside of the file in which it is defined.  This option may be given
   1560 more than once.  Note: this option cannot be used in conjunction with
   1561 the @option{-G} or @option{--keep-global-symbol} options.
   1562 
   1563 @item -w
   1564 @itemx --wildcard
   1565 Permit regular expressions in @var{symbolname}s used in other command
   1566 line options.  The question mark (?), asterisk (*), backslash (\) and
   1567 square brackets ([]) operators can be used anywhere in the symbol
   1568 name.  If the first character of the symbol name is the exclamation
   1569 point (!) then the sense of the switch is reversed for that symbol.
   1570 For example:
   1571 
   1572 @smallexample
   1573   -w -W !foo -W fo*
   1574 @end smallexample
   1575 
   1576 would cause objcopy to weaken all symbols that start with ``fo''
   1577 except for the symbol ``foo''.
   1578 
   1579 @item -x
   1580 @itemx --discard-all
   1581 Do not copy non-global symbols from the source file.
   1582 @c FIXME any reason to prefer "non-global" to "local" here?
   1583 
   1584 @item -X
   1585 @itemx --discard-locals
   1586 Do not copy compiler-generated local symbols.
   1587 (These usually start with @samp{L} or @samp{.}.)
   1588 
   1589 @item -b @var{byte}
   1590 @itemx --byte=@var{byte}
   1591 If interleaving has been enabled via the @option{--interleave} option
   1592 then start the range of bytes to keep at the @var{byte}th byte.
   1593 @var{byte} can be in the range from 0 to @var{breadth}-1, where
   1594 @var{breadth} is the value given by the @option{--interleave} option.
   1595 
   1596 @item -i [@var{breadth}]
   1597 @itemx --interleave[=@var{breadth}]
   1598 Only copy a range out of every @var{breadth} bytes.  (Header data is
   1599 not affected).  Select which byte in the range begins the copy with
   1600 the @option{--byte} option.  Select the width of the range with the
   1601 @option{--interleave-width} option.
   1602 
   1603 This option is useful for creating files to program @sc{rom}.  It is
   1604 typically used with an @code{srec} output target.  Note that
   1605 @command{objcopy} will complain if you do not specify the
   1606 @option{--byte} option as well.
   1607 
   1608 The default interleave breadth is 4, so with @option{--byte} set to 0,
   1609 @command{objcopy} would copy the first byte out of every four bytes
   1610 from the input to the output.
   1611 
   1612 @item --interleave-width=@var{width}
   1613 When used with the @option{--interleave} option, copy @var{width}
   1614 bytes at a time.  The start of the range of bytes to be copied is set
   1615 by the @option{--byte} option, and the extent of the range is set with
   1616 the @option{--interleave} option.
   1617 
   1618 The default value for this option is 1.  The value of @var{width} plus
   1619 the @var{byte} value set by the @option{--byte} option must not exceed
   1620 the interleave breadth set by the @option{--interleave} option.
   1621 
   1622 This option can be used to create images for two 16-bit flashes interleaved
   1623 in a 32-bit bus by passing @option{-b 0 -i 4 --interleave-width=2}
   1624 and @option{-b 2 -i 4 --interleave-width=2} to two @command{objcopy}
   1625 commands.  If the input was '12345678' then the outputs would be
   1626 '1256' and '3478' respectively.
   1627 
   1628 @item -p
   1629 @itemx --preserve-dates
   1630 Set the access and modification dates of the output file to be the same
   1631 as those of the input file.
   1632 
   1633 This option also copies the date stored in a PE format file's header,
   1634 unless the SOURCE_DATE_EPOCH environment variable is defined.  If it
   1635 is defined then this variable will be used as the date stored in the
   1636 header, interpreted as the number of seconds since the Unix epoch.
   1637 
   1638 @item -D
   1639 @itemx --enable-deterministic-archives
   1640 @cindex deterministic archives
   1641 @kindex --enable-deterministic-archives
   1642 Operate in @emph{deterministic} mode.  When copying archive members
   1643 and writing the archive index, use zero for UIDs, GIDs, timestamps,
   1644 and use consistent file modes for all files.
   1645 
   1646 If @file{binutils} was configured with
   1647 @option{--enable-deterministic-archives}, then this mode is on by default.
   1648 It can be disabled with the @samp{-U} option, below.
   1649 
   1650 @item -U
   1651 @itemx --disable-deterministic-archives
   1652 @cindex deterministic archives
   1653 @kindex --enable-deterministic-archives
   1654 Do @emph{not} operate in @emph{deterministic} mode.  This is the
   1655 inverse of the @option{-D} option, above: when copying archive members
   1656 and writing the archive index, use their actual UID, GID, timestamp,
   1657 and file mode values.
   1658 
   1659 This is the default unless @file{binutils} was configured with
   1660 @option{--enable-deterministic-archives}.
   1661 
   1662 @item --debugging
   1663 Convert debugging information, if possible.  This is not the default
   1664 because only certain debugging formats are supported, and the
   1665 conversion process can be time consuming.
   1666 
   1667 @item --gap-fill @var{val}
   1668 Fill gaps between sections with @var{val}.  This operation applies to
   1669 the @emph{load address} (LMA) of the sections.  It is done by increasing
   1670 the size of the section with the lower address, and filling in the extra
   1671 space created with @var{val}.
   1672 
   1673 @item --pad-to @var{address}
   1674 Pad the output file up to the load address @var{address}.  This is
   1675 done by increasing the size of the last section.  The extra space is
   1676 filled in with the value specified by @option{--gap-fill} (default zero).
   1677 
   1678 @item --set-start @var{val}
   1679 Set the start address (also known as the entry address) of the new
   1680 file to @var{val}.  Not all object file formats support setting the
   1681 start address.
   1682 
   1683 @item --change-start @var{incr}
   1684 @itemx --adjust-start @var{incr}
   1685 @cindex changing start address
   1686 Change the start address (also known as the entry address) by adding
   1687 @var{incr}.  Not all object file formats support setting the start
   1688 address.
   1689 
   1690 @item --change-addresses @var{incr}
   1691 @itemx --adjust-vma @var{incr}
   1692 @cindex changing object addresses
   1693 Change the VMA and LMA addresses of all sections, as well as the start
   1694 address, by adding @var{incr}.  Some object file formats do not permit
   1695 section addresses to be changed arbitrarily.  Note that this does not
   1696 relocate the sections; if the program expects sections to be loaded at a
   1697 certain address, and this option is used to change the sections such
   1698 that they are loaded at a different address, the program may fail.
   1699 
   1700 @item --change-section-address @var{sectionpattern}@{=,+,-@}@var{val}
   1701 @itemx --adjust-section-vma @var{sectionpattern}@{=,+,-@}@var{val}
   1702 @cindex changing section address
   1703 Set or change both the VMA address and the LMA address of any section
   1704 matching @var{sectionpattern}.  If @samp{=} is used, the section
   1705 address is set to @var{val}.  Otherwise, @var{val} is added to or
   1706 subtracted from the section address.  See the comments under
   1707 @option{--change-addresses}, above. If @var{sectionpattern} does not
   1708 match any sections in the input file, a warning will be issued, unless
   1709 @option{--no-change-warnings} is used.
   1710 
   1711 @item --change-section-lma @var{sectionpattern}@{=,+,-@}@var{val}
   1712 @cindex changing section LMA
   1713 Set or change the LMA address of any sections matching
   1714 @var{sectionpattern}.  The LMA address is the address where the
   1715 section will be loaded into memory at program load time.  Normally
   1716 this is the same as the VMA address, which is the address of the
   1717 section at program run time, but on some systems, especially those
   1718 where a program is held in ROM, the two can be different.  If @samp{=}
   1719 is used, the section address is set to @var{val}.  Otherwise,
   1720 @var{val} is added to or subtracted from the section address.  See the
   1721 comments under @option{--change-addresses}, above.  If
   1722 @var{sectionpattern} does not match any sections in the input file, a
   1723 warning will be issued, unless @option{--no-change-warnings} is used.
   1724 
   1725 @item --change-section-vma @var{sectionpattern}@{=,+,-@}@var{val}
   1726 @cindex changing section VMA
   1727 Set or change the VMA address of any section matching
   1728 @var{sectionpattern}.  The VMA address is the address where the
   1729 section will be located once the program has started executing.
   1730 Normally this is the same as the LMA address, which is the address
   1731 where the section will be loaded into memory, but on some systems,
   1732 especially those where a program is held in ROM, the two can be
   1733 different.  If @samp{=} is used, the section address is set to
   1734 @var{val}.  Otherwise, @var{val} is added to or subtracted from the
   1735 section address.  See the comments under @option{--change-addresses},
   1736 above.  If @var{sectionpattern} does not match any sections in the
   1737 input file, a warning will be issued, unless
   1738 @option{--no-change-warnings} is used.
   1739 
   1740 Note - changing the VMA of sections in a fully linked binary can be
   1741 dangerous since there may be code that expects the sections to be
   1742 located at their old address.
   1743 
   1744 @item --change-warnings
   1745 @itemx --adjust-warnings
   1746 If @option{--change-section-address} or @option{--change-section-lma} or
   1747 @option{--change-section-vma} is used, and the section pattern does not
   1748 match any sections, issue a warning.  This is the default.
   1749 
   1750 @item --no-change-warnings
   1751 @itemx --no-adjust-warnings
   1752 Do not issue a warning if @option{--change-section-address} or
   1753 @option{--adjust-section-lma} or @option{--adjust-section-vma} is used, even
   1754 if the section pattern does not match any sections.
   1755 
   1756 @item --set-section-flags @var{sectionpattern}=@var{flags}
   1757 Set the flags for any sections matching @var{sectionpattern}.  The
   1758 @var{flags} argument is a comma separated string of flag names.  The
   1759 recognized names are @samp{alloc}, @samp{contents}, @samp{load},
   1760 @samp{noload}, @samp{readonly}, @samp{code}, @samp{data}, @samp{rom},
   1761 @samp{exclude}, @samp{share}, @samp{debug}, and @samp{large}.
   1762 You can set the @samp{contents} flag for a section which does not have
   1763 contents, but it is not meaningful to clear the @samp{contents} flag of a
   1764 section which does have contents--just remove the section instead.  Not all
   1765 flags are meaningful for all object file formats.  In particular the
   1766 @samp{share} flag is only meaningful for COFF format files and not for ELF
   1767 format files.  The ELF x86-64 specific flag @samp{large} corresponds to
   1768 SHF_X86_64_LARGE.
   1769 
   1770 @item --set-section-alignment @var{sectionpattern}=@var{align}
   1771 Set the alignment for any sections matching @var{sectionpattern}.
   1772 @var{align} specifies the alignment in bytes and must be a power of
   1773 two, i.e. 1, 2, 4, 8@dots{}.
   1774 
   1775 Note - setting a section's alignment will not automatically align its
   1776 LMA or VMA addresses.  If those need to be changed as well then the
   1777 @option{--change-section-lma} and/or @option{--change-section-vma}
   1778 options should be used.  Also note that changing VMAs can cause
   1779 problems in fully linked binaries where there may be code that expects
   1780 the contents of the sections to be located at their old address.
   1781 
   1782 @item --add-section @var{sectionname}=@var{filename}
   1783 Add a new section named @var{sectionname} while copying the file.  The
   1784 contents of the new section are taken from the file @var{filename}.  The
   1785 size of the section will be the size of the file.  This option only
   1786 works on file formats which can support sections with arbitrary names.
   1787 Note - it may be necessary to use the @option{--set-section-flags}
   1788 option to set the attributes of the newly created section.
   1789 
   1790 @item --dump-section @var{sectionname}=@var{filename}
   1791 Place the contents of section named @var{sectionname} into the file
   1792 @var{filename}, overwriting any contents that may have been there
   1793 previously.  This option is the inverse of @option{--add-section}.
   1794 This option is similar to the @option{--only-section} option except
   1795 that it does not create a formatted file, it just dumps the contents
   1796 as raw binary data, without applying any relocations.  The option can
   1797 be specified more than once.
   1798 
   1799 @item --update-section @var{sectionname}=@var{filename}
   1800 Replace the existing contents of a section named @var{sectionname}
   1801 with the contents of file @var{filename}.  The size of the section
   1802 will be adjusted to the size of the file.  The section flags for
   1803 @var{sectionname} will be unchanged.  For ELF format files the section
   1804 to segment mapping will also remain unchanged, something which is not
   1805 possible using @option{--remove-section} followed by
   1806 @option{--add-section}.  The option can be specified more than once.
   1807 
   1808 Note - it is possible to use @option{--rename-section} and
   1809 @option{--update-section} to both update and rename a section from one
   1810 command line.  In this case, pass the original section name to
   1811 @option{--update-section}, and the original and new section names to
   1812 @option{--rename-section}.
   1813 
   1814 @item --add-symbol @var{name}=[@var{section}:]@var{value}[,@var{flags}]
   1815 Add a new symbol named @var{name} while copying the file.  This option may be
   1816 specified multiple times.  If the @var{section} is given, the symbol will be
   1817 associated with and relative to that section, otherwise it will be an ABS
   1818 symbol.  Specifying an undefined section will result in a fatal error.  There
   1819 is no check for the value, it will be taken as specified.  Symbol flags can
   1820 be specified and not all flags will be meaningful for all object file
   1821 formats.  By default, the symbol will be global.  The special flag
   1822 'before=@var{othersym}' will insert the new symbol in front of the specified
   1823 @var{othersym}, otherwise the symbol(s) will be added at the end of the
   1824 symbol table in the order they appear.
   1825 
   1826 @item --rename-section @var{oldname}=@var{newname}[,@var{flags}]
   1827 Rename a section from @var{oldname} to @var{newname}, optionally
   1828 changing the section's flags to @var{flags} in the process.  This has
   1829 the advantage over using a linker script to perform the rename in that
   1830 the output stays as an object file and does not become a linked
   1831 executable.  This option accepts the same set of flags as the
   1832 @option{--set-section-flags} option.
   1833 
   1834 This option is particularly helpful when the input format is binary,
   1835 since this will always create a section called .data.  If for example,
   1836 you wanted instead to create a section called .rodata containing binary
   1837 data you could use the following command line to achieve it:
   1838 
   1839 @smallexample
   1840   objcopy -I binary -O <output_format> -B <architecture> \
   1841    --rename-section .data=.rodata,alloc,load,readonly,data,contents \
   1842    <input_binary_file> <output_object_file>
   1843 @end smallexample
   1844 
   1845 @item --long-section-names @{enable,disable,keep@}
   1846 Controls the handling of long section names when processing @code{COFF}
   1847 and @code{PE-COFF} object formats.  The default behaviour, @samp{keep},
   1848 is to preserve long section names if any are present in the input file.
   1849 The @samp{enable} and @samp{disable} options forcibly enable or disable
   1850 the use of long section names in the output object; when @samp{disable}
   1851 is in effect, any long section names in the input object will be truncated.
   1852 The @samp{enable} option will only emit long section names if any are
   1853 present in the inputs; this is mostly the same as @samp{keep}, but it
   1854 is left undefined whether the @samp{enable} option might force the
   1855 creation of an empty string table in the output file.
   1856 
   1857 @item --change-leading-char
   1858 Some object file formats use special characters at the start of
   1859 symbols.  The most common such character is underscore, which compilers
   1860 often add before every symbol.  This option tells @command{objcopy} to
   1861 change the leading character of every symbol when it converts between
   1862 object file formats.  If the object file formats use the same leading
   1863 character, this option has no effect.  Otherwise, it will add a
   1864 character, or remove a character, or change a character, as
   1865 appropriate.
   1866 
   1867 @item --remove-leading-char
   1868 If the first character of a global symbol is a special symbol leading
   1869 character used by the object file format, remove the character.  The
   1870 most common symbol leading character is underscore.  This option will
   1871 remove a leading underscore from all global symbols.  This can be useful
   1872 if you want to link together objects of different file formats with
   1873 different conventions for symbol names.  This is different from
   1874 @option{--change-leading-char} because it always changes the symbol name
   1875 when appropriate, regardless of the object file format of the output
   1876 file.
   1877 
   1878 @item --reverse-bytes=@var{num}
   1879 Reverse the bytes in a section with output contents.  A section length must
   1880 be evenly divisible by the value given in order for the swap to be able to
   1881 take place. Reversing takes place before the interleaving is performed.
   1882 
   1883 This option is used typically in generating ROM images for problematic
   1884 target systems.  For example, on some target boards, the 32-bit words
   1885 fetched from 8-bit ROMs are re-assembled in little-endian byte order
   1886 regardless of the CPU byte order.  Depending on the programming model, the
   1887 endianness of the ROM may need to be modified.
   1888 
   1889 Consider a simple file with a section containing the following eight
   1890 bytes:  @code{12345678}.
   1891 
   1892 Using @samp{--reverse-bytes=2} for the above example, the bytes in the
   1893 output file would be ordered @code{21436587}.
   1894 
   1895 Using @samp{--reverse-bytes=4} for the above example, the bytes in the
   1896 output file would be ordered @code{43218765}.
   1897 
   1898 By using @samp{--reverse-bytes=2} for the above example, followed by
   1899 @samp{--reverse-bytes=4} on the output file, the bytes in the second
   1900 output file would be ordered @code{34127856}.
   1901 
   1902 @item --srec-len=@var{ival}
   1903 Meaningful only for srec output.  Set the maximum length of the Srecords
   1904 being produced to @var{ival}.  This length covers both address, data and
   1905 crc fields.
   1906 
   1907 @item --srec-forceS3
   1908 Meaningful only for srec output.  Avoid generation of S1/S2 records,
   1909 creating S3-only record format.
   1910 
   1911 @item --redefine-sym @var{old}=@var{new}
   1912 Change the name of a symbol @var{old}, to @var{new}.  This can be useful
   1913 when one is trying link two things together for which you have no
   1914 source, and there are name collisions.
   1915 
   1916 @item --redefine-syms=@var{filename}
   1917 Apply @option{--redefine-sym} to each symbol pair "@var{old} @var{new}"
   1918 listed in the file @var{filename}.  @var{filename} is simply a flat file,
   1919 with one symbol pair per line.  Line comments may be introduced by the hash
   1920 character.  This option may be given more than once.
   1921 
   1922 @item --weaken
   1923 Change all global symbols in the file to be weak.  This can be useful
   1924 when building an object which will be linked against other objects using
   1925 the @option{-R} option to the linker.  This option is only effective when
   1926 using an object file format which supports weak symbols.
   1927 
   1928 @item --keep-symbols=@var{filename}
   1929 Apply @option{--keep-symbol} option to each symbol listed in the file
   1930 @var{filename}.  @var{filename} is simply a flat file, with one symbol
   1931 name per line.  Line comments may be introduced by the hash character.
   1932 This option may be given more than once.
   1933 
   1934 @item --strip-symbols=@var{filename}
   1935 Apply @option{--strip-symbol} option to each symbol listed in the file
   1936 @var{filename}.  @var{filename} is simply a flat file, with one symbol
   1937 name per line.  Line comments may be introduced by the hash character.
   1938 This option may be given more than once.
   1939 
   1940 @item --strip-unneeded-symbols=@var{filename}
   1941 Apply @option{--strip-unneeded-symbol} option to each symbol listed in
   1942 the file @var{filename}.  @var{filename} is simply a flat file, with one
   1943 symbol name per line.  Line comments may be introduced by the hash
   1944 character.  This option may be given more than once.
   1945 
   1946 @item --keep-global-symbols=@var{filename}
   1947 Apply @option{--keep-global-symbol} option to each symbol listed in the
   1948 file @var{filename}.  @var{filename} is simply a flat file, with one
   1949 symbol name per line.  Line comments may be introduced by the hash
   1950 character.  This option may be given more than once.
   1951 
   1952 @item --localize-symbols=@var{filename}
   1953 Apply @option{--localize-symbol} option to each symbol listed in the file
   1954 @var{filename}.  @var{filename} is simply a flat file, with one symbol
   1955 name per line.  Line comments may be introduced by the hash character.
   1956 This option may be given more than once.
   1957 
   1958 @item --globalize-symbols=@var{filename}
   1959 Apply @option{--globalize-symbol} option to each symbol listed in the file
   1960 @var{filename}.  @var{filename} is simply a flat file, with one symbol
   1961 name per line.  Line comments may be introduced by the hash character.
   1962 This option may be given more than once.  Note: this option cannot be
   1963 used in conjunction with the @option{-G} or @option{--keep-global-symbol}
   1964 options.
   1965 
   1966 @item --weaken-symbols=@var{filename}
   1967 Apply @option{--weaken-symbol} option to each symbol listed in the file
   1968 @var{filename}.  @var{filename} is simply a flat file, with one symbol
   1969 name per line.  Line comments may be introduced by the hash character.
   1970 This option may be given more than once.
   1971 
   1972 @item --alt-machine-code=@var{index}
   1973 If the output architecture has alternate machine codes, use the
   1974 @var{index}th code instead of the default one.  This is useful in case
   1975 a machine is assigned an official code and the tool-chain adopts the
   1976 new code, but other applications still depend on the original code
   1977 being used.  For ELF based architectures if the @var{index}
   1978 alternative does not exist then the value is treated as an absolute
   1979 number to be stored in the e_machine field of the ELF header.
   1980 
   1981 @item --writable-text
   1982 Mark the output text as writable.  This option isn't meaningful for all
   1983 object file formats.
   1984 
   1985 @item --readonly-text
   1986 Make the output text write protected.  This option isn't meaningful for all
   1987 object file formats.
   1988 
   1989 @item --pure
   1990 Mark the output file as demand paged.  This option isn't meaningful for all
   1991 object file formats.
   1992 
   1993 @item --impure
   1994 Mark the output file as impure.  This option isn't meaningful for all
   1995 object file formats.
   1996 
   1997 @item --prefix-symbols=@var{string}
   1998 Prefix all symbols in the output file with @var{string}.
   1999 
   2000 @item --prefix-sections=@var{string}
   2001 Prefix all section names in the output file with @var{string}.
   2002 
   2003 @item --prefix-alloc-sections=@var{string}
   2004 Prefix all the names of all allocated sections in the output file with
   2005 @var{string}.
   2006 
   2007 @item --add-gnu-debuglink=@var{path-to-file}
   2008 Creates a .gnu_debuglink section which contains a reference to
   2009 @var{path-to-file} and adds it to the output file.  Note: the file at
   2010 @var{path-to-file} must exist.  Part of the process of adding the
   2011 .gnu_debuglink section involves embedding a checksum of the contents
   2012 of the debug info file into the section.
   2013 
   2014 If the debug info file is built in one location but it is going to be
   2015 installed at a later time into a different location then do not use
   2016 the path to the installed location.  The @option{--add-gnu-debuglink}
   2017 option will fail because the installed file does not exist yet.
   2018 Instead put the debug info file in the current directory and use the
   2019 @option{--add-gnu-debuglink} option without any directory components,
   2020 like this:
   2021 
   2022 @smallexample
   2023  objcopy --add-gnu-debuglink=foo.debug
   2024 @end smallexample
   2025 
   2026 At debug time the debugger will attempt to look for the separate debug
   2027 info file in a set of known locations.  The exact set of these
   2028 locations varies depending upon the distribution being used, but it
   2029 typically includes:
   2030 
   2031 @table @code
   2032 
   2033 @item * The same directory as the executable.
   2034 
   2035 @item * A sub-directory of the directory containing the executable
   2036 called .debug
   2037 
   2038 @item * A global debug directory such as /usr/lib/debug.
   2039 @end table
   2040 
   2041 As long as the debug info file has been installed into one of these
   2042 locations before the debugger is run everything should work
   2043 correctly.
   2044 
   2045 @item --keep-section-symbols
   2046 When stripping a file, perhaps with @option{--strip-debug} or
   2047 @option{--strip-unneeded}, retain any symbols specifying section names,
   2048 which would otherwise get stripped.
   2049 
   2050 @item --keep-file-symbols
   2051 When stripping a file, perhaps with @option{--strip-debug} or
   2052 @option{--strip-unneeded}, retain any symbols specifying source file names,
   2053 which would otherwise get stripped.
   2054 
   2055 @item --only-keep-debug
   2056 Strip a file, removing contents of any sections that would not be
   2057 stripped by @option{--strip-debug} and leaving the debugging sections
   2058 intact.  In ELF files, this preserves all note sections in the output.
   2059 
   2060 Note - the section headers of the stripped sections are preserved,
   2061 including their sizes, but the contents of the section are discarded.
   2062 The section headers are preserved so that other tools can match up the
   2063 debuginfo file with the real executable, even if that executable has
   2064 been relocated to a different address space.
   2065 
   2066 The intention is that this option will be used in conjunction with
   2067 @option{--add-gnu-debuglink} to create a two part executable.  One a
   2068 stripped binary which will occupy less space in RAM and in a
   2069 distribution and the second a debugging information file which is only
   2070 needed if debugging abilities are required.  The suggested procedure
   2071 to create these files is as follows:
   2072 
   2073 @enumerate
   2074 @item Link the executable as normal.  Assuming that it is called
   2075 @code{foo} then...
   2076 @item Run @code{objcopy --only-keep-debug foo foo.dbg} to
   2077 create a file containing the debugging info.
   2078 @item Run @code{objcopy --strip-debug foo} to create a
   2079 stripped executable.
   2080 @item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo}
   2081 to add a link to the debugging info into the stripped executable.
   2082 @end enumerate
   2083 
   2084 Note---the choice of @code{.dbg} as an extension for the debug info
   2085 file is arbitrary.  Also the @code{--only-keep-debug} step is
   2086 optional.  You could instead do this:
   2087 
   2088 @enumerate
   2089 @item Link the executable as normal.
   2090 @item Copy @code{foo} to  @code{foo.full}
   2091 @item Run @code{objcopy --strip-debug foo}
   2092 @item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
   2093 @end enumerate
   2094 
   2095 i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
   2096 full executable.  It does not have to be a file created by the
   2097 @option{--only-keep-debug} switch.
   2098 
   2099 Note---this switch is only intended for use on fully linked files.  It
   2100 does not make sense to use it on object files where the debugging
   2101 information may be incomplete.  Besides the gnu_debuglink feature
   2102 currently only supports the presence of one filename containing
   2103 debugging information, not multiple filenames on a one-per-object-file
   2104 basis.
   2105 
   2106 @item --strip-dwo
   2107 Remove the contents of all DWARF .dwo sections, leaving the
   2108 remaining debugging sections and all symbols intact.
   2109 This option is intended for use by the compiler as part of
   2110 the @option{-gsplit-dwarf} option, which splits debug information
   2111 between the .o file and a separate .dwo file.  The compiler
   2112 generates all debug information in the same file, then uses
   2113 the @option{--extract-dwo} option to copy the .dwo sections to
   2114 the .dwo file, then the @option{--strip-dwo} option to remove
   2115 those sections from the original .o file.
   2116 
   2117 @item --extract-dwo
   2118 Extract the contents of all DWARF .dwo sections.  See the
   2119 @option{--strip-dwo} option for more information.
   2120 
   2121 @item --file-alignment @var{num}
   2122 Specify the file alignment.  Sections in the file will always begin at
   2123 file offsets which are multiples of this number.  This defaults to
   2124 512.
   2125 [This option is specific to PE targets.]
   2126 
   2127 @item --heap @var{reserve}
   2128 @itemx --heap @var{reserve},@var{commit}
   2129 Specify the number of bytes of memory to reserve (and optionally commit)
   2130 to be used as heap for this program.
   2131 [This option is specific to PE targets.]
   2132 
   2133 @item --image-base @var{value}
   2134 Use @var{value} as the base address of your program or dll.  This is
   2135 the lowest memory location that will be used when your program or dll
   2136 is loaded.  To reduce the need to relocate and improve performance of
   2137 your dlls, each should have a unique base address and not overlap any
   2138 other dlls.  The default is 0x400000 for executables, and 0x10000000
   2139 for dlls.
   2140 [This option is specific to PE targets.]
   2141 
   2142 @item --section-alignment @var{num}
   2143 [This option is specific to PE targets.]
   2144 
   2145 Sets the section alignment field in the PE header - if one is present
   2146 in the binary.  Sections in memory will always begin at addresses
   2147 which are a multiple of this number.  Defaults to 0x1000.
   2148 
   2149 Note - if a section's LMA or VMA addresses are no longer aligned, and
   2150 those addresses have not been set via the @option{--set-section-lma} or
   2151 @option{--set-section-vma} options, and the file has been fully
   2152 relocated then a warning message will be issued.  It will then be up
   2153 to the user to decide if the LMA and VMA need updating.
   2154 
   2155 @item --stack @var{reserve}
   2156 @itemx --stack @var{reserve},@var{commit}
   2157 Specify the number of bytes of memory to reserve (and optionally commit)
   2158 to be used as stack for this program.
   2159 [This option is specific to PE targets.]
   2160 
   2161 @item --subsystem @var{which}
   2162 @itemx --subsystem @var{which}:@var{major}
   2163 @itemx --subsystem @var{which}:@var{major}.@var{minor}
   2164 Specifies the subsystem under which your program will execute.  The
   2165 legal values for @var{which} are @code{native}, @code{windows},
   2166 @code{console}, @code{posix}, @code{efi-app}, @code{efi-bsd},
   2167 @code{efi-rtd}, @code{sal-rtd}, and @code{xbox}.  You may optionally set
   2168 the subsystem version also.  Numeric values are also accepted for
   2169 @var{which}.
   2170 [This option is specific to PE targets.]
   2171 
   2172 @item --extract-symbol
   2173 Keep the file's section flags and symbols but remove all section data.
   2174 Specifically, the option:
   2175 
   2176 @itemize
   2177 @item removes the contents of all sections;
   2178 @item sets the size of every section to zero; and
   2179 @item sets the file's start address to zero.
   2180 @end itemize
   2181 
   2182 This option is used to build a @file{.sym} file for a VxWorks kernel.
   2183 It can also be a useful way of reducing the size of a @option{--just-symbols}
   2184 linker input file.
   2185 
   2186 @item --compress-debug-sections
   2187 Compress DWARF debug sections using zlib with SHF_COMPRESSED from the
   2188 ELF ABI.  Note - if compression would actually make a section
   2189 @emph{larger}, then it is not compressed.
   2190 
   2191 @item --compress-debug-sections=none
   2192 @itemx --compress-debug-sections=zlib
   2193 @itemx --compress-debug-sections=zlib-gnu
   2194 @itemx --compress-debug-sections=zlib-gabi
   2195 @itemx --compress-debug-sections=zstd
   2196 For ELF files, these options control how DWARF debug sections are
   2197 compressed.  @option{--compress-debug-sections=none} is equivalent
   2198 to @option{--decompress-debug-sections}.
   2199 @option{--compress-debug-sections=zlib} and
   2200 @option{--compress-debug-sections=zlib-gabi} are equivalent to
   2201 @option{--compress-debug-sections}.
   2202 @option{--compress-debug-sections=zlib-gnu} compresses DWARF debug sections
   2203 using the obsoleted zlib-gnu format.  The debug sections are renamed to begin
   2204 with @samp{.zdebug}.
   2205 @option{--compress-debug-sections=zstd} compresses DWARF debug
   2206 sections using zstd.  Note - if compression would actually make a section
   2207 @emph{larger}, then it is not compressed nor renamed.
   2208 
   2209 @item --decompress-debug-sections
   2210 Decompress DWARF debug sections.  For a @samp{.zdebug} section, the original
   2211 name is restored.
   2212 
   2213 @item --elf-stt-common=yes
   2214 @itemx --elf-stt-common=no
   2215 For ELF files, these options control whether common symbols should be
   2216 converted to the @code{STT_COMMON} or @code{STT_OBJECT} type.
   2217 @option{--elf-stt-common=yes} converts common symbol type to
   2218 @code{STT_COMMON}. @option{--elf-stt-common=no} converts common symbol
   2219 type to @code{STT_OBJECT}.
   2220 
   2221 @item --merge-notes
   2222 @itemx --no-merge-notes
   2223 For ELF files, attempt (or do not attempt) to reduce the size of any
   2224 SHT_NOTE type sections by removing duplicate notes.
   2225 
   2226 @item -V
   2227 @itemx --version
   2228 Show the version number of @command{objcopy}.
   2229 
   2230 @item --verilog-data-width=@var{bytes}
   2231 For Verilog output, this options controls the number of bytes
   2232 converted for each output data element.  The input target controls the
   2233 endianness of the conversion.
   2234 
   2235 @item -v
   2236 @itemx --verbose
   2237 Verbose output: list all object files modified.  In the case of
   2238 archives, @samp{objcopy -V} lists all members of the archive.
   2239 
   2240 @item --help
   2241 Show a summary of the options to @command{objcopy}.
   2242 
   2243 @item --info
   2244 Display a list showing all architectures and object formats available.
   2245 @end table
   2246 
   2247 @c man end
   2248 
   2249 @ignore
   2250 @c man begin SEEALSO objcopy
   2251 ld(1), objdump(1), and the Info entries for @file{binutils}.
   2252 @c man end
   2253 @end ignore
   2254 
   2255 @node objdump
   2256 @chapter objdump
   2257 
   2258 @cindex object file information
   2259 @kindex objdump
   2260 
   2261 @c man title objdump display information from object files
   2262 
   2263 @smallexample
   2264 @c man begin SYNOPSIS objdump
   2265 objdump [@option{-a}|@option{--archive-headers}]
   2266         [@option{-b} @var{bfdname}|@option{--target=@var{bfdname}}]
   2267         [@option{-C}|@option{--demangle}[=@var{style}] ]
   2268         [@option{-d}|@option{--disassemble}[=@var{symbol}]]
   2269         [@option{-D}|@option{--disassemble-all}]
   2270         [@option{-z}|@option{--disassemble-zeroes}]
   2271         [@option{-EB}|@option{-EL}|@option{--endian=}@{big | little @}]
   2272         [@option{-f}|@option{--file-headers}]
   2273         [@option{-F}|@option{--file-offsets}]
   2274         [@option{--file-start-context}]
   2275         [@option{-g}|@option{--debugging}]
   2276         [@option{-e}|@option{--debugging-tags}]
   2277         [@option{-h}|@option{--section-headers}|@option{--headers}]
   2278         [@option{-i}|@option{--info}]
   2279         [@option{-j} @var{section}|@option{--section=}@var{section}]
   2280         [@option{-l}|@option{--line-numbers}]
   2281         [@option{-S}|@option{--source}]
   2282         [@option{--source-comment}[=@var{text}]]
   2283         [@option{-m} @var{machine}|@option{--architecture=}@var{machine}]
   2284         [@option{-M} @var{options}|@option{--disassembler-options=}@var{options}]
   2285         [@option{-p}|@option{--private-headers}]
   2286         [@option{-P} @var{options}|@option{--private=}@var{options}]
   2287         [@option{-r}|@option{--reloc}]
   2288         [@option{-R}|@option{--dynamic-reloc}]
   2289         [@option{-s}|@option{--full-contents}]
   2290         [@option{-Z}|@option{--decompress}]
   2291         [@option{-W[lLiaprmfFsoORtUuTgAck]}|
   2292          @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]]
   2293         [@option{-WK}|@option{--dwarf=follow-links}]
   2294         [@option{-WN}|@option{--dwarf=no-follow-links}]
   2295         [@option{-wD}|@option{--dwarf=use-debuginfod}]
   2296         [@option{-wE}|@option{--dwarf=do-not-use-debuginfod}]
   2297         [@option{-L}|@option{--process-links}]
   2298         [@option{--ctf=}@var{section}]
   2299         [@option{--sframe=}@var{section}]
   2300         [@option{-G}|@option{--stabs}]
   2301         [@option{-t}|@option{--syms}]
   2302         [@option{-T}|@option{--dynamic-syms}]
   2303         [@option{-x}|@option{--all-headers}]
   2304         [@option{-w}|@option{--wide}]
   2305         [@option{--start-address=}@var{address}]
   2306         [@option{--stop-address=}@var{address}]
   2307         [@option{--no-addresses}]
   2308         [@option{--prefix-addresses}]
   2309         [@option{--[no-]show-raw-insn}]
   2310         [@option{--adjust-vma=}@var{offset}]
   2311         [@option{--show-all-symbols}]
   2312         [@option{--dwarf-depth=@var{n}}]
   2313         [@option{--dwarf-start=@var{n}}]
   2314         [@option{--ctf-parent=}@var{section}]
   2315         [@option{--no-recurse-limit}|@option{--recurse-limit}]
   2316         [@option{--special-syms}]
   2317         [@option{--prefix=}@var{prefix}]
   2318         [@option{--prefix-strip=}@var{level}]
   2319         [@option{--insn-width=}@var{width}]
   2320         [@option{--visualize-jumps[=color|=extended-color|=off]}
   2321         [@option{--disassembler-color=[off|terminal|on|extended]}
   2322         [@option{-U} @var{method}] [@option{--unicode=}@var{method}]
   2323         [@option{-V}|@option{--version}]
   2324         [@option{-H}|@option{--help}]
   2325         @var{objfile}@dots{}
   2326 @c man end
   2327 @end smallexample
   2328 
   2329 @c man begin DESCRIPTION objdump
   2330 
   2331 @command{objdump} displays information about one or more object files.
   2332 The options control what particular information to display.  This
   2333 information is mostly useful to programmers who are working on the
   2334 compilation tools, as opposed to programmers who just want their
   2335 program to compile and work.
   2336 
   2337 @var{objfile}@dots{} are the object files to be examined.  When you
   2338 specify archives, @command{objdump} shows information on each of the member
   2339 object files.
   2340 
   2341 @c man end
   2342 
   2343 @c man begin OPTIONS objdump
   2344 
   2345 The long and short forms of options, shown here as alternatives, are
   2346 equivalent.  At least one option from the list
   2347 @option{-a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-P,-r,-R,-s,-S,-t,-T,-V,-x} must be given.
   2348 
   2349 @table @env
   2350 @item -a
   2351 @itemx --archive-header
   2352 @cindex archive headers
   2353 If any of the @var{objfile} files are archives, display the archive
   2354 header information (in a format similar to @samp{ls -l}).  Besides the
   2355 information you could list with @samp{ar tv}, @samp{objdump -a} shows
   2356 the object file format of each archive member.
   2357 
   2358 @item --adjust-vma=@var{offset}
   2359 @cindex section addresses in objdump
   2360 @cindex VMA in objdump
   2361 When dumping information, first add @var{offset} to all the section
   2362 addresses.  This is useful if the section addresses do not correspond to
   2363 the symbol table, which can happen when putting sections at particular
   2364 addresses when using a format which can not represent section addresses,
   2365 such as a.out.
   2366 
   2367 @item -b @var{bfdname}
   2368 @itemx --target=@var{bfdname}
   2369 @cindex object code format
   2370 Specify that the object-code format for the object files is
   2371 @var{bfdname}.  This option may not be necessary; @var{objdump} can
   2372 automatically recognize many formats.
   2373 
   2374 For example,
   2375 @example
   2376 objdump -b oasys -m vax -h fu.o
   2377 @end example
   2378 @noindent
   2379 displays summary information from the section headers (@option{-h}) of
   2380 @file{fu.o}, which is explicitly identified (@option{-m}) as a VAX object
   2381 file in the format produced by Oasys compilers.  You can list the
   2382 formats available with the @option{-i} option.
   2383 @xref{Target Selection}, for more information.
   2384 
   2385 @item -C
   2386 @itemx --demangle[=@var{style}]
   2387 @cindex demangling in objdump
   2388 Decode (@dfn{demangle}) low-level symbol names into user-level names.
   2389 Besides removing any initial underscore prepended by the system, this
   2390 makes C++ function names readable.  Different compilers have different
   2391 mangling styles. The optional demangling style argument can be used to
   2392 choose an appropriate demangling style for your compiler. @xref{c++filt},
   2393 for more information on demangling.
   2394 
   2395 @item --recurse-limit
   2396 @itemx --no-recurse-limit
   2397 @itemx --recursion-limit
   2398 @itemx --no-recursion-limit
   2399 Enables or disables a limit on the amount of recursion performed
   2400 whilst demangling strings.  Since the name mangling formats allow for
   2401 an infinite level of recursion it is possible to create strings whose
   2402 decoding will exhaust the amount of stack space available on the host
   2403 machine, triggering a memory fault.  The limit tries to prevent this
   2404 from happening by restricting recursion to 2048 levels of nesting.
   2405 
   2406 The default is for this limit to be enabled, but disabling it may be
   2407 necessary in order to demangle truly complicated names.  Note however
   2408 that if the recursion limit is disabled then stack exhaustion is
   2409 possible and any bug reports about such an event will be rejected.
   2410 
   2411 @item -g
   2412 @itemx --debugging
   2413 Display debugging information.  This attempts to parse STABS
   2414 debugging format information stored in the file and print it out using
   2415 a C like syntax.  If no STABS debugging was found this option
   2416 falls back on the @option{-W} option to print any DWARF information in
   2417 the file.
   2418 
   2419 @item -e
   2420 @itemx --debugging-tags
   2421 Like @option{-g}, but the information is generated in a format compatible
   2422 with ctags tool.
   2423 
   2424 @item -d
   2425 @itemx --disassemble
   2426 @itemx --disassemble=@var{symbol}
   2427 @cindex disassembling object code
   2428 @cindex machine instructions
   2429 Display the assembler mnemonics for the machine instructions from the
   2430 input file.  This option only disassembles those sections which are 
   2431 expected to contain instructions.  If the optional @var{symbol}
   2432 argument is given (perhaps multiple times), then display the assembler
   2433 mnemonics starting at (all the) @var{symbol}.  If @var{symbol} is a
   2434 function name then disassembly will stop at the end of the function,
   2435 otherwise it will stop when the next symbol is encountered.  If there
   2436 are no matches for any @var{symbol} then nothing will be displayed.
   2437 
   2438 Note if the @option{--dwarf=follow-links} option is enabled
   2439 then any symbol tables in linked debug info files will be read in and
   2440 used when disassembling.
   2441 
   2442 @item -D
   2443 @itemx --disassemble-all
   2444 Like @option{-d}, but disassemble the contents of all non-empty
   2445 non-bss sections, not just those expected to contain instructions.
   2446 @option{-j} may be used to select specific sections.
   2447 
   2448 This option also has a subtle effect on the disassembly of
   2449 instructions in code sections.  When option @option{-d} is in effect
   2450 objdump will assume that any symbols present in a code section occur
   2451 on the boundary between instructions and it will refuse to disassemble
   2452 across such a boundary.  When option @option{-D} is in effect however
   2453 this assumption is supressed.  This means that it is possible for the
   2454 output of @option{-d} and @option{-D} to differ if, for example, data
   2455 is stored in code sections.
   2456 
   2457 If the target is an ARM architecture this switch also has the effect
   2458 of forcing the disassembler to decode pieces of data found in code
   2459 sections as if they were instructions.
   2460 
   2461 Note if the @option{--dwarf=follow-links} option is enabled
   2462 then any symbol tables in linked debug info files will be read in and
   2463 used when disassembling.
   2464 
   2465 @item --no-addresses
   2466 When disassembling, don't print addresses on each line or for symbols
   2467 and relocation offsets.  In combination with @option{--no-show-raw-insn}
   2468 this may be useful for comparing compiler output.
   2469 
   2470 @item --prefix-addresses
   2471 When disassembling, print the complete address on each line.  This is
   2472 the older disassembly format.
   2473 
   2474 @item -EB
   2475 @itemx -EL
   2476 @itemx --endian=@{big|little@}
   2477 @cindex endianness
   2478 @cindex disassembly endianness
   2479 Specify the endianness of the object files.  This only affects
   2480 disassembly.  This can be useful when disassembling a file format which
   2481 does not describe endianness information, such as S-records.
   2482 
   2483 @item -f
   2484 @itemx --file-headers
   2485 @cindex object file header
   2486 Display summary information from the overall header of
   2487 each of the @var{objfile} files.
   2488 
   2489 @item -F
   2490 @itemx --file-offsets
   2491 @cindex object file offsets
   2492 When disassembling sections, whenever a symbol is displayed, also
   2493 display the file offset of the region of data that is about to be
   2494 dumped.  If zeroes are being skipped, then when disassembly resumes,
   2495 tell the user how many zeroes were skipped and the file offset of the
   2496 location from where the disassembly resumes.  When dumping sections,
   2497 display the file offset of the location from where the dump starts.
   2498 
   2499 @item --file-start-context
   2500 @cindex source code context
   2501 Specify that when displaying interlisted source code/disassembly
   2502 (assumes @option{-S}) from a file that has not yet been displayed, extend the
   2503 context to the start of the file.
   2504 
   2505 @item -h
   2506 @itemx --section-headers
   2507 @itemx --headers
   2508 @cindex section headers
   2509 Display summary information from the section headers of the
   2510 object file.
   2511 
   2512 File segments may be relocated to nonstandard addresses, for example by
   2513 using the @option{-Ttext}, @option{-Tdata}, or @option{-Tbss} options to
   2514 @command{ld}.  However, some object file formats, such as a.out, do not
   2515 store the starting address of the file segments.  In those situations,
   2516 although @command{ld} relocates the sections correctly, using @samp{objdump
   2517 -h} to list the file section headers cannot show the correct addresses.
   2518 Instead, it shows the usual addresses, which are implicit for the
   2519 target.
   2520 
   2521 Note, in some cases it is possible for a section to have both the
   2522 READONLY and the NOREAD attributes set.  In such cases the NOREAD
   2523 attribute takes precedence, but @command{objdump} will report both
   2524 since the exact setting of the flag bits might be important.
   2525 
   2526 @item -H
   2527 @itemx --help
   2528 Print a summary of the options to @command{objdump} and exit.
   2529 
   2530 @item -i
   2531 @itemx --info
   2532 @cindex architectures available
   2533 @cindex object formats available
   2534 Display a list showing all architectures and object formats available
   2535 for specification with @option{-b} or @option{-m}.
   2536 
   2537 @item -j @var{name}
   2538 @itemx --section=@var{name}
   2539 @cindex section information
   2540 Display information for section @var{name}.  This option may be
   2541 specified multiple times.
   2542 
   2543 @item -L
   2544 @itemx --process-links
   2545 Display the contents of non-debug sections found in separate debuginfo
   2546 files that are linked to the main file.  This option automatically
   2547 implies the @option{-WK} option, and only sections requested by other
   2548 command line options will be displayed.
   2549 
   2550 @item -l
   2551 @itemx --line-numbers
   2552 @cindex source filenames for object files
   2553 Label the display (using debugging information) with the filename and
   2554 source line numbers corresponding to the object code or relocs shown.
   2555 Only useful with @option{-d}, @option{-D}, or @option{-r}.
   2556 
   2557 @item -m @var{machine}
   2558 @itemx --architecture=@var{machine}
   2559 @cindex architecture
   2560 @cindex disassembly architecture
   2561 Specify the architecture to use when disassembling object files.  This
   2562 can be useful when disassembling object files which do not describe
   2563 architecture information, such as S-records.  You can list the available
   2564 architectures with the @option{-i} option.
   2565 
   2566 For most architectures it is possible to supply an architecture
   2567 name and a machine name, separated by a colon.  For example
   2568 @samp{foo:bar} would refer to the @samp{bar} machine type in the
   2569 @samp{foo} architecture.  This can be helpful if objdump has been
   2570 configured to support multiple architectures.
   2571 
   2572 If the target is an ARM architecture then this switch has an
   2573 additional effect.  It restricts the disassembly to only those
   2574 instructions supported by the architecture specified by @var{machine}.
   2575 If it is necessary to use this switch because the input file does not
   2576 contain any architecture information, but it is also desired to
   2577 disassemble all the instructions use @option{-marm}.
   2578 
   2579 @item -M @var{options}
   2580 @itemx --disassembler-options=@var{options}
   2581 Pass target specific information to the disassembler.  Only supported on
   2582 some targets.  If it is necessary to specify more than one
   2583 disassembler option then multiple @option{-M} options can be used or
   2584 can be placed together into a comma separated list.
   2585 
   2586 For ARC, @option{dsp} controls the printing of DSP instructions,
   2587 @option{spfp} selects the printing of FPX single precision FP
   2588 instructions, @option{dpfp} selects the printing of FPX double
   2589 precision FP instructions, @option{quarkse_em} selects the printing of
   2590 special QuarkSE-EM instructions, @option{fpuda} selects the printing
   2591 of double precision assist instructions, @option{fpus} selects the
   2592 printing of FPU single precision FP instructions, while @option{fpud}
   2593 selects the printing of FPU double precision FP instructions.
   2594 Additionally, one can choose to have all the immediates printed in
   2595 hexadecimal using @option{hex}.  By default, the short immediates are
   2596 printed using the decimal representation, while the long immediate
   2597 values are printed as hexadecimal.
   2598 
   2599 @option{cpu=...} allows one to enforce a particular ISA when disassembling
   2600 instructions, overriding the @option{-m} value or whatever is in the ELF file.
   2601 This might be useful to select ARC EM or HS ISA, because architecture is same
   2602 for those and disassembler relies on private ELF header data to decide if code
   2603 is for EM or HS.  This option might be specified multiple times - only the
   2604 latest value will be used.  Valid values are same as for the assembler
   2605 @option{-mcpu=...} option.
   2606 
   2607 If the target is an ARM architecture then this switch can be used to
   2608 select which register name set is used during disassembler.  Specifying
   2609 @option{-M reg-names-std} (the default) will select the register names as
   2610 used in ARM's instruction set documentation, but with register 13 called
   2611 'sp', register 14 called 'lr' and register 15 called 'pc'.  Specifying
   2612 @option{-M reg-names-apcs} will select the name set used by the ARM
   2613 Procedure Call Standard, whilst specifying @option{-M reg-names-raw} will
   2614 just use @samp{r} followed by the register number.
   2615 
   2616 There are also two variants on the APCS register naming scheme enabled
   2617 by @option{-M reg-names-atpcs} and @option{-M reg-names-special-atpcs} which
   2618 use the ARM/Thumb Procedure Call Standard naming conventions.  (Either
   2619 with the normal register names or the special register names).
   2620 
   2621 This option can also be used for ARM architectures to force the
   2622 disassembler to interpret all instructions as Thumb instructions by
   2623 using the switch @option{--disassembler-options=force-thumb}.  This can be
   2624 useful when attempting to disassemble thumb code produced by other
   2625 compilers.
   2626 
   2627 For AArch64 targets this switch can be used to set whether instructions are
   2628 disassembled as the most general instruction using the @option{-M no-aliases}
   2629 option or whether instruction notes should be generated as comments in the
   2630 disasssembly using @option{-M notes}.
   2631 
   2632 For the x86, some of the options duplicate functions of the @option{-m}
   2633 switch, but allow finer grained control.
   2634 @table @code
   2635 @item x86-64
   2636 @itemx i386
   2637 @itemx i8086
   2638 Select disassembly for the given architecture.
   2639 
   2640 @item intel
   2641 @itemx att
   2642 Select between intel syntax mode and AT&T syntax mode.
   2643 
   2644 @item amd64
   2645 @itemx intel64
   2646 Select between AMD64 ISA and Intel64 ISA.
   2647 
   2648 @item intel-mnemonic
   2649 @itemx att-mnemonic
   2650 Select between intel mnemonic mode and AT&T mnemonic mode.
   2651 Note: @code{intel-mnemonic} implies @code{intel} and
   2652 @code{att-mnemonic} implies @code{att}.
   2653 
   2654 @item addr64
   2655 @itemx addr32
   2656 @itemx addr16
   2657 @itemx data32
   2658 @itemx data16
   2659 Specify the default address size and operand size.  These five options
   2660 will be overridden if @code{x86-64}, @code{i386} or @code{i8086}
   2661 appear later in the option string.
   2662 
   2663 @item suffix
   2664 When in AT&T mode and also for a limited set of instructions when in Intel
   2665 mode, instructs the disassembler to print a mnemonic suffix even when the
   2666 suffix could be inferred by the operands or, for certain instructions, the
   2667 execution mode's defaults.
   2668 @end table
   2669 
   2670 For PowerPC, the @option{-M} argument @option{raw} selects
   2671 disasssembly of hardware insns rather than aliases.  For example, you
   2672 will see @code{rlwinm} rather than @code{clrlwi}, and @code{addi}
   2673 rather than @code{li}.  All of the @option{-m} arguments for
   2674 @command{gas} that select a CPU are supported.  These are:
   2675 @option{403}, @option{405}, @option{440}, @option{464}, @option{476},
   2676 @option{601}, @option{603}, @option{604}, @option{620}, @option{7400},
   2677 @option{7410}, @option{7450}, @option{7455}, @option{750cl},
   2678 @option{821}, @option{850}, @option{860}, @option{a2}, @option{booke},
   2679 @option{booke32}, @option{cell}, @option{com}, @option{e200z2}, @option{e200z4},
   2680 @option{e300}, @option{e500}, @option{e500mc}, @option{e500mc64},
   2681 @option{e500x2}, @option{e5500}, @option{e6500}, @option{efs},
   2682 @option{power4}, @option{power5}, @option{power6}, @option{power7},
   2683 @option{power8}, @option{power9}, @option{power10}, @option{power11},
   2684 @option{ppc}, @option{ppc32}, @option{ppc64}, @option{ppc64bridge},
   2685 @option{ppcps}, @option{pwr}, @option{pwr2}, @option{pwr4}, @option{pwr5},
   2686 @option{pwr5x}, @option{pwr6}, @option{pwr7}, @option{pwr8}, @option{pwr9},
   2687 @option{pwr10}, @option{pwr11}, @option{pwrx}, @option{titan}, @option{vle},
   2688 and @option{future}.
   2689 @option{32} and @option{64} modify the default or a prior CPU
   2690 selection, disabling and enabling 64-bit insns respectively.  In
   2691 addition, @option{altivec}, @option{any}, @option{lsp}, @option{htm},
   2692 @option{vsx}, @option{spe} and  @option{spe2} add capabilities to a
   2693 previous @emph{or later} CPU selection.
   2694 @option{any} will disassemble any opcode known to
   2695 binutils, but in cases where an opcode has two different meanings or
   2696 different arguments, you may not see the disassembly you expect.
   2697 If you disassemble without giving a CPU selection, a default will be
   2698 chosen from information gleaned by BFD from the object files headers,
   2699 but the result again may not be as you expect.
   2700 
   2701 For RISC-V, the following options are supported:
   2702 
   2703 @table @code
   2704 @item max
   2705 Disassemble without checking architecture string. This is a best effort mode, so
   2706 for overlapping ISA extensions the first match (possibly incorrect in a given
   2707 context) will be used to decode the instruction. It's useful, if the ELF file
   2708 doesn't expose ISA string, preventing automatic ISA subset deduction, and the
   2709 default fallback ISA string (@code{rv64gc}) doesn't cover all instructions in
   2710 the binary.
   2711 
   2712 @item numeric
   2713 Print numeric register names, rather than ABI names (e.g., print @code{x2}
   2714 instead of @code{sp}).
   2715 
   2716 @item no-aliases
   2717 Disassemble only into canonical instructions. For example, compressed
   2718 instructions will be represented as such (@code{addi sp,sp,-128} will be
   2719 @code{c.addi16sp sp,-128}).
   2720 
   2721 @item priv-spec=@var{SPEC}
   2722 Print the CSR according to the chosen privilege spec version (e.g.,
   2723 @code{1.10}, @code{1.11}, @code{1.12}, @code{1.13}).
   2724 @end table
   2725 
   2726 For MIPS, this option controls the printing of instruction mnemonic
   2727 names and register names in disassembled instructions.  Multiple
   2728 selections from the following may be specified as a comma separated
   2729 string, and invalid options are ignored:
   2730 
   2731 @table @code
   2732 @item no-aliases
   2733 Print the 'raw' instruction mnemonic instead of some pseudo
   2734 instruction mnemonic.  I.e., print 'daddu' or 'or' instead of 'move',
   2735 'sll' instead of 'nop', etc.
   2736 
   2737 @item msa
   2738 Disassemble MSA instructions.
   2739 
   2740 @item virt
   2741 Disassemble the virtualization ASE instructions.
   2742 
   2743 @item xpa
   2744 Disassemble the eXtended Physical Address (XPA) ASE instructions.
   2745 
   2746 @item gpr-names=@var{ABI}
   2747 Print GPR (general-purpose register) names as appropriate
   2748 for the specified ABI.  By default, GPR names are selected according to
   2749 the ABI of the binary being disassembled.
   2750 
   2751 @item fpr-names=@var{ABI}
   2752 Print FPR (floating-point register) names as
   2753 appropriate for the specified ABI.  By default, FPR numbers are printed
   2754 rather than names.
   2755 
   2756 @item cp0-names=@var{ARCH}
   2757 Print CP0 (system control coprocessor; coprocessor 0) register names
   2758 as appropriate for the CPU or architecture specified by
   2759 @var{ARCH}.  By default, CP0 register names are selected according to
   2760 the architecture and CPU of the binary being disassembled.
   2761 
   2762 @item hwr-names=@var{ARCH}
   2763 Print HWR (hardware register, used by the @code{rdhwr} instruction) names
   2764 as appropriate for the CPU or architecture specified by
   2765 @var{ARCH}.  By default, HWR names are selected according to
   2766 the architecture and CPU of the binary being disassembled.
   2767 
   2768 @item reg-names=@var{ABI}
   2769 Print GPR and FPR names as appropriate for the selected ABI.
   2770 
   2771 @item reg-names=@var{ARCH}
   2772 Print CPU-specific register names (CP0 register and HWR names)
   2773 as appropriate for the selected CPU or architecture.
   2774 @end table
   2775 
   2776 For any of the options listed above, @var{ABI} or
   2777 @var{ARCH} may be specified as @samp{numeric} to have numbers printed
   2778 rather than names, for the selected types of registers.
   2779 You can list the available values of @var{ABI} and @var{ARCH} using
   2780 the @option{--help} option.
   2781 
   2782 For VAX, you can specify function entry addresses with @option{-M
   2783 entry:0xf00ba}.  You can use this multiple times to properly
   2784 disassemble VAX binary files that don't contain symbol tables (like
   2785 ROM dumps).  In these cases, the function entry mask would otherwise
   2786 be decoded as VAX instructions, which would probably lead the rest
   2787 of the function being wrongly disassembled.
   2788 
   2789 @item -p
   2790 @itemx --private-headers
   2791 Print information that is specific to the object file format.  The exact
   2792 information printed depends upon the object file format.  For some
   2793 object file formats, no additional information is printed.
   2794 
   2795 @item -P @var{options}
   2796 @itemx --private=@var{options}
   2797 Print information that is specific to the object file format.  The
   2798 argument @var{options} is a comma separated list that depends on the
   2799 format (the lists of options is displayed with the help).
   2800 
   2801 For XCOFF, the available options are:
   2802 @table @code
   2803 @item header
   2804 @item aout
   2805 @item sections
   2806 @item syms
   2807 @item relocs
   2808 @item lineno,
   2809 @item loader
   2810 @item except
   2811 @item typchk
   2812 @item traceback
   2813 @item toc
   2814 @item ldinfo
   2815 @end table
   2816 
   2817 For PE, the available options are:
   2818 @table @code
   2819 @item header
   2820 @item sections
   2821 @end table
   2822 
   2823 Not all object formats support this option.  In particular the ELF
   2824 format does not use it.
   2825 
   2826 @item -r
   2827 @itemx --reloc
   2828 @cindex relocation entries, in object file
   2829 Print the relocation entries of the file.  If used with @option{-d} or
   2830 @option{-D}, the relocations are printed interspersed with the
   2831 disassembly.
   2832 
   2833 @item -R
   2834 @itemx --dynamic-reloc
   2835 @cindex dynamic relocation entries, in object file
   2836 Print the dynamic relocation entries of the file.  This is only
   2837 meaningful for dynamic objects, such as certain types of shared
   2838 libraries.  As for @option{-r}, if used with @option{-d} or
   2839 @option{-D}, the relocations are printed interspersed with the
   2840 disassembly.
   2841 
   2842 Note: @command{objdump} does not support displaying RELR type
   2843 relocations.  These can be displayed by the @command{readelf} program.
   2844 
   2845 @item -s
   2846 @itemx --full-contents
   2847 @cindex sections, full contents
   2848 @cindex object file sections
   2849 Display the full contents of sections, often used in combination with
   2850 @option{-j} to request specific sections.  By default all non-empty
   2851 non-bss sections are displayed.  By default any compressed section
   2852 will be displayed in its compressed form.  In order to see the
   2853 contents in a decompressed form add the @option{-Z} option to the
   2854 command line.
   2855 
   2856 @item -S
   2857 @itemx --source
   2858 @cindex source disassembly
   2859 @cindex disassembly, with source
   2860 Display source code intermixed with disassembly, if possible.  Implies
   2861 @option{-d}.
   2862 
   2863 @item --show-all-symbols
   2864 When disassembling, show all the symbols that match a given address,
   2865 not just the first one.
   2866 
   2867 @item --source-comment[=@var{txt}]
   2868 @cindex source disassembly
   2869 @cindex disassembly, with source
   2870 Like the @option{-S} option, but all source code lines are displayed
   2871 with a prefix of @var{txt}.  Typically @var{txt} will be a comment
   2872 string which can be used to distinguish the assembler code from the
   2873 source code.  If @var{txt} is not provided then a default string of
   2874 @var{``# ``} (hash followed by a space), will be used.
   2875 
   2876 @item --prefix=@var{prefix}
   2877 @cindex Add prefix to absolute paths
   2878 Specify @var{prefix} to add to the absolute paths when used with
   2879 @option{-S}.
   2880 
   2881 @item --prefix-strip=@var{level}
   2882 @cindex Strip absolute paths
   2883 Indicate how many initial directory names to strip off the hardwired
   2884 absolute paths. It has no effect without @option{--prefix=}@var{prefix}.
   2885 
   2886 @item --show-raw-insn
   2887 When disassembling instructions, print the instruction in hex as well as
   2888 in symbolic form.  This is the default except when
   2889 @option{--prefix-addresses} is used.
   2890 
   2891 @item --no-show-raw-insn
   2892 When disassembling instructions, do not print the instruction bytes.
   2893 This is the default when @option{--prefix-addresses} is used.
   2894 
   2895 @item --insn-width=@var{width}
   2896 @cindex Instruction width
   2897 Display @var{width} bytes on a single line when disassembling
   2898 instructions.
   2899 
   2900 @item --visualize-jumps[=color|=extended-color|=off]
   2901 Visualize jumps that stay inside a function by drawing ASCII art between
   2902 the start and target addresses.  The optional @option{=color} argument
   2903 adds color to the output using simple terminal colors.  Alternatively
   2904 the @option{=extended-color} argument will add color using 8bit
   2905 colors, but these might not work on all terminals.
   2906 
   2907 If it is necessary to disable the @option{visualize-jumps} option
   2908 after it has previously been enabled then use
   2909 @option{visualize-jumps=off}.
   2910 
   2911 @item --disassembler-color=off
   2912 @itemx --disassembler-color=terminal
   2913 @itemx --disassembler-color=on|color|colour
   2914 @itemx --disassembler-color=extended|extended-color|extended-colour
   2915 Enables or disables the use of colored syntax highlighting in
   2916 disassembly output.  The default behaviour is determined via a
   2917 configure time option.  Note, not all architectures support colored
   2918 syntax highlighting, and depending upon the terminal used, colored
   2919 output may not actually be legible.
   2920 
   2921 The @option{on} argument adds colors using simple terminal colors.
   2922 
   2923 The @option{terminal} argument does the same, but only if the output
   2924 device is a terminal.
   2925 
   2926 The @option{extended-color} argument is similar to the @option{on}
   2927 argument, but it uses 8-bit colors.  These may not work on all
   2928 terminals.
   2929 
   2930 The @option{off} argument disables colored disassembly.
   2931 
   2932 @item -W[lLiaprmfFsoORtUuTgAckK]
   2933 @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]
   2934 @include debug.options.texi
   2935 
   2936 @item --dwarf-check
   2937 Enable additional checks for consistency of Dwarf information.
   2938 
   2939 @include ctf.options.texi
   2940 
   2941 @include sframe.options.texi
   2942 
   2943 @item -G
   2944 @itemx --stabs
   2945 @cindex stab
   2946 @cindex .stab
   2947 @cindex debug symbols
   2948 @cindex ELF object file format
   2949 Display the full contents of any sections requested.  Display the
   2950 contents of the .stab and .stab.index and .stab.excl sections from an
   2951 ELF file.  This is only useful on systems (such as Solaris 2.0) in which
   2952 @code{.stab} debugging symbol-table entries are carried in an ELF
   2953 section.  In most other file formats, debugging symbol-table entries are
   2954 interleaved with linkage symbols, and are visible in the @option{--syms}
   2955 output.
   2956 
   2957 @item --start-address=@var{address}
   2958 @cindex start-address
   2959 Start displaying data at the specified address.  This affects the output
   2960 of the @option{-d}, @option{-r} and @option{-s} options.
   2961 
   2962 @item --stop-address=@var{address}
   2963 @cindex stop-address
   2964 Stop displaying data at the specified address.  This affects the output
   2965 of the @option{-d}, @option{-r} and @option{-s} options.
   2966 
   2967 @item -t
   2968 @itemx --syms
   2969 @cindex symbol table entries, printing
   2970 Print the symbol table entries of the file.
   2971 This is similar to the information provided by the @samp{nm} program,
   2972 although the display format is different.  The format of the output
   2973 depends upon the format of the file being dumped, but there are two main
   2974 types.  One looks like this:
   2975 
   2976 @smallexample
   2977 [  4](sec  3)(fl 0x00)(ty   0)(scl   3) (nx 1) 0x00000000 .bss
   2978 [  6](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 fred
   2979 @end smallexample
   2980 
   2981 where the number inside the square brackets is the number of the entry
   2982 in the symbol table, the @var{sec} number is the section number, the
   2983 @var{fl} value are the symbol's flag bits, the @var{ty} number is the
   2984 symbol's type, the @var{scl} number is the symbol's storage class and
   2985 the @var{nx} value is the number of auxiliary entries associated with
   2986 the symbol.  The last two fields are the symbol's value and its name.
   2987 
   2988 The other common output format, usually seen with ELF based files,
   2989 looks like this:
   2990 
   2991 @smallexample
   2992 00000000 l    d  .bss   00000000 .bss
   2993 00000000 g       .text  00000000 fred
   2994 @end smallexample
   2995 
   2996 Here the first number is the symbol's value (sometimes referred to as
   2997 its address).  The next field is actually a set of characters and
   2998 spaces indicating the flag bits that are set on the symbol.  These
   2999 characters are described below.  Next is the section with which the
   3000 symbol is associated or @emph{*ABS*} if the section is absolute (ie
   3001 not connected with any section), or @emph{*UND*} if the section is
   3002 referenced in the file being dumped, but not defined there.
   3003 
   3004 After the section name comes another field, a number, which for common
   3005 symbols is the alignment and for other symbol is the size.  Finally
   3006 the symbol's name is displayed.
   3007 
   3008 The flag characters are divided into 7 groups as follows:
   3009 @table @code
   3010 @item l
   3011 @itemx g
   3012 @itemx u
   3013 @itemx !
   3014 The symbol is a local (l), global (g), unique global (u), neither
   3015 global nor local (a space) or both global and local (!).  A
   3016 symbol can be neither local or global for a variety of reasons, e.g.,
   3017 because it is used for debugging, but it is probably an indication of
   3018 a bug if it is ever both local and global.  Unique global symbols are
   3019 a GNU extension to the standard set of ELF symbol bindings.  For such
   3020 a symbol the dynamic linker will make sure that in the entire process
   3021 there is just one symbol with this name and type in use.
   3022 
   3023 @item w
   3024 The symbol is weak (w) or strong (a space).
   3025 
   3026 @item C
   3027 The symbol denotes a constructor (C) or an ordinary symbol (a space).
   3028 
   3029 @item W
   3030 The symbol is a warning (W) or a normal symbol (a space).  A warning
   3031 symbol's name is a message to be displayed if the symbol following the
   3032 warning symbol is ever referenced.
   3033 
   3034 @item I
   3035 @item i
   3036 The symbol is an indirect reference to another symbol (I), a function
   3037 to be evaluated during reloc processing (i) or a normal symbol (a
   3038 space).
   3039 
   3040 @item d
   3041 @itemx D
   3042 The symbol is a debugging symbol (d) or a dynamic symbol (D) or a
   3043 normal symbol (a space).
   3044 
   3045 @item F
   3046 @item f
   3047 @item O
   3048 The symbol is the name of a function (F) or a file (f) or an object
   3049 (O) or just a normal symbol (a space).
   3050 @end table
   3051 
   3052 @item -T
   3053 @itemx --dynamic-syms
   3054 @cindex dynamic symbol table entries, printing
   3055 Print the dynamic symbol table entries of the file.  This is only
   3056 meaningful for dynamic objects, such as certain types of shared
   3057 libraries.  This is similar to the information provided by the @samp{nm}
   3058 program when given the @option{-D} (@option{--dynamic}) option.
   3059 
   3060 The output format is similar to that produced by the @option{--syms}
   3061 option, except that an extra field is inserted before the symbol's
   3062 name, giving the version information associated with the symbol.
   3063 If the version is the default version to be used when resolving
   3064 unversioned references to the symbol then it's displayed as is,
   3065 otherwise it's put into parentheses.
   3066 
   3067 @item --special-syms
   3068 When displaying symbols include those which the target considers to be
   3069 special in some way and which would not normally be of interest to the
   3070 user.
   3071 
   3072 @item -U @var{[d|i|l|e|x|h]}
   3073 @itemx --unicode=@var{[default|invalid|locale|escape|hex|highlight]}
   3074 Controls the display of UTF-8 encoded multibyte characters in strings.
   3075 The default (@option{--unicode=default}) is to give them no special
   3076 treatment.  The @option{--unicode=locale} option displays the sequence
   3077 in the current locale, which may or may not support them.  The options
   3078 @option{--unicode=hex} and @option{--unicode=invalid} display them as
   3079 hex byte sequences enclosed by either angle brackets or curly braces.
   3080 
   3081 The @option{--unicode=escape} option displays them as escape sequences
   3082 (@var{\uxxxx}) and the @option{--unicode=highlight} option displays
   3083 them as escape sequences highlighted in red (if supported by the
   3084 output device).  The colouring is intended to draw attention to the
   3085 presence of unicode sequences where they might not be expected.
   3086 
   3087 @item -V
   3088 @itemx --version
   3089 Print the version number of @command{objdump} and exit.
   3090 
   3091 @item -x
   3092 @itemx --all-headers
   3093 @cindex all header information, object file
   3094 @cindex header information, all
   3095 Display all available header information, including the symbol table and
   3096 relocation entries.  Using @option{-x} is equivalent to specifying all of
   3097 @option{-a -f -h -p -r -t}.
   3098 
   3099 @item -w
   3100 @itemx --wide
   3101 @cindex wide output, printing
   3102 Format some lines for output devices that have more than 80 columns.
   3103 Also do not truncate symbol names when they are displayed.
   3104 
   3105 @item -z
   3106 @itemx --disassemble-zeroes
   3107 Normally the disassembly output will skip blocks of zeroes.  This
   3108 option directs the disassembler to disassemble those blocks, just like
   3109 any other data.
   3110 
   3111 @item -Z
   3112 @itemx --decompress
   3113 @cindex sections, full contents
   3114 @cindex object file sections
   3115 @cindex compressed section contents
   3116 The @option{-Z} option is meant to be used in conunction with the
   3117 @option{-s} option.  It instructs @command{objdump} to decompress any
   3118 compressed sections before displaying their contents.
   3119 @end table
   3120 
   3121 @c man end
   3122 
   3123 @ignore
   3124 @c man begin SEEALSO objdump
   3125 nm(1), readelf(1), and the Info entries for @file{binutils}.
   3126 @c man end
   3127 @end ignore
   3128 
   3129 @node ranlib
   3130 @chapter ranlib
   3131 
   3132 @kindex ranlib
   3133 @cindex archive contents
   3134 @cindex symbol index
   3135 
   3136 @c man title ranlib generate an index to an archive
   3137 
   3138 @smallexample
   3139 @c man begin SYNOPSIS ranlib
   3140 ranlib [@option{--plugin} @var{name}] [@option{-DhHvVt}] @var{archive}
   3141 @c man end
   3142 @end smallexample
   3143 
   3144 @c man begin DESCRIPTION ranlib
   3145 
   3146 @command{ranlib} generates an index to the contents of an archive and
   3147 stores it in the archive.  The index lists each symbol defined by a
   3148 member of an archive that is a relocatable object file.
   3149 
   3150 You may use @samp{nm -s} or @samp{nm --print-armap} to list this index.
   3151 
   3152 An archive with such an index speeds up linking to the library and
   3153 allows routines in the library to call each other without regard to
   3154 their placement in the archive.
   3155 
   3156 The @sc{gnu} @command{ranlib} program is another form of @sc{gnu} @command{ar}; running
   3157 @command{ranlib} is completely equivalent to executing @samp{ar -s}.
   3158 @xref{ar}.
   3159 
   3160 @c man end
   3161 
   3162 @c man begin OPTIONS ranlib
   3163 
   3164 @table @env
   3165 @item -h
   3166 @itemx -H
   3167 @itemx --help
   3168 Show usage information for @command{ranlib}.
   3169 
   3170 @item -v
   3171 @itemx -V
   3172 @itemx --version
   3173 Show the version number of @command{ranlib}.
   3174 
   3175 @item -D
   3176 @cindex deterministic archives
   3177 @kindex --enable-deterministic-archives
   3178 Operate in @emph{deterministic} mode.  The symbol map archive member's
   3179 header will show zero for the UID, GID, and timestamp.  When this
   3180 option is used, multiple runs will produce identical output files.
   3181 
   3182 If @file{binutils} was configured with
   3183 @option{--enable-deterministic-archives}, then this mode is on by
   3184 default.  It can be disabled with the @samp{-U} option, described
   3185 below.
   3186 
   3187 @item -t
   3188 Update the timestamp of the symbol map of an archive.
   3189 
   3190 @item -U
   3191 @cindex deterministic archives
   3192 @kindex --enable-deterministic-archives
   3193 Do @emph{not} operate in @emph{deterministic} mode.  This is the
   3194 inverse of the @samp{-D} option, above: the archive index will get
   3195 actual UID, GID, timestamp, and file mode values.
   3196 
   3197 If @file{binutils} was configured @emph{without}
   3198 @option{--enable-deterministic-archives}, then this mode is on by
   3199 default.
   3200 
   3201 @end table
   3202 
   3203 @c man end
   3204 
   3205 @ignore
   3206 @c man begin SEEALSO ranlib
   3207 ar(1), nm(1), and the Info entries for @file{binutils}.
   3208 @c man end
   3209 @end ignore
   3210 
   3211 @node size
   3212 @chapter size
   3213 
   3214 @kindex size
   3215 @cindex section sizes
   3216 
   3217 @c man title size list section sizes and total size of binary files
   3218 
   3219 @smallexample
   3220 @c man begin SYNOPSIS size
   3221 size [@option{-A}|@option{-B}|@option{-G}|@option{--format=}@var{compatibility}]
   3222      [@option{--help}]
   3223      [@option{-d}|@option{-o}|@option{-x}|@option{--radix=}@var{number}]
   3224      [@option{--common}]
   3225      [@option{-t}|@option{--totals}]
   3226      [@option{--target=}@var{bfdname}] [@option{-V}|@option{--version}]
   3227      [@option{-f}]
   3228      [@var{objfile}@dots{}]
   3229 @c man end
   3230 @end smallexample
   3231 
   3232 @c man begin DESCRIPTION size
   3233 
   3234 The @sc{gnu} @command{size} utility lists the section sizes and the total
   3235 size for each of the binary files @var{objfile} on its argument list.
   3236 By default, one line of output is generated for each file or each
   3237 module if the file is an archive.
   3238 
   3239 @var{objfile}@dots{} are the files to be examined.  If none are
   3240 specified, the file @code{a.out} will be used instead.
   3241 
   3242 @c man end
   3243 
   3244 @c man begin OPTIONS size
   3245 
   3246 The command-line options have the following meanings:
   3247 
   3248 @table @env
   3249 @item -A
   3250 @itemx -B
   3251 @itemx -G
   3252 @itemx --format=@var{compatibility}
   3253 @cindex @command{size} display format
   3254 Using one of these options, you can choose whether the output from @sc{gnu}
   3255 @command{size} resembles output from System V @command{size} (using @option{-A},
   3256 or @option{--format=sysv}), or Berkeley @command{size} (using @option{-B}, or
   3257 @option{--format=berkeley}).  The default is the one-line format similar to
   3258 Berkeley's.  Alternatively, you can choose the GNU format output
   3259 (using @option{-G}, or @option{--format=gnu}), this is similar to
   3260 Berkeley's output format, but sizes are counted differently.
   3261 @c Bonus for doc-source readers: you can also say --format=strange (or
   3262 @c anything else that starts with 's') for sysv, and --format=boring (or
   3263 @c anything else that starts with 'b') for Berkeley.
   3264 
   3265 Here is an example of the Berkeley (default) format of output from
   3266 @command{size}:
   3267 @smallexample
   3268 $ size --format=Berkeley ranlib size
   3269    text    data     bss     dec     hex filename
   3270  294880   81920   11592  388392   5ed28 ranlib
   3271  294880   81920   11888  388688   5ee50 size
   3272 @end smallexample
   3273 
   3274 The Berkeley style output counts read only data in the @code{text}
   3275 column, not in the @code{data} column, the @code{dec} and @code{hex}
   3276 columns both display the sum of the @code{text}, @code{data}, and
   3277 @code{bss} columns in decimal and hexadecimal respectively.
   3278 
   3279 The GNU format counts read only data in the @code{data} column, not
   3280 the @code{text} column, and only displays the sum of the @code{text},
   3281 @code{data}, and @code{bss} columns once, in the @code{total} column.
   3282 The @option{--radix} option can be used to change the number base for
   3283 all columns.  Here is the same data displayed with GNU conventions:
   3284 
   3285 @smallexample
   3286 $ size --format=GNU ranlib size
   3287       text       data        bss      total filename
   3288     279880      96920      11592     388392 ranlib
   3289     279880      96920      11888     388688 size
   3290 @end smallexample
   3291 
   3292 @noindent
   3293 This is the same data, but displayed closer to System V conventions:
   3294 
   3295 @smallexample
   3296 $ size --format=SysV ranlib size
   3297 ranlib  :
   3298 section         size         addr
   3299 .text         294880         8192
   3300 .data          81920       303104
   3301 .bss           11592       385024
   3302 Total         388392
   3303 
   3304 
   3305 size  :
   3306 section         size         addr
   3307 .text         294880         8192
   3308 .data          81920       303104
   3309 .bss           11888       385024
   3310 Total         388688
   3311 @end smallexample
   3312 
   3313 @item --help
   3314 @itemx -h
   3315 @itemx -H
   3316 @item -?
   3317 Show a summary of acceptable arguments and options.
   3318 
   3319 @item -d
   3320 @itemx -o
   3321 @itemx -x
   3322 @itemx --radix=@var{number}
   3323 @cindex @command{size} number format
   3324 @cindex radix for section sizes
   3325 Using one of these options, you can control whether the size of each
   3326 section is given in decimal (@option{-d}, or @option{--radix=10}); octal
   3327 (@option{-o}, or @option{--radix=8}); or hexadecimal (@option{-x}, or
   3328 @option{--radix=16}).  In @option{--radix=@var{number}}, only the three
   3329 values (8, 10, 16) are supported.  The total size is always given in two
   3330 radices; decimal and hexadecimal for @option{-d} or @option{-x} output, or
   3331 octal and hexadecimal if you're using @option{-o}.
   3332 
   3333 @item --common
   3334 Print total size of common symbols in each file.  When using Berkeley
   3335 or GNU format these are included in the bss size.
   3336 
   3337 @item -t
   3338 @itemx --totals
   3339 Show totals of all objects listed (Berkeley or GNU format mode only).
   3340 
   3341 @item --target=@var{bfdname}
   3342 @cindex object code format
   3343 Specify that the object-code format for @var{objfile} is
   3344 @var{bfdname}.  This option may not be necessary; @command{size} can
   3345 automatically recognize many formats.
   3346 @xref{Target Selection}, for more information.
   3347 
   3348 @item -v
   3349 @item -V
   3350 @itemx --version
   3351 Display the version number of @command{size}.
   3352 
   3353 @item -f
   3354 Ignored.  This option is used by other versions of the @command{size}
   3355 program, but it is not supported by the GNU Binutils version.
   3356 
   3357 @end table
   3358 
   3359 @c man end
   3360 
   3361 @ignore
   3362 @c man begin SEEALSO size
   3363 ar(1), objdump(1), readelf(1), and the Info entries for @file{binutils}.
   3364 @c man end
   3365 @end ignore
   3366 
   3367 @node strings
   3368 @chapter strings
   3369 @kindex strings
   3370 @cindex listings strings
   3371 @cindex printing strings
   3372 @cindex strings, printing
   3373 
   3374 @c man title strings print the sequences of printable characters in files
   3375 
   3376 @smallexample
   3377 @c man begin SYNOPSIS strings
   3378 strings [@option{-afovV}] [@option{-}@var{min-len}]
   3379         [@option{-n} @var{min-len}] [@option{--bytes=}@var{min-len}]
   3380         [@option{-t} @var{radix}] [@option{--radix=}@var{radix}]
   3381         [@option{-e} @var{encoding}] [@option{--encoding=}@var{encoding}]
   3382         [@option{-U} @var{method}] [@option{--unicode=}@var{method}]
   3383         [@option{-}] [@option{--all}] [@option{--print-file-name}]
   3384         [@option{-T} @var{bfdname}] [@option{--target=}@var{bfdname}]
   3385         [@option{-w}] [@option{--include-all-whitespace}]
   3386         [@option{-s}] [@option{--output-separator} @var{sep_string}]
   3387         [@option{--help}] [@option{--version}] @var{file}@dots{}
   3388 @c man end
   3389 @end smallexample
   3390 
   3391 @c man begin DESCRIPTION strings
   3392 
   3393 For each @var{file} given, @sc{gnu} @command{strings} prints the
   3394 printable character sequences that are at least 4 characters long (or
   3395 the number given with the options below) and are followed by an
   3396 unprintable character.
   3397 
   3398 Depending upon how the strings program was configured it will default
   3399 to either displaying all the printable sequences that it can find in
   3400 each file, or only those sequences that are in loadable, initialized
   3401 data sections.  If the file type is unrecognizable, or if strings is
   3402 reading from stdin then it will always display all of the printable
   3403 sequences that it can find.
   3404 
   3405 For backwards compatibility any file that occurs after a command-line
   3406 option of just @option{-} will also be scanned in full, regardless of
   3407 the presence of any @option{-d} option.
   3408 
   3409 @command{strings} is mainly useful for determining the contents of
   3410 non-text files.
   3411 
   3412 @c man end
   3413 
   3414 @c man begin OPTIONS strings
   3415 
   3416 @table @env
   3417 @item -a
   3418 @itemx --all
   3419 @itemx -
   3420 Scan the whole file, regardless of what sections it contains or
   3421 whether those sections are loaded or initialized.  Normally this is
   3422 the default behaviour, but strings can be configured so that the
   3423 @option{-d} is the default instead.
   3424 
   3425 The @option{-} option is position dependent and forces strings to
   3426 perform full scans of any file that is mentioned after the @option{-}
   3427 on the command line, even if the @option{-d} option has been
   3428 specified.
   3429 
   3430 @item -d
   3431 @itemx --data
   3432 Only print strings from initialized, loaded data sections in the
   3433 file.  This may reduce the amount of garbage in the output, but it
   3434 also exposes the strings program to any security flaws that may be
   3435 present in the BFD library used to scan and load sections.  Strings
   3436 can be configured so that this option is the default behaviour.  In
   3437 such cases the @option{-a} option can be used to avoid using the BFD
   3438 library and instead just print all of the strings found in the file.
   3439 
   3440 @item -f
   3441 @itemx --print-file-name
   3442 Print the name of the file before each string.
   3443 
   3444 @item --help
   3445 Print a summary of the program usage on the standard output and exit.
   3446 
   3447 @item -@var{min-len}
   3448 @itemx -n @var{min-len}
   3449 @itemx --bytes=@var{min-len}
   3450 Print sequences of displayable characters that are at least
   3451 @var{min-len} characters long.  If not specified a default minimum
   3452 length of 4 is used.  The distinction between displayable and
   3453 non-displayable characters depends upon the setting of the 
   3454 @option{-e} and @option{-U} options.  Sequences are always terminated
   3455 at control characters such as new-line and carriage-return, but not
   3456 the tab character.
   3457 
   3458 @item -o
   3459 Like @samp{-t o}.  Some other versions of @command{strings} have @option{-o}
   3460 act like @samp{-t d} instead.  Since we can not be compatible with both
   3461 ways, we simply chose one.
   3462 
   3463 @item -t @var{radix}
   3464 @itemx --radix=@var{radix}
   3465 Print the offset within the file before each string.  The single
   3466 character argument specifies the radix of the offset---@samp{o} for
   3467 octal, @samp{x} for hexadecimal, or @samp{d} for decimal.
   3468 
   3469 @item -e @var{encoding}
   3470 @itemx --encoding=@var{encoding}
   3471 Select the character encoding of the strings that are to be found.
   3472 Possible values for @var{encoding} are: @samp{s} = single-7-bit-byte
   3473 characters (default), @samp{S} =
   3474 single-8-bit-byte characters, @samp{b} = 16-bit bigendian, @samp{l} =
   3475 16-bit littleendian, @samp{B} = 32-bit bigendian, @samp{L} = 32-bit
   3476 littleendian.  Useful for finding wide character strings. (@samp{l}
   3477 and @samp{b} apply to, for example, Unicode UTF-16/UCS-2 encodings).
   3478 
   3479 @item -U @var{[d|i|l|e|x|h]}
   3480 @itemx --unicode=@var{[default|invalid|locale|escape|hex|highlight]}
   3481 Controls the display of UTF-8 encoded multibyte characters in strings.
   3482 The default (@option{--unicode=default}) is to give them no special
   3483 treatment, and instead rely upon the setting of the
   3484 @option{--encoding} option.  The other values for this option
   3485 automatically enable @option{--encoding=S}.
   3486 
   3487 The @option{--unicode=invalid} option treats them as non-graphic
   3488 characters and hence not part of a valid string.  All the remaining
   3489 options treat them as valid string characters.
   3490 
   3491 The @option{--unicode=locale} option displays them in the current
   3492 locale, which may or may not support UTF-8 encoding.  The
   3493 @option{--unicode=hex} option displays them as hex byte sequences
   3494 enclosed between @var{<>} characters.  The @option{--unicode=escape}
   3495 option displays them as escape sequences (@var{\uxxxx}) and the
   3496 @option{--unicode=highlight} option displays them as escape sequences
   3497 highlighted in red (if supported by the output device).  The colouring
   3498 is intended to draw attention to the presence of unicode sequences
   3499 where they might not be expected.
   3500 
   3501 @item -T @var{bfdname}
   3502 @itemx --target=@var{bfdname}
   3503 @cindex object code format
   3504 Specify an object code format other than your system's default format.
   3505 @xref{Target Selection}, for more information.
   3506 
   3507 @item -v
   3508 @itemx -V
   3509 @itemx --version
   3510 Print the program version number on the standard output and exit.
   3511 
   3512 @item -w
   3513 @itemx --include-all-whitespace
   3514 By default tab and space characters are included in the strings that
   3515 are displayed, but other whitespace characters, such a newlines and
   3516 carriage returns, are not.  The @option{-w} option changes this so
   3517 that all whitespace characters are considered to be part of a string.
   3518 
   3519 @item -s
   3520 @itemx --output-separator
   3521 By default, output strings are delimited by a new-line. This option
   3522 allows you to supply any string to be used as the output record
   3523 separator.  Useful with --include-all-whitespace where strings
   3524 may contain new-lines internally.
   3525 @end table
   3526 
   3527 @c man end
   3528 
   3529 @ignore
   3530 @c man begin SEEALSO strings
   3531 ar(1), nm(1), objdump(1), ranlib(1), readelf(1)
   3532 and the Info entries for @file{binutils}.
   3533 @c man end
   3534 @end ignore
   3535 
   3536 @node strip
   3537 @chapter strip
   3538 
   3539 @kindex strip
   3540 @cindex removing symbols
   3541 @cindex discarding symbols
   3542 @cindex symbols, discarding
   3543 
   3544 @c man title strip discard symbols and other data from object files
   3545 
   3546 @smallexample
   3547 @c man begin SYNOPSIS strip
   3548 strip [@option{-F} @var{bfdname} |@option{--target=}@var{bfdname}]
   3549       [@option{-I} @var{bfdname} |@option{--input-target=}@var{bfdname}]
   3550       [@option{-O} @var{bfdname} |@option{--output-target=}@var{bfdname}]
   3551       [@option{-s}|@option{--strip-all}]
   3552       [@option{-S}|@option{-g}|@option{-d}|@option{--strip-debug}]
   3553       [@option{--strip-dwo}]
   3554       [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}]
   3555       [@option{-M}|@option{--merge-notes}][@option{--no-merge-notes}]
   3556       [@option{-N} @var{symbolname} |@option{--strip-symbol=}@var{symbolname}]
   3557       [@option{-w}|@option{--wildcard}]
   3558       [@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}]
   3559       [@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}]
   3560       [@option{--keep-section=}@var{sectionpattern}]
   3561       [@option{--remove-relocations=}@var{sectionpattern}]
   3562       [@option{--strip-section-headers}]
   3563       [@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}]
   3564       [@option{-D}|@option{--enable-deterministic-archives}]
   3565       [@option{-U}|@option{--disable-deterministic-archives}]
   3566       [@option{--keep-section-symbols}]
   3567       [@option{--keep-file-symbols}]
   3568       [@option{--only-keep-debug}]
   3569       [@option{--plugin} @var{name}]
   3570       [@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}]
   3571       [@option{--help}] [@option{--info}]
   3572       @var{objfile}@dots{}
   3573 @c man end
   3574 @end smallexample
   3575 
   3576 @c man begin DESCRIPTION strip
   3577 
   3578 @sc{gnu} @command{strip} discards all symbols from object files
   3579 @var{objfile}.  The list of object files may include archives.
   3580 At least one object file must be given.
   3581 
   3582 @command{strip} modifies the files named in its argument,
   3583 rather than writing modified copies under different names.
   3584 
   3585 @c man end
   3586 
   3587 @c man begin OPTIONS strip
   3588 
   3589 @table @env
   3590 @item -F @var{bfdname}
   3591 @itemx --target=@var{bfdname}
   3592 Treat the original @var{objfile} as a file with the object
   3593 code format @var{bfdname}, and rewrite it in the same format.
   3594 @xref{Target Selection}, for more information.
   3595 
   3596 @item --help
   3597 Show a summary of the options to @command{strip} and exit.
   3598 
   3599 @item --info
   3600 Display a list showing all architectures and object formats available.
   3601 
   3602 @item -I @var{bfdname}
   3603 @itemx --input-target=@var{bfdname}
   3604 Treat the original @var{objfile} as a file with the object
   3605 code format @var{bfdname}.
   3606 @xref{Target Selection}, for more information.
   3607 
   3608 @item -O @var{bfdname}
   3609 @itemx --output-target=@var{bfdname}
   3610 Replace @var{objfile} with a file in the output format @var{bfdname}.
   3611 @xref{Target Selection}, for more information.
   3612 
   3613 @item -R @var{sectionname}
   3614 @itemx --remove-section=@var{sectionname}
   3615 Remove any section named @var{sectionname} from the output file, in
   3616 addition to whatever sections would otherwise be removed.  This
   3617 option may be given more than once.  Note that using this option
   3618 inappropriately may make the output file unusable.  The wildcard
   3619 character @samp{*} may be given at the end of @var{sectionname}.  If
   3620 so, then any section starting with @var{sectionname} will be removed.
   3621 
   3622 If the first character of @var{sectionpattern} is the exclamation
   3623 point (!) then matching sections will not be removed even if an
   3624 earlier use of @option{--remove-section} on the same command line
   3625 would otherwise remove it.  For example:
   3626 
   3627 @smallexample
   3628   --remove-section=.text.* --remove-section=!.text.foo
   3629 @end smallexample
   3630 
   3631 will remove all sections matching the pattern '.text.*', but will not
   3632 remove the section '.text.foo'.
   3633 
   3634 @item --keep-section=@var{sectionpattern}
   3635 When removing sections from the output file, keep sections that match
   3636 @var{sectionpattern}.
   3637 
   3638 @item --remove-relocations=@var{sectionpattern}
   3639 Remove relocations from the output file for any section matching
   3640 @var{sectionpattern}.  This option may be given more than once.  Note
   3641 that using this option inappropriately may make the output file
   3642 unusable.  Wildcard characters are accepted in @var{sectionpattern}.
   3643 For example:
   3644 
   3645 @smallexample
   3646   --remove-relocations=.text.*
   3647 @end smallexample
   3648 
   3649 will remove the relocations for all sections matching the patter
   3650 '.text.*'.
   3651 
   3652 If the first character of @var{sectionpattern} is the exclamation
   3653 point (!) then matching sections will not have their relocation
   3654 removed even if an earlier use of @option{--remove-relocations} on the
   3655 same command line would otherwise cause the relocations to be removed.
   3656 For example:
   3657 
   3658 @smallexample
   3659   --remove-relocations=.text.* --remove-relocations=!.text.foo
   3660 @end smallexample
   3661 
   3662 will remove all relocations for sections matching the pattern
   3663 '.text.*', but will not remove relocations for the section
   3664 '.text.foo'.
   3665 
   3666 @item --strip-section-headers
   3667 Strip section headers.  This option is specific to ELF files.  Implies
   3668 @option{--strip-all} and @option{--merge-notes}.
   3669 
   3670 @item -s
   3671 @itemx --strip-all
   3672 Remove all symbols.
   3673 
   3674 @item -g
   3675 @itemx -S
   3676 @itemx -d
   3677 @itemx --strip-debug
   3678 Remove debugging symbols only.
   3679 
   3680 @item --strip-dwo
   3681 Remove the contents of all DWARF .dwo sections, leaving the
   3682 remaining debugging sections and all symbols intact.
   3683 See the description of this option in the @command{objcopy} section
   3684 for more information.
   3685 
   3686 @item --strip-unneeded
   3687 Remove all symbols that are not needed for relocation processing in
   3688 addition to debugging symbols and sections stripped by
   3689 @option{--strip-debug}.
   3690 
   3691 @item -K @var{symbolname}
   3692 @itemx --keep-symbol=@var{symbolname}
   3693 When stripping symbols, keep symbol @var{symbolname} even if it would
   3694 normally be stripped.  This option may be given more than once.
   3695 
   3696 @item -M
   3697 @itemx --merge-notes
   3698 @itemx --no-merge-notes
   3699 For ELF files, attempt (or do not attempt) to reduce the size of any
   3700 SHT_NOTE type sections by removing duplicate notes.  The default is to
   3701 attempt this reduction unless stripping debug or DWO information.
   3702 
   3703 @item -N @var{symbolname}
   3704 @itemx --strip-symbol=@var{symbolname}
   3705 Remove symbol @var{symbolname} from the source file. This option may be
   3706 given more than once, and may be combined with strip options other than
   3707 @option{-K}.
   3708 
   3709 @item -o @var{file}
   3710 Put the stripped output in @var{file}, rather than replacing the
   3711 existing file.  When this argument is used, only one @var{objfile}
   3712 argument may be specified.
   3713 
   3714 @item -p
   3715 @itemx --preserve-dates
   3716 Preserve the access and modification dates of the file.
   3717 
   3718 @item -D
   3719 @itemx --enable-deterministic-archives
   3720 @cindex deterministic archives
   3721 @kindex --enable-deterministic-archives
   3722 Operate in @emph{deterministic} mode.  When copying archive members
   3723 and writing the archive index, use zero for UIDs, GIDs, timestamps,
   3724 and use consistent file modes for all files.
   3725 
   3726 If @file{binutils} was configured with
   3727 @option{--enable-deterministic-archives}, then this mode is on by default.
   3728 It can be disabled with the @samp{-U} option, below.
   3729 
   3730 @item -U
   3731 @itemx --disable-deterministic-archives
   3732 @cindex deterministic archives
   3733 @kindex --enable-deterministic-archives
   3734 Do @emph{not} operate in @emph{deterministic} mode.  This is the
   3735 inverse of the @option{-D} option, above: when copying archive members
   3736 and writing the archive index, use their actual UID, GID, timestamp,
   3737 and file mode values.
   3738 
   3739 This is the default unless @file{binutils} was configured with
   3740 @option{--enable-deterministic-archives}.
   3741 
   3742 @item -w
   3743 @itemx --wildcard
   3744 Permit regular expressions in @var{symbolname}s used in other command
   3745 line options.  The question mark (?), asterisk (*), backslash (\) and
   3746 square brackets ([]) operators can be used anywhere in the symbol
   3747 name.  If the first character of the symbol name is the exclamation
   3748 point (!) then the sense of the switch is reversed for that symbol.
   3749 For example:
   3750 
   3751 @smallexample
   3752   -w -K !foo -K fo*
   3753 @end smallexample
   3754 
   3755 would cause strip to only keep symbols that start with the letters
   3756 ``fo'', but to discard the symbol ``foo''.
   3757 
   3758 @item -x
   3759 @itemx --discard-all
   3760 Remove non-global symbols.
   3761 
   3762 @item -X
   3763 @itemx --discard-locals
   3764 Remove compiler-generated local symbols.
   3765 (These usually start with @samp{L} or @samp{.}.)
   3766 
   3767 @item --keep-section-symbols
   3768 When stripping a file, perhaps with @option{--strip-debug} or
   3769 @option{--strip-unneeded}, retain any symbols specifying section names,
   3770 which would otherwise get stripped.
   3771 
   3772 @item --keep-file-symbols
   3773 When stripping a file, perhaps with @option{--strip-debug} or
   3774 @option{--strip-unneeded}, retain any symbols specifying source file names,
   3775 which would otherwise get stripped.
   3776 
   3777 @item --only-keep-debug
   3778 Strip a file, emptying the contents of any sections that would not be
   3779 stripped by @option{--strip-debug} and leaving the debugging sections
   3780 intact.  In ELF files, this preserves all the note sections in the
   3781 output as well.
   3782 
   3783 Note - the section headers of the stripped sections are preserved,
   3784 including their sizes, but the contents of the section are discarded.
   3785 The section headers are preserved so that other tools can match up the
   3786 debuginfo file with the real executable, even if that executable has
   3787 been relocated to a different address space.
   3788 
   3789 The intention is that this option will be used in conjunction with
   3790 @option{--add-gnu-debuglink} to create a two part executable.  One a
   3791 stripped binary which will occupy less space in RAM and in a
   3792 distribution and the second a debugging information file which is only
   3793 needed if debugging abilities are required.  The suggested procedure
   3794 to create these files is as follows:
   3795 
   3796 @enumerate
   3797 @item Link the executable as normal.  Assuming that it is called
   3798 @code{foo} then...
   3799 @item Run @code{objcopy --only-keep-debug foo foo.dbg} to
   3800 create a file containing the debugging info.
   3801 @item Run @code{objcopy --strip-debug foo} to create a
   3802 stripped executable.
   3803 @item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo}
   3804 to add a link to the debugging info into the stripped executable.
   3805 @end enumerate
   3806 
   3807 Note---the choice of @code{.dbg} as an extension for the debug info
   3808 file is arbitrary.  Also the @code{--only-keep-debug} step is
   3809 optional.  You could instead do this:
   3810 
   3811 @enumerate
   3812 @item Link the executable as normal.
   3813 @item Copy @code{foo} to @code{foo.full}
   3814 @item Run @code{strip --strip-debug foo}
   3815 @item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
   3816 @end enumerate
   3817 
   3818 i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
   3819 full executable.  It does not have to be a file created by the
   3820 @option{--only-keep-debug} switch.
   3821 
   3822 Note---this switch is only intended for use on fully linked files.  It
   3823 does not make sense to use it on object files where the debugging
   3824 information may be incomplete.  Besides the gnu_debuglink feature
   3825 currently only supports the presence of one filename containing
   3826 debugging information, not multiple filenames on a one-per-object-file
   3827 basis.
   3828 
   3829 @item --plugin @var{name}
   3830 @cindex plugins
   3831 Load the plugin called @var{name} to add support for extra target
   3832 types.  This option is only available if the toolchain has been built
   3833 with plugin support enabled.
   3834 
   3835 If @option{--plugin} is not provided, but plugin support has been
   3836 enabled then @command{strip} iterates over the files in
   3837 @file{$@{libdir@}/bfd-plugins} in alphabetic order and the first
   3838 plugin that claims the object in question is used.
   3839 
   3840 Please note that this plugin search directory is @emph{not} the one
   3841 used by @command{ld}'s @option{-plugin} option.  In order to make
   3842 @command{strip} use the  linker plugin it must be copied into the
   3843 @file{$@{libdir@}/bfd-plugins} directory.  For GCC based compilations
   3844 the linker plugin is called @file{liblto_plugin.so.0.0.0}.  For Clang
   3845 based compilations it is called @file{LLVMgold.so}.  The GCC plugin
   3846 is always backwards compatible with earlier versions, so it is
   3847 sufficient to just copy the newest one.
   3848 
   3849 @item -V
   3850 @itemx --version
   3851 Show the version number for @command{strip}.
   3852 
   3853 @item -v
   3854 @itemx --verbose
   3855 Verbose output: list all object files modified.  In the case of
   3856 archives, @samp{strip -v} lists all members of the archive.
   3857 @end table
   3858 
   3859 @c man end
   3860 
   3861 @ignore
   3862 @c man begin SEEALSO strip
   3863 the Info entries for @file{binutils}.
   3864 @c man end
   3865 @end ignore
   3866 
   3867 @node c++filt, addr2line, strip, Top
   3868 @chapter c++filt
   3869 
   3870 @kindex c++filt
   3871 @cindex demangling C++ symbols
   3872 
   3873 @c man title cxxfilt demangle C++ and Java symbols
   3874 
   3875 @smallexample
   3876 @c man begin SYNOPSIS cxxfilt
   3877 c++filt [@option{-_}|@option{--strip-underscore}]
   3878         [@option{-n}|@option{--no-strip-underscore}]
   3879         [@option{-p}|@option{--no-params}]
   3880         [@option{-t}|@option{--types}]
   3881         [@option{-i}|@option{--no-verbose}]
   3882         [@option{-r}|@option{--no-recurse-limit}]
   3883         [@option{-R}|@option{--recurse-limit}]
   3884         [@option{-s} @var{format}|@option{--format=}@var{format}]
   3885         [@option{--help}]  [@option{--version}]  [@var{symbol}@dots{}]
   3886 @c man end
   3887 @end smallexample
   3888 
   3889 @c man begin DESCRIPTION cxxfilt
   3890 
   3891 @kindex cxxfilt
   3892 The C++ and Java languages provide function overloading, which means
   3893 that you can write many functions with the same name, providing that
   3894 each function takes parameters of different types.  In order to be
   3895 able to distinguish these similarly named functions C++ and Java
   3896 encode them into a low-level assembler name which uniquely identifies
   3897 each different version.  This process is known as @dfn{mangling}. The
   3898 @command{c++filt}
   3899 @footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
   3900 MS-DOS this program is named @command{CXXFILT}.}
   3901 program does the inverse mapping: it decodes (@dfn{demangles}) low-level
   3902 names into user-level names so that they can be read.
   3903 
   3904 Every alphanumeric word (consisting of letters, digits, underscores,
   3905 dollars, or periods) seen in the input is a potential mangled name.
   3906 If the name decodes into a C++ name, the C++ name replaces the
   3907 low-level name in the output, otherwise the original word is output.
   3908 In this way you can pass an entire assembler source file, containing
   3909 mangled names, through @command{c++filt} and see the same source file
   3910 containing demangled names.
   3911 
   3912 You can also use @command{c++filt} to decipher individual symbols by
   3913 passing them on the command line:
   3914 
   3915 @example
   3916 c++filt @var{symbol}
   3917 @end example
   3918 
   3919 If no @var{symbol} arguments are given, @command{c++filt} reads symbol
   3920 names from the standard input instead.  All the results are printed on
   3921 the standard output.  The difference between reading names from the
   3922 command line versus reading names from the standard input is that
   3923 command-line arguments are expected to be just mangled names and no
   3924 checking is performed to separate them from surrounding text.  Thus
   3925 for example:
   3926 
   3927 @smallexample
   3928 c++filt -n _Z1fv
   3929 @end smallexample
   3930 
   3931 will work and demangle the name to ``f()'' whereas:
   3932 
   3933 @smallexample
   3934 c++filt -n _Z1fv,
   3935 @end smallexample
   3936 
   3937 will not work.  (Note the extra comma at the end of the mangled
   3938 name which makes it invalid).  This command however will work:
   3939 
   3940 @smallexample
   3941 echo _Z1fv, | c++filt -n
   3942 @end smallexample
   3943 
   3944 and will display ``f(),'', i.e., the demangled name followed by a
   3945 trailing comma.  This behaviour is because when the names are read
   3946 from the standard input it is expected that they might be part of an
   3947 assembler source file where there might be extra, extraneous
   3948 characters trailing after a mangled name.  For example:
   3949 
   3950 @smallexample
   3951     .type   _Z1fv, @@function
   3952 @end smallexample
   3953 
   3954 @c man end
   3955 
   3956 @c man begin OPTIONS cxxfilt
   3957 
   3958 @table @env
   3959 @item -_
   3960 @itemx --strip-underscore
   3961 On some systems, both the C and C++ compilers put an underscore in front
   3962 of every name.  For example, the C name @code{foo} gets the low-level
   3963 name @code{_foo}.  This option removes the initial underscore.  Whether
   3964 @command{c++filt} removes the underscore by default is target dependent.
   3965 
   3966 @item -n
   3967 @itemx --no-strip-underscore
   3968 Do not remove the initial underscore.
   3969 
   3970 @item -p
   3971 @itemx --no-params
   3972 When demangling the name of a function, do not display the types of
   3973 the function's parameters.
   3974 
   3975 @item -t
   3976 @itemx --types
   3977 Attempt to demangle types as well as function names.  This is disabled
   3978 by default since mangled types are normally only used internally in
   3979 the compiler, and they can be confused with non-mangled names.  For example,
   3980 a function called ``a'' treated as a mangled type name would be
   3981 demangled to ``signed char''.
   3982 
   3983 @item -i
   3984 @itemx --no-verbose
   3985 Do not include implementation details (if any) in the demangled
   3986 output.
   3987 
   3988 @item -r
   3989 @itemx -R
   3990 @itemx --recurse-limit
   3991 @itemx --no-recurse-limit
   3992 @itemx --recursion-limit
   3993 @itemx --no-recursion-limit
   3994 Enables or disables a limit on the amount of recursion performed
   3995 whilst demangling strings.  Since the name mangling formats allow for
   3996 an infinite level of recursion it is possible to create strings whose
   3997 decoding will exhaust the amount of stack space available on the host
   3998 machine, triggering a memory fault.  The limit tries to prevent this
   3999 from happening by restricting recursion to 2048 levels of nesting.
   4000 
   4001 The default is for this limit to be enabled, but disabling it may be
   4002 necessary in order to demangle truly complicated names.  Note however
   4003 that if the recursion limit is disabled then stack exhaustion is
   4004 possible and any bug reports about such an event will be rejected.
   4005 
   4006 The @option{-r} option is a synonym for the
   4007 @option{--no-recurse-limit} option.  The @option{-R} option is a
   4008 synonym for the @option{--recurse-limit} option.
   4009 
   4010 @item -s @var{format}
   4011 @itemx --format=@var{format}
   4012 @command{c++filt} can decode various methods of mangling, used by
   4013 different compilers.  The argument to this option selects which
   4014 method it uses:
   4015 
   4016 @table @code
   4017 @item auto
   4018 Automatic selection based on executable (the default method)
   4019 @item gnu
   4020 the one used by the @sc{gnu} C++ compiler (g++)
   4021 @item lucid
   4022 the one used by the Lucid compiler (lcc)
   4023 @item arm
   4024 the one specified by the C++ Annotated Reference Manual
   4025 @item hp
   4026 the one used by the HP compiler (aCC)
   4027 @item edg
   4028 the one used by the EDG compiler
   4029 @item gnu-v3
   4030 the one used by the @sc{gnu} C++ compiler (g++) with the V3 ABI.
   4031 @item java
   4032 the one used by the @sc{gnu} Java compiler (gcj)
   4033 @item gnat
   4034 the one used by the @sc{gnu} Ada compiler (GNAT).
   4035 @end table
   4036 
   4037 @item --help
   4038 Print a summary of the options to @command{c++filt} and exit.
   4039 
   4040 @item --version
   4041 Print the version number of @command{c++filt} and exit.
   4042 @end table
   4043 
   4044 @c man end
   4045 
   4046 @ignore
   4047 @c man begin SEEALSO cxxfilt
   4048 the Info entries for @file{binutils}.
   4049 @c man end
   4050 @end ignore
   4051 
   4052 @quotation
   4053 @emph{Warning:} @command{c++filt} is a new utility, and the details of its
   4054 user interface are subject to change in future releases.  In particular,
   4055 a command-line option may be required in the future to decode a name
   4056 passed as an argument on the command line; in other words,
   4057 
   4058 @example
   4059 c++filt @var{symbol}
   4060 @end example
   4061 
   4062 @noindent
   4063 may in a future release become
   4064 
   4065 @example
   4066 c++filt @var{option} @var{symbol}
   4067 @end example
   4068 @end quotation
   4069 
   4070 @node addr2line
   4071 @chapter addr2line
   4072 
   4073 @kindex addr2line
   4074 @cindex address to file name and line number
   4075 
   4076 @c man title addr2line convert addresses or symbol+offset into file names and line numbers
   4077 
   4078 @smallexample
   4079 @c man begin SYNOPSIS addr2line
   4080 addr2line [@option{-a}|@option{--addresses}]
   4081           [@option{-b} @var{bfdname}|@option{--target=}@var{bfdname}]
   4082           [@option{-C}|@option{--demangle}[=@var{style}]]
   4083           [@option{-r}|@option{--no-recurse-limit}]
   4084           [@option{-R}|@option{--recurse-limit}]
   4085           [@option{-e} @var{filename}|@option{--exe=}@var{filename}]
   4086           [@option{-f}|@option{--functions}] [@option{-s}|@option{--basename}]
   4087           [@option{-i}|@option{--inlines}]
   4088           [@option{-p}|@option{--pretty-print}]
   4089           [@option{-j}|@option{--section=}@var{name}]
   4090           [@option{-H}|@option{--help}] [@option{-V}|@option{--version}]
   4091           [addr addr @dots{}]
   4092 @c man end
   4093 @end smallexample
   4094 
   4095 @c man begin DESCRIPTION addr2line
   4096 
   4097 @command{addr2line} translates addresses or symbol+offset into file names and line numbers.
   4098 Given an address or symbol+offset in an executable or an offset in a section of a relocatable
   4099 object, it uses the debugging information to figure out which file name and
   4100 line number are associated with it.
   4101 
   4102 The executable or relocatable object to use is specified with the @option{-e}
   4103 option.  The default is the file @file{a.out}.  The section in the relocatable
   4104 object to use is specified with the @option{-j} option.
   4105 
   4106 @command{addr2line} has two modes of operation.
   4107 
   4108 In the first, hexadecimal addresses or symbol+offset are specified on the command line,
   4109 and @command{addr2line} displays the file name and line number for each
   4110 address.
   4111 
   4112 In the second, @command{addr2line} reads hexadecimal addresses or symbol+offset from
   4113 standard input, and prints the file name and line number for each
   4114 address on standard output.  In this mode, @command{addr2line} may be used
   4115 in a pipe to convert dynamically chosen addresses.
   4116 
   4117 The format of the output is @samp{FILENAME:LINENO}.  By default
   4118 each input address generates one line of output.
   4119 
   4120 Two options can generate additional lines before each
   4121 @samp{FILENAME:LINENO} line (in that order).
   4122 
   4123 If the @option{-a} option is used then a line with the input address
   4124 is displayed.
   4125 
   4126 If the @option{-f} option is used, then a line with the
   4127 @samp{FUNCTIONNAME} is displayed.  This is the name of the function
   4128 containing the address.
   4129 
   4130 One option can generate additional lines after the
   4131 @samp{FILENAME:LINENO} line.
   4132 
   4133 If the @option{-i} option is used and the code at the given address is
   4134 present there because of inlining by the compiler then additional
   4135 lines are displayed afterwards.  One or two extra lines (if the
   4136 @option{-f} option is used) are displayed for each inlined function.
   4137 
   4138 Alternatively if the @option{-p} option is used then each input
   4139 address generates a single, long, output line containing the address,
   4140 the function name, the file name and the line number.  If the
   4141 @option{-i} option has also been used then any inlined functions will
   4142 be displayed in the same manner, but on separate lines, and prefixed
   4143 by the text @samp{(inlined by)}.
   4144 
   4145 If the file name or function name can not be determined,
   4146 @command{addr2line} will print two question marks in their place.  If the
   4147 line number can not be determined, @command{addr2line} will print 0.
   4148 
   4149 When symbol+offset is used, +offset is optional, except when the symbol
   4150 is ambigious with a hex number. The resolved symbols can be mangled
   4151 or unmangled, except unmangled symbols with + are not allowed.
   4152 
   4153 @c man end
   4154 
   4155 @c man begin OPTIONS addr2line
   4156 
   4157 The long and short forms of options, shown here as alternatives, are
   4158 equivalent.
   4159 
   4160 @table @env
   4161 @item -a
   4162 @itemx --addresses
   4163 Display the address before the function name, file and line number
   4164 information.  The address is printed with a @samp{0x} prefix to easily
   4165 identify it.
   4166 
   4167 @item -b @var{bfdname}
   4168 @itemx --target=@var{bfdname}
   4169 @cindex object code format
   4170 Specify that the object-code format for the object files is
   4171 @var{bfdname}.
   4172 
   4173 @item -C
   4174 @itemx --demangle[=@var{style}]
   4175 @cindex demangling in objdump
   4176 Decode (@dfn{demangle}) low-level symbol names into user-level names.
   4177 Besides removing any initial underscore prepended by the system, this
   4178 makes C++ function names readable.  Different compilers have different
   4179 mangling styles. The optional demangling style argument can be used to
   4180 choose an appropriate demangling style for your compiler. @xref{c++filt},
   4181 for more information on demangling.
   4182 
   4183 @item -e @var{filename}
   4184 @itemx --exe=@var{filename}
   4185 Specify the name of the executable for which addresses should be
   4186 translated.  The default file is @file{a.out}.
   4187 
   4188 @item -f
   4189 @itemx --functions
   4190 Display function names as well as file and line number information.
   4191 
   4192 @item -s
   4193 @itemx --basenames
   4194 Display only the base of each file name.
   4195 
   4196 @item -i
   4197 @itemx --inlines
   4198 If the address belongs to a function that was inlined, the source
   4199 information for all enclosing scopes back to the first non-inlined
   4200 function will also be printed.  For example, if @code{main} inlines
   4201 @code{callee1} which inlines @code{callee2}, and address is from
   4202 @code{callee2}, the source information for @code{callee1} and @code{main}
   4203 will also be printed.
   4204 
   4205 @item -j
   4206 @itemx --section
   4207 Read offsets relative to the specified section instead of absolute addresses.
   4208 
   4209 @item -p
   4210 @itemx --pretty-print
   4211 Make the output more human friendly: each location are printed on one line.
   4212 If option @option{-i} is specified, lines for all enclosing scopes are
   4213 prefixed with @samp{(inlined by)}.
   4214 
   4215 @item -r
   4216 @itemx -R
   4217 @itemx --recurse-limit
   4218 @itemx --no-recurse-limit
   4219 @itemx --recursion-limit
   4220 @itemx --no-recursion-limit
   4221 Enables or disables a limit on the amount of recursion performed
   4222 whilst demangling strings.  Since the name mangling formats allow for
   4223 an infinite level of recursion it is possible to create strings whose
   4224 decoding will exhaust the amount of stack space available on the host
   4225 machine, triggering a memory fault.  The limit tries to prevent this
   4226 from happening by restricting recursion to 2048 levels of nesting.
   4227 
   4228 The default is for this limit to be enabled, but disabling it may be
   4229 necessary in order to demangle truly complicated names.  Note however
   4230 that if the recursion limit is disabled then stack exhaustion is
   4231 possible and any bug reports about such an event will be rejected.
   4232 
   4233 The @option{-r} option is a synonym for the
   4234 @option{--no-recurse-limit} option.  The @option{-R} option is a
   4235 synonym for the @option{--recurse-limit} option.
   4236 
   4237 Note this option is only effective if the @option{-C} or
   4238 @option{--demangle} option has been enabled.
   4239 
   4240 @end table
   4241 
   4242 @c man end
   4243 
   4244 @ignore
   4245 @c man begin SEEALSO addr2line
   4246 Info entries for @file{binutils}.
   4247 @c man end
   4248 @end ignore
   4249 
   4250 @node windmc
   4251 @chapter windmc
   4252 
   4253 @command{windmc} may be used to generator Windows message resources.
   4254 
   4255 @quotation
   4256 @emph{Warning:} @command{windmc} is not always built as part of the binary
   4257 utilities, since it is only useful for Windows targets.
   4258 @end quotation
   4259 
   4260 @c man title windmc generates Windows message resources
   4261 
   4262 @smallexample
   4263 @c man begin SYNOPSIS windmc
   4264 windmc [options] input-file
   4265 @c man end
   4266 @end smallexample
   4267 
   4268 @c man begin DESCRIPTION windmc
   4269 
   4270 @command{windmc} reads message definitions from an input file (.mc) and
   4271 translate them into a set of output files.  The output files may be of
   4272 four kinds:
   4273 
   4274 @table @code
   4275 @item h
   4276 A C header file containing the message definitions.
   4277 
   4278 @item rc
   4279 A resource file compilable by the @command{windres} tool.
   4280 
   4281 @item bin
   4282 One or more binary files containing the resource data for a specific
   4283 message language.
   4284 
   4285 @item dbg
   4286 A C include file that maps message id's to their symbolic name.
   4287 @end table
   4288 
   4289 The exact description of these different formats is available in
   4290 documentation from Microsoft.
   4291 
   4292 When @command{windmc} converts from the @code{mc} format to the @code{bin}
   4293 format, @code{rc}, @code{h}, and optional @code{dbg} it is acting like the
   4294 Windows Message Compiler.
   4295 
   4296 @c man end
   4297 
   4298 @c man begin OPTIONS windmc
   4299 
   4300 @table @env
   4301 @item -a
   4302 @itemx --ascii_in
   4303 Specifies that the input file specified is ASCII. This is the default
   4304 behaviour.
   4305 
   4306 @item -A
   4307 @itemx --ascii_out
   4308 Specifies that messages in the output @code{bin} files should be in ASCII
   4309 format.
   4310 
   4311 @item -b
   4312 @itemx --binprefix
   4313 Specifies that @code{bin} filenames should have to be prefixed by the
   4314 basename of the source file.
   4315 
   4316 @item -c
   4317 @itemx --customflag
   4318 Sets the customer bit in all message id's.
   4319 
   4320 @item -C @var{codepage}
   4321 @itemx --codepage_in @var{codepage}
   4322 Sets the default codepage to be used to convert input file to UTF16. The
   4323 default is ocdepage 1252.
   4324 
   4325 @item -d
   4326 @itemx --decimal_values
   4327 Outputs the constants in the header file in decimal. Default is using
   4328 hexadecimal output.
   4329 
   4330 @item -e @var{ext}
   4331 @itemx --extension @var{ext}
   4332 The extension for the header file. The default is .h extension.
   4333 
   4334 @item -F @var{target}
   4335 @itemx --target @var{target}
   4336 Specify the BFD format to use for a bin file as output.  This
   4337 is a BFD target name; you can use the @option{--help} option to see a list
   4338 of supported targets.  Normally @command{windmc} will use the default
   4339 format, which is the first one listed by the @option{--help} option.
   4340 @ifclear man
   4341 @ref{Target Selection}.
   4342 @end ifclear
   4343 
   4344 @item -h @var{path}
   4345 @itemx --headerdir @var{path}
   4346 The target directory of the generated header file. The default is the
   4347 current directory.
   4348 
   4349 @item -H
   4350 @itemx --help
   4351 Displays a list of command-line options and then exits.
   4352 
   4353 @item -m @var{characters}
   4354 @itemx --maxlength @var{characters}
   4355 Instructs @command{windmc} to generate a warning if the length
   4356 of any message exceeds the number specified.
   4357 
   4358 @item -n
   4359 @itemx --nullterminate
   4360 Terminate message text in @code{bin} files by zero. By default they are
   4361 terminated by CR/LF.
   4362 
   4363 @item -o
   4364 @itemx --hresult_use
   4365 Not yet implemented. Instructs @code{windmc} to generate an OLE2 header
   4366 file, using HRESULT definitions. Status codes are used if the flag is not
   4367 specified.
   4368 
   4369 @item -O @var{codepage}
   4370 @itemx --codepage_out @var{codepage}
   4371 Sets the default codepage to be used to output text files. The default
   4372 is ocdepage 1252.
   4373 
   4374 @item -r @var{path}
   4375 @itemx --rcdir @var{path}
   4376 The target directory for the generated @code{rc} script and the generated
   4377 @code{bin} files that the resource compiler script includes. The default
   4378 is the current directory.
   4379 
   4380 @item -u
   4381 @itemx --unicode_in
   4382 Specifies that the input file is UTF16.
   4383 
   4384 @item -U
   4385 @itemx --unicode_out
   4386 Specifies that messages in the output @code{bin} file should be in UTF16
   4387 format. This is the default behaviour.
   4388 
   4389 @item -v
   4390 @item --verbose
   4391 Enable verbose mode.
   4392 
   4393 @item -V
   4394 @item --version
   4395 Prints the version number for @command{windmc}.
   4396 
   4397 @item -x @var{path}
   4398 @itemx --xdgb @var{path}
   4399 The path of the @code{dbg} C include file that maps message id's to the
   4400 symbolic name. No such file is generated without specifying the switch.
   4401 @end table
   4402 
   4403 @c man end
   4404 
   4405 @ignore
   4406 @c man begin SEEALSO windmc
   4407 the Info entries for @file{binutils}.
   4408 @c man end
   4409 @end ignore
   4410 
   4411 @node windres
   4412 @chapter windres
   4413 
   4414 @command{windres} may be used to manipulate Windows resources.
   4415 
   4416 @quotation
   4417 @emph{Warning:} @command{windres} is not always built as part of the binary
   4418 utilities, since it is only useful for Windows targets.
   4419 @end quotation
   4420 
   4421 @c man title windres manipulate Windows resources
   4422 
   4423 @smallexample
   4424 @c man begin SYNOPSIS windres
   4425 windres [options] [input-file] [output-file]
   4426 @c man end
   4427 @end smallexample
   4428 
   4429 @c man begin DESCRIPTION windres
   4430 
   4431 @command{windres} reads resources from an input file and copies them into
   4432 an output file.  Either file may be in one of three formats:
   4433 
   4434 @table @code
   4435 @item rc
   4436 A text format read by the Resource Compiler.
   4437 
   4438 @item res
   4439 A binary format generated by the Resource Compiler.
   4440 
   4441 @item coff
   4442 A COFF object or executable.
   4443 @end table
   4444 
   4445 The exact description of these different formats is available in
   4446 documentation from Microsoft.
   4447 
   4448 When @command{windres} converts from the @code{rc} format to the @code{res}
   4449 format, it is acting like the Windows Resource Compiler.  When
   4450 @command{windres} converts from the @code{res} format to the @code{coff}
   4451 format, it is acting like the Windows @code{CVTRES} program.
   4452 
   4453 When @command{windres} generates an @code{rc} file, the output is similar
   4454 but not identical to the format expected for the input.  When an input
   4455 @code{rc} file refers to an external filename, an output @code{rc} file
   4456 will instead include the file contents.
   4457 
   4458 If the input or output format is not specified, @command{windres} will
   4459 guess based on the file name, or, for the input file, the file contents.
   4460 A file with an extension of @file{.rc} will be treated as an @code{rc}
   4461 file, a file with an extension of @file{.res} will be treated as a
   4462 @code{res} file, and a file with an extension of @file{.o} or
   4463 @file{.exe} will be treated as a @code{coff} file.
   4464 
   4465 If no output file is specified, @command{windres} will print the resources
   4466 in @code{rc} format to standard output.
   4467 
   4468 The normal use is for you to write an @code{rc} file, use @command{windres}
   4469 to convert it to a COFF object file, and then link the COFF file into
   4470 your application.  This will make the resources described in the
   4471 @code{rc} file available to Windows.
   4472 
   4473 @c man end
   4474 
   4475 @c man begin OPTIONS windres
   4476 
   4477 @table @env
   4478 @item -i @var{filename}
   4479 @itemx --input @var{filename}
   4480 The name of the input file.  If this option is not used, then
   4481 @command{windres} will use the first non-option argument as the input file
   4482 name.  If there are no non-option arguments, then @command{windres} will
   4483 read from standard input.  @command{windres} can not read a COFF file from
   4484 standard input.
   4485 
   4486 @item -o @var{filename}
   4487 @itemx --output @var{filename}
   4488 The name of the output file.  If this option is not used, then
   4489 @command{windres} will use the first non-option argument, after any used
   4490 for the input file name, as the output file name.  If there is no
   4491 non-option argument, then @command{windres} will write to standard output.
   4492 @command{windres} can not write a COFF file to standard output.  Note,
   4493 for compatibility with @command{rc} the option @option{-fo} is also
   4494 accepted, but its use is not recommended.
   4495 
   4496 @item -J @var{format}
   4497 @itemx --input-format @var{format}
   4498 The input format to read.  @var{format} may be @samp{res}, @samp{rc}, or
   4499 @samp{coff}.  If no input format is specified, @command{windres} will
   4500 guess, as described above.
   4501 
   4502 @item -O @var{format}
   4503 @itemx --output-format @var{format}
   4504 The output format to generate.  @var{format} may be @samp{res},
   4505 @samp{rc}, or @samp{coff}.  If no output format is specified,
   4506 @command{windres} will guess, as described above.
   4507 
   4508 @item -F @var{target}
   4509 @itemx --target @var{target}
   4510 Specify the BFD format to use for a COFF file as input or output.  This
   4511 is a BFD target name; you can use the @option{--help} option to see a list
   4512 of supported targets.  Normally @command{windres} will use the default
   4513 format, which is the first one listed by the @option{--help} option.
   4514 @ifclear man
   4515 @ref{Target Selection}.
   4516 @end ifclear
   4517 
   4518 @item --preprocessor @var{program}
   4519 When @command{windres} reads an @code{rc} file, it runs it through the C
   4520 preprocessor first.  This option may be used to specify the preprocessor
   4521 to use.  The default preprocessor is @code{gcc}.
   4522 
   4523 @item --preprocessor-arg @var{option}
   4524 When @command{windres} reads an @code{rc} file, it runs it through
   4525 the C preprocessor first.  This option may be used to specify additional
   4526 text to be passed to preprocessor on its command line.
   4527 This option can be used multiple times to add multiple options to the
   4528 preprocessor command line.
   4529 If the @option{--preprocessor} option has not been specified then a
   4530 default set of preprocessor arguments will be used, with any
   4531 @option{--preprocessor-arg} options being placed after them on the
   4532 command line.  These default arguments are @code{-E},
   4533 @code{-xc-header} and @code{-DRC_INVOKED}.
   4534 
   4535 @item -I @var{directory}
   4536 @itemx --include-dir @var{directory}
   4537 Specify an include directory to use when reading an @code{rc} file.
   4538 @command{windres} will pass this to the preprocessor as an @option{-I}
   4539 option.  @command{windres} will also search this directory when looking for
   4540 files named in the @code{rc} file.  If the argument passed to this command
   4541 matches any of the supported @var{formats} (as described in the @option{-J}
   4542 option), it will issue a deprecation warning, and behave just like the
   4543 @option{-J} option.  New programs should not use this behaviour.  If a
   4544 directory happens to match a @var{format}, simple prefix it with @samp{./}
   4545 to disable the backward compatibility.
   4546 
   4547 @item -D @var{target}
   4548 @itemx --define @var{sym}[=@var{val}]
   4549 Specify a @option{-D} option to pass to the preprocessor when reading an
   4550 @code{rc} file.
   4551 
   4552 @item -U @var{target}
   4553 @itemx --undefine @var{sym}
   4554 Specify a @option{-U} option to pass to the preprocessor when reading an
   4555 @code{rc} file.
   4556 
   4557 @item -r
   4558 Ignored for compatibility with rc.
   4559 
   4560 @item -v
   4561 Enable verbose mode.  This tells you what the preprocessor is if you
   4562 didn't specify one.
   4563 
   4564 @item -c @var{val}
   4565 @item --codepage @var{val}
   4566 Specify the default codepage to use when reading an @code{rc} file.
   4567 @var{val} should be a hexadecimal prefixed by @samp{0x} or decimal
   4568 codepage code. The valid range is from zero up to 0xffff, but the
   4569 validity of the codepage is host and configuration dependent.
   4570 
   4571 @item -l @var{val}
   4572 @item --language @var{val}
   4573 Specify the default language to use when reading an @code{rc} file.
   4574 @var{val} should be a hexadecimal language code.  The low eight bits are
   4575 the language, and the high eight bits are the sublanguage.
   4576 
   4577 @item --use-temp-file
   4578 Use a temporary file to instead of using popen to read the output of
   4579 the preprocessor. Use this option if the popen implementation is buggy
   4580 on the host (eg., certain non-English language versions of Windows 95 and
   4581 Windows 98 are known to have buggy popen where the output will instead
   4582 go the console).
   4583 
   4584 @item --no-use-temp-file
   4585 Use popen, not a temporary file, to read the output of the preprocessor.
   4586 This is the default behaviour.
   4587 
   4588 @item -h
   4589 @item --help
   4590 Prints a usage summary.
   4591 
   4592 @item -V
   4593 @item --version
   4594 Prints the version number for @command{windres}.
   4595 
   4596 @item --yydebug
   4597 If @command{windres} is compiled with @code{YYDEBUG} defined as @code{1},
   4598 this will turn on parser debugging.
   4599 @end table
   4600 
   4601 @c man end
   4602 
   4603 @ignore
   4604 @c man begin SEEALSO windres
   4605 the Info entries for @file{binutils}.
   4606 @c man end
   4607 @end ignore
   4608 
   4609 @node dlltool
   4610 @chapter dlltool
   4611 @cindex DLL
   4612 @kindex dlltool
   4613 
   4614 @command{dlltool} is used to create the files needed to create dynamic
   4615 link libraries (DLLs) on systems which understand PE format image
   4616 files such as Windows.  A DLL contains an export table which contains
   4617 information that the runtime loader needs to resolve references from a
   4618 referencing program.
   4619 
   4620 The export table is generated by this program by reading in a
   4621 @file{.def} file or scanning the @file{.a} and @file{.o} files which
   4622 will be in the DLL.  A @file{.o} file can contain information in
   4623 special @samp{.drectve} sections with export information.
   4624 
   4625 @quotation
   4626 @emph{Note:} @command{dlltool} is not always built as part of the
   4627 binary utilities, since it is only useful for those targets which
   4628 support DLLs.
   4629 @end quotation
   4630 
   4631 @c man title dlltool create files needed to build and use DLLs
   4632 
   4633 @smallexample
   4634 @c man begin SYNOPSIS dlltool
   4635 dlltool [@option{-d}|@option{--input-def} @var{def-file-name}]
   4636         [@option{-b}|@option{--base-file} @var{base-file-name}]
   4637         [@option{-e}|@option{--output-exp} @var{exports-file-name}]
   4638         [@option{-z}|@option{--output-def} @var{def-file-name}]
   4639         [@option{-l}|@option{--output-lib} @var{library-file-name}]
   4640         [@option{-y}|@option{--output-delaylib} @var{library-file-name}]
   4641         [@option{--export-all-symbols}] [@option{--no-export-all-symbols}]
   4642         [@option{--exclude-symbols} @var{list}]
   4643         [@option{--no-default-excludes}]
   4644         [@option{-S}|@option{--as} @var{path-to-assembler}] [@option{-f}|@option{--as-flags} @var{options}]
   4645         [@option{-D}|@option{--dllname} @var{name}] [@option{-m}|@option{--machine} @var{machine}]
   4646         [@option{-a}|@option{--add-indirect}]
   4647         [@option{-U}|@option{--add-underscore}] [@option{--add-stdcall-underscore}]
   4648         [@option{-k}|@option{--kill-at}] [@option{-A}|@option{--add-stdcall-alias}]
   4649         [@option{-p}|@option{--ext-prefix-alias} @var{prefix}]
   4650         [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}]
   4651         [@option{--use-nul-prefixed-import-tables}]
   4652         [@option{-I}|@option{--identify} @var{library-file-name}] [@option{--identify-strict}]
   4653         [@option{-i}|@option{--interwork}]
   4654         [@option{-n}|@option{--nodelete}] [@option{-t}|@option{--temp-prefix} @var{prefix}]
   4655         [@option{-v}|@option{--verbose}]
   4656         [@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
   4657         [@option{--no-leading-underscore}] [@option{--leading-underscore}]
   4658         [@option{--deterministic-libraries}] [@option{--non-deterministic-libraries}]
   4659         [object-file @dots{}]
   4660 @c man end
   4661 @end smallexample
   4662 
   4663 @c man begin DESCRIPTION dlltool
   4664 
   4665 @command{dlltool} reads its inputs, which can come from the @option{-d} and
   4666 @option{-b} options as well as object files specified on the command
   4667 line.  It then processes these inputs and if the @option{-e} option has
   4668 been specified it creates a exports file.  If the @option{-l} option
   4669 has been specified it creates a library file and if the @option{-z} option
   4670 has been specified it creates a def file.  Any or all of the @option{-e},
   4671 @option{-l} and @option{-z} options can be present in one invocation of
   4672 dlltool.
   4673 
   4674 When creating a DLL, along with the source for the DLL, it is necessary
   4675 to have three other files.  @command{dlltool} can help with the creation of
   4676 these files.
   4677 
   4678 The first file is a @file{.def} file which specifies which functions are
   4679 exported from the DLL, which functions the DLL imports, and so on.  This
   4680 is a text file and can be created by hand, or @command{dlltool} can be used
   4681 to create it using the @option{-z} option.  In this case @command{dlltool}
   4682 will scan the object files specified on its command line looking for
   4683 those functions which have been specially marked as being exported and
   4684 put entries for them in the @file{.def} file it creates.
   4685 
   4686 In order to mark a function as being exported from a DLL, it needs to
   4687 have an @option{-export:<name_of_function>} entry in the @samp{.drectve}
   4688 section of the object file.  This can be done in C by using the
   4689 asm() operator:
   4690 
   4691 @smallexample
   4692   asm (".section .drectve");
   4693   asm (".ascii \"-export:my_func\"");
   4694 
   4695   int my_func (void) @{ @dots{} @}
   4696 @end smallexample
   4697 
   4698 The second file needed for DLL creation is an exports file.  This file
   4699 is linked with the object files that make up the body of the DLL and it
   4700 handles the interface between the DLL and the outside world.  This is a
   4701 binary file and it can be created by giving the @option{-e} option to
   4702 @command{dlltool} when it is creating or reading in a @file{.def} file.
   4703 
   4704 The third file needed for DLL creation is the library file that programs
   4705 will link with in order to access the functions in the DLL (an `import
   4706 library').  This file can be created by giving the @option{-l} option to
   4707 dlltool when it is creating or reading in a @file{.def} file.
   4708 
   4709 If the @option{-y} option is specified, dlltool generates a delay-import
   4710 library that can be used instead of the normal import library to allow
   4711 a program to link to the dll only as soon as an imported function is
   4712 called for the first time. The resulting executable will need to be
   4713 linked to the static delayimp library containing __delayLoadHelper2(),
   4714 which in turn will import LoadLibraryA and GetProcAddress from kernel32.
   4715 
   4716 @command{dlltool} builds the library file by hand, but it builds the
   4717 exports file by creating temporary files containing assembler statements
   4718 and then assembling these.  The @option{-S} command-line option can be
   4719 used to specify the path to the assembler that dlltool will use,
   4720 and the @option{-f} option can be used to pass specific flags to that
   4721 assembler.  The @option{-n} can be used to prevent dlltool from deleting
   4722 these temporary assembler files when it is done, and if @option{-n} is
   4723 specified twice then this will prevent dlltool from deleting the
   4724 temporary object files it used to build the library.
   4725 
   4726 Here is an example of creating a DLL from a source file @samp{dll.c} and
   4727 also creating a program (from an object file called @samp{program.o})
   4728 that uses that DLL:
   4729 
   4730 @smallexample
   4731   gcc -c dll.c
   4732   dlltool -e exports.o -l dll.lib dll.o
   4733   gcc dll.o exports.o -o dll.dll
   4734   gcc program.o dll.lib -o program
   4735 @end smallexample
   4736 
   4737 
   4738 @command{dlltool} may also be used to query an existing import library
   4739 to determine the name of the DLL to which it is associated.  See the
   4740 description of the @option{-I} or @option{--identify} option.
   4741 
   4742 @c man end
   4743 
   4744 @c man begin OPTIONS dlltool
   4745 
   4746 The command-line options have the following meanings:
   4747 
   4748 @table @env
   4749 
   4750 @item -d @var{filename}
   4751 @itemx --input-def @var{filename}
   4752 @cindex input .def file
   4753 Specifies the name of a @file{.def} file to be read in and processed.
   4754 
   4755 @item -b @var{filename}
   4756 @itemx --base-file @var{filename}
   4757 @cindex base files
   4758 Specifies the name of a base file to be read in and processed.  The
   4759 contents of this file will be added to the relocation section in the
   4760 exports file generated by dlltool.
   4761 
   4762 @item -e @var{filename}
   4763 @itemx --output-exp @var{filename}
   4764 Specifies the name of the export file to be created by dlltool.
   4765 
   4766 @item -z @var{filename}
   4767 @itemx --output-def @var{filename}
   4768 Specifies the name of the @file{.def} file to be created by dlltool.
   4769 
   4770 @item -l @var{filename}
   4771 @itemx --output-lib @var{filename}
   4772 Specifies the name of the library file to be created by dlltool.
   4773 
   4774 @item -y @var{filename}
   4775 @itemx --output-delaylib @var{filename}
   4776 Specifies the name of the delay-import library file to be created by dlltool.
   4777 
   4778 @item --deterministic-libraries
   4779 @itemx --non-deterministic-libraries
   4780 When creating output libraries in response to either the
   4781 @option{--output-lib} or @option{--output-delaylib} options either use
   4782 the value of zero for any timestamps, user ids and group ids created
   4783 (@option{--deterministic-libraries}) or the actual timestamps, user
   4784 ids and group ids (@option{--non-deterministic-libraries}).
   4785 
   4786 @item --export-all-symbols
   4787 Treat all global and weak defined symbols found in the input object
   4788 files as symbols to be exported.  There is a small list of symbols which
   4789 are not exported by default; see the @option{--no-default-excludes}
   4790 option.  You may add to the list of symbols to not export by using the
   4791 @option{--exclude-symbols} option.
   4792 
   4793 @item --no-export-all-symbols
   4794 Only export symbols explicitly listed in an input @file{.def} file or in
   4795 @samp{.drectve} sections in the input object files.  This is the default
   4796 behaviour.  The @samp{.drectve} sections are created by @samp{dllexport}
   4797 attributes in the source code.
   4798 
   4799 @item --exclude-symbols @var{list}
   4800 Do not export the symbols in @var{list}.  This is a list of symbol names
   4801 separated by comma or colon characters.  The symbol names should not
   4802 contain a leading underscore.  This is only meaningful when
   4803 @option{--export-all-symbols} is used.
   4804 
   4805 @item --no-default-excludes
   4806 When @option{--export-all-symbols} is used, it will by default avoid
   4807 exporting certain special symbols.  The current list of symbols to avoid
   4808 exporting is @samp{DllMain@@12}, @samp{DllEntryPoint@@0},
   4809 @samp{impure_ptr}.  You may use the @option{--no-default-excludes} option
   4810 to go ahead and export these special symbols.  This is only meaningful
   4811 when @option{--export-all-symbols} is used.
   4812 
   4813 @item -S @var{path}
   4814 @itemx --as @var{path}
   4815 Specifies the path, including the filename, of the assembler to be used
   4816 to create the exports file.
   4817 
   4818 @item -f @var{options}
   4819 @itemx --as-flags @var{options}
   4820 Specifies any specific command-line options to be passed to the
   4821 assembler when building the exports file.  This option will work even if
   4822 the @option{-S} option is not used.  This option only takes one argument,
   4823 and if it occurs more than once on the command line, then later
   4824 occurrences will override earlier occurrences.  So if it is necessary to
   4825 pass multiple options to the assembler they should be enclosed in
   4826 double quotes.
   4827 
   4828 @item -D @var{name}
   4829 @itemx --dll-name @var{name}
   4830 Specifies the name to be stored in the @file{.def} file as the name of
   4831 the DLL when the @option{-e} option is used.  If this option is not
   4832 present, then the filename given to the @option{-e} option will be
   4833 used as the name of the DLL.
   4834 
   4835 @item -m @var{machine}
   4836 @itemx -machine @var{machine}
   4837 Specifies the type of machine for which the library file should be
   4838 built.  @command{dlltool} has a built in default type, depending upon how
   4839 it was created, but this option can be used to override that.  This is
   4840 normally only useful when creating DLLs for an ARM processor, when the
   4841 contents of the DLL are actually encode using Thumb instructions.
   4842 
   4843 @item -a
   4844 @itemx --add-indirect
   4845 Specifies that when @command{dlltool} is creating the exports file it
   4846 should add a section which allows the exported functions to be
   4847 referenced without using the import library.  Whatever the hell that
   4848 means!
   4849 
   4850 @item -U
   4851 @itemx --add-underscore
   4852 Specifies that when @command{dlltool} is creating the exports file it
   4853 should prepend an underscore to the names of @emph{all} exported symbols.
   4854 
   4855 @item --no-leading-underscore
   4856 @item --leading-underscore
   4857 Specifies whether standard symbol should be forced to be prefixed, or
   4858 not.
   4859 
   4860 @item --add-stdcall-underscore
   4861 Specifies that when @command{dlltool} is creating the exports file it
   4862 should prepend an underscore to the names of exported @emph{stdcall}
   4863 functions. Variable names and non-stdcall function names are not modified.
   4864 This option is useful when creating GNU-compatible import libs for third
   4865 party DLLs that were built with MS-Windows tools.
   4866 
   4867 @item -k
   4868 @itemx --kill-at
   4869 Specifies that @samp{@@<number>} suffixes should be omitted from the names
   4870 of stdcall functions that will be imported from the DLL.  This is
   4871 useful when creating an import library for a DLL which exports stdcall
   4872 functions but without the usual @samp{@@<number>} symbol name suffix.
   4873 
   4874 This does not change the naming of symbols provided by the import library
   4875 to programs linked against it, but only the entries in the import table
   4876 (ie the .idata section).
   4877 
   4878 @item -A
   4879 @itemx --add-stdcall-alias
   4880 Specifies that when @command{dlltool} is creating the exports file it
   4881 should add aliases for stdcall symbols without @samp{@@ <number>}
   4882 in addition to the symbols with @samp{@@ <number>}.
   4883 
   4884 @item -p
   4885 @itemx --ext-prefix-alias @var{prefix}
   4886 Causes @command{dlltool} to create external aliases for all DLL
   4887 imports with the specified prefix.  The aliases are created for both
   4888 external and import symbols with no leading underscore.
   4889 
   4890 @item -x
   4891 @itemx --no-idata4
   4892 Specifies that when @command{dlltool} is creating the exports and library
   4893 files it should omit the @code{.idata4} section.  This is for compatibility
   4894 with certain operating systems.
   4895 
   4896 @item --use-nul-prefixed-import-tables
   4897 Specifies that when @command{dlltool} is creating the exports and library
   4898 files it should prefix the @code{.idata4} and @code{.idata5} by zero an
   4899 element. This emulates old gnu import library generation of
   4900 @code{dlltool}. By default this option is turned off.
   4901 
   4902 @item -c
   4903 @itemx --no-idata5
   4904 Specifies that when @command{dlltool} is creating the exports and library
   4905 files it should omit the @code{.idata5} section.  This is for compatibility
   4906 with certain operating systems.
   4907 
   4908 @item -I @var{filename}
   4909 @itemx --identify @var{filename}
   4910 Specifies that @command{dlltool} should inspect the import library
   4911 indicated by @var{filename} and report, on @code{stdout}, the name(s)
   4912 of the associated DLL(s).  This can be performed in addition to any
   4913 other operations indicated by the other options and arguments.
   4914 @command{dlltool} fails if the import library does not exist or is not
   4915 actually an import library. See also @option{--identify-strict}.
   4916 
   4917 @item --identify-strict
   4918 Modifies the behavior of the @option{--identify} option, such
   4919 that an error is reported if @var{filename} is associated with
   4920 more than one DLL.
   4921 
   4922 @item -i
   4923 @itemx --interwork
   4924 Specifies that @command{dlltool} should mark the objects in the library
   4925 file and exports file that it produces as supporting interworking
   4926 between ARM and Thumb code.
   4927 
   4928 @item -n
   4929 @itemx --nodelete
   4930 Makes @command{dlltool} preserve the temporary assembler files it used to
   4931 create the exports file.  If this option is repeated then dlltool will
   4932 also preserve the temporary object files it uses to create the library
   4933 file.
   4934 
   4935 @item -t @var{prefix}
   4936 @itemx --temp-prefix @var{prefix}
   4937 Makes @command{dlltool} use @var{prefix} when constructing the names of
   4938 temporary assembler and object files.  By default, the temp file prefix
   4939 is generated from the pid.
   4940 
   4941 @item -v
   4942 @itemx --verbose
   4943 Make dlltool describe what it is doing.
   4944 
   4945 @item -h
   4946 @itemx --help
   4947 Displays a list of command-line options and then exits.
   4948 
   4949 @item -V
   4950 @itemx --version
   4951 Displays dlltool's version number and then exits.
   4952 
   4953 @end table
   4954 
   4955 @c man end
   4956 
   4957 @menu
   4958 * def file format::             The format of the dlltool @file{.def} file
   4959 @end menu
   4960 
   4961 @node def file format
   4962 @section The format of the @command{dlltool} @file{.def} file
   4963 
   4964 A @file{.def} file contains any number of the following commands:
   4965 
   4966 @table @asis
   4967 
   4968 @item @code{NAME} @var{name} @code{[ ,} @var{base} @code{]}
   4969 The result is going to be named @var{name}@code{.exe}.
   4970 
   4971 @item @code{LIBRARY} @var{name} @code{[ ,} @var{base} @code{]}
   4972 The result is going to be named @var{name}@code{.dll}.
   4973 Note: If you want to use LIBRARY as name then you need to quote.  Otherwise
   4974 this will fail due a necessary hack for libtool (see PR binutils/13710 for more
   4975 details).
   4976 
   4977 @item @code{EXPORTS ( ( (} @var{name1} @code{[ = } @var{name2} @code{] ) | ( } @var{name1} @code{=} @var{module-name} @code{.} @var{external-name} @code{) ) [ == } @var{its_name} @code{]}
   4978 @item @code{[} @var{integer} @code{] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *}
   4979 Declares @var{name1} as an exported symbol from the DLL, with optional
   4980 ordinal number @var{integer}, or declares @var{name1} as an alias
   4981 (forward) of the function @var{external-name} in the DLL.
   4982 If @var{its_name} is specified, this name is used as string in export table.
   4983 @var{module-name}.
   4984 Note: The @code{EXPORTS} has to be the last command in .def file, as keywords
   4985 are treated - beside @code{LIBRARY} - as simple name-identifiers.
   4986 If you want to use LIBRARY as name then you need to quote it.
   4987 
   4988 @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{]} *}
   4989 Declares that @var{external-name} or the exported function whose
   4990 ordinal number is @var{integer} is to be imported from the file
   4991 @var{module-name}.  If @var{internal-name} is specified then this is
   4992 the name that the imported function will be referred to in the body of
   4993 the DLL.
   4994 If @var{its_name} is specified, this name is used as string in import table.
   4995 Note: The @code{IMPORTS} has to be the last command in .def file, as keywords
   4996 are treated - beside @code{LIBRARY} - as simple name-identifiers.
   4997 If you want to use LIBRARY as name then you need to quote it.
   4998 
   4999 @item @code{DESCRIPTION} @var{string}
   5000 Puts @var{string} into the output @file{.exp} file in the
   5001 @code{.rdata} section.
   5002 
   5003 @item @code{STACKSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]}
   5004 @item @code{HEAPSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]}
   5005 Generates @code{--stack} or @code{--heap}
   5006 @var{number-reserve},@var{number-commit} in the output @code{.drectve}
   5007 section.  The linker will see this and act upon it.
   5008 
   5009 @item @code{CODE} @var{attr} @code{+}
   5010 @item @code{DATA} @var{attr} @code{+}
   5011 @item @code{SECTIONS (} @var{section-name} @var{attr}@code{ + ) *}
   5012 Generates @code{--attr} @var{section-name} @var{attr} in the output
   5013 @code{.drectve} section, where @var{attr} is one of @code{READ},
   5014 @code{WRITE}, @code{EXECUTE} or @code{SHARED}.  The linker will see
   5015 this and act upon it.
   5016 
   5017 @end table
   5018 
   5019 @ignore
   5020 @c man begin SEEALSO dlltool
   5021 The Info pages for @file{binutils}.
   5022 @c man end
   5023 @end ignore
   5024 
   5025 @node readelf
   5026 @chapter readelf
   5027 
   5028 @cindex ELF file information
   5029 @kindex readelf
   5030 
   5031 @c man title readelf display information about ELF files
   5032 
   5033 @smallexample
   5034 @c man begin SYNOPSIS readelf
   5035 readelf [@option{-a}|@option{--all}]
   5036         [@option{-h}|@option{--file-header}]
   5037         [@option{-l}|@option{--program-headers}|@option{--segments}]
   5038         [@option{-S}|@option{--section-headers}|@option{--sections}]
   5039         [@option{-g}|@option{--section-groups}]
   5040         [@option{-t}|@option{--section-details}]
   5041         [@option{-e}|@option{--headers}]
   5042         [@option{-s}|@option{--syms}|@option{--symbols}]
   5043         [@option{--dyn-syms}|@option{--lto-syms}]
   5044         [@option{--sym-base=[0|8|10|16]}]
   5045         [@option{--demangle@var{=style}}|@option{--no-demangle}]
   5046         [@option{--quiet}]
   5047         [@option{--recurse-limit}|@option{--no-recurse-limit}]
   5048         [@option{-U} @var{method}|@option{--unicode=}@var{method}]
   5049         [@option{-X}|@option{--extra-sym-info}|@option{--no-extra-sym-info}]
   5050         [@option{-n}|@option{--notes}]
   5051         [@option{-r}|@option{--relocs}]
   5052         [@option{-u}|@option{--unwind}]
   5053         [@option{-d}|@option{--dynamic}]
   5054         [@option{-V}|@option{--version-info}]
   5055         [@option{-A}|@option{--arch-specific}]
   5056         [@option{-D}|@option{--use-dynamic}]
   5057         [@option{-L}|@option{--lint}|@option{--enable-checks}]
   5058         [@option{-x} <number or name>|@option{--hex-dump=}<number or name>]
   5059         [@option{-p} <number or name>|@option{--string-dump=}<number or name>]
   5060         [@option{-R} <number or name>|@option{--relocated-dump=}<number or name>]
   5061         [@option{-j} <number or name>|@option{--display-section=}<number or name>]
   5062         [@option{-z}|@option{--decompress}]
   5063         [@option{-c}|@option{--archive-index}]
   5064         [@option{-w[lLiaprmfFsoORtUuTgAck]}|
   5065          @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]]
   5066         [@option{-wK}|@option{--debug-dump=follow-links}]
   5067         [@option{-wN}|@option{--debug-dump=no-follow-links}]
   5068         [@option{-wD}|@option{--debug-dump=use-debuginfod}]
   5069         [@option{-wE}|@option{--debug-dump=do-not-use-debuginfod}]
   5070         [@option{-P}|@option{--process-links}]
   5071         [@option{--dwarf-depth=@var{n}}]
   5072         [@option{--dwarf-start=@var{n}}]
   5073         [@option{--ctf=}@var{section}]
   5074         [@option{--ctf-parent=}@var{section}]
   5075         [@option{--ctf-symbols=}@var{section}]
   5076         [@option{--ctf-strings=}@var{section}]
   5077         [@option{--sframe=}@var{section}]
   5078         [@option{-I}|@option{--histogram}]
   5079         [@option{-v}|@option{--version}]
   5080         [@option{-W}|@option{--wide}]
   5081         [@option{-T}|@option{--silent-truncation}]
   5082         [@option{-H}|@option{--help}]
   5083         @var{elffile}@dots{}
   5084 @c man end
   5085 @end smallexample
   5086 
   5087 @c man begin DESCRIPTION readelf
   5088 
   5089 @command{readelf} displays information about one or more ELF format object
   5090 files.  The options control what particular information to display.
   5091 
   5092 @var{elffile}@dots{} are the object files to be examined.  32-bit and
   5093 64-bit ELF files are supported, as are archives containing ELF files.
   5094 
   5095 This program performs a similar function to @command{objdump} but it
   5096 goes into more detail and it exists independently of the @sc{bfd}
   5097 library, so if there is a bug in @sc{bfd} then readelf will not be
   5098 affected.
   5099 
   5100 @c man end
   5101 
   5102 @c man begin OPTIONS readelf
   5103 
   5104 The long and short forms of options, shown here as alternatives, are
   5105 equivalent.  At least one option besides @samp{-v} or @samp{-H} must be
   5106 given.
   5107 
   5108 @table @env
   5109 @item -a
   5110 @itemx --all
   5111 Equivalent to specifying @option{--file-header},
   5112 @option{--program-headers}, @option{--sections}, @option{--symbols},
   5113 @option{--relocs}, @option{--dynamic}, @option{--notes},
   5114 @option{--version-info}, @option{--arch-specific}, @option{--unwind},
   5115 @option{--section-groups} and @option{--histogram}.
   5116 
   5117 Note - this option does not enable @option{--use-dynamic} itself, so
   5118 if that option is not present on the command line then dynamic symbols
   5119 and dynamic relocs will not be displayed.
   5120 
   5121 @item -h
   5122 @itemx --file-header
   5123 @cindex ELF file header information
   5124 Displays the information contained in the ELF header at the start of the
   5125 file.
   5126 
   5127 @item -l
   5128 @itemx --program-headers
   5129 @itemx --segments
   5130 @cindex ELF program header information
   5131 @cindex ELF segment information
   5132 Displays the information contained in the file's segment headers, if it
   5133 has any.
   5134 
   5135 @item --quiet
   5136 @cindex quiet
   5137 Suppress "no symbols" diagnostic.
   5138 
   5139 @item -S
   5140 @itemx --sections
   5141 @itemx --section-headers
   5142 @cindex ELF section information
   5143 Displays the information contained in the file's section headers, if it
   5144 has any.
   5145 
   5146 @item -g
   5147 @itemx --section-groups
   5148 @cindex ELF section group information
   5149 Displays the information contained in the file's section groups, if it
   5150 has any.
   5151 
   5152 @item -t
   5153 @itemx --section-details
   5154 @cindex ELF section information
   5155 Displays the detailed section information. Implies @option{-S}.
   5156 
   5157 @item -s
   5158 @itemx --symbols
   5159 @itemx --syms
   5160 @cindex ELF symbol table information
   5161 Displays the entries in symbol table section of the file, if it has one.
   5162 If a symbol has version information associated with it then this is
   5163 displayed as well.  The version string is displayed as a suffix to the
   5164 symbol name, preceded by an @@ character.  For example
   5165 @samp{foo@@VER_1}.  If the version is the default version to be used
   5166 when resolving unversioned references to the symbol then it is
   5167 displayed as a suffix preceded by two @@ characters.  For example
   5168 @samp{foo@@@@VER_2}.
   5169 
   5170 @item --dyn-syms
   5171 @cindex ELF dynamic symbol table information
   5172 Displays the entries in dynamic symbol table section of the file, if it
   5173 has one.  The output format is the same as the format used by the
   5174 @option{--syms} option.
   5175 
   5176 @item --lto-syms
   5177 @cindex LTO symbol table
   5178 Displays the contents of any LTO symbol tables in the file.
   5179 
   5180 @item --sym-base=[0|8|10|16]
   5181 @cindex symbol table size base
   5182 Forces the size field of the symbol table to use the given base.  Any
   5183 unrecognized options will be treated as @samp{0}.  @option{--sym-base=0}
   5184 represents the default and legacy behaviour.  This will output sizes as decimal
   5185 for numbers less than 100000.  For sizes 100000 and greater hexadecimal notation
   5186 will be used with a 0x prefix.
   5187 @option{--sym-base=8} will give the symbol sizes in octal.
   5188 @option{--sym-base=10} will always give the symbol sizes in decimal.
   5189 @option{--sym-base=16} will always give the symbol sizes in hexadecimal with a
   5190 0x prefix.
   5191 
   5192 @item -C
   5193 @itemx --demangle[=@var{style}]
   5194 @cindex demangling in nm
   5195 Decode (@dfn{demangle}) low-level symbol names into user-level names.
   5196 This makes C++ function names readable.  Different compilers have
   5197 different mangling styles.  The optional demangling style argument can
   5198 be used to choose an appropriate demangling style for your
   5199 compiler. @xref{c++filt}, for more information on demangling.
   5200 
   5201 @item --no-demangle
   5202 Do not demangle low-level symbol names.  This is the default.
   5203 
   5204 @item --recurse-limit
   5205 @itemx --no-recurse-limit
   5206 @itemx --recursion-limit
   5207 @itemx --no-recursion-limit
   5208 Enables or disables a limit on the amount of recursion performed
   5209 whilst demangling strings.  Since the name mangling formats allow for
   5210 an infinite level of recursion it is possible to create strings whose
   5211 decoding will exhaust the amount of stack space available on the host
   5212 machine, triggering a memory fault.  The limit tries to prevent this
   5213 from happening by restricting recursion to 2048 levels of nesting.
   5214 
   5215 The default is for this limit to be enabled, but disabling it may be
   5216 necessary in order to demangle truly complicated names.  Note however
   5217 that if the recursion limit is disabled then stack exhaustion is
   5218 possible and any bug reports about such an event will be rejected.
   5219 
   5220 @item -U @var{[d|i|l|e|x|h]}
   5221 @itemx --unicode=[default|invalid|locale|escape|hex|highlight]
   5222 Controls the display of non-ASCII characters in identifier names.
   5223 The default (@option{--unicode=locale} or @option{--unicode=default}) is
   5224 to treat them as multibyte characters and display them in the current
   5225 locale.  All other versions of this option treat the bytes as UTF-8
   5226 encoded values and attempt to interpret them.  If they cannot be
   5227 interpreted or if the @option{--unicode=invalid} option is used then
   5228 they are displayed as a sequence of hex bytes, encloses in curly
   5229 parethesis characters.
   5230 
   5231 Using the @option{--unicode=escape} option will display the characters
   5232 as as unicode escape sequences (@var{\uxxxx}).  Using the
   5233 @option{--unicode=hex} will display the characters as hex byte
   5234 sequences enclosed between angle brackets.
   5235 
   5236 Using the @option{--unicode=highlight} will display the characters as 
   5237 unicode escape sequences but it will also highlighted them in red,
   5238 assuming that colouring is supported by the output device.  The
   5239 colouring is intended to draw attention to the presence of unicode
   5240 sequences when they might not be expected.
   5241 
   5242 @item -X
   5243 @itemx --extra-sym-info
   5244 When displaying details of symbols, include extra information not
   5245 normally presented.  Currently this just adds the name of the section
   5246 referenced by the symbol's index field, if there is one.  In the
   5247 future more information may be displayed when this option is enabled.
   5248 
   5249 Enabling this option effectively enables the @option{--wide} option as
   5250 well, at least when displaying symbol information.
   5251 
   5252 @item --no-extra-sym-info
   5253 Disables the effect of the @option{--extra-sym-info} option.  This
   5254 is the default.
   5255 
   5256 @item -e
   5257 @itemx --headers
   5258 Display all the headers in the file.  Equivalent to @option{-h -l -S}.
   5259 
   5260 @item -n
   5261 @itemx --notes
   5262 @cindex ELF notes
   5263 Displays the contents of the NOTE segments and/or sections, if any.
   5264 
   5265 @item -r
   5266 @itemx --relocs
   5267 @cindex ELF reloc information
   5268 Displays the contents of the file's relocation section, if it has one.
   5269 
   5270 @item -u
   5271 @itemx --unwind
   5272 @cindex unwind information
   5273 Displays the contents of the file's unwind section, if it has one.  Only
   5274 the unwind sections for IA64 ELF files, as well as ARM unwind tables
   5275 (@code{.ARM.exidx} / @code{.ARM.extab}) are currently supported.  If
   5276 support is not yet implemented for your architecture you could try
   5277 dumping the contents of the @var{.eh_frames} section using the
   5278 @option{--debug-dump=frames} or @option{--debug-dump=frames-interp}
   5279 options.
   5280 
   5281 @item -d
   5282 @itemx --dynamic
   5283 @cindex ELF dynamic section information
   5284 Displays the contents of the file's dynamic section, if it has one.
   5285 
   5286 @item -V
   5287 @itemx --version-info
   5288 @cindex ELF version sections information
   5289 Displays the contents of the version sections in the file, it they
   5290 exist.
   5291 
   5292 @item -A
   5293 @itemx --arch-specific
   5294 Displays architecture-specific information in the file, if there
   5295 is any.
   5296 
   5297 @item -D
   5298 @itemx --use-dynamic
   5299 When displaying symbols, this option makes @command{readelf} use the
   5300 symbol hash tables in the file's dynamic section, rather than the
   5301 symbol table sections.
   5302 
   5303 When displaying relocations, this option makes @command{readelf}
   5304 display the dynamic relocations rather than the static relocations.
   5305 
   5306 @item -L
   5307 @itemx --lint
   5308 @itemx --enable-checks
   5309 Displays warning messages about possible problems with the file(s)
   5310 being examined.  If used on its own then all of the contents of the
   5311 file(s) will be examined.  If used with one of the dumping options
   5312 then the warning messages will only be produced for the things being
   5313 displayed.
   5314 
   5315 @item -x <number or name>
   5316 @itemx --hex-dump=<number or name>
   5317 Displays the contents of the indicated section as a hexadecimal bytes.
   5318 A number identifies a particular section by index in the section table;
   5319 any other string identifies all sections with that name in the object file.
   5320 This option can be repeated multiple times on the command line in
   5321 order to request multiple hex dumps.
   5322 
   5323 @item -R <number or name>
   5324 @itemx --relocated-dump=<number or name>
   5325 Displays the contents of the indicated section as a hexadecimal
   5326 bytes.  A number identifies a particular section by index in the
   5327 section table; any other string identifies all sections with that name
   5328 in the object file.  The contents of the section will be relocated
   5329 before they are displayed.
   5330 This option can be repeated multiple times on the command line in
   5331 order to request multiple relocated dumps.
   5332 
   5333 @item -p <number or name>
   5334 @itemx --string-dump=<number or name>
   5335 Displays the contents of the indicated section as printable strings.
   5336 A number identifies a particular section by index in the section table;
   5337 any other string identifies all sections with that name in the object file.
   5338 This option can be repeated multiple times on the command line in
   5339 order to request multiple string dumps.
   5340 
   5341 @item -j <number or name>
   5342 @itemx --display-section
   5343 Displays the contents of the indicated section according to its
   5344 section header type.  Sections containing relocations will be
   5345 displayed as if the @option{--relocations} option had been used,
   5346 sections contains symbols will be displayed as if the @option{--syms}
   5347 option had been used and so on.
   5348 
   5349 A number identifies a particular section by index in the section
   5350 table; any other string identifies all sections with that name in the
   5351 input file(s).
   5352 
   5353 This option can be repeated multiple times on the command line in
   5354 order to request multiple section dumps.
   5355 
   5356 @item -z
   5357 @itemx --decompress
   5358 Requests that the section(s) being dumped by @option{x}, @option{R} or
   5359 @option{p} options are decompressed before being displayed.  If the
   5360 section(s) are not compressed then they are displayed as is.
   5361 
   5362 @item -c
   5363 @itemx --archive-index
   5364 @cindex Archive file symbol index information
   5365 Displays the file symbol index information contained in the header part
   5366 of binary archives.  Performs the same function as the @option{t}
   5367 command to @command{ar}, but without using the BFD library.  @xref{ar}.
   5368 
   5369 @item -w[lLiaprmfFsOoRtUuTgAckK]
   5370 @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]
   5371 @include debug.options.texi
   5372 
   5373 @item -P
   5374 @itemx --process-links
   5375 Display the contents of non-debug sections found in separate debuginfo
   5376 files that are linked to the main file.  This option automatically
   5377 implies the @option{-wK} option, and only sections requested by other
   5378 command line options will be displayed.
   5379 
   5380 @include ctf.options.texi
   5381 @item --ctf-symbols=@var{section}
   5382 @item --ctf-strings=@var{section}
   5383 Specify the name of another section from which the CTF file can inherit
   5384 strings and symbols.  By default, the @code{.symtab} and its linked
   5385 string table are used.
   5386 
   5387 If either of @option{--ctf-symbols} or @option{--ctf-strings} is specified, the
   5388 other must be specified as well.
   5389 
   5390 @item -I
   5391 @itemx --histogram
   5392 Display a histogram of bucket list lengths when displaying the contents
   5393 of the symbol tables.
   5394 
   5395 @item -v
   5396 @itemx --version
   5397 Display the version number of readelf.
   5398 
   5399 @item -W
   5400 @itemx --wide
   5401 Don't break output lines to fit into 80 columns. By default
   5402 @command{readelf} breaks section header and segment listing lines for
   5403 64-bit ELF files, so that they fit into 80 columns. This option causes
   5404 @command{readelf} to print each section header resp. each segment one a
   5405 single line, which is far more readable on terminals wider than 80 columns.
   5406 
   5407 @item -T
   5408 @itemx --silent-truncation
   5409 Normally when readelf is displaying a symbol name, and it has to
   5410 truncate the name to fit into an 80 column display, it will add a
   5411 suffix of @code{[...]} to the name.  This command line option
   5412 disables this behaviour, allowing 5 more characters of the name to be
   5413 displayed and restoring the old behaviour of readelf (prior to release
   5414 2.35).
   5415 
   5416 @item -H
   5417 @itemx --help
   5418 Display the command-line options understood by @command{readelf}.
   5419 
   5420 @end table
   5421 
   5422 @c man end
   5423 
   5424 @ignore
   5425 @c man begin SEEALSO readelf
   5426 objdump(1), and the Info entries for @file{binutils}.
   5427 @c man end
   5428 @end ignore
   5429 
   5430 @node elfedit
   5431 @chapter elfedit
   5432 
   5433 @cindex Update ELF header
   5434 @kindex elfedit
   5435 
   5436 @c man title elfedit update ELF header and program property of ELF files
   5437 
   5438 @smallexample
   5439 @c man begin SYNOPSIS elfedit
   5440 elfedit [@option{--input-mach=}@var{machine}]
   5441         [@option{--input-type=}@var{type}]
   5442         [@option{--input-osabi=}@var{osabi}]
   5443         [@option{--input-abiversion=}@var{version}]
   5444         @option{--output-mach=}@var{machine}
   5445         @option{--output-type=}@var{type}
   5446         @option{--output-osabi=}@var{osabi}
   5447         @option{--output-abiversion=}@var{version}
   5448         @option{--enable-x86-feature=}@var{feature}
   5449         @option{--disable-x86-feature=}@var{feature}
   5450         [@option{-v}|@option{--version}]
   5451         [@option{-h}|@option{--help}]
   5452         @var{elffile}@dots{}
   5453 @c man end
   5454 @end smallexample
   5455 
   5456 @c man begin DESCRIPTION elfedit
   5457 
   5458 @command{elfedit} updates the ELF header and program property of ELF
   5459 files which have the matching ELF machine and file types.  The options
   5460 control how and which fields in the ELF header and program property
   5461 should be updated.
   5462 
   5463 @var{elffile}@dots{} are the ELF files to be updated.  32-bit and
   5464 64-bit ELF files are supported, as are archives containing ELF files.
   5465 @c man end
   5466 
   5467 @c man begin OPTIONS elfedit
   5468 
   5469 The long and short forms of options, shown here as alternatives, are
   5470 equivalent. At least one of the @option{--output-mach},
   5471 @option{--output-type}, @option{--output-osabi},
   5472 @option{--output-abiversion},
   5473 @option{--enable-x86-feature} and @option{--disable-x86-feature}
   5474 options must be given.
   5475 
   5476 @table @env
   5477 
   5478 @item --input-mach=@var{machine}
   5479 Set the matching input ELF machine type to @var{machine}.  If
   5480 @option{--input-mach} isn't specified, it will match any ELF
   5481 machine types.
   5482 
   5483 The supported ELF machine types are, @var{i386}, @var{IAMCU}, @var{L1OM},
   5484 @var{K1OM} and @var{x86-64}.
   5485 
   5486 @item --output-mach=@var{machine}
   5487 Change the ELF machine type in the ELF header to @var{machine}.  The
   5488 supported ELF machine types are the same as @option{--input-mach}.
   5489 
   5490 @item --input-type=@var{type}
   5491 Set the matching input ELF file type to @var{type}.  If
   5492 @option{--input-type} isn't specified, it will match any ELF file types.
   5493 
   5494 The supported ELF file types are, @var{rel}, @var{exec} and @var{dyn}.
   5495 
   5496 @item --output-type=@var{type}
   5497 Change the ELF file type in the ELF header to @var{type}.  The
   5498 supported ELF types are the same as @option{--input-type}.
   5499 
   5500 @item --input-osabi=@var{osabi}
   5501 Set the matching input ELF file OSABI to @var{osabi}.  If
   5502 @option{--input-osabi} isn't specified, it will match any ELF OSABIs.
   5503 
   5504 The supported ELF OSABIs are, @var{none}, @var{HPUX}, @var{NetBSD},
   5505 @var{GNU}, @var{Linux} (alias for @var{GNU}),
   5506 @var{Solaris}, @var{AIX}, @var{Irix},
   5507 @var{FreeBSD}, @var{TRU64}, @var{Modesto}, @var{OpenBSD}, @var{OpenVMS},
   5508 @var{NSK}, @var{AROS} and @var{FenixOS}.
   5509 
   5510 @item --output-osabi=@var{osabi}
   5511 Change the ELF OSABI in the ELF header to @var{osabi}.  The
   5512 supported ELF OSABI are the same as @option{--input-osabi}.
   5513 
   5514 @item --input-abiversion=@var{version}
   5515 Set the matching input ELF file ABIVERSION to @var{version}.
   5516 @var{version} must be between 0 and 255.  If @option{--input-abiversion}
   5517 isn't specified, it will match any ELF ABIVERSIONs.
   5518 
   5519 @item --output-abiversion=@var{version}
   5520 Change the ELF ABIVERSION in the ELF header to @var{version}.
   5521 @var{version} must be between 0 and 255.
   5522 
   5523 @item --enable-x86-feature=@var{feature}
   5524 Set the @var{feature} bit in program property in @var{exec} or @var{dyn}
   5525 ELF files with machine types of @var{i386} or @var{x86-64}.  The
   5526 supported features are, @var{ibt}, @var{shstk}, @var{lam_u48} and
   5527 @var{lam_u57}.
   5528 
   5529 @item --disable-x86-feature=@var{feature}
   5530 Clear the @var{feature} bit in program property in @var{exec} or
   5531 @var{dyn} ELF files with machine types of @var{i386} or @var{x86-64}.
   5532 The supported features are the same as @option{--enable-x86-feature}.
   5533 
   5534 Note: @option{--enable-x86-feature} and @option{--disable-x86-feature}
   5535 are available only on hosts with @samp{mmap} support.
   5536 
   5537 @item -v
   5538 @itemx --version
   5539 Display the version number of @command{elfedit}.
   5540 
   5541 @item -h
   5542 @itemx --help
   5543 Display the command-line options understood by @command{elfedit}.
   5544 
   5545 @end table
   5546 
   5547 @c man end
   5548 
   5549 @ignore
   5550 @c man begin SEEALSO elfedit
   5551 readelf(1), and the Info entries for @file{binutils}.
   5552 @c man end
   5553 @end ignore
   5554 
   5555 @node Common Options
   5556 @chapter Common Options
   5557 
   5558 The following command-line options are supported by all of the
   5559 programs described in this manual.
   5560 
   5561 @c man begin OPTIONS
   5562 @table @env
   5563 @include at-file.texi
   5564 @c man end
   5565 
   5566 @item --help
   5567 Display the command-line options supported by the program.
   5568 
   5569 @item --version
   5570 Display the version number of the program.
   5571 
   5572 @c man begin OPTIONS
   5573 @end table
   5574 @c man end
   5575 
   5576 @node Selecting the Target System
   5577 @chapter Selecting the Target System
   5578 
   5579 You can specify two aspects of the target system to the @sc{gnu}
   5580 binary file utilities, each in several ways:
   5581 
   5582 @itemize @bullet
   5583 @item
   5584 the target
   5585 
   5586 @item
   5587 the architecture
   5588 @end itemize
   5589 
   5590 In the following summaries, the lists of ways to specify values are in
   5591 order of decreasing precedence.  The ways listed first override those
   5592 listed later.
   5593 
   5594 The commands to list valid values only list the values for which the
   5595 programs you are running were configured.  If they were configured with
   5596 @option{--enable-targets=all}, the commands list most of the available
   5597 values, but a few are left out; not all targets can be configured in at
   5598 once because some of them can only be configured @dfn{native} (on hosts
   5599 with the same type as the target system).
   5600 
   5601 @menu
   5602 * Target Selection::
   5603 * Architecture Selection::
   5604 @end menu
   5605 
   5606 @node Target Selection
   5607 @section Target Selection
   5608 
   5609 A @dfn{target} is an object file format.  A given target may be
   5610 supported for multiple architectures (@pxref{Architecture Selection}).
   5611 A target selection may also have variations for different operating
   5612 systems or architectures.
   5613 
   5614 The command to list valid target values is @samp{objdump -i}
   5615 (the first column of output contains the relevant information).
   5616 
   5617 Some sample values are: @samp{a.out-hp300bsd}, @samp{ecoff-littlemips},
   5618 @samp{a.out-sunos-big}.
   5619 
   5620 You can also specify a target using a configuration triplet.  This is
   5621 the same sort of name that is passed to @file{configure} to specify a
   5622 target.  When you use a configuration triplet as an argument, it must be
   5623 fully canonicalized.  You can see the canonical version of a triplet by
   5624 running the shell script @file{config.sub} which is included with the
   5625 sources.
   5626 
   5627 Some sample configuration triplets are: @samp{m68k-hp-bsd},
   5628 @samp{mips-dec-ultrix}, @samp{sparc-sun-sunos}.
   5629 
   5630 @subheading @command{objdump} Target
   5631 
   5632 Ways to specify:
   5633 
   5634 @enumerate
   5635 @item
   5636 command-line option: @option{-b} or @option{--target}
   5637 
   5638 @item
   5639 environment variable @code{GNUTARGET}
   5640 
   5641 @item
   5642 deduced from the input file
   5643 @end enumerate
   5644 
   5645 @subheading @command{objcopy} and @command{strip} Input Target
   5646 
   5647 Ways to specify:
   5648 
   5649 @enumerate
   5650 @item
   5651 command-line options: @option{-I} or @option{--input-target}, or @option{-F} or @option{--target}
   5652 
   5653 @item
   5654 environment variable @code{GNUTARGET}
   5655 
   5656 @item
   5657 deduced from the input file
   5658 @end enumerate
   5659 
   5660 @subheading @command{objcopy} and @command{strip} Output Target
   5661 
   5662 Ways to specify:
   5663 
   5664 @enumerate
   5665 @item
   5666 command-line options: @option{-O} or @option{--output-target}, or @option{-F} or @option{--target}
   5667 
   5668 @item
   5669 the input target (see ``@command{objcopy} and @command{strip} Input Target'' above)
   5670 
   5671 @item
   5672 environment variable @code{GNUTARGET}
   5673 
   5674 @item
   5675 deduced from the input file
   5676 @end enumerate
   5677 
   5678 @subheading @command{nm}, @command{size}, and @command{strings} Target
   5679 
   5680 Ways to specify:
   5681 
   5682 @enumerate
   5683 @item
   5684 command-line option: @option{--target}
   5685 
   5686 @item
   5687 environment variable @code{GNUTARGET}
   5688 
   5689 @item
   5690 deduced from the input file
   5691 @end enumerate
   5692 
   5693 @node Architecture Selection
   5694 @section Architecture Selection
   5695 
   5696 An @dfn{architecture} is a type of @sc{cpu} on which an object file is
   5697 to run.  Its name may contain a colon, separating the name of the
   5698 processor family from the name of the particular @sc{cpu}.
   5699 
   5700 The command to list valid architecture values is @samp{objdump -i} (the
   5701 second column contains the relevant information).
   5702 
   5703 Sample values: @samp{m68k:68020}, @samp{mips:3000}, @samp{sparc}.
   5704 
   5705 @subheading @command{objdump} Architecture
   5706 
   5707 Ways to specify:
   5708 
   5709 @enumerate
   5710 @item
   5711 command-line option: @option{-m} or @option{--architecture}
   5712 
   5713 @item
   5714 deduced from the input file
   5715 @end enumerate
   5716 
   5717 @subheading @command{objcopy}, @command{nm}, @command{size}, @command{strings} Architecture
   5718 
   5719 Ways to specify:
   5720 
   5721 @enumerate
   5722 @item
   5723 deduced from the input file
   5724 @end enumerate
   5725 
   5726 @node debuginfod
   5727 @chapter debuginfod
   5728 @cindex separate debug files
   5729 
   5730 debuginfod is a web service that indexes ELF/DWARF debugging resources
   5731 by build-id and serves them over HTTP.  For more information see:
   5732 @emph{https://sourceware.org/elfutils/Debuginfod.html}
   5733 
   5734 Binutils can be built with the debuginfod client library
   5735 @code{libdebuginfod} using the @option{--with-debuginfod} configure option.
   5736 This option is enabled by default if @code{libdebuginfod} is installed
   5737 and found at configure time. This allows @command{objdump} and
   5738 @command{readelf} to automatically query debuginfod servers for
   5739 separate debug files when the files are otherwise not found.
   5740 
   5741 debuginfod is packaged with elfutils, starting with version 0.178.
   5742 You can get the latest version from `https://sourceware.org/elfutils/'.
   5743 
   5744 The DWARF info dumping tools (@command{readelf} and @command{objdump})
   5745 have options to control when they should access the debuginfod
   5746 servers.  By default this access is enabled.
   5747 
   5748 @node Reporting Bugs
   5749 @chapter Reporting Bugs
   5750 @cindex bugs
   5751 @cindex reporting bugs
   5752 
   5753 Your bug reports play an essential role in making the binary utilities
   5754 reliable.
   5755 
   5756 Reporting a bug may help you by bringing a solution to your problem, or
   5757 it may not.  But in any case the principal function of a bug report is
   5758 to help the entire community by making the next version of the binary
   5759 utilities work better.  Bug reports are your contribution to their
   5760 maintenance.
   5761 
   5762 In order for a bug report to serve its purpose, you must include the
   5763 information that enables us to fix the bug.
   5764 
   5765 @menu
   5766 * Bug Criteria::                Have you found a bug?
   5767 * Bug Reporting::               How to report bugs
   5768 @end menu
   5769 
   5770 @node Bug Criteria
   5771 @section Have You Found a Bug?
   5772 @cindex bug criteria
   5773 
   5774 If you are not sure whether you have found a bug, here are some guidelines:
   5775 
   5776 @itemize @bullet
   5777 @cindex fatal signal
   5778 @cindex crash
   5779 @item
   5780 If a binary utility gets a fatal signal, for any input whatever, that is
   5781 a bug.  Reliable utilities never crash.
   5782 
   5783 @cindex error on valid input
   5784 @item
   5785 If a binary utility produces an error message for valid input, that is a
   5786 bug.
   5787 
   5788 @item
   5789 If you are an experienced user of binary utilities, your suggestions for
   5790 improvement are welcome in any case.
   5791 @end itemize
   5792 
   5793 @node Bug Reporting
   5794 @section How to Report Bugs
   5795 @cindex bug reports
   5796 @cindex bugs, reporting
   5797 
   5798 A number of companies and individuals offer support for @sc{gnu}
   5799 products.  If you obtained the binary utilities from a support
   5800 organization, we recommend you contact that organization first.
   5801 
   5802 You can find contact information for many support companies and
   5803 individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
   5804 distribution.
   5805 
   5806 @ifset BUGURL
   5807 In any event, we also recommend that you send bug reports for the binary
   5808 utilities to @value{BUGURL}.
   5809 @end ifset
   5810 
   5811 The fundamental principle of reporting bugs usefully is this:
   5812 @strong{report all the facts}.  If you are not sure whether to state a
   5813 fact or leave it out, state it!
   5814 
   5815 Often people omit facts because they think they know what causes the
   5816 problem and assume that some details do not matter.  Thus, you might
   5817 assume that the name of a file you use in an example does not matter.
   5818 Well, probably it does not, but one cannot be sure.  Perhaps the bug is
   5819 a stray memory reference which happens to fetch from the location where
   5820 that pathname is stored in memory; perhaps, if the pathname were
   5821 different, the contents of that location would fool the utility into
   5822 doing the right thing despite the bug.  Play it safe and give a
   5823 specific, complete example.  That is the easiest thing for you to do,
   5824 and the most helpful.
   5825 
   5826 Keep in mind that the purpose of a bug report is to enable us to fix the bug if
   5827 it is new to us.  Therefore, always write your bug reports on the assumption
   5828 that the bug has not been reported previously.
   5829 
   5830 Sometimes people give a few sketchy facts and ask, ``Does this ring a
   5831 bell?''  This cannot help us fix a bug, so it is basically useless.  We
   5832 respond by asking for enough details to enable us to investigate.
   5833 You might as well expedite matters by sending them to begin with.
   5834 
   5835 To enable us to fix the bug, you should include all these things:
   5836 
   5837 @itemize @bullet
   5838 @item
   5839 The version of the utility.  Each utility announces it if you start it
   5840 with the @option{--version} argument.
   5841 
   5842 Without this, we will not know whether there is any point in looking for
   5843 the bug in the current version of the binary utilities.
   5844 
   5845 @item
   5846 Any patches you may have applied to the source, including any patches
   5847 made to the @code{BFD} library.
   5848 
   5849 @item
   5850 The type of machine you are using, and the operating system name and
   5851 version number.
   5852 
   5853 @item
   5854 What compiler (and its version) was used to compile the utilities---e.g.
   5855 ``@code{gcc-2.7}''.
   5856 
   5857 @item
   5858 The command arguments you gave the utility to observe the bug.  To
   5859 guarantee you will not omit something important, list them all.  A copy
   5860 of the Makefile (or the output from make) is sufficient.
   5861 
   5862 If we were to try to guess the arguments, we would probably guess wrong
   5863 and then we might not encounter the bug.
   5864 
   5865 @item
   5866 A complete input file, or set of input files, that will reproduce the
   5867 bug.  If the utility is reading an object file or files, then it is
   5868 generally most helpful to send the actual object files.
   5869 
   5870 If the source files were produced exclusively using @sc{gnu} programs
   5871 (e.g., @command{gcc}, @command{gas}, and/or the @sc{gnu} @command{ld}), then it
   5872 may be OK to send the source files rather than the object files.  In
   5873 this case, be sure to say exactly what version of @command{gcc}, or
   5874 whatever, was used to produce the object files.  Also say how
   5875 @command{gcc}, or whatever, was configured.
   5876 
   5877 @item
   5878 A description of what behavior you observe that you believe is
   5879 incorrect.  For example, ``It gets a fatal signal.''
   5880 
   5881 Of course, if the bug is that the utility gets a fatal signal, then we
   5882 will certainly notice it.  But if the bug is incorrect output, we might
   5883 not notice unless it is glaringly wrong.  You might as well not give us
   5884 a chance to make a mistake.
   5885 
   5886 Even if the problem you experience is a fatal signal, you should still
   5887 say so explicitly.  Suppose something strange is going on, such as your
   5888 copy of the utility is out of sync, or you have encountered a bug in
   5889 the C library on your system.  (This has happened!)  Your copy might
   5890 crash and ours would not.  If you told us to expect a crash, then when
   5891 ours fails to crash, we would know that the bug was not happening for
   5892 us.  If you had not told us to expect a crash, then we would not be able
   5893 to draw any conclusion from our observations.
   5894 
   5895 @item
   5896 If you wish to suggest changes to the source, send us context diffs, as
   5897 generated by @command{diff} with the @option{-u}, @option{-c}, or @option{-p}
   5898 option.  Always send diffs from the old file to the new file.  If you
   5899 wish to discuss something in the @command{ld} source, refer to it by
   5900 context, not by line number.
   5901 
   5902 The line numbers in our development sources will not match those in your
   5903 sources.  Your line numbers would convey no useful information to us.
   5904 @end itemize
   5905 
   5906 Here are some things that are not necessary:
   5907 
   5908 @itemize @bullet
   5909 @item
   5910 A description of the envelope of the bug.
   5911 
   5912 Often people who encounter a bug spend a lot of time investigating
   5913 which changes to the input file will make the bug go away and which
   5914 changes will not affect it.
   5915 
   5916 This is often time consuming and not very useful, because the way we
   5917 will find the bug is by running a single example under the debugger
   5918 with breakpoints, not by pure deduction from a series of examples.
   5919 We recommend that you save your time for something else.
   5920 
   5921 Of course, if you can find a simpler example to report @emph{instead}
   5922 of the original one, that is a convenience for us.  Errors in the
   5923 output will be easier to spot, running under the debugger will take
   5924 less time, and so on.
   5925 
   5926 However, simplification is not vital; if you do not want to do this,
   5927 report the bug anyway and send us the entire test case you used.
   5928 
   5929 @item
   5930 A patch for the bug.
   5931 
   5932 A patch for the bug does help us if it is a good one.  But do not omit
   5933 the necessary information, such as the test case, on the assumption that
   5934 a patch is all we need.  We might see problems with your patch and decide
   5935 to fix the problem another way, or we might not understand it at all.
   5936 
   5937 Sometimes with programs as complicated as the binary utilities it is
   5938 very hard to construct an example that will make the program follow a
   5939 certain path through the code.  If you do not send us the example, we
   5940 will not be able to construct one, so we will not be able to verify that
   5941 the bug is fixed.
   5942 
   5943 And if we cannot understand what bug you are trying to fix, or why your
   5944 patch should be an improvement, we will not install it.  A test case will
   5945 help us to understand.
   5946 
   5947 @item
   5948 A guess about what the bug is or what it depends on.
   5949 
   5950 Such guesses are usually wrong.  Even we cannot guess right about such
   5951 things without first using the debugger to find the facts.
   5952 @end itemize
   5953 
   5954 @node GNU Free Documentation License
   5955 @appendix GNU Free Documentation License
   5956 
   5957 @include fdl.texi
   5958 
   5959 @node Binutils Index
   5960 @unnumbered Binutils Index
   5961 
   5962 @printindex cp
   5963 
   5964 @bye
   5965