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