| \input texinfo @c -*- Texinfo -*- | |
| @setfilename binutils.info | |
| @settitle @sc{gnu} Binary Utilities | |
| @finalout | |
| @synindex ky cp | |
| @c man begin INCLUDE | |
| @include bfdver.texi | |
| @c man end | |
| @copying | |
| @c man begin COPYRIGHT | |
| Copyright @copyright{} 1991-2024 Free Software Foundation, Inc. | |
| Permission is granted to copy, distribute and/or modify this document | |
| under the terms of the GNU Free Documentation License, Version 1.3 | |
| or any later version published by the Free Software Foundation; | |
| with no Invariant Sections, with no Front-Cover Texts, and with no | |
| Back-Cover Texts. A copy of the license is included in the | |
| section entitled ``GNU Free Documentation License''. | |
| @c man end | |
| @end copying | |
| @dircategory Software development | |
| @direntry | |
| * Binutils: (binutils). The GNU binary utilities. | |
| @end direntry | |
| @dircategory Individual utilities | |
| @direntry | |
| * addr2line: (binutils)addr2line. Convert addresses to file and line. | |
| * ar: (binutils)ar. Create, modify, and extract from archives. | |
| * c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols. | |
| * cxxfilt: (binutils)c++filt. MS-DOS name for c++filt. | |
| * dlltool: (binutils)dlltool. Create files needed to build and use DLLs. | |
| * nm: (binutils)nm. List symbols from object files. | |
| * objcopy: (binutils)objcopy. Copy and translate object files. | |
| * objdump: (binutils)objdump. Display information from object files. | |
| * ranlib: (binutils)ranlib. Generate index to archive contents. | |
| * readelf: (binutils)readelf. Display the contents of ELF format files. | |
| * size: (binutils)size. List section sizes and total size. | |
| * strings: (binutils)strings. List printable strings from files. | |
| * strip: (binutils)strip. Discard symbols. | |
| * elfedit: (binutils)elfedit. Update ELF header and property of ELF files. | |
| * windmc: (binutils)windmc. Generator for Windows message resources. | |
| * windres: (binutils)windres. Manipulate Windows resources. | |
| @end direntry | |
| @titlepage | |
| @title The @sc{gnu} Binary Utilities | |
| @ifset VERSION_PACKAGE | |
| @subtitle @value{VERSION_PACKAGE} | |
| @end ifset | |
| @subtitle Version @value{VERSION} | |
| @sp 1 | |
| @subtitle @value{UPDATED} | |
| @author Roland H. Pesch | |
| @author Jeffrey M. Osier | |
| @author Cygnus Support | |
| @page | |
| @tex | |
| {\parskip=0pt \hfill Cygnus Support\par \hfill | |
| Texinfo \texinfoversion\par } | |
| @end tex | |
| @vskip 0pt plus 1filll | |
| @insertcopying | |
| @end titlepage | |
| @contents | |
| @node Top | |
| @top Introduction | |
| @cindex version | |
| This brief manual contains documentation for the @sc{gnu} binary | |
| utilities | |
| @ifset VERSION_PACKAGE | |
| @value{VERSION_PACKAGE} | |
| @end ifset | |
| version @value{VERSION}: | |
| @iftex | |
| @table @code | |
| @item ar | |
| Create, modify, and extract from archives | |
| @item nm | |
| List symbols from object files | |
| @item objcopy | |
| Copy and translate object files | |
| @item objdump | |
| Display information from object files | |
| @item ranlib | |
| Generate index to archive contents | |
| @item readelf | |
| Display the contents of ELF format files. | |
| @item size | |
| List file section sizes and total size | |
| @item strings | |
| List printable strings from files | |
| @item strip | |
| Discard symbols | |
| @item elfedit | |
| Update the ELF header and program property of ELF files. | |
| @item c++filt | |
| Demangle encoded C++ symbols (on MS-DOS, this program is named | |
| @code{cxxfilt}) | |
| @item addr2line | |
| Convert addresses or symbol+offset into file names and line numbers | |
| @item windres | |
| Manipulate Windows resources | |
| @item windmc | |
| Generator for Windows message resources | |
| @item dlltool | |
| Create the files needed to build and use Dynamic Link Libraries | |
| @end table | |
| @end iftex | |
| This document is distributed under the terms of the GNU Free | |
| Documentation License version 1.3. A copy of the license is included | |
| in the section entitled ``GNU Free Documentation License''. | |
| @menu | |
| * ar:: Create, modify, and extract from archives | |
| * nm:: List symbols from object files | |
| * objcopy:: Copy and translate object files | |
| * objdump:: Display information from object files | |
| * ranlib:: Generate index to archive contents | |
| * size:: List section sizes and total size | |
| * strings:: List printable strings from files | |
| * strip:: Discard symbols | |
| * c++filt:: Filter to demangle encoded C++ symbols | |
| * cxxfilt: c++filt. MS-DOS name for c++filt | |
| * addr2line:: Convert addresses or symbol+offset to file and line | |
| * windmc:: Generator for Windows message resources | |
| * windres:: Manipulate Windows resources | |
| * dlltool:: Create files needed to build and use DLLs | |
| * readelf:: Display the contents of ELF format files | |
| * elfedit:: Update ELF header and property of ELF files | |
| * Common Options:: Command-line options for all utilities | |
| * Selecting the Target System:: How these utilities determine the target | |
| * debuginfod:: Using binutils with debuginfod | |
| * Reporting Bugs:: Reporting Bugs | |
| * GNU Free Documentation License:: GNU Free Documentation License | |
| * Binutils Index:: Binutils Index | |
| @end menu | |
| @node ar | |
| @chapter ar | |
| @kindex ar | |
| @cindex archives | |
| @cindex collections of files | |
| @c man title ar create, modify, and extract from archives | |
| @smallexample | |
| ar [-]@var{p}[@var{mod}] [@option{--plugin} @var{name}] [@option{--target} @var{bfdname}] [@option{--output} @var{dirname}] [@option{--record-libdeps} @var{libdeps}] [@var{relpos}] [@var{count}] @var{archive} [@var{member}@dots{}] | |
| ar -M [ <mri-script ] | |
| @end smallexample | |
| @c man begin DESCRIPTION ar | |
| The @sc{gnu} @command{ar} program creates, modifies, and extracts from | |
| archives. An @dfn{archive} is a single file holding a collection of | |
| other files in a structure that makes it possible to retrieve | |
| the original individual files (called @dfn{members} of the archive). | |
| The original files' contents, mode (permissions), timestamp, owner, and | |
| group are preserved in the archive, and can be restored on | |
| extraction. | |
| @cindex name length | |
| @sc{gnu} @command{ar} can maintain archives whose members have names of any | |
| length; however, depending on how @command{ar} is configured on your | |
| system, a limit on member-name length may be imposed for compatibility | |
| with archive formats maintained with other tools. If it exists, the | |
| limit is often 15 characters (typical of formats related to a.out) or 16 | |
| characters (typical of formats related to coff). | |
| @cindex libraries | |
| @command{ar} is considered a binary utility because archives of this sort | |
| are most often used as @dfn{libraries} holding commonly needed | |
| subroutines. Since libraries often will depend on other libraries, | |
| @command{ar} can also record the dependencies of a library when the | |
| @option{--record-libdeps} option is specified. | |
| @cindex symbol index | |
| @command{ar} creates an index to the symbols defined in relocatable | |
| object modules in the archive when you specify the modifier @samp{s}. | |
| Once created, this index is updated in the archive whenever @command{ar} | |
| makes a change to its contents (save for the @samp{q} update operation). | |
| An archive with such an index speeds up linking to the library, and | |
| allows routines in the library to call each other without regard to | |
| their placement in the archive. | |
| You may use @samp{nm -s} or @samp{nm --print-armap} to list this index | |
| table. If an archive lacks the table, another form of @command{ar} called | |
| @command{ranlib} can be used to add just the table. | |
| @cindex thin archives | |
| @sc{gnu} @command{ar} can optionally create a @emph{thin} archive, | |
| which contains a symbol index and references to the original copies | |
| of the member files of the archive. This is useful for building | |
| libraries for use within a local build tree, where the relocatable | |
| objects are expected to remain available, and copying the contents of | |
| each object would only waste time and space. | |
| An archive can either be @emph{thin} or it can be normal. It cannot | |
| be both at the same time. Once an archive is created its format | |
| cannot be changed without first deleting it and then creating a new | |
| archive in its place. | |
| Thin archives are also @emph{flattened}, so that adding one thin | |
| archive to another thin archive does not nest it, as would happen with | |
| a normal archive. Instead the elements of the first archive are added | |
| individually to the second archive. | |
| The paths to the elements of the archive are stored relative to the | |
| archive itself. | |
| @cindex compatibility, @command{ar} | |
| @cindex @command{ar} compatibility | |
| @sc{gnu} @command{ar} is designed to be compatible with two different | |
| facilities. You can control its activity using command-line options, | |
| like the different varieties of @command{ar} on Unix systems; or, if you | |
| specify the single command-line option @option{-M}, you can control it | |
| with a script supplied via standard input, like the MRI ``librarian'' | |
| program. | |
| @c man end | |
| @menu | |
| * ar cmdline:: Controlling @command{ar} on the command line | |
| * ar scripts:: Controlling @command{ar} with a script | |
| @end menu | |
| @page | |
| @node ar cmdline | |
| @section Controlling @command{ar} on the Command Line | |
| @smallexample | |
| @c man begin SYNOPSIS ar | |
| ar [@option{-X32_64}] [@option{-}]@var{p}[@var{mod}] [@option{--plugin} @var{name}] [@option{--target} @var{bfdname}] [@option{--output} @var{dirname}] [@option{--record-libdeps} @var{libdeps}] [@option{--thin}] [@var{relpos}] [@var{count}] @var{archive} [@var{member}@dots{}] | |
| @c man end | |
| @end smallexample | |
| @cindex Unix compatibility, @command{ar} | |
| When you use @command{ar} in the Unix style, @command{ar} insists on at least two | |
| arguments to execute: one keyletter specifying the @emph{operation} | |
| (optionally accompanied by other keyletters specifying | |
| @emph{modifiers}), and the archive name to act on. | |
| Most operations can also accept further @var{member} arguments, | |
| specifying particular files to operate on. | |
| @c man begin OPTIONS ar | |
| @sc{gnu} @command{ar} allows you to mix the operation code @var{p} and modifier | |
| flags @var{mod} in any order, within the first command-line argument. | |
| If you wish, you may begin the first command-line argument with a | |
| dash. | |
| @cindex operations on archive | |
| The @var{p} keyletter specifies what operation to execute; it may be | |
| any of the following, but you must specify only one of them: | |
| @table @samp | |
| @item d | |
| @cindex deleting from archive | |
| @emph{Delete} modules from the archive. Specify the names of modules to | |
| be deleted as @var{member}@dots{}; the archive is untouched if you | |
| specify no files to delete. | |
| If you specify the @samp{v} modifier, @command{ar} lists each module | |
| as it is deleted. | |
| @item m | |
| @cindex moving in archive | |
| Use this operation to @emph{move} members in an archive. | |
| The ordering of members in an archive can make a difference in how | |
| programs are linked using the library, if a symbol is defined in more | |
| than one member. | |
| If no modifiers are used with @code{m}, any members you name in the | |
| @var{member} arguments are moved to the @emph{end} of the archive; | |
| you can use the @samp{a}, @samp{b}, or @samp{i} modifiers to move them to a | |
| specified place instead. | |
| @item p | |
| @cindex printing from archive | |
| @emph{Print} the specified members of the archive, to the standard | |
| output file. If the @samp{v} modifier is specified, show the member | |
| name before copying its contents to standard output. | |
| If you specify no @var{member} arguments, all the files in the archive are | |
| printed. | |
| @item q | |
| @cindex quick append to archive | |
| @emph{Quick append}; Historically, add the files @var{member}@dots{} to the end of | |
| @var{archive}, without checking for replacement. | |
| The modifiers @samp{a}, @samp{b}, and @samp{i} do @emph{not} affect this | |
| operation; new members are always placed at the end of the archive. | |
| The modifier @samp{v} makes @command{ar} list each file as it is appended. | |
| Since the point of this operation is speed, implementations of | |
| @command{ar} have the option of not updating the archive's symbol | |
| table if one exists. Too many different systems however assume that | |
| symbol tables are always up-to-date, so @sc{gnu} @command{ar} will | |
| rebuild the table even with a quick append. | |
| Note - @sc{gnu} @command{ar} treats the command @samp{qs} as a | |
| synonym for @samp{r} - replacing already existing files in the | |
| archive and appending new ones at the end. | |
| @item r | |
| @cindex replacement in archive | |
| Insert the files @var{member}@dots{} into @var{archive} (with | |
| @emph{replacement}). This operation differs from @samp{q} in that any | |
| previously existing members are deleted if their names match those being | |
| added. | |
| If one of the files named in @var{member}@dots{} does not exist, @command{ar} | |
| displays an error message, and leaves undisturbed any existing members | |
| of the archive matching that name. | |
| By default, new members are added at the end of the file; but you may | |
| use one of the modifiers @samp{a}, @samp{b}, or @samp{i} to request | |
| placement relative to some existing member. | |
| The modifier @samp{v} used with this operation elicits a line of | |
| output for each file inserted, along with one of the letters @samp{a} or | |
| @samp{r} to indicate whether the file was appended (no old member | |
| deleted) or replaced. | |
| @item s | |
| @cindex ranlib | |
| Add an index to the archive, or update it if it already exists. Note | |
| this command is an exception to the rule that there can only be one | |
| command letter, as it is possible to use it as either a command or a | |
| modifier. In either case it does the same thing. | |
| @item t | |
| @cindex contents of archive | |
| Display a @emph{table} listing the contents of @var{archive}, or those | |
| of the files listed in @var{member}@dots{} that are present in the | |
| archive. Normally only the member name is shown, but if the modifier | |
| @samp{O} is specified, then the corresponding offset of the member is also | |
| displayed. Finally, in order to see the modes (permissions), timestamp, | |
| owner, group, and size the @samp{v} modifier should be included. | |
| If you do not specify a @var{member}, all files in the archive | |
| are listed. | |
| @cindex repeated names in archive | |
| @cindex name duplication in archive | |
| If there is more than one file with the same name (say, @samp{fie}) in | |
| an archive (say @samp{b.a}), @samp{ar t b.a fie} lists only the | |
| first instance; to see them all, you must ask for a complete | |
| listing---in our example, @samp{ar t b.a}. | |
| @c WRS only; per Gumby, this is implementation-dependent, and in a more | |
| @c recent case in fact works the other way. | |
| @item x | |
| @cindex extract from archive | |
| @emph{Extract} members (named @var{member}) from the archive. You can | |
| use the @samp{v} modifier with this operation, to request that | |
| @command{ar} list each name as it extracts it. | |
| If you do not specify a @var{member}, all files in the archive | |
| are extracted. | |
| Files cannot be extracted from a thin archive, and there are | |
| restrictions on extracting from archives created with @option{P}: The | |
| paths must not be absolute, may not contain @code{..}, and any | |
| subdirectories in the paths must exist. If it is desired to avoid | |
| these restrictions then used the @option{--output} option to specify | |
| an output directory. | |
| @end table | |
| A number of modifiers (@var{mod}) may immediately follow the @var{p} | |
| keyletter, to specify variations on an operation's behavior: | |
| @table @samp | |
| @item a | |
| @cindex relative placement in archive | |
| Add new files @emph{after} an existing member of the | |
| archive. If you use the modifier @samp{a}, the name of an existing archive | |
| member must be present as the @var{relpos} argument, before the | |
| @var{archive} specification. | |
| @item b | |
| Add new files @emph{before} an existing member of the | |
| archive. If you use the modifier @samp{b}, the name of an existing archive | |
| member must be present as the @var{relpos} argument, before the | |
| @var{archive} specification. (same as @samp{i}). | |
| @item c | |
| @cindex creating archives | |
| @emph{Create} the archive. The specified @var{archive} is always | |
| created if it did not exist, when you request an update. But a warning is | |
| issued unless you specify in advance that you expect to create it, by | |
| using this modifier. | |
| @item D | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Operate in @emph{deterministic} mode. When adding files and the archive | |
| index use zero for UIDs, GIDs, timestamps, and use consistent file modes | |
| for all files. When this option is used, if @command{ar} is used with | |
| identical options and identical input files, multiple runs will create | |
| identical output files regardless of the input files' owners, groups, | |
| file modes, or modification times. | |
| If @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}, then this mode is on by default. | |
| It can be disabled with the @samp{U} modifier, below. | |
| @item f | |
| Truncate names in the archive. @sc{gnu} @command{ar} will normally permit file | |
| names of any length. This will cause it to create archives which are | |
| not compatible with the native @command{ar} program on some systems. If | |
| this is a concern, the @samp{f} modifier may be used to truncate file | |
| names when putting them in the archive. | |
| @item i | |
| Insert new files @emph{before} an existing member of the | |
| archive. If you use the modifier @samp{i}, the name of an existing archive | |
| member must be present as the @var{relpos} argument, before the | |
| @var{archive} specification. (same as @samp{b}). | |
| @item l | |
| @c This modifier was accepted but not used. | |
| @c whaffor ar l modifier??? presumably compat; with | |
| @c what???---doc@@cygnus.com, 25jan91 | |
| Specify dependencies of this library. The dependencies must immediately | |
| follow this option character, must use the same syntax as the linker | |
| command line, and must be specified within a single argument. I.e., if | |
| multiple items are needed, they must be quoted to form a single command | |
| line argument. For example @samp{l "-L/usr/local/lib -lmydep1 -lmydep2"} | |
| @item N | |
| Uses the @var{count} parameter. This is used if there are multiple | |
| entries in the archive with the same name. Extract or delete instance | |
| @var{count} of the given name from the archive. | |
| @item o | |
| @cindex dates in archive | |
| Preserve the @emph{original} dates of members when extracting them. If | |
| you do not specify this modifier, files extracted from the archive | |
| are stamped with the time of extraction. | |
| @item O | |
| @cindex offsets of files | |
| Display member offsets inside the archive. Use together with the @samp{t} | |
| option. | |
| @item P | |
| Use the full path name when matching or storing names in the archive. | |
| Archives created with full path names are not POSIX compliant, and | |
| thus may not work with tools other than up to date @sc{gnu} tools. | |
| Modifying such archives with @sc{gnu} @command{ar} without using | |
| @option{P} will remove the full path names unless the archive is a | |
| thin archive. Note that @option{P} may be useful when adding files to | |
| a thin archive since @option{r} without @option{P} ignores the path | |
| when choosing which element to replace. Thus | |
| @smallexample | |
| ar rcST archive.a subdir/file1 subdir/file2 file1 | |
| @end smallexample | |
| will result in the first @code{subdir/file1} being replaced with | |
| @code{file1} from the current directory. Adding @option{P} will | |
| prevent this replacement. | |
| @item s | |
| @cindex writing archive index | |
| Write an object-file index into the archive, or update an existing one, | |
| even if no other change is made to the archive. You may use this modifier | |
| flag either with any operation, or alone. Running @samp{ar s} on an | |
| archive is equivalent to running @samp{ranlib} on it. | |
| @item S | |
| @cindex not writing archive index | |
| Do not generate an archive symbol table. This can speed up building a | |
| large library in several steps. The resulting archive can not be used | |
| with the linker. In order to build a symbol table, you must omit the | |
| @samp{S} modifier on the last execution of @samp{ar}, or you must run | |
| @samp{ranlib} on the archive. | |
| @item T | |
| Deprecated alias for @option{--thin}. @option{T} is not recommended because in | |
| many ar implementations @option{T} has a different meaning, as specified by | |
| X/Open System Interface. | |
| @item u | |
| @cindex updating an archive | |
| Normally, @samp{ar r}@dots{} inserts all files | |
| listed into the archive. If you would like to insert @emph{only} those | |
| of the files you list that are newer than existing members of the same | |
| names, use this modifier. The @samp{u} modifier is allowed only for the | |
| operation @samp{r} (replace). In particular, the combination @samp{qu} is | |
| not allowed, since checking the timestamps would lose any speed | |
| advantage from the operation @samp{q}. | |
| Note - if an archive has been created in a deterministic manner, eg | |
| via the use of the @option{D} modifier, then replacement will always | |
| happen and the @option{u} modifier will be ineffective. | |
| @item U | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Do @emph{not} operate in @emph{deterministic} mode. This is the inverse | |
| of the @samp{D} modifier, above: added files and the archive index will | |
| get their actual UID, GID, timestamp, and file mode values. | |
| This is the default unless @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}. | |
| @item v | |
| This modifier requests the @emph{verbose} version of an operation. Many | |
| operations display additional information, such as filenames processed, | |
| when the modifier @samp{v} is appended. | |
| @item V | |
| This modifier shows the version number of @command{ar}. | |
| @end table | |
| The @command{ar} program also supports some command-line options which | |
| are neither modifiers nor actions, but which do change its behaviour | |
| in specific ways: | |
| @table @samp | |
| @item --help | |
| Displays the list of command-line options supported by @command{ar} | |
| and then exits. | |
| @item --version | |
| Displays the version information of @command{ar} and then exits. | |
| @item -X32_64 | |
| @command{ar} ignores an initial option spelled @samp{-X32_64}, for | |
| compatibility with AIX. The behaviour produced by this option is the | |
| default for @sc{gnu} @command{ar}. @command{ar} does not support any | |
| of the other @samp{-X} options; in particular, it does not support | |
| @option{-X32} which is the default for AIX @command{ar}. | |
| @item --plugin @var{name} | |
| @cindex plugins | |
| The optional command-line switch @option{--plugin @var{name}} causes | |
| @command{ar} to load the plugin called @var{name} which adds support | |
| for more file formats, including object files with link-time | |
| optimization information. | |
| This option is only available if the toolchain has been built with | |
| plugin support enabled. | |
| If @option{--plugin} is not provided, but plugin support has been | |
| enabled then @command{ar} iterates over the files in | |
| @file{$@{libdir@}/bfd-plugins} in alphabetic order and the first | |
| plugin that claims the object in question is used. | |
| Please note that this plugin search directory is @emph{not} the one | |
| used by @command{ld}'s @option{-plugin} option. In order to make | |
| @command{ar} use the linker plugin it must be copied into the | |
| @file{$@{libdir@}/bfd-plugins} directory. For GCC based compilations | |
| the linker plugin is called @file{liblto_plugin.so.0.0.0}. For Clang | |
| based compilations it is called @file{LLVMgold.so}. The GCC plugin | |
| is always backwards compatible with earlier versions, so it is | |
| sufficient to just copy the newest one. | |
| @item --target @var{target} | |
| The optional command-line switch @option{--target @var{bfdname}} | |
| specifies that the archive members are in an object code format | |
| different from your system's default format. See | |
| @xref{Target Selection}, for more information. | |
| @item --output @var{dirname} | |
| The @option{--output} option can be used to specify a path to a | |
| directory into which archive members should be extracted. If this | |
| option is not specified then the current directory will be used. | |
| Note - although the presence of this option does imply a @option{x} | |
| extraction operation that option must still be included on the command | |
| line. | |
| @item --record-libdeps @var{libdeps} | |
| The @option{--record-libdeps} option is identical to the @option{l} modifier, | |
| just handled in long form. | |
| @item --thin | |
| @cindex creating thin archive | |
| Make the specified @var{archive} a @emph{thin} archive. If it already | |
| exists and is a regular archive, the existing members must be present | |
| in the same directory as @var{archive}. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO ar | |
| nm(1), ranlib(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node ar scripts | |
| @section Controlling @command{ar} with a Script | |
| @smallexample | |
| ar -M [ <@var{script} ] | |
| @end smallexample | |
| @cindex MRI compatibility, @command{ar} | |
| @cindex scripts, @command{ar} | |
| If you use the single command-line option @samp{-M} with @command{ar}, you | |
| can control its operation with a rudimentary command language. This | |
| form of @command{ar} operates interactively if standard input is coming | |
| directly from a terminal. During interactive use, @command{ar} prompts for | |
| input (the prompt is @samp{AR >}), and continues executing even after | |
| errors. If you redirect standard input to a script file, no prompts are | |
| issued, and @command{ar} abandons execution (with a nonzero exit code) | |
| on any error. | |
| The @command{ar} command language is @emph{not} designed to be equivalent | |
| to the command-line options; in fact, it provides somewhat less control | |
| over archives. The only purpose of the command language is to ease the | |
| transition to @sc{gnu} @command{ar} for developers who already have scripts | |
| written for the MRI ``librarian'' program. | |
| The syntax for the @command{ar} command language is straightforward: | |
| @itemize @bullet | |
| @item | |
| commands are recognized in upper or lower case; for example, @code{LIST} | |
| is the same as @code{list}. In the following descriptions, commands are | |
| shown in upper case for clarity. | |
| @item | |
| a single command may appear on each line; it is the first word on the | |
| line. | |
| @item | |
| empty lines are allowed, and have no effect. | |
| @item | |
| comments are allowed; text after either of the characters @samp{*} | |
| or @samp{;} is ignored. | |
| @item | |
| Whenever you use a list of names as part of the argument to an @command{ar} | |
| command, you can separate the individual names with either commas or | |
| blanks. Commas are shown in the explanations below, for clarity. | |
| @item | |
| @samp{+} is used as a line continuation character; if @samp{+} appears | |
| at the end of a line, the text on the following line is considered part | |
| of the current command. | |
| @end itemize | |
| Here are the commands you can use in @command{ar} scripts, or when using | |
| @command{ar} interactively. Three of them have special significance: | |
| @code{OPEN} or @code{CREATE} specify a @dfn{current archive}, which is | |
| a temporary file required for most of the other commands. | |
| @code{SAVE} commits the changes so far specified by the script. Prior | |
| to @code{SAVE}, commands affect only the temporary copy of the current | |
| archive. | |
| @table @code | |
| @item ADDLIB @var{archive} | |
| @itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module}) | |
| Add all the contents of @var{archive} (or, if specified, each named | |
| @var{module} from @var{archive}) to the current archive. | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @item ADDMOD @var{member}, @var{member}, @dots{} @var{member} | |
| @c FIXME! w/Replacement?? If so, like "ar r @var{archive} @var{names}" | |
| @c else like "ar q..." | |
| Add each named @var{member} as a module in the current archive. | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @item CLEAR | |
| Discard the contents of the current archive, canceling the effect of | |
| any operations since the last @code{SAVE}. May be executed (with no | |
| effect) even if no current archive is specified. | |
| @item CREATE @var{archive} | |
| Creates an archive, and makes it the current archive (required for many | |
| other commands). The new archive is created with a temporary name; it | |
| is not actually saved as @var{archive} until you use @code{SAVE}. | |
| You can overwrite existing archives; similarly, the contents of any | |
| existing file named @var{archive} will not be destroyed until @code{SAVE}. | |
| @item DELETE @var{module}, @var{module}, @dots{} @var{module} | |
| Delete each listed @var{module} from the current archive; equivalent to | |
| @samp{ar -d @var{archive} @var{module} @dots{} @var{module}}. | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @item DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) | |
| @itemx DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) @var{outputfile} | |
| List each named @var{module} present in @var{archive}. The separate | |
| command @code{VERBOSE} specifies the form of the output: when verbose | |
| output is off, output is like that of @samp{ar -t @var{archive} | |
| @var{module}@dots{}}. When verbose output is on, the listing is like | |
| @samp{ar -tv @var{archive} @var{module}@dots{}}. | |
| Output normally goes to the standard output stream; however, if you | |
| specify @var{outputfile} as a final argument, @command{ar} directs the | |
| output to that file. | |
| @item END | |
| Exit from @command{ar}, with a @code{0} exit code to indicate successful | |
| completion. This command does not save the output file; if you have | |
| changed the current archive since the last @code{SAVE} command, those | |
| changes are lost. | |
| @item EXTRACT @var{module}, @var{module}, @dots{} @var{module} | |
| Extract each named @var{module} from the current archive, writing them | |
| into the current directory as separate files. Equivalent to @samp{ar -x | |
| @var{archive} @var{module}@dots{}}. | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @ignore | |
| @c FIXME Tokens but no commands??? | |
| @item FULLDIR | |
| @item HELP | |
| @end ignore | |
| @item LIST | |
| Display full contents of the current archive, in ``verbose'' style | |
| regardless of the state of @code{VERBOSE}. The effect is like @samp{ar | |
| tv @var{archive}}. (This single command is a @sc{gnu} @command{ar} | |
| enhancement, rather than present for MRI compatibility.) | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @item OPEN @var{archive} | |
| Opens an existing archive for use as the current archive (required for | |
| many other commands). Any changes as the result of subsequent commands | |
| will not actually affect @var{archive} until you next use @code{SAVE}. | |
| @item REPLACE @var{module}, @var{module}, @dots{} @var{module} | |
| In the current archive, replace each existing @var{module} (named in | |
| the @code{REPLACE} arguments) from files in the current working directory. | |
| To execute this command without errors, both the file, and the module in | |
| the current archive, must exist. | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @item VERBOSE | |
| Toggle an internal flag governing the output from @code{DIRECTORY}. | |
| When the flag is on, @code{DIRECTORY} output matches output from | |
| @samp{ar -tv }@dots{}. | |
| @item SAVE | |
| Commit your changes to the current archive, and actually save it as a | |
| file with the name specified in the last @code{CREATE} or @code{OPEN} | |
| command. | |
| Requires prior use of @code{OPEN} or @code{CREATE}. | |
| @end table | |
| @iftex | |
| @node ld | |
| @chapter ld | |
| @cindex linker | |
| @kindex ld | |
| The @sc{gnu} linker @command{ld} is now described in a separate manual. | |
| @xref{Top,, Overview,, Using LD: the @sc{gnu} linker}. | |
| @end iftex | |
| @node nm | |
| @chapter nm | |
| @cindex symbols | |
| @kindex nm | |
| @c man title nm list symbols from object files | |
| @smallexample | |
| @c man begin SYNOPSIS nm | |
| nm [@option{-A}|@option{-o}|@option{--print-file-name}] | |
| [@option{-a}|@option{--debug-syms}] | |
| [@option{-B}|@option{--format=bsd}] | |
| [@option{-C}|@option{--demangle}[=@var{style}]] | |
| [@option{-D}|@option{--dynamic}] | |
| [@option{-f}@var{format}|@option{--format=}@var{format}] | |
| [@option{-g}|@option{--extern-only}] | |
| [@option{-h}|@option{--help}] | |
| [@option{--ifunc-chars=@var{CHARS}}] | |
| [@option{-j}|@option{--format=just-symbols}] | |
| [@option{-l}|@option{--line-numbers}] [@option{--inlines}] | |
| [@option{-n}|@option{-v}|@option{--numeric-sort}] | |
| [@option{-P}|@option{--portability}] | |
| [@option{-p}|@option{--no-sort}] | |
| [@option{-r}|@option{--reverse-sort}] | |
| [@option{-S}|@option{--print-size}] | |
| [@option{-s}|@option{--print-armap}] | |
| [@option{-t} @var{radix}|@option{--radix=}@var{radix}] | |
| [@option{-u}|@option{--undefined-only}] | |
| [@option{-U}|@option{--defined-only}] | |
| [@option{-V}|@option{--version}] | |
| [@option{-W}|@option{--no-weak}] | |
| [@option{-X 32_64}] | |
| [@option{--no-demangle}] | |
| [@option{--no-recurse-limit}|@option{--recurse-limit}]] | |
| [@option{--plugin} @var{name}] | |
| [@option{--size-sort}] | |
| [@option{--special-syms}] | |
| [@option{--synthetic}] | |
| [@option{--target=}@var{bfdname}] | |
| [@option{--unicode=}@var{method}] | |
| [@option{--with-symbol-versions}] | |
| [@option{--without-symbol-versions}] | |
| [@var{objfile}@dots{}] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION nm | |
| @sc{gnu} @command{nm} lists the symbols from object files @var{objfile}@dots{}. | |
| If no object files are listed as arguments, @command{nm} assumes the file | |
| @file{a.out}. | |
| For each symbol, @command{nm} shows: | |
| @itemize @bullet | |
| @item | |
| The symbol value, in the radix selected by options (see below), or | |
| hexadecimal by default. | |
| @item | |
| The symbol type. At least the following types are used; others are, as | |
| well, depending on the object file format. If lowercase, the symbol is | |
| usually local; if uppercase, the symbol is global (external). There | |
| are however a few lowercase symbols that are shown for special global | |
| symbols (@code{u}, @code{v} and @code{w}). | |
| @c Some more detail on exactly what these symbol types are used for | |
| @c would be nice. | |
| @table @code | |
| @item A | |
| The symbol's value is absolute, and will not be changed by further | |
| linking. | |
| @item B | |
| @itemx b | |
| The symbol is in the BSS data section. This section typically | |
| contains zero-initialized or uninitialized data, although the exact | |
| behavior is system dependent. | |
| @item C | |
| @itemx c | |
| The symbol is common. Common symbols are uninitialized data. When | |
| linking, multiple common symbols may appear with the same name. If the | |
| symbol is defined anywhere, the common symbols are treated as undefined | |
| references. | |
| @ifclear man | |
| For more details on common symbols, see the discussion of | |
| --warn-common in @ref{Options,,Linker options,ld.info,The GNU linker}. | |
| @end ifclear | |
| The lower case @var{c} character is used when the symbol is in a | |
| special section for small commons. | |
| @item D | |
| @itemx d | |
| The symbol is in the initialized data section. | |
| @item G | |
| @itemx g | |
| The symbol is in an initialized data section for small objects. Some | |
| object file formats permit more efficient access to small data objects, | |
| such as a global int variable as opposed to a large global array. | |
| @item i | |
| For PE format files this indicates that the symbol is in a section | |
| specific to the implementation of DLLs. | |
| For ELF format files this indicates that the symbol is an indirect | |
| function. This is a GNU extension to the standard set of ELF symbol | |
| types. It indicates a symbol which if referenced by a relocation does | |
| not evaluate to its address, but instead must be invoked at runtime. | |
| The runtime execution will then return the value to be used in the | |
| relocation. | |
| Note - the actual symbols display for GNU indirect symbols is | |
| controlled by the @option{--ifunc-chars} command line option. If this | |
| option has been provided then the first character in the string will | |
| be used for global indirect function symbols. If the string contains | |
| a second character then that will be used for local indirect function | |
| symbols. | |
| @item I | |
| The symbol is an indirect reference to another symbol. | |
| @item N | |
| The symbol is a debugging symbol. | |
| @item n | |
| The symbol is in a non-data, non-code, non-debug read-only section. | |
| @item p | |
| The symbol is in a stack unwind section. | |
| @item R | |
| @itemx r | |
| The symbol is in a read only data section. | |
| @item S | |
| @itemx s | |
| The symbol is in an uninitialized or zero-initialized data section | |
| for small objects. | |
| @item T | |
| @itemx t | |
| The symbol is in the text (code) section. | |
| @item U | |
| The symbol is undefined. | |
| @item u | |
| The symbol is a unique global symbol. This is a GNU extension to the | |
| standard set of ELF symbol bindings. For such a symbol the dynamic linker | |
| will make sure that in the entire process there is just one symbol with | |
| this name and type in use. | |
| @item V | |
| @itemx v | |
| The symbol is a weak object. When a weak defined symbol is linked with | |
| a normal defined symbol, the normal defined symbol is used with no error. | |
| When a weak undefined symbol is linked and the symbol is not defined, | |
| the value of the weak symbol becomes zero with no error. On some | |
| systems, uppercase indicates that a default value has been specified. | |
| @item W | |
| @itemx w | |
| The symbol is a weak symbol that has not been specifically tagged as a | |
| weak object symbol. When a weak defined symbol is linked with a normal | |
| defined symbol, the normal defined symbol is used with no error. | |
| When a weak undefined symbol is linked and the symbol is not defined, | |
| the value of the symbol is determined in a system-specific manner without | |
| error. On some systems, uppercase indicates that a default value has been | |
| specified. | |
| @item - | |
| The symbol is a stabs symbol in an a.out object file. In this case, the | |
| next values printed are the stabs other field, the stabs desc field, and | |
| the stab type. Stabs symbols are used to hold debugging information. | |
| @item ? | |
| The symbol type is unknown, or object file format specific. | |
| @end table | |
| @item | |
| The symbol name. If a symbol has version information associated with it, | |
| then the version information is displayed as well. If the versioned | |
| symbol is undefined or hidden from linker, the version string is displayed | |
| as a suffix to the symbol name, preceded by an @@ character. For example | |
| @samp{foo@@VER_1}. If the version is the default version to be used when | |
| resolving unversioned references to the symbol, then it is displayed as a | |
| suffix preceded by two @@ characters. For example @samp{foo@@@@VER_2}. | |
| @end itemize | |
| @c man end | |
| @c man begin OPTIONS nm | |
| The long and short forms of options, shown here as alternatives, are | |
| equivalent. | |
| @table @env | |
| @item -A | |
| @itemx -o | |
| @itemx --print-file-name | |
| @cindex input file name | |
| @cindex file name | |
| @cindex source file name | |
| Precede each symbol by the name of the input file (or archive member) | |
| in which it was found, rather than identifying the input file once only, | |
| before all of its symbols. | |
| @item -a | |
| @itemx --debug-syms | |
| @cindex debugging symbols | |
| Display all symbols, even debugger-only symbols; normally these are not | |
| listed. | |
| @item -B | |
| @cindex @command{nm} format | |
| @cindex @command{nm} compatibility | |
| The same as @option{--format=bsd} (for compatibility with the MIPS @command{nm}). | |
| @item -C | |
| @itemx --demangle[=@var{style}] | |
| @cindex demangling in nm | |
| Decode (@dfn{demangle}) low-level symbol names into user-level names. | |
| Besides removing any initial underscore prepended by the system, this | |
| makes C++ function names readable. Different compilers have different | |
| mangling styles. The optional demangling style argument can be used to | |
| choose an appropriate demangling style for your compiler. @xref{c++filt}, | |
| for more information on demangling. | |
| @item --no-demangle | |
| Do not demangle low-level symbol names. This is the default. | |
| @item --recurse-limit | |
| @itemx --no-recurse-limit | |
| @itemx --recursion-limit | |
| @itemx --no-recursion-limit | |
| Enables or disables a limit on the amount of recursion performed | |
| whilst demangling strings. Since the name mangling formats allow for | |
| an infinite level of recursion it is possible to create strings whose | |
| decoding will exhaust the amount of stack space available on the host | |
| machine, triggering a memory fault. The limit tries to prevent this | |
| from happening by restricting recursion to 2048 levels of nesting. | |
| The default is for this limit to be enabled, but disabling it may be | |
| necessary in order to demangle truly complicated names. Note however | |
| that if the recursion limit is disabled then stack exhaustion is | |
| possible and any bug reports about such an event will be rejected. | |
| @item -D | |
| @itemx --dynamic | |
| @cindex dynamic symbols | |
| Display the dynamic symbols rather than the normal symbols. This is | |
| only meaningful for dynamic objects, such as certain types of shared | |
| libraries. | |
| @item -f @var{format} | |
| @itemx --format=@var{format} | |
| @cindex @command{nm} format | |
| @cindex @command{nm} compatibility | |
| Use the output format @var{format}, which can be @code{bsd}, | |
| @code{sysv}, @code{posix} or @code{just-symbols}. The default is @code{bsd}. | |
| Only the first character of @var{format} is significant; it can be | |
| either upper or lower case. | |
| @item -g | |
| @itemx --extern-only | |
| @cindex external symbols | |
| Display only external symbols. | |
| @item -h | |
| @itemx --help | |
| Show a summary of the options to @command{nm} and exit. | |
| @item --ifunc-chars=@var{CHARS} | |
| When display GNU indirect function symbols @command{nm} will default | |
| to using the @code{i} character for both local indirect functions and | |
| global indirect functions. The @option{--ifunc-chars} option allows | |
| the user to specify a string containing one or two characters. The | |
| first character will be used for global indirect function symbols and | |
| the second character, if present, will be used for local indirect | |
| function symbols. | |
| @item j | |
| The same as @option{--format=just-symbols}. | |
| @item -l | |
| @itemx --line-numbers | |
| @cindex symbol line numbers | |
| For each symbol, use debugging information to try to find a filename and | |
| line number. For a defined symbol, look for the line number of the | |
| address of the symbol. For an undefined symbol, look for the line | |
| number of a relocation entry which refers to the symbol. If line number | |
| information can be found, print it after the other symbol information. | |
| @item --inlines | |
| @cindex objdump inlines | |
| When option @option{-l} is active, if the address belongs to a | |
| function that was inlined, then this option causes the source | |
| information for all enclosing scopes back to the first non-inlined | |
| function to be printed as well. For example, if @code{main} inlines | |
| @code{callee1} which inlines @code{callee2}, and address is from | |
| @code{callee2}, the source information for @code{callee1} and @code{main} | |
| will also be printed. | |
| @item -n | |
| @itemx -v | |
| @itemx --numeric-sort | |
| Sort symbols numerically by their addresses, rather than alphabetically | |
| by their names. | |
| @item -p | |
| @itemx --no-sort | |
| @cindex sorting symbols | |
| Do not bother to sort the symbols in any order; print them in the order | |
| encountered. | |
| @item -P | |
| @itemx --portability | |
| Use the POSIX.2 standard output format instead of the default format. | |
| Equivalent to @samp{-f posix}. | |
| @item -r | |
| @itemx --reverse-sort | |
| Reverse the order of the sort (whether numeric or alphabetic); let the | |
| last come first. | |
| @item -S | |
| @itemx --print-size | |
| Print both value and size of defined symbols for the @code{bsd} output style. | |
| This option has no effect for object formats that do not record symbol | |
| sizes, unless @samp{--size-sort} is also used in which case a | |
| calculated size is displayed. | |
| @item -s | |
| @itemx --print-armap | |
| @cindex symbol index, listing | |
| When listing symbols from archive members, include the index: a mapping | |
| (stored in the archive by @command{ar} or @command{ranlib}) of which modules | |
| contain definitions for which names. | |
| @item -t @var{radix} | |
| @itemx --radix=@var{radix} | |
| Use @var{radix} as the radix for printing the symbol values. It must be | |
| @samp{d} for decimal, @samp{o} for octal, or @samp{x} for hexadecimal. | |
| @item -u | |
| @itemx --undefined-only | |
| @cindex external symbols | |
| @cindex undefined symbols | |
| Display only undefined symbols (those external to each object file). | |
| By default both defined and undefined symbols are displayed. | |
| @item -U | |
| @itemx --defined-only | |
| @cindex external symbols | |
| @cindex undefined symbols | |
| Display only defined symbols for each object file. | |
| By default both defined and undefined symbols are displayed. | |
| @item -V | |
| @itemx --version | |
| Show the version number of @command{nm} and exit. | |
| @item -X | |
| This option is ignored for compatibility with the AIX version of | |
| @command{nm}. It takes one parameter which must be the string | |
| @option{32_64}. The default mode of AIX @command{nm} corresponds | |
| to @option{-X 32}, which is not supported by @sc{gnu} @command{nm}. | |
| @item --plugin @var{name} | |
| @cindex plugins | |
| Load the plugin called @var{name} to add support for extra target | |
| types. This option is only available if the toolchain has been built | |
| with plugin support enabled. | |
| If @option{--plugin} is not provided, but plugin support has been | |
| enabled then @command{nm} iterates over the files in | |
| @file{$@{libdir@}/bfd-plugins} in alphabetic order and the first | |
| plugin that claims the object in question is used. | |
| Please note that this plugin search directory is @emph{not} the one | |
| used by @command{ld}'s @option{-plugin} option. In order to make | |
| @command{nm} use the linker plugin it must be copied into the | |
| @file{$@{libdir@}/bfd-plugins} directory. For GCC based compilations | |
| the linker plugin is called @file{liblto_plugin.so.0.0.0}. For Clang | |
| based compilations it is called @file{LLVMgold.so}. The GCC plugin | |
| is always backwards compatible with earlier versions, so it is | |
| sufficient to just copy the newest one. | |
| @item --size-sort | |
| Sort symbols by size. For ELF objects symbol sizes are read from the | |
| ELF, for other object types the symbol sizes are computed as the | |
| difference between the value of the symbol and the value of the symbol | |
| with the next higher value. If the @code{bsd} output format is used | |
| the size of the symbol is printed, rather than the value, and | |
| @samp{-S} must be used in order both size and value to be printed. | |
| Note - this option does not work if @option{--undefined-only} has been | |
| enabled as undefined symbols have no size. | |
| @item --special-syms | |
| Display symbols which have a target-specific special meaning. These | |
| symbols are usually used by the target for some special processing and | |
| are not normally helpful when included in the normal symbol lists. | |
| For example for ARM targets this option would skip the mapping symbols | |
| used to mark transitions between ARM code, THUMB code and data. | |
| @item --synthetic | |
| Include synthetic symbols in the output. These are special symbols | |
| created by the linker for various purposes. They are not shown by | |
| default since they are not part of the binary's original source code. | |
| @item --unicode=@var{[default|invalid|locale|escape|hex|highlight]} | |
| Controls the display of UTF-8 encoded multibyte characters in strings. | |
| The default (@option{--unicode=default}) is to give them no special | |
| treatment. The @option{--unicode=locale} option displays the sequence | |
| in the current locale, which may or may not support them. The options | |
| @option{--unicode=hex} and @option{--unicode=invalid} display them as | |
| hex byte sequences enclosed by either angle brackets or curly braces. | |
| The @option{--unicode=escape} option displays them as escape sequences | |
| (@var{\uxxxx}) and the @option{--unicode=highlight} option displays | |
| them as escape sequences highlighted in red (if supported by the | |
| output device). The colouring is intended to draw attention to the | |
| presence of unicode sequences where they might not be expected. | |
| @item -W | |
| @itemx --no-weak | |
| Do not display weak symbols. | |
| @item --with-symbol-versions | |
| @item --without-symbol-versions | |
| Enables or disables the display of symbol version information. The | |
| version string is displayed as a suffix to the symbol name, preceded | |
| by an @@ character. For example @samp{foo@@VER_1}. If the version is | |
| the default version to be used when resolving unversioned references | |
| to the symbol then it is displayed as a suffix preceded by two @@ | |
| characters. For example @samp{foo@@@@VER_2}. By default, symbol | |
| version information is displayed. | |
| @item --target=@var{bfdname} | |
| @cindex object code format | |
| Specify an object code format other than your system's default format. | |
| @xref{Target Selection}, for more information. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO nm | |
| ar(1), objdump(1), ranlib(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node objcopy | |
| @chapter objcopy | |
| @c man title objcopy copy and translate object files | |
| @smallexample | |
| @c man begin SYNOPSIS objcopy | |
| objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}] | |
| [@option{-I} @var{bfdname}|@option{--input-target=}@var{bfdname}] | |
| [@option{-O} @var{bfdname}|@option{--output-target=}@var{bfdname}] | |
| [@option{-B} @var{bfdarch}|@option{--binary-architecture=}@var{bfdarch}] | |
| [@option{-S}|@option{--strip-all}] | |
| [@option{-g}|@option{--strip-debug}] | |
| [@option{--strip-unneeded}] | |
| [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}] | |
| [@option{--keep-file-symbols}] | |
| [@option{--keep-section-symbols}] | |
| [@option{-N} @var{symbolname}|@option{--strip-symbol=}@var{symbolname}] | |
| [@option{--strip-unneeded-symbol=}@var{symbolname}] | |
| [@option{-G} @var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}] | |
| [@option{--localize-hidden}] | |
| [@option{-L} @var{symbolname}|@option{--localize-symbol=}@var{symbolname}] | |
| [@option{--globalize-symbol=}@var{symbolname}] | |
| [@option{--globalize-symbols=}@var{filename}] | |
| [@option{-W} @var{symbolname}|@option{--weaken-symbol=}@var{symbolname}] | |
| [@option{-w}|@option{--wildcard}] | |
| [@option{-x}|@option{--discard-all}] | |
| [@option{-X}|@option{--discard-locals}] | |
| [@option{-b} @var{byte}|@option{--byte=}@var{byte}] | |
| [@option{-i} [@var{breadth}]|@option{--interleave}[=@var{breadth}]] | |
| [@option{--interleave-width=}@var{width}] | |
| [@option{-j} @var{sectionpattern}|@option{--only-section=}@var{sectionpattern}] | |
| [@option{-R} @var{sectionpattern}|@option{--remove-section=}@var{sectionpattern}] | |
| [@option{--keep-section=}@var{sectionpattern}] | |
| [@option{--remove-relocations=}@var{sectionpattern}] | |
| [@option{--strip-section-headers}] | |
| [@option{-p}|@option{--preserve-dates}] | |
| [@option{-D}|@option{--enable-deterministic-archives}] | |
| [@option{-U}|@option{--disable-deterministic-archives}] | |
| [@option{--debugging}] | |
| [@option{--gap-fill=}@var{val}] | |
| [@option{--pad-to=}@var{address}] | |
| [@option{--set-start=}@var{val}] | |
| [@option{--adjust-start=}@var{incr}] | |
| [@option{--change-addresses=}@var{incr}] | |
| [@option{--change-section-address} @var{sectionpattern}@{=,+,-@}@var{val}] | |
| [@option{--change-section-lma} @var{sectionpattern}@{=,+,-@}@var{val}] | |
| [@option{--change-section-vma} @var{sectionpattern}@{=,+,-@}@var{val}] | |
| [@option{--change-warnings}] [@option{--no-change-warnings}] | |
| [@option{--set-section-flags} @var{sectionpattern}=@var{flags}] | |
| [@option{--set-section-alignment} @var{sectionpattern}=@var{align}] | |
| [@option{--add-section} @var{sectionname}=@var{filename}] | |
| [@option{--dump-section} @var{sectionname}=@var{filename}] | |
| [@option{--update-section} @var{sectionname}=@var{filename}] | |
| [@option{--rename-section} @var{oldname}=@var{newname}[,@var{flags}]] | |
| [@option{--long-section-names} @{enable,disable,keep@}] | |
| [@option{--change-leading-char}] [@option{--remove-leading-char}] | |
| [@option{--reverse-bytes=}@var{num}] | |
| [@option{--srec-len=}@var{ival}] [@option{--srec-forceS3}] | |
| [@option{--redefine-sym} @var{old}=@var{new}] | |
| [@option{--redefine-syms=}@var{filename}] | |
| [@option{--weaken}] | |
| [@option{--keep-symbols=}@var{filename}] | |
| [@option{--strip-symbols=}@var{filename}] | |
| [@option{--strip-unneeded-symbols=}@var{filename}] | |
| [@option{--keep-global-symbols=}@var{filename}] | |
| [@option{--localize-symbols=}@var{filename}] | |
| [@option{--weaken-symbols=}@var{filename}] | |
| [@option{--add-symbol} @var{name}=[@var{section}:]@var{value}[,@var{flags}]] | |
| [@option{--alt-machine-code=}@var{index}] | |
| [@option{--prefix-symbols=}@var{string}] | |
| [@option{--prefix-sections=}@var{string}] | |
| [@option{--prefix-alloc-sections=}@var{string}] | |
| [@option{--add-gnu-debuglink=}@var{path-to-file}] | |
| [@option{--only-keep-debug}] | |
| [@option{--strip-dwo}] | |
| [@option{--extract-dwo}] | |
| [@option{--extract-symbol}] | |
| [@option{--writable-text}] | |
| [@option{--readonly-text}] | |
| [@option{--pure}] | |
| [@option{--impure}] | |
| [@option{--file-alignment=}@var{num}] | |
| [@option{--heap=}@var{reserve}[,@var{commit}]] | |
| [@option{--image-base=}@var{address}] | |
| [@option{--section-alignment=}@var{num}] | |
| [@option{--stack=}@var{reserve}[,@var{commit}]] | |
| [@option{--subsystem=}@var{which}:@var{major}.@var{minor}] | |
| [@option{--compress-debug-sections}] | |
| [@option{--decompress-debug-sections}] | |
| [@option{--elf-stt-common=@var{val}}] | |
| [@option{--merge-notes}] | |
| [@option{--no-merge-notes}] | |
| [@option{--verilog-data-width=@var{val}}] | |
| [@option{-v}|@option{--verbose}] | |
| [@option{-V}|@option{--version}] | |
| [@option{--help}] [@option{--info}] | |
| @var{infile} [@var{outfile}] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION objcopy | |
| The @sc{gnu} @command{objcopy} utility copies the contents of an object | |
| file to another. @command{objcopy} uses the @sc{gnu} @sc{bfd} Library to | |
| read and write the object files. It can write the destination object | |
| file in a format different from that of the source object file. The | |
| exact behavior of @command{objcopy} is controlled by command-line options. | |
| Note that @command{objcopy} should be able to copy a fully linked file | |
| between any two formats. However, copying a relocatable object file | |
| between any two formats may not work as expected. | |
| @command{objcopy} creates temporary files to do its translations and | |
| deletes them afterward. @command{objcopy} uses @sc{bfd} to do all its | |
| translation work; it has access to all the formats described in @sc{bfd} | |
| and thus is able to recognize most formats without being told | |
| explicitly. @xref{BFD,,BFD,ld.info,Using LD}. | |
| @command{objcopy} can be used to generate S-records by using an output | |
| target of @samp{srec} (e.g., use @samp{-O srec}). | |
| @command{objcopy} can be used to generate a raw binary file by using an | |
| output target of @samp{binary} (e.g., use @option{-O binary}). When | |
| @command{objcopy} generates a raw binary file, it will essentially produce | |
| a memory dump of the contents of the input object file. All symbols and | |
| relocation information will be discarded. The memory dump will start at | |
| the load address of the lowest section copied into the output file. | |
| When generating an S-record or a raw binary file, it may be helpful to | |
| use @option{-S} to remove sections containing debugging information. In | |
| some cases @option{-R} will be useful to remove sections which contain | |
| information that is not needed by the binary file. | |
| Note---@command{objcopy} is not able to change the endianness of its input | |
| files. If the input format has an endianness (some formats do not), | |
| @command{objcopy} can only copy the inputs into file formats that have the | |
| same endianness or which have no endianness (e.g., @samp{srec}). | |
| (However, see the @option{--reverse-bytes} option.) | |
| @c man end | |
| @c man begin OPTIONS objcopy | |
| @table @env | |
| @item @var{infile} | |
| @itemx @var{outfile} | |
| The input and output files, respectively. | |
| If you do not specify @var{outfile}, @command{objcopy} creates a | |
| temporary file and destructively renames the result with | |
| the name of @var{infile}. | |
| @item -I @var{bfdname} | |
| @itemx --input-target=@var{bfdname} | |
| Consider the source file's object format to be @var{bfdname}, rather than | |
| attempting to deduce it. @xref{Target Selection}, for more information. | |
| @item -O @var{bfdname} | |
| @itemx --output-target=@var{bfdname} | |
| Write the output file using the object format @var{bfdname}. | |
| @xref{Target Selection}, for more information. | |
| @item -F @var{bfdname} | |
| @itemx --target=@var{bfdname} | |
| Use @var{bfdname} as the object format for both the input and the output | |
| file; i.e., simply transfer data from source to destination with no | |
| translation. @xref{Target Selection}, for more information. | |
| @item -B @var{bfdarch} | |
| @itemx --binary-architecture=@var{bfdarch} | |
| Useful when transforming a architecture-less input file into an object file. | |
| In this case the output architecture can be set to @var{bfdarch}. This | |
| option will be ignored if the input file has a known @var{bfdarch}. You | |
| can access this binary data inside a program by referencing the special | |
| symbols that are created by the conversion process. These symbols are | |
| called _binary_@var{objfile}_start, _binary_@var{objfile}_end and | |
| _binary_@var{objfile}_size. e.g. you can transform a picture file into | |
| an object file and then access it in your code using these symbols. | |
| @item -j @var{sectionpattern} | |
| @itemx --only-section=@var{sectionpattern} | |
| Copy only the indicated sections from the input file to the output file. | |
| This option may be given more than once. Note that using this option | |
| inappropriately may make the output file unusable. Wildcard | |
| characters are accepted in @var{sectionpattern}. | |
| If the first character of @var{sectionpattern} is the exclamation | |
| point (!) then matching sections will not be copied, even if earlier | |
| use of @option{--only-section} on the same command line would | |
| otherwise copy it. For example: | |
| @smallexample | |
| --only-section=.text.* --only-section=!.text.foo | |
| @end smallexample | |
| will copy all sectinos matching '.text.*' but not the section | |
| '.text.foo'. | |
| @item -R @var{sectionpattern} | |
| @itemx --remove-section=@var{sectionpattern} | |
| Remove any section matching @var{sectionpattern} from the output file. | |
| This option may be given more than once. Note that using this option | |
| inappropriately may make the output file unusable. Wildcard | |
| characters are accepted in @var{sectionpattern}. Using both the | |
| @option{-j} and @option{-R} options together results in undefined | |
| behaviour. | |
| If the first character of @var{sectionpattern} is the exclamation | |
| point (!) then matching sections will not be removed even if an | |
| earlier use of @option{--remove-section} on the same command line | |
| would otherwise remove it. For example: | |
| @smallexample | |
| --remove-section=.text.* --remove-section=!.text.foo | |
| @end smallexample | |
| will remove all sections matching the pattern '.text.*', but will not | |
| remove the section '.text.foo'. | |
| @item --keep-section=@var{sectionpattern} | |
| When removing sections from the output file, keep sections that match | |
| @var{sectionpattern}. | |
| @item --remove-relocations=@var{sectionpattern} | |
| Remove non-dynamic relocations from the output file for any section | |
| matching @var{sectionpattern}. This option may be given more than | |
| once. Note that using this option inappropriately may make the output | |
| file unusable, and attempting to remove a dynamic relocation section | |
| such as @samp{.rela.plt} from an executable or shared library with | |
| @option{--remove-relocations=.plt} will not work. Wildcard characters | |
| are accepted in @var{sectionpattern}. | |
| For example: | |
| @smallexample | |
| --remove-relocations=.text.* | |
| @end smallexample | |
| will remove the relocations for all sections matching the pattern | |
| '.text.*'. | |
| If the first character of @var{sectionpattern} is the exclamation | |
| point (!) then matching sections will not have their relocation | |
| removed even if an earlier use of @option{--remove-relocations} on the | |
| same command line would otherwise cause the relocations to be removed. | |
| For example: | |
| @smallexample | |
| --remove-relocations=.text.* --remove-relocations=!.text.foo | |
| @end smallexample | |
| will remove all relocations for sections matching the pattern | |
| '.text.*', but will not remove relocations for the section | |
| '.text.foo'. | |
| @item --strip-section-headers | |
| Strip section header This option is specific to ELF files. | |
| Implies @option{--strip-all} and @option{--merge-notes}. | |
| @item -S | |
| @itemx --strip-all | |
| Do not copy relocation and symbol information from the source file. | |
| Also deletes debug sections. | |
| @item -g | |
| @itemx --strip-debug | |
| Do not copy debugging symbols or sections from the source file. | |
| @item --strip-unneeded | |
| Remove all symbols that are not needed for relocation processing in | |
| addition to debugging symbols and sections stripped by | |
| @option{--strip-debug}. | |
| @item -K @var{symbolname} | |
| @itemx --keep-symbol=@var{symbolname} | |
| When stripping symbols, keep symbol @var{symbolname} even if it would | |
| normally be stripped. This option may be given more than once. | |
| @item -N @var{symbolname} | |
| @itemx --strip-symbol=@var{symbolname} | |
| Do not copy symbol @var{symbolname} from the source file. This option | |
| may be given more than once. | |
| @item --strip-unneeded-symbol=@var{symbolname} | |
| Do not copy symbol @var{symbolname} from the source file unless it is needed | |
| by a relocation. This option may be given more than once. | |
| @item -G @var{symbolname} | |
| @itemx --keep-global-symbol=@var{symbolname} | |
| Keep only symbol @var{symbolname} global. Make all other symbols local | |
| to the file, so that they are not visible externally. This option may | |
| be given more than once. Note: this option cannot be used in | |
| conjunction with the @option{--globalize-symbol} or | |
| @option{--globalize-symbols} options. | |
| @item --localize-hidden | |
| In an ELF object, mark all symbols that have hidden or internal visibility | |
| as local. This option applies on top of symbol-specific localization options | |
| such as @option{-L}. | |
| @item -L @var{symbolname} | |
| @itemx --localize-symbol=@var{symbolname} | |
| Convert a global or weak symbol called @var{symbolname} into a local | |
| symbol, so that it is not visible externally. This option may be | |
| given more than once. Note - unique symbols are not converted. | |
| @item -W @var{symbolname} | |
| @itemx --weaken-symbol=@var{symbolname} | |
| Make symbol @var{symbolname} weak. This option may be given more than once. | |
| @item --globalize-symbol=@var{symbolname} | |
| Give symbol @var{symbolname} global scoping so that it is visible | |
| outside of the file in which it is defined. This option may be given | |
| more than once. Note: this option cannot be used in conjunction with | |
| the @option{-G} or @option{--keep-global-symbol} options. | |
| @item -w | |
| @itemx --wildcard | |
| Permit regular expressions in @var{symbolname}s used in other command | |
| line options. The question mark (?), asterisk (*), backslash (\) and | |
| square brackets ([]) operators can be used anywhere in the symbol | |
| name. If the first character of the symbol name is the exclamation | |
| point (!) then the sense of the switch is reversed for that symbol. | |
| For example: | |
| @smallexample | |
| -w -W !foo -W fo* | |
| @end smallexample | |
| would cause objcopy to weaken all symbols that start with ``fo'' | |
| except for the symbol ``foo''. | |
| @item -x | |
| @itemx --discard-all | |
| Do not copy non-global symbols from the source file. | |
| @c FIXME any reason to prefer "non-global" to "local" here? | |
| @item -X | |
| @itemx --discard-locals | |
| Do not copy compiler-generated local symbols. | |
| (These usually start with @samp{L} or @samp{.}.) | |
| @item -b @var{byte} | |
| @itemx --byte=@var{byte} | |
| If interleaving has been enabled via the @option{--interleave} option | |
| then start the range of bytes to keep at the @var{byte}th byte. | |
| @var{byte} can be in the range from 0 to @var{breadth}-1, where | |
| @var{breadth} is the value given by the @option{--interleave} option. | |
| @item -i [@var{breadth}] | |
| @itemx --interleave[=@var{breadth}] | |
| Only copy a range out of every @var{breadth} bytes. (Header data is | |
| not affected). Select which byte in the range begins the copy with | |
| the @option{--byte} option. Select the width of the range with the | |
| @option{--interleave-width} option. | |
| This option is useful for creating files to program @sc{rom}. It is | |
| typically used with an @code{srec} output target. Note that | |
| @command{objcopy} will complain if you do not specify the | |
| @option{--byte} option as well. | |
| The default interleave breadth is 4, so with @option{--byte} set to 0, | |
| @command{objcopy} would copy the first byte out of every four bytes | |
| from the input to the output. | |
| @item --interleave-width=@var{width} | |
| When used with the @option{--interleave} option, copy @var{width} | |
| bytes at a time. The start of the range of bytes to be copied is set | |
| by the @option{--byte} option, and the extent of the range is set with | |
| the @option{--interleave} option. | |
| The default value for this option is 1. The value of @var{width} plus | |
| the @var{byte} value set by the @option{--byte} option must not exceed | |
| the interleave breadth set by the @option{--interleave} option. | |
| This option can be used to create images for two 16-bit flashes interleaved | |
| in a 32-bit bus by passing @option{-b 0 -i 4 --interleave-width=2} | |
| and @option{-b 2 -i 4 --interleave-width=2} to two @command{objcopy} | |
| commands. If the input was '12345678' then the outputs would be | |
| '1256' and '3478' respectively. | |
| @item -p | |
| @itemx --preserve-dates | |
| Set the access and modification dates of the output file to be the same | |
| as those of the input file. | |
| This option also copies the date stored in a PE format file's header, | |
| unless the SOURCE_DATE_EPOCH environment variable is defined. If it | |
| is defined then this variable will be used as the date stored in the | |
| header, interpreted as the number of seconds since the Unix epoch. | |
| @item -D | |
| @itemx --enable-deterministic-archives | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Operate in @emph{deterministic} mode. When copying archive members | |
| and writing the archive index, use zero for UIDs, GIDs, timestamps, | |
| and use consistent file modes for all files. | |
| If @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}, then this mode is on by default. | |
| It can be disabled with the @samp{-U} option, below. | |
| @item -U | |
| @itemx --disable-deterministic-archives | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Do @emph{not} operate in @emph{deterministic} mode. This is the | |
| inverse of the @option{-D} option, above: when copying archive members | |
| and writing the archive index, use their actual UID, GID, timestamp, | |
| and file mode values. | |
| This is the default unless @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}. | |
| @item --debugging | |
| Convert debugging information, if possible. This is not the default | |
| because only certain debugging formats are supported, and the | |
| conversion process can be time consuming. | |
| @item --gap-fill @var{val} | |
| Fill gaps between sections with @var{val}. This operation applies to | |
| the @emph{load address} (LMA) of the sections. It is done by increasing | |
| the size of the section with the lower address, and filling in the extra | |
| space created with @var{val}. | |
| @item --pad-to @var{address} | |
| Pad the output file up to the load address @var{address}. This is | |
| done by increasing the size of the last section. The extra space is | |
| filled in with the value specified by @option{--gap-fill} (default zero). | |
| @item --set-start @var{val} | |
| Set the start address (also known as the entry address) of the new | |
| file to @var{val}. Not all object file formats support setting the | |
| start address. | |
| @item --change-start @var{incr} | |
| @itemx --adjust-start @var{incr} | |
| @cindex changing start address | |
| Change the start address (also known as the entry address) by adding | |
| @var{incr}. Not all object file formats support setting the start | |
| address. | |
| @item --change-addresses @var{incr} | |
| @itemx --adjust-vma @var{incr} | |
| @cindex changing object addresses | |
| Change the VMA and LMA addresses of all sections, as well as the start | |
| address, by adding @var{incr}. Some object file formats do not permit | |
| section addresses to be changed arbitrarily. Note that this does not | |
| relocate the sections; if the program expects sections to be loaded at a | |
| certain address, and this option is used to change the sections such | |
| that they are loaded at a different address, the program may fail. | |
| @item --change-section-address @var{sectionpattern}@{=,+,-@}@var{val} | |
| @itemx --adjust-section-vma @var{sectionpattern}@{=,+,-@}@var{val} | |
| @cindex changing section address | |
| Set or change both the VMA address and the LMA address of any section | |
| matching @var{sectionpattern}. If @samp{=} is used, the section | |
| address is set to @var{val}. Otherwise, @var{val} is added to or | |
| subtracted from the section address. See the comments under | |
| @option{--change-addresses}, above. If @var{sectionpattern} does not | |
| match any sections in the input file, a warning will be issued, unless | |
| @option{--no-change-warnings} is used. | |
| @item --change-section-lma @var{sectionpattern}@{=,+,-@}@var{val} | |
| @cindex changing section LMA | |
| Set or change the LMA address of any sections matching | |
| @var{sectionpattern}. The LMA address is the address where the | |
| section will be loaded into memory at program load time. Normally | |
| this is the same as the VMA address, which is the address of the | |
| section at program run time, but on some systems, especially those | |
| where a program is held in ROM, the two can be different. If @samp{=} | |
| is used, the section address is set to @var{val}. Otherwise, | |
| @var{val} is added to or subtracted from the section address. See the | |
| comments under @option{--change-addresses}, above. If | |
| @var{sectionpattern} does not match any sections in the input file, a | |
| warning will be issued, unless @option{--no-change-warnings} is used. | |
| @item --change-section-vma @var{sectionpattern}@{=,+,-@}@var{val} | |
| @cindex changing section VMA | |
| Set or change the VMA address of any section matching | |
| @var{sectionpattern}. The VMA address is the address where the | |
| section will be located once the program has started executing. | |
| Normally this is the same as the LMA address, which is the address | |
| where the section will be loaded into memory, but on some systems, | |
| especially those where a program is held in ROM, the two can be | |
| different. If @samp{=} is used, the section address is set to | |
| @var{val}. Otherwise, @var{val} is added to or subtracted from the | |
| section address. See the comments under @option{--change-addresses}, | |
| above. If @var{sectionpattern} does not match any sections in the | |
| input file, a warning will be issued, unless | |
| @option{--no-change-warnings} is used. | |
| Note - changing the VMA of sections in a fully linked binary can be | |
| dangerous since there may be code that expects the sections to be | |
| located at their old address. | |
| @item --change-warnings | |
| @itemx --adjust-warnings | |
| If @option{--change-section-address} or @option{--change-section-lma} or | |
| @option{--change-section-vma} is used, and the section pattern does not | |
| match any sections, issue a warning. This is the default. | |
| @item --no-change-warnings | |
| @itemx --no-adjust-warnings | |
| Do not issue a warning if @option{--change-section-address} or | |
| @option{--adjust-section-lma} or @option{--adjust-section-vma} is used, even | |
| if the section pattern does not match any sections. | |
| @item --set-section-flags @var{sectionpattern}=@var{flags} | |
| Set the flags for any sections matching @var{sectionpattern}. The | |
| @var{flags} argument is a comma separated string of flag names. The | |
| recognized names are @samp{alloc}, @samp{contents}, @samp{load}, | |
| @samp{noload}, @samp{readonly}, @samp{code}, @samp{data}, @samp{rom}, | |
| @samp{exclude}, @samp{share}, @samp{debug}, and @samp{large}. | |
| You can set the @samp{contents} flag for a section which does not have | |
| contents, but it is not meaningful to clear the @samp{contents} flag of a | |
| section which does have contents--just remove the section instead. Not all | |
| flags are meaningful for all object file formats. In particular the | |
| @samp{share} flag is only meaningful for COFF format files and not for ELF | |
| format files. The ELF x86-64 specific flag @samp{large} corresponds to | |
| SHF_X86_64_LARGE. | |
| @item --set-section-alignment @var{sectionpattern}=@var{align} | |
| Set the alignment for any sections matching @var{sectionpattern}. | |
| @var{align} specifies the alignment in bytes and must be a power of | |
| two, i.e. 1, 2, 4, 8@dots{}. | |
| Note - setting a section's alignment will not automatically align its | |
| LMA or VMA addresses. If those need to be changed as well then the | |
| @option{--change-section-lma} and/or @option{--change-section-vma} | |
| options should be used. Also note that changing VMAs can cause | |
| problems in fully linked binaries where there may be code that expects | |
| the contents of the sections to be located at their old address. | |
| @item --add-section @var{sectionname}=@var{filename} | |
| Add a new section named @var{sectionname} while copying the file. The | |
| contents of the new section are taken from the file @var{filename}. The | |
| size of the section will be the size of the file. This option only | |
| works on file formats which can support sections with arbitrary names. | |
| Note - it may be necessary to use the @option{--set-section-flags} | |
| option to set the attributes of the newly created section. | |
| @item --dump-section @var{sectionname}=@var{filename} | |
| Place the contents of section named @var{sectionname} into the file | |
| @var{filename}, overwriting any contents that may have been there | |
| previously. This option is the inverse of @option{--add-section}. | |
| This option is similar to the @option{--only-section} option except | |
| that it does not create a formatted file, it just dumps the contents | |
| as raw binary data, without applying any relocations. The option can | |
| be specified more than once. | |
| @item --update-section @var{sectionname}=@var{filename} | |
| Replace the existing contents of a section named @var{sectionname} | |
| with the contents of file @var{filename}. The size of the section | |
| will be adjusted to the size of the file. The section flags for | |
| @var{sectionname} will be unchanged. For ELF format files the section | |
| to segment mapping will also remain unchanged, something which is not | |
| possible using @option{--remove-section} followed by | |
| @option{--add-section}. The option can be specified more than once. | |
| Note - it is possible to use @option{--rename-section} and | |
| @option{--update-section} to both update and rename a section from one | |
| command line. In this case, pass the original section name to | |
| @option{--update-section}, and the original and new section names to | |
| @option{--rename-section}. | |
| @item --add-symbol @var{name}=[@var{section}:]@var{value}[,@var{flags}] | |
| Add a new symbol named @var{name} while copying the file. This option may be | |
| specified multiple times. If the @var{section} is given, the symbol will be | |
| associated with and relative to that section, otherwise it will be an ABS | |
| symbol. Specifying an undefined section will result in a fatal error. There | |
| is no check for the value, it will be taken as specified. Symbol flags can | |
| be specified and not all flags will be meaningful for all object file | |
| formats. By default, the symbol will be global. The special flag | |
| 'before=@var{othersym}' will insert the new symbol in front of the specified | |
| @var{othersym}, otherwise the symbol(s) will be added at the end of the | |
| symbol table in the order they appear. | |
| @item --rename-section @var{oldname}=@var{newname}[,@var{flags}] | |
| Rename a section from @var{oldname} to @var{newname}, optionally | |
| changing the section's flags to @var{flags} in the process. This has | |
| the advantage over using a linker script to perform the rename in that | |
| the output stays as an object file and does not become a linked | |
| executable. This option accepts the same set of flags as the | |
| @option{--set-section-flags} option. | |
| This option is particularly helpful when the input format is binary, | |
| since this will always create a section called .data. If for example, | |
| you wanted instead to create a section called .rodata containing binary | |
| data you could use the following command line to achieve it: | |
| @smallexample | |
| objcopy -I binary -O <output_format> -B <architecture> \ | |
| --rename-section .data=.rodata,alloc,load,readonly,data,contents \ | |
| <input_binary_file> <output_object_file> | |
| @end smallexample | |
| @item --long-section-names @{enable,disable,keep@} | |
| Controls the handling of long section names when processing @code{COFF} | |
| and @code{PE-COFF} object formats. The default behaviour, @samp{keep}, | |
| is to preserve long section names if any are present in the input file. | |
| The @samp{enable} and @samp{disable} options forcibly enable or disable | |
| the use of long section names in the output object; when @samp{disable} | |
| is in effect, any long section names in the input object will be truncated. | |
| The @samp{enable} option will only emit long section names if any are | |
| present in the inputs; this is mostly the same as @samp{keep}, but it | |
| is left undefined whether the @samp{enable} option might force the | |
| creation of an empty string table in the output file. | |
| @item --change-leading-char | |
| Some object file formats use special characters at the start of | |
| symbols. The most common such character is underscore, which compilers | |
| often add before every symbol. This option tells @command{objcopy} to | |
| change the leading character of every symbol when it converts between | |
| object file formats. If the object file formats use the same leading | |
| character, this option has no effect. Otherwise, it will add a | |
| character, or remove a character, or change a character, as | |
| appropriate. | |
| @item --remove-leading-char | |
| If the first character of a global symbol is a special symbol leading | |
| character used by the object file format, remove the character. The | |
| most common symbol leading character is underscore. This option will | |
| remove a leading underscore from all global symbols. This can be useful | |
| if you want to link together objects of different file formats with | |
| different conventions for symbol names. This is different from | |
| @option{--change-leading-char} because it always changes the symbol name | |
| when appropriate, regardless of the object file format of the output | |
| file. | |
| @item --reverse-bytes=@var{num} | |
| Reverse the bytes in a section with output contents. A section length must | |
| be evenly divisible by the value given in order for the swap to be able to | |
| take place. Reversing takes place before the interleaving is performed. | |
| This option is used typically in generating ROM images for problematic | |
| target systems. For example, on some target boards, the 32-bit words | |
| fetched from 8-bit ROMs are re-assembled in little-endian byte order | |
| regardless of the CPU byte order. Depending on the programming model, the | |
| endianness of the ROM may need to be modified. | |
| Consider a simple file with a section containing the following eight | |
| bytes: @code{12345678}. | |
| Using @samp{--reverse-bytes=2} for the above example, the bytes in the | |
| output file would be ordered @code{21436587}. | |
| Using @samp{--reverse-bytes=4} for the above example, the bytes in the | |
| output file would be ordered @code{43218765}. | |
| By using @samp{--reverse-bytes=2} for the above example, followed by | |
| @samp{--reverse-bytes=4} on the output file, the bytes in the second | |
| output file would be ordered @code{34127856}. | |
| @item --srec-len=@var{ival} | |
| Meaningful only for srec output. Set the maximum length of the Srecords | |
| being produced to @var{ival}. This length covers both address, data and | |
| crc fields. | |
| @item --srec-forceS3 | |
| Meaningful only for srec output. Avoid generation of S1/S2 records, | |
| creating S3-only record format. | |
| @item --redefine-sym @var{old}=@var{new} | |
| Change the name of a symbol @var{old}, to @var{new}. This can be useful | |
| when one is trying link two things together for which you have no | |
| source, and there are name collisions. | |
| @item --redefine-syms=@var{filename} | |
| Apply @option{--redefine-sym} to each symbol pair "@var{old} @var{new}" | |
| listed in the file @var{filename}. @var{filename} is simply a flat file, | |
| with one symbol pair per line. Line comments may be introduced by the hash | |
| character. This option may be given more than once. | |
| @item --weaken | |
| Change all global symbols in the file to be weak. This can be useful | |
| when building an object which will be linked against other objects using | |
| the @option{-R} option to the linker. This option is only effective when | |
| using an object file format which supports weak symbols. | |
| @item --keep-symbols=@var{filename} | |
| Apply @option{--keep-symbol} option to each symbol listed in the file | |
| @var{filename}. @var{filename} is simply a flat file, with one symbol | |
| name per line. Line comments may be introduced by the hash character. | |
| This option may be given more than once. | |
| @item --strip-symbols=@var{filename} | |
| Apply @option{--strip-symbol} option to each symbol listed in the file | |
| @var{filename}. @var{filename} is simply a flat file, with one symbol | |
| name per line. Line comments may be introduced by the hash character. | |
| This option may be given more than once. | |
| @item --strip-unneeded-symbols=@var{filename} | |
| Apply @option{--strip-unneeded-symbol} option to each symbol listed in | |
| the file @var{filename}. @var{filename} is simply a flat file, with one | |
| symbol name per line. Line comments may be introduced by the hash | |
| character. This option may be given more than once. | |
| @item --keep-global-symbols=@var{filename} | |
| Apply @option{--keep-global-symbol} option to each symbol listed in the | |
| file @var{filename}. @var{filename} is simply a flat file, with one | |
| symbol name per line. Line comments may be introduced by the hash | |
| character. This option may be given more than once. | |
| @item --localize-symbols=@var{filename} | |
| Apply @option{--localize-symbol} option to each symbol listed in the file | |
| @var{filename}. @var{filename} is simply a flat file, with one symbol | |
| name per line. Line comments may be introduced by the hash character. | |
| This option may be given more than once. | |
| @item --globalize-symbols=@var{filename} | |
| Apply @option{--globalize-symbol} option to each symbol listed in the file | |
| @var{filename}. @var{filename} is simply a flat file, with one symbol | |
| name per line. Line comments may be introduced by the hash character. | |
| This option may be given more than once. Note: this option cannot be | |
| used in conjunction with the @option{-G} or @option{--keep-global-symbol} | |
| options. | |
| @item --weaken-symbols=@var{filename} | |
| Apply @option{--weaken-symbol} option to each symbol listed in the file | |
| @var{filename}. @var{filename} is simply a flat file, with one symbol | |
| name per line. Line comments may be introduced by the hash character. | |
| This option may be given more than once. | |
| @item --alt-machine-code=@var{index} | |
| If the output architecture has alternate machine codes, use the | |
| @var{index}th code instead of the default one. This is useful in case | |
| a machine is assigned an official code and the tool-chain adopts the | |
| new code, but other applications still depend on the original code | |
| being used. For ELF based architectures if the @var{index} | |
| alternative does not exist then the value is treated as an absolute | |
| number to be stored in the e_machine field of the ELF header. | |
| @item --writable-text | |
| Mark the output text as writable. This option isn't meaningful for all | |
| object file formats. | |
| @item --readonly-text | |
| Make the output text write protected. This option isn't meaningful for all | |
| object file formats. | |
| @item --pure | |
| Mark the output file as demand paged. This option isn't meaningful for all | |
| object file formats. | |
| @item --impure | |
| Mark the output file as impure. This option isn't meaningful for all | |
| object file formats. | |
| @item --prefix-symbols=@var{string} | |
| Prefix all symbols in the output file with @var{string}. | |
| @item --prefix-sections=@var{string} | |
| Prefix all section names in the output file with @var{string}. | |
| @item --prefix-alloc-sections=@var{string} | |
| Prefix all the names of all allocated sections in the output file with | |
| @var{string}. | |
| @item --add-gnu-debuglink=@var{path-to-file} | |
| Creates a .gnu_debuglink section which contains a reference to | |
| @var{path-to-file} and adds it to the output file. Note: the file at | |
| @var{path-to-file} must exist. Part of the process of adding the | |
| .gnu_debuglink section involves embedding a checksum of the contents | |
| of the debug info file into the section. | |
| If the debug info file is built in one location but it is going to be | |
| installed at a later time into a different location then do not use | |
| the path to the installed location. The @option{--add-gnu-debuglink} | |
| option will fail because the installed file does not exist yet. | |
| Instead put the debug info file in the current directory and use the | |
| @option{--add-gnu-debuglink} option without any directory components, | |
| like this: | |
| @smallexample | |
| objcopy --add-gnu-debuglink=foo.debug | |
| @end smallexample | |
| At debug time the debugger will attempt to look for the separate debug | |
| info file in a set of known locations. The exact set of these | |
| locations varies depending upon the distribution being used, but it | |
| typically includes: | |
| @table @code | |
| @item * The same directory as the executable. | |
| @item * A sub-directory of the directory containing the executable | |
| called .debug | |
| @item * A global debug directory such as /usr/lib/debug. | |
| @end table | |
| As long as the debug info file has been installed into one of these | |
| locations before the debugger is run everything should work | |
| correctly. | |
| @item --keep-section-symbols | |
| When stripping a file, perhaps with @option{--strip-debug} or | |
| @option{--strip-unneeded}, retain any symbols specifying section names, | |
| which would otherwise get stripped. | |
| @item --keep-file-symbols | |
| When stripping a file, perhaps with @option{--strip-debug} or | |
| @option{--strip-unneeded}, retain any symbols specifying source file names, | |
| which would otherwise get stripped. | |
| @item --only-keep-debug | |
| Strip a file, removing contents of any sections that would not be | |
| stripped by @option{--strip-debug} and leaving the debugging sections | |
| intact. In ELF files, this preserves all note sections in the output. | |
| Note - the section headers of the stripped sections are preserved, | |
| including their sizes, but the contents of the section are discarded. | |
| The section headers are preserved so that other tools can match up the | |
| debuginfo file with the real executable, even if that executable has | |
| been relocated to a different address space. | |
| The intention is that this option will be used in conjunction with | |
| @option{--add-gnu-debuglink} to create a two part executable. One a | |
| stripped binary which will occupy less space in RAM and in a | |
| distribution and the second a debugging information file which is only | |
| needed if debugging abilities are required. The suggested procedure | |
| to create these files is as follows: | |
| @enumerate | |
| @item Link the executable as normal. Assuming that it is called | |
| @code{foo} then... | |
| @item Run @code{objcopy --only-keep-debug foo foo.dbg} to | |
| create a file containing the debugging info. | |
| @item Run @code{objcopy --strip-debug foo} to create a | |
| stripped executable. | |
| @item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo} | |
| to add a link to the debugging info into the stripped executable. | |
| @end enumerate | |
| Note---the choice of @code{.dbg} as an extension for the debug info | |
| file is arbitrary. Also the @code{--only-keep-debug} step is | |
| optional. You could instead do this: | |
| @enumerate | |
| @item Link the executable as normal. | |
| @item Copy @code{foo} to @code{foo.full} | |
| @item Run @code{objcopy --strip-debug foo} | |
| @item Run @code{objcopy --add-gnu-debuglink=foo.full foo} | |
| @end enumerate | |
| i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the | |
| full executable. It does not have to be a file created by the | |
| @option{--only-keep-debug} switch. | |
| Note---this switch is only intended for use on fully linked files. It | |
| does not make sense to use it on object files where the debugging | |
| information may be incomplete. Besides the gnu_debuglink feature | |
| currently only supports the presence of one filename containing | |
| debugging information, not multiple filenames on a one-per-object-file | |
| basis. | |
| @item --strip-dwo | |
| Remove the contents of all DWARF .dwo sections, leaving the | |
| remaining debugging sections and all symbols intact. | |
| This option is intended for use by the compiler as part of | |
| the @option{-gsplit-dwarf} option, which splits debug information | |
| between the .o file and a separate .dwo file. The compiler | |
| generates all debug information in the same file, then uses | |
| the @option{--extract-dwo} option to copy the .dwo sections to | |
| the .dwo file, then the @option{--strip-dwo} option to remove | |
| those sections from the original .o file. | |
| @item --extract-dwo | |
| Extract the contents of all DWARF .dwo sections. See the | |
| @option{--strip-dwo} option for more information. | |
| @item --file-alignment @var{num} | |
| Specify the file alignment. Sections in the file will always begin at | |
| file offsets which are multiples of this number. This defaults to | |
| 512. | |
| [This option is specific to PE targets.] | |
| @item --heap @var{reserve} | |
| @itemx --heap @var{reserve},@var{commit} | |
| Specify the number of bytes of memory to reserve (and optionally commit) | |
| to be used as heap for this program. | |
| [This option is specific to PE targets.] | |
| @item --image-base @var{value} | |
| Use @var{value} as the base address of your program or dll. This is | |
| the lowest memory location that will be used when your program or dll | |
| is loaded. To reduce the need to relocate and improve performance of | |
| your dlls, each should have a unique base address and not overlap any | |
| other dlls. The default is 0x400000 for executables, and 0x10000000 | |
| for dlls. | |
| [This option is specific to PE targets.] | |
| @item --section-alignment @var{num} | |
| [This option is specific to PE targets.] | |
| Sets the section alignment field in the PE header - if one is present | |
| in the binary. Sections in memory will always begin at addresses | |
| which are a multiple of this number. Defaults to 0x1000. | |
| Note - this option will also set the alignment field in each section's | |
| flags. | |
| Note - if a section's LMA or VMA addresses are no longer aligned, and | |
| those addresses have not been set via the @option{--set-section-lma} or | |
| @option{--set-section-vma} options, and the file has been fully | |
| relocated then a warning message will be issued. It will then be up | |
| to the user to decide if the LMA and VMA need updating. | |
| @item --stack @var{reserve} | |
| @itemx --stack @var{reserve},@var{commit} | |
| Specify the number of bytes of memory to reserve (and optionally commit) | |
| to be used as stack for this program. | |
| [This option is specific to PE targets.] | |
| @item --subsystem @var{which} | |
| @itemx --subsystem @var{which}:@var{major} | |
| @itemx --subsystem @var{which}:@var{major}.@var{minor} | |
| Specifies the subsystem under which your program will execute. The | |
| legal values for @var{which} are @code{native}, @code{windows}, | |
| @code{console}, @code{posix}, @code{efi-app}, @code{efi-bsd}, | |
| @code{efi-rtd}, @code{sal-rtd}, and @code{xbox}. You may optionally set | |
| the subsystem version also. Numeric values are also accepted for | |
| @var{which}. | |
| [This option is specific to PE targets.] | |
| @item --extract-symbol | |
| Keep the file's section flags and symbols but remove all section data. | |
| Specifically, the option: | |
| @itemize | |
| @item removes the contents of all sections; | |
| @item sets the size of every section to zero; and | |
| @item sets the file's start address to zero. | |
| @end itemize | |
| This option is used to build a @file{.sym} file for a VxWorks kernel. | |
| It can also be a useful way of reducing the size of a @option{--just-symbols} | |
| linker input file. | |
| @item --compress-debug-sections | |
| Compress DWARF debug sections using zlib with SHF_COMPRESSED from the | |
| ELF ABI. Note - if compression would actually make a section | |
| @emph{larger}, then it is not compressed. | |
| @item --compress-debug-sections=none | |
| @itemx --compress-debug-sections=zlib | |
| @itemx --compress-debug-sections=zlib-gnu | |
| @itemx --compress-debug-sections=zlib-gabi | |
| @itemx --compress-debug-sections=zstd | |
| For ELF files, these options control how DWARF debug sections are | |
| compressed. @option{--compress-debug-sections=none} is equivalent | |
| to @option{--decompress-debug-sections}. | |
| @option{--compress-debug-sections=zlib} and | |
| @option{--compress-debug-sections=zlib-gabi} are equivalent to | |
| @option{--compress-debug-sections}. | |
| @option{--compress-debug-sections=zlib-gnu} compresses DWARF debug sections | |
| using the obsoleted zlib-gnu format. The debug sections are renamed to begin | |
| with @samp{.zdebug}. | |
| @option{--compress-debug-sections=zstd} compresses DWARF debug | |
| sections using zstd. Note - if compression would actually make a section | |
| @emph{larger}, then it is not compressed nor renamed. | |
| @item --decompress-debug-sections | |
| Decompress DWARF debug sections. For a @samp{.zdebug} section, the original | |
| name is restored. | |
| @item --elf-stt-common=yes | |
| @itemx --elf-stt-common=no | |
| For ELF files, these options control whether common symbols should be | |
| converted to the @code{STT_COMMON} or @code{STT_OBJECT} type. | |
| @option{--elf-stt-common=yes} converts common symbol type to | |
| @code{STT_COMMON}. @option{--elf-stt-common=no} converts common symbol | |
| type to @code{STT_OBJECT}. | |
| @item --merge-notes | |
| @itemx --no-merge-notes | |
| For ELF files, attempt (or do not attempt) to reduce the size of any | |
| SHT_NOTE type sections by removing duplicate notes. | |
| @item -V | |
| @itemx --version | |
| Show the version number of @command{objcopy}. | |
| @item --verilog-data-width=@var{bytes} | |
| For Verilog output, this options controls the number of bytes | |
| converted for each output data element. The input target controls the | |
| endianness of the conversion. | |
| @item -v | |
| @itemx --verbose | |
| Verbose output: list all object files modified. In the case of | |
| archives, @samp{objcopy -V} lists all members of the archive. | |
| @item --help | |
| Show a summary of the options to @command{objcopy}. | |
| @item --info | |
| Display a list showing all architectures and object formats available. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO objcopy | |
| ld(1), objdump(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node objdump | |
| @chapter objdump | |
| @cindex object file information | |
| @kindex objdump | |
| @c man title objdump display information from object files | |
| @smallexample | |
| @c man begin SYNOPSIS objdump | |
| objdump [@option{-a}|@option{--archive-headers}] | |
| [@option{-b} @var{bfdname}|@option{--target=@var{bfdname}}] | |
| [@option{-C}|@option{--demangle}[=@var{style}] ] | |
| [@option{-d}|@option{--disassemble}[=@var{symbol}]] | |
| [@option{-D}|@option{--disassemble-all}] | |
| [@option{-z}|@option{--disassemble-zeroes}] | |
| [@option{-EB}|@option{-EL}|@option{--endian=}@{big | little @}] | |
| [@option{-f}|@option{--file-headers}] | |
| [@option{-F}|@option{--file-offsets}] | |
| [@option{--file-start-context}] | |
| [@option{-g}|@option{--debugging}] | |
| [@option{-e}|@option{--debugging-tags}] | |
| [@option{-h}|@option{--section-headers}|@option{--headers}] | |
| [@option{-i}|@option{--info}] | |
| [@option{-j} @var{section}|@option{--section=}@var{section}] | |
| [@option{-l}|@option{--line-numbers}] | |
| [@option{-S}|@option{--source}] | |
| [@option{--source-comment}[=@var{text}]] | |
| [@option{-m} @var{machine}|@option{--architecture=}@var{machine}] | |
| [@option{-M} @var{options}|@option{--disassembler-options=}@var{options}] | |
| [@option{-p}|@option{--private-headers}] | |
| [@option{-P} @var{options}|@option{--private=}@var{options}] | |
| [@option{-r}|@option{--reloc}] | |
| [@option{-R}|@option{--dynamic-reloc}] | |
| [@option{-s}|@option{--full-contents}] | |
| [@option{-Z}|@option{--decompress}] | |
| [@option{-W[lLiaprmfFsoORtUuTgAck]}| | |
| @option{--dwarf}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]] | |
| [@option{-WK}|@option{--dwarf=follow-links}] | |
| [@option{-WN}|@option{--dwarf=no-follow-links}] | |
| [@option{-wD}|@option{--dwarf=use-debuginfod}] | |
| [@option{-wE}|@option{--dwarf=do-not-use-debuginfod}] | |
| [@option{-L}|@option{--process-links}] | |
| [@option{--ctf=}@var{section}] | |
| [@option{--sframe=}@var{section}] | |
| [@option{-G}|@option{--stabs}] | |
| [@option{-t}|@option{--syms}] | |
| [@option{-T}|@option{--dynamic-syms}] | |
| [@option{-x}|@option{--all-headers}] | |
| [@option{-w}|@option{--wide}] | |
| [@option{--start-address=}@var{address}] | |
| [@option{--stop-address=}@var{address}] | |
| [@option{--no-addresses}] | |
| [@option{--prefix-addresses}] | |
| [@option{--[no-]show-raw-insn}] | |
| [@option{--adjust-vma=}@var{offset}] | |
| [@option{--show-all-symbols}] | |
| [@option{--dwarf-depth=@var{n}}] | |
| [@option{--dwarf-start=@var{n}}] | |
| [@option{--ctf-parent=}@var{section}] | |
| [@option{--no-recurse-limit}|@option{--recurse-limit}] | |
| [@option{--special-syms}] | |
| [@option{--prefix=}@var{prefix}] | |
| [@option{--prefix-strip=}@var{level}] | |
| [@option{--insn-width=}@var{width}] | |
| [@option{--visualize-jumps[=color|=extended-color|=off]} | |
| [@option{--disassembler-color=[off|terminal|on|extended]} | |
| [@option{-U} @var{method}] [@option{--unicode=}@var{method}] | |
| [@option{-V}|@option{--version}] | |
| [@option{-H}|@option{--help}] | |
| @var{objfile}@dots{} | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION objdump | |
| @command{objdump} displays information about one or more object files. | |
| The options control what particular information to display. This | |
| information is mostly useful to programmers who are working on the | |
| compilation tools, as opposed to programmers who just want their | |
| program to compile and work. | |
| @var{objfile}@dots{} are the object files to be examined. When you | |
| specify archives, @command{objdump} shows information on each of the member | |
| object files. | |
| @c man end | |
| @c man begin OPTIONS objdump | |
| The long and short forms of options, shown here as alternatives, are | |
| equivalent. At least one option from the list | |
| @option{-a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-P,-r,-R,-s,-S,-t,-T,-V,-x} must be given. | |
| @table @env | |
| @item -a | |
| @itemx --archive-header | |
| @cindex archive headers | |
| If any of the @var{objfile} files are archives, display the archive | |
| header information (in a format similar to @samp{ls -l}). Besides the | |
| information you could list with @samp{ar tv}, @samp{objdump -a} shows | |
| the object file format of each archive member. | |
| @item --adjust-vma=@var{offset} | |
| @cindex section addresses in objdump | |
| @cindex VMA in objdump | |
| When dumping information, first add @var{offset} to all the section | |
| addresses. This is useful if the section addresses do not correspond to | |
| the symbol table, which can happen when putting sections at particular | |
| addresses when using a format which can not represent section addresses, | |
| such as a.out. | |
| @item -b @var{bfdname} | |
| @itemx --target=@var{bfdname} | |
| @cindex object code format | |
| Specify that the object-code format for the object files is | |
| @var{bfdname}. This option may not be necessary; @var{objdump} can | |
| automatically recognize many formats. | |
| For example, | |
| @example | |
| objdump -b oasys -m vax -h fu.o | |
| @end example | |
| @noindent | |
| displays summary information from the section headers (@option{-h}) of | |
| @file{fu.o}, which is explicitly identified (@option{-m}) as a VAX object | |
| file in the format produced by Oasys compilers. You can list the | |
| formats available with the @option{-i} option. | |
| @xref{Target Selection}, for more information. | |
| @item -C | |
| @itemx --demangle[=@var{style}] | |
| @cindex demangling in objdump | |
| Decode (@dfn{demangle}) low-level symbol names into user-level names. | |
| Besides removing any initial underscore prepended by the system, this | |
| makes C++ function names readable. Different compilers have different | |
| mangling styles. The optional demangling style argument can be used to | |
| choose an appropriate demangling style for your compiler. @xref{c++filt}, | |
| for more information on demangling. | |
| @item --recurse-limit | |
| @itemx --no-recurse-limit | |
| @itemx --recursion-limit | |
| @itemx --no-recursion-limit | |
| Enables or disables a limit on the amount of recursion performed | |
| whilst demangling strings. Since the name mangling formats allow for | |
| an infinite level of recursion it is possible to create strings whose | |
| decoding will exhaust the amount of stack space available on the host | |
| machine, triggering a memory fault. The limit tries to prevent this | |
| from happening by restricting recursion to 2048 levels of nesting. | |
| The default is for this limit to be enabled, but disabling it may be | |
| necessary in order to demangle truly complicated names. Note however | |
| that if the recursion limit is disabled then stack exhaustion is | |
| possible and any bug reports about such an event will be rejected. | |
| @item -g | |
| @itemx --debugging | |
| Display debugging information. This attempts to parse STABS | |
| debugging format information stored in the file and print it out using | |
| a C like syntax. If no STABS debugging was found this option | |
| falls back on the @option{-W} option to print any DWARF information in | |
| the file. | |
| @item -e | |
| @itemx --debugging-tags | |
| Like @option{-g}, but the information is generated in a format compatible | |
| with ctags tool. | |
| @item -d | |
| @itemx --disassemble | |
| @itemx --disassemble=@var{symbol} | |
| @cindex disassembling object code | |
| @cindex machine instructions | |
| Display the assembler mnemonics for the machine instructions from the | |
| input file. This option only disassembles those sections which are | |
| expected to contain instructions. If the optional @var{symbol} | |
| argument is given, then display the assembler mnemonics starting at | |
| @var{symbol}. If @var{symbol} is a function name then disassembly | |
| will stop at the end of the function, otherwise it will stop when the | |
| next symbol is encountered. If there are no matches for @var{symbol} | |
| then nothing will be displayed. | |
| Note if the @option{--dwarf=follow-links} option is enabled | |
| then any symbol tables in linked debug info files will be read in and | |
| used when disassembling. | |
| @item -D | |
| @itemx --disassemble-all | |
| Like @option{-d}, but disassemble the contents of all non-empty | |
| non-bss sections, not just those expected to contain instructions. | |
| @option{-j} may be used to select specific sections. | |
| This option also has a subtle effect on the disassembly of | |
| instructions in code sections. When option @option{-d} is in effect | |
| objdump will assume that any symbols present in a code section occur | |
| on the boundary between instructions and it will refuse to disassemble | |
| across such a boundary. When option @option{-D} is in effect however | |
| this assumption is supressed. This means that it is possible for the | |
| output of @option{-d} and @option{-D} to differ if, for example, data | |
| is stored in code sections. | |
| If the target is an ARM architecture this switch also has the effect | |
| of forcing the disassembler to decode pieces of data found in code | |
| sections as if they were instructions. | |
| Note if the @option{--dwarf=follow-links} option is enabled | |
| then any symbol tables in linked debug info files will be read in and | |
| used when disassembling. | |
| @item --no-addresses | |
| When disassembling, don't print addresses on each line or for symbols | |
| and relocation offsets. In combination with @option{--no-show-raw-insn} | |
| this may be useful for comparing compiler output. | |
| @item --prefix-addresses | |
| When disassembling, print the complete address on each line. This is | |
| the older disassembly format. | |
| @item -EB | |
| @itemx -EL | |
| @itemx --endian=@{big|little@} | |
| @cindex endianness | |
| @cindex disassembly endianness | |
| Specify the endianness of the object files. This only affects | |
| disassembly. This can be useful when disassembling a file format which | |
| does not describe endianness information, such as S-records. | |
| @item -f | |
| @itemx --file-headers | |
| @cindex object file header | |
| Display summary information from the overall header of | |
| each of the @var{objfile} files. | |
| @item -F | |
| @itemx --file-offsets | |
| @cindex object file offsets | |
| When disassembling sections, whenever a symbol is displayed, also | |
| display the file offset of the region of data that is about to be | |
| dumped. If zeroes are being skipped, then when disassembly resumes, | |
| tell the user how many zeroes were skipped and the file offset of the | |
| location from where the disassembly resumes. When dumping sections, | |
| display the file offset of the location from where the dump starts. | |
| @item --file-start-context | |
| @cindex source code context | |
| Specify that when displaying interlisted source code/disassembly | |
| (assumes @option{-S}) from a file that has not yet been displayed, extend the | |
| context to the start of the file. | |
| @item -h | |
| @itemx --section-headers | |
| @itemx --headers | |
| @cindex section headers | |
| Display summary information from the section headers of the | |
| object file. | |
| File segments may be relocated to nonstandard addresses, for example by | |
| using the @option{-Ttext}, @option{-Tdata}, or @option{-Tbss} options to | |
| @command{ld}. However, some object file formats, such as a.out, do not | |
| store the starting address of the file segments. In those situations, | |
| although @command{ld} relocates the sections correctly, using @samp{objdump | |
| -h} to list the file section headers cannot show the correct addresses. | |
| Instead, it shows the usual addresses, which are implicit for the | |
| target. | |
| Note, in some cases it is possible for a section to have both the | |
| READONLY and the NOREAD attributes set. In such cases the NOREAD | |
| attribute takes precedence, but @command{objdump} will report both | |
| since the exact setting of the flag bits might be important. | |
| @item -H | |
| @itemx --help | |
| Print a summary of the options to @command{objdump} and exit. | |
| @item -i | |
| @itemx --info | |
| @cindex architectures available | |
| @cindex object formats available | |
| Display a list showing all architectures and object formats available | |
| for specification with @option{-b} or @option{-m}. | |
| @item -j @var{name} | |
| @itemx --section=@var{name} | |
| @cindex section information | |
| Display information for section @var{name}. This option may be | |
| specified multiple times. | |
| @item -L | |
| @itemx --process-links | |
| Display the contents of non-debug sections found in separate debuginfo | |
| files that are linked to the main file. This option automatically | |
| implies the @option{-WK} option, and only sections requested by other | |
| command line options will be displayed. | |
| @item -l | |
| @itemx --line-numbers | |
| @cindex source filenames for object files | |
| Label the display (using debugging information) with the filename and | |
| source line numbers corresponding to the object code or relocs shown. | |
| Only useful with @option{-d}, @option{-D}, or @option{-r}. | |
| @item -m @var{machine} | |
| @itemx --architecture=@var{machine} | |
| @cindex architecture | |
| @cindex disassembly architecture | |
| Specify the architecture to use when disassembling object files. This | |
| can be useful when disassembling object files which do not describe | |
| architecture information, such as S-records. You can list the available | |
| architectures with the @option{-i} option. | |
| For most architectures it is possible to supply an architecture | |
| name and a machine name, separated by a colon. For example | |
| @samp{foo:bar} would refer to the @samp{bar} machine type in the | |
| @samp{foo} architecture. This can be helpful if objdump has been | |
| configured to support multiple architectures. | |
| If the target is an ARM architecture then this switch has an | |
| additional effect. It restricts the disassembly to only those | |
| instructions supported by the architecture specified by @var{machine}. | |
| If it is necessary to use this switch because the input file does not | |
| contain any architecture information, but it is also desired to | |
| disassemble all the instructions use @option{-marm}. | |
| @item -M @var{options} | |
| @itemx --disassembler-options=@var{options} | |
| Pass target specific information to the disassembler. Only supported on | |
| some targets. If it is necessary to specify more than one | |
| disassembler option then multiple @option{-M} options can be used or | |
| can be placed together into a comma separated list. | |
| For ARC, @option{dsp} controls the printing of DSP instructions, | |
| @option{spfp} selects the printing of FPX single precision FP | |
| instructions, @option{dpfp} selects the printing of FPX double | |
| precision FP instructions, @option{quarkse_em} selects the printing of | |
| special QuarkSE-EM instructions, @option{fpuda} selects the printing | |
| of double precision assist instructions, @option{fpus} selects the | |
| printing of FPU single precision FP instructions, while @option{fpud} | |
| selects the printing of FPU double precision FP instructions. | |
| Additionally, one can choose to have all the immediates printed in | |
| hexadecimal using @option{hex}. By default, the short immediates are | |
| printed using the decimal representation, while the long immediate | |
| values are printed as hexadecimal. | |
| @option{cpu=...} allows one to enforce a particular ISA when disassembling | |
| instructions, overriding the @option{-m} value or whatever is in the ELF file. | |
| This might be useful to select ARC EM or HS ISA, because architecture is same | |
| for those and disassembler relies on private ELF header data to decide if code | |
| is for EM or HS. This option might be specified multiple times - only the | |
| latest value will be used. Valid values are same as for the assembler | |
| @option{-mcpu=...} option. | |
| If the target is an ARM architecture then this switch can be used to | |
| select which register name set is used during disassembler. Specifying | |
| @option{-M reg-names-std} (the default) will select the register names as | |
| used in ARM's instruction set documentation, but with register 13 called | |
| 'sp', register 14 called 'lr' and register 15 called 'pc'. Specifying | |
| @option{-M reg-names-apcs} will select the name set used by the ARM | |
| Procedure Call Standard, whilst specifying @option{-M reg-names-raw} will | |
| just use @samp{r} followed by the register number. | |
| There are also two variants on the APCS register naming scheme enabled | |
| by @option{-M reg-names-atpcs} and @option{-M reg-names-special-atpcs} which | |
| use the ARM/Thumb Procedure Call Standard naming conventions. (Either | |
| with the normal register names or the special register names). | |
| This option can also be used for ARM architectures to force the | |
| disassembler to interpret all instructions as Thumb instructions by | |
| using the switch @option{--disassembler-options=force-thumb}. This can be | |
| useful when attempting to disassemble thumb code produced by other | |
| compilers. | |
| For AArch64 targets this switch can be used to set whether instructions are | |
| disassembled as the most general instruction using the @option{-M no-aliases} | |
| option or whether instruction notes should be generated as comments in the | |
| disasssembly using @option{-M notes}. | |
| For the x86, some of the options duplicate functions of the @option{-m} | |
| switch, but allow finer grained control. | |
| @table @code | |
| @item x86-64 | |
| @itemx i386 | |
| @itemx i8086 | |
| Select disassembly for the given architecture. | |
| @item intel | |
| @itemx att | |
| Select between intel syntax mode and AT&T syntax mode. | |
| @item amd64 | |
| @itemx intel64 | |
| Select between AMD64 ISA and Intel64 ISA. | |
| @item intel-mnemonic | |
| @itemx att-mnemonic | |
| Select between intel mnemonic mode and AT&T mnemonic mode. | |
| Note: @code{intel-mnemonic} implies @code{intel} and | |
| @code{att-mnemonic} implies @code{att}. | |
| @item addr64 | |
| @itemx addr32 | |
| @itemx addr16 | |
| @itemx data32 | |
| @itemx data16 | |
| Specify the default address size and operand size. These five options | |
| will be overridden if @code{x86-64}, @code{i386} or @code{i8086} | |
| appear later in the option string. | |
| @item suffix | |
| When in AT&T mode and also for a limited set of instructions when in Intel | |
| mode, instructs the disassembler to print a mnemonic suffix even when the | |
| suffix could be inferred by the operands or, for certain instructions, the | |
| execution mode's defaults. | |
| @end table | |
| For PowerPC, the @option{-M} argument @option{raw} selects | |
| disasssembly of hardware insns rather than aliases. For example, you | |
| will see @code{rlwinm} rather than @code{clrlwi}, and @code{addi} | |
| rather than @code{li}. All of the @option{-m} arguments for | |
| @command{gas} that select a CPU are supported. These are: | |
| @option{403}, @option{405}, @option{440}, @option{464}, @option{476}, | |
| @option{601}, @option{603}, @option{604}, @option{620}, @option{7400}, | |
| @option{7410}, @option{7450}, @option{7455}, @option{750cl}, | |
| @option{821}, @option{850}, @option{860}, @option{a2}, @option{booke}, | |
| @option{booke32}, @option{cell}, @option{com}, @option{e200z2}, @option{e200z4}, | |
| @option{e300}, @option{e500}, @option{e500mc}, @option{e500mc64}, | |
| @option{e500x2}, @option{e5500}, @option{e6500}, @option{efs}, | |
| @option{power4}, @option{power5}, @option{power6}, @option{power7}, | |
| @option{power8}, @option{power9}, @option{power10}, @option{power11}, | |
| @option{ppc}, @option{ppc32}, @option{ppc64}, @option{ppc64bridge}, | |
| @option{ppcps}, @option{pwr}, @option{pwr2}, @option{pwr4}, @option{pwr5}, | |
| @option{pwr5x}, @option{pwr6}, @option{pwr7}, @option{pwr8}, @option{pwr9}, | |
| @option{pwr10}, @option{pwr11}, @option{pwrx}, @option{titan}, @option{vle}, | |
| and @option{future}. | |
| @option{32} and @option{64} modify the default or a prior CPU | |
| selection, disabling and enabling 64-bit insns respectively. In | |
| addition, @option{altivec}, @option{any}, @option{lsp}, @option{htm}, | |
| @option{vsx}, @option{spe} and @option{spe2} add capabilities to a | |
| previous @emph{or later} CPU selection. | |
| @option{any} will disassemble any opcode known to | |
| binutils, but in cases where an opcode has two different meanings or | |
| different arguments, you may not see the disassembly you expect. | |
| If you disassemble without giving a CPU selection, a default will be | |
| chosen from information gleaned by BFD from the object files headers, | |
| but the result again may not be as you expect. | |
| For MIPS, this option controls the printing of instruction mnemonic | |
| names and register names in disassembled instructions. Multiple | |
| selections from the following may be specified as a comma separated | |
| string, and invalid options are ignored: | |
| @table @code | |
| @item no-aliases | |
| Print the 'raw' instruction mnemonic instead of some pseudo | |
| instruction mnemonic. I.e., print 'daddu' or 'or' instead of 'move', | |
| 'sll' instead of 'nop', etc. | |
| @item msa | |
| Disassemble MSA instructions. | |
| @item virt | |
| Disassemble the virtualization ASE instructions. | |
| @item xpa | |
| Disassemble the eXtended Physical Address (XPA) ASE instructions. | |
| @item gpr-names=@var{ABI} | |
| Print GPR (general-purpose register) names as appropriate | |
| for the specified ABI. By default, GPR names are selected according to | |
| the ABI of the binary being disassembled. | |
| @item fpr-names=@var{ABI} | |
| Print FPR (floating-point register) names as | |
| appropriate for the specified ABI. By default, FPR numbers are printed | |
| rather than names. | |
| @item cp0-names=@var{ARCH} | |
| Print CP0 (system control coprocessor; coprocessor 0) register names | |
| as appropriate for the CPU or architecture specified by | |
| @var{ARCH}. By default, CP0 register names are selected according to | |
| the architecture and CPU of the binary being disassembled. | |
| @item hwr-names=@var{ARCH} | |
| Print HWR (hardware register, used by the @code{rdhwr} instruction) names | |
| as appropriate for the CPU or architecture specified by | |
| @var{ARCH}. By default, HWR names are selected according to | |
| the architecture and CPU of the binary being disassembled. | |
| @item reg-names=@var{ABI} | |
| Print GPR and FPR names as appropriate for the selected ABI. | |
| @item reg-names=@var{ARCH} | |
| Print CPU-specific register names (CP0 register and HWR names) | |
| as appropriate for the selected CPU or architecture. | |
| @end table | |
| For any of the options listed above, @var{ABI} or | |
| @var{ARCH} may be specified as @samp{numeric} to have numbers printed | |
| rather than names, for the selected types of registers. | |
| You can list the available values of @var{ABI} and @var{ARCH} using | |
| the @option{--help} option. | |
| For VAX, you can specify function entry addresses with @option{-M | |
| entry:0xf00ba}. You can use this multiple times to properly | |
| disassemble VAX binary files that don't contain symbol tables (like | |
| ROM dumps). In these cases, the function entry mask would otherwise | |
| be decoded as VAX instructions, which would probably lead the rest | |
| of the function being wrongly disassembled. | |
| @item -p | |
| @itemx --private-headers | |
| Print information that is specific to the object file format. The exact | |
| information printed depends upon the object file format. For some | |
| object file formats, no additional information is printed. | |
| @item -P @var{options} | |
| @itemx --private=@var{options} | |
| Print information that is specific to the object file format. The | |
| argument @var{options} is a comma separated list that depends on the | |
| format (the lists of options is displayed with the help). | |
| For XCOFF, the available options are: | |
| @table @code | |
| @item header | |
| @item aout | |
| @item sections | |
| @item syms | |
| @item relocs | |
| @item lineno, | |
| @item loader | |
| @item except | |
| @item typchk | |
| @item traceback | |
| @item toc | |
| @item ldinfo | |
| @end table | |
| For PE, the available options are: | |
| @table @code | |
| @item header | |
| @item sections | |
| @end table | |
| Not all object formats support this option. In particular the ELF | |
| format does not use it. | |
| @item -r | |
| @itemx --reloc | |
| @cindex relocation entries, in object file | |
| Print the relocation entries of the file. If used with @option{-d} or | |
| @option{-D}, the relocations are printed interspersed with the | |
| disassembly. | |
| @item -R | |
| @itemx --dynamic-reloc | |
| @cindex dynamic relocation entries, in object file | |
| Print the dynamic relocation entries of the file. This is only | |
| meaningful for dynamic objects, such as certain types of shared | |
| libraries. As for @option{-r}, if used with @option{-d} or | |
| @option{-D}, the relocations are printed interspersed with the | |
| disassembly. | |
| @item -s | |
| @itemx --full-contents | |
| @cindex sections, full contents | |
| @cindex object file sections | |
| Display the full contents of sections, often used in combination with | |
| @option{-j} to request specific sections. By default all non-empty | |
| non-bss sections are displayed. By default any compressed section | |
| will be displayed in its compressed form. In order to see the | |
| contents in a decompressed form add the @option{-Z} option to the | |
| command line. | |
| @item -S | |
| @itemx --source | |
| @cindex source disassembly | |
| @cindex disassembly, with source | |
| Display source code intermixed with disassembly, if possible. Implies | |
| @option{-d}. | |
| @item --show-all-symbols | |
| When disassembling, show all the symbols that match a given address, | |
| not just the first one. | |
| @item --source-comment[=@var{txt}] | |
| @cindex source disassembly | |
| @cindex disassembly, with source | |
| Like the @option{-S} option, but all source code lines are displayed | |
| with a prefix of @var{txt}. Typically @var{txt} will be a comment | |
| string which can be used to distinguish the assembler code from the | |
| source code. If @var{txt} is not provided then a default string of | |
| @var{``# ``} (hash followed by a space), will be used. | |
| @item --prefix=@var{prefix} | |
| @cindex Add prefix to absolute paths | |
| Specify @var{prefix} to add to the absolute paths when used with | |
| @option{-S}. | |
| @item --prefix-strip=@var{level} | |
| @cindex Strip absolute paths | |
| Indicate how many initial directory names to strip off the hardwired | |
| absolute paths. It has no effect without @option{--prefix=}@var{prefix}. | |
| @item --show-raw-insn | |
| When disassembling instructions, print the instruction in hex as well as | |
| in symbolic form. This is the default except when | |
| @option{--prefix-addresses} is used. | |
| @item --no-show-raw-insn | |
| When disassembling instructions, do not print the instruction bytes. | |
| This is the default when @option{--prefix-addresses} is used. | |
| @item --insn-width=@var{width} | |
| @cindex Instruction width | |
| Display @var{width} bytes on a single line when disassembling | |
| instructions. | |
| @item --visualize-jumps[=color|=extended-color|=off] | |
| Visualize jumps that stay inside a function by drawing ASCII art between | |
| the start and target addresses. The optional @option{=color} argument | |
| adds color to the output using simple terminal colors. Alternatively | |
| the @option{=extended-color} argument will add color using 8bit | |
| colors, but these might not work on all terminals. | |
| If it is necessary to disable the @option{visualize-jumps} option | |
| after it has previously been enabled then use | |
| @option{visualize-jumps=off}. | |
| @item --disassembler-color=off | |
| @itemx --disassembler-color=terminal | |
| @itemx --disassembler-color=on|color|colour | |
| @itemx --disassembler-color=extened|extended-color|extened-colour | |
| Enables or disables the use of colored syntax highlighting in | |
| disassembly output. The default behaviour is determined via a | |
| configure time option. Note, not all architectures support colored | |
| syntax highlighting, and depending upon the terminal used, colored | |
| output may not actually be legible. | |
| The @option{on} argument adds colors using simple terminal colors. | |
| The @option{terminal} argument does the same, but only if the output | |
| device is a terminal. | |
| The @option{extended-color} argument is similar to the @option{on} | |
| argument, but it uses 8-bit colors. These may not work on all | |
| terminals. | |
| The @option{off} argument disables colored disassembly. | |
| @item -W[lLiaprmfFsoORtUuTgAckK] | |
| @itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links] | |
| @include debug.options.texi | |
| @item --dwarf-check | |
| Enable additional checks for consistency of Dwarf information. | |
| @include ctf.options.texi | |
| @include sframe.options.texi | |
| @item -G | |
| @itemx --stabs | |
| @cindex stab | |
| @cindex .stab | |
| @cindex debug symbols | |
| @cindex ELF object file format | |
| Display the full contents of any sections requested. Display the | |
| contents of the .stab and .stab.index and .stab.excl sections from an | |
| ELF file. This is only useful on systems (such as Solaris 2.0) in which | |
| @code{.stab} debugging symbol-table entries are carried in an ELF | |
| section. In most other file formats, debugging symbol-table entries are | |
| interleaved with linkage symbols, and are visible in the @option{--syms} | |
| output. | |
| @item --start-address=@var{address} | |
| @cindex start-address | |
| Start displaying data at the specified address. This affects the output | |
| of the @option{-d}, @option{-r} and @option{-s} options. | |
| @item --stop-address=@var{address} | |
| @cindex stop-address | |
| Stop displaying data at the specified address. This affects the output | |
| of the @option{-d}, @option{-r} and @option{-s} options. | |
| @item -t | |
| @itemx --syms | |
| @cindex symbol table entries, printing | |
| Print the symbol table entries of the file. | |
| This is similar to the information provided by the @samp{nm} program, | |
| although the display format is different. The format of the output | |
| depends upon the format of the file being dumped, but there are two main | |
| types. One looks like this: | |
| @smallexample | |
| [ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss | |
| [ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred | |
| @end smallexample | |
| where the number inside the square brackets is the number of the entry | |
| in the symbol table, the @var{sec} number is the section number, the | |
| @var{fl} value are the symbol's flag bits, the @var{ty} number is the | |
| symbol's type, the @var{scl} number is the symbol's storage class and | |
| the @var{nx} value is the number of auxiliary entries associated with | |
| the symbol. The last two fields are the symbol's value and its name. | |
| The other common output format, usually seen with ELF based files, | |
| looks like this: | |
| @smallexample | |
| 00000000 l d .bss 00000000 .bss | |
| 00000000 g .text 00000000 fred | |
| @end smallexample | |
| Here the first number is the symbol's value (sometimes referred to as | |
| its address). The next field is actually a set of characters and | |
| spaces indicating the flag bits that are set on the symbol. These | |
| characters are described below. Next is the section with which the | |
| symbol is associated or @emph{*ABS*} if the section is absolute (ie | |
| not connected with any section), or @emph{*UND*} if the section is | |
| referenced in the file being dumped, but not defined there. | |
| After the section name comes another field, a number, which for common | |
| symbols is the alignment and for other symbol is the size. Finally | |
| the symbol's name is displayed. | |
| The flag characters are divided into 7 groups as follows: | |
| @table @code | |
| @item l | |
| @itemx g | |
| @itemx u | |
| @itemx ! | |
| The symbol is a local (l), global (g), unique global (u), neither | |
| global nor local (a space) or both global and local (!). A | |
| symbol can be neither local or global for a variety of reasons, e.g., | |
| because it is used for debugging, but it is probably an indication of | |
| a bug if it is ever both local and global. Unique global symbols are | |
| a GNU extension to the standard set of ELF symbol bindings. For such | |
| a symbol the dynamic linker will make sure that in the entire process | |
| there is just one symbol with this name and type in use. | |
| @item w | |
| The symbol is weak (w) or strong (a space). | |
| @item C | |
| The symbol denotes a constructor (C) or an ordinary symbol (a space). | |
| @item W | |
| The symbol is a warning (W) or a normal symbol (a space). A warning | |
| symbol's name is a message to be displayed if the symbol following the | |
| warning symbol is ever referenced. | |
| @item I | |
| @item i | |
| The symbol is an indirect reference to another symbol (I), a function | |
| to be evaluated during reloc processing (i) or a normal symbol (a | |
| space). | |
| @item d | |
| @itemx D | |
| The symbol is a debugging symbol (d) or a dynamic symbol (D) or a | |
| normal symbol (a space). | |
| @item F | |
| @item f | |
| @item O | |
| The symbol is the name of a function (F) or a file (f) or an object | |
| (O) or just a normal symbol (a space). | |
| @end table | |
| @item -T | |
| @itemx --dynamic-syms | |
| @cindex dynamic symbol table entries, printing | |
| Print the dynamic symbol table entries of the file. This is only | |
| meaningful for dynamic objects, such as certain types of shared | |
| libraries. This is similar to the information provided by the @samp{nm} | |
| program when given the @option{-D} (@option{--dynamic}) option. | |
| The output format is similar to that produced by the @option{--syms} | |
| option, except that an extra field is inserted before the symbol's | |
| name, giving the version information associated with the symbol. | |
| If the version is the default version to be used when resolving | |
| unversioned references to the symbol then it's displayed as is, | |
| otherwise it's put into parentheses. | |
| @item --special-syms | |
| When displaying symbols include those which the target considers to be | |
| special in some way and which would not normally be of interest to the | |
| user. | |
| @item -U @var{[d|i|l|e|x|h]} | |
| @itemx --unicode=@var{[default|invalid|locale|escape|hex|highlight]} | |
| Controls the display of UTF-8 encoded multibyte characters in strings. | |
| The default (@option{--unicode=default}) is to give them no special | |
| treatment. The @option{--unicode=locale} option displays the sequence | |
| in the current locale, which may or may not support them. The options | |
| @option{--unicode=hex} and @option{--unicode=invalid} display them as | |
| hex byte sequences enclosed by either angle brackets or curly braces. | |
| The @option{--unicode=escape} option displays them as escape sequences | |
| (@var{\uxxxx}) and the @option{--unicode=highlight} option displays | |
| them as escape sequences highlighted in red (if supported by the | |
| output device). The colouring is intended to draw attention to the | |
| presence of unicode sequences where they might not be expected. | |
| @item -V | |
| @itemx --version | |
| Print the version number of @command{objdump} and exit. | |
| @item -x | |
| @itemx --all-headers | |
| @cindex all header information, object file | |
| @cindex header information, all | |
| Display all available header information, including the symbol table and | |
| relocation entries. Using @option{-x} is equivalent to specifying all of | |
| @option{-a -f -h -p -r -t}. | |
| @item -w | |
| @itemx --wide | |
| @cindex wide output, printing | |
| Format some lines for output devices that have more than 80 columns. | |
| Also do not truncate symbol names when they are displayed. | |
| @item -z | |
| @itemx --disassemble-zeroes | |
| Normally the disassembly output will skip blocks of zeroes. This | |
| option directs the disassembler to disassemble those blocks, just like | |
| any other data. | |
| @item -Z | |
| @itemx --decompress | |
| @cindex sections, full contents | |
| @cindex object file sections | |
| @cindex compressed section contents | |
| The @option{-Z} option is meant to be used in conunction with the | |
| @option{-s} option. It instructs @command{objdump} to decompress any | |
| compressed sections before displaying their contents. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO objdump | |
| nm(1), readelf(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node ranlib | |
| @chapter ranlib | |
| @kindex ranlib | |
| @cindex archive contents | |
| @cindex symbol index | |
| @c man title ranlib generate an index to an archive | |
| @smallexample | |
| @c man begin SYNOPSIS ranlib | |
| ranlib [@option{--plugin} @var{name}] [@option{-DhHvVt}] @var{archive} | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION ranlib | |
| @command{ranlib} generates an index to the contents of an archive and | |
| stores it in the archive. The index lists each symbol defined by a | |
| member of an archive that is a relocatable object file. | |
| You may use @samp{nm -s} or @samp{nm --print-armap} to list this index. | |
| An archive with such an index speeds up linking to the library and | |
| allows routines in the library to call each other without regard to | |
| their placement in the archive. | |
| The @sc{gnu} @command{ranlib} program is another form of @sc{gnu} @command{ar}; running | |
| @command{ranlib} is completely equivalent to executing @samp{ar -s}. | |
| @xref{ar}. | |
| @c man end | |
| @c man begin OPTIONS ranlib | |
| @table @env | |
| @item -h | |
| @itemx -H | |
| @itemx --help | |
| Show usage information for @command{ranlib}. | |
| @item -v | |
| @itemx -V | |
| @itemx --version | |
| Show the version number of @command{ranlib}. | |
| @item -D | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Operate in @emph{deterministic} mode. The symbol map archive member's | |
| header will show zero for the UID, GID, and timestamp. When this | |
| option is used, multiple runs will produce identical output files. | |
| If @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}, then this mode is on by | |
| default. It can be disabled with the @samp{-U} option, described | |
| below. | |
| @item -t | |
| Update the timestamp of the symbol map of an archive. | |
| @item -U | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Do @emph{not} operate in @emph{deterministic} mode. This is the | |
| inverse of the @samp{-D} option, above: the archive index will get | |
| actual UID, GID, timestamp, and file mode values. | |
| If @file{binutils} was configured @emph{without} | |
| @option{--enable-deterministic-archives}, then this mode is on by | |
| default. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO ranlib | |
| ar(1), nm(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node size | |
| @chapter size | |
| @kindex size | |
| @cindex section sizes | |
| @c man title size list section sizes and total size of binary files | |
| @smallexample | |
| @c man begin SYNOPSIS size | |
| size [@option{-A}|@option{-B}|@option{-G}|@option{--format=}@var{compatibility}] | |
| [@option{--help}] | |
| [@option{-d}|@option{-o}|@option{-x}|@option{--radix=}@var{number}] | |
| [@option{--common}] | |
| [@option{-t}|@option{--totals}] | |
| [@option{--target=}@var{bfdname}] [@option{-V}|@option{--version}] | |
| [@option{-f}] | |
| [@var{objfile}@dots{}] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION size | |
| The @sc{gnu} @command{size} utility lists the section sizes and the total | |
| size for each of the binary files @var{objfile} on its argument list. | |
| By default, one line of output is generated for each file or each | |
| module if the file is an archive. | |
| @var{objfile}@dots{} are the files to be examined. If none are | |
| specified, the file @code{a.out} will be used instead. | |
| @c man end | |
| @c man begin OPTIONS size | |
| The command-line options have the following meanings: | |
| @table @env | |
| @item -A | |
| @itemx -B | |
| @itemx -G | |
| @itemx --format=@var{compatibility} | |
| @cindex @command{size} display format | |
| Using one of these options, you can choose whether the output from @sc{gnu} | |
| @command{size} resembles output from System V @command{size} (using @option{-A}, | |
| or @option{--format=sysv}), or Berkeley @command{size} (using @option{-B}, or | |
| @option{--format=berkeley}). The default is the one-line format similar to | |
| Berkeley's. Alternatively, you can choose the GNU format output | |
| (using @option{-G}, or @option{--format=gnu}), this is similar to | |
| Berkeley's output format, but sizes are counted differently. | |
| @c Bonus for doc-source readers: you can also say --format=strange (or | |
| @c anything else that starts with 's') for sysv, and --format=boring (or | |
| @c anything else that starts with 'b') for Berkeley. | |
| Here is an example of the Berkeley (default) format of output from | |
| @command{size}: | |
| @smallexample | |
| $ size --format=Berkeley ranlib size | |
| text data bss dec hex filename | |
| 294880 81920 11592 388392 5ed28 ranlib | |
| 294880 81920 11888 388688 5ee50 size | |
| @end smallexample | |
| The Berkeley style output counts read only data in the @code{text} | |
| column, not in the @code{data} column, the @code{dec} and @code{hex} | |
| columns both display the sum of the @code{text}, @code{data}, and | |
| @code{bss} columns in decimal and hexadecimal respectively. | |
| The GNU format counts read only data in the @code{data} column, not | |
| the @code{text} column, and only displays the sum of the @code{text}, | |
| @code{data}, and @code{bss} columns once, in the @code{total} column. | |
| The @option{--radix} option can be used to change the number base for | |
| all columns. Here is the same data displayed with GNU conventions: | |
| @smallexample | |
| $ size --format=GNU ranlib size | |
| text data bss total filename | |
| 279880 96920 11592 388392 ranlib | |
| 279880 96920 11888 388688 size | |
| @end smallexample | |
| @noindent | |
| This is the same data, but displayed closer to System V conventions: | |
| @smallexample | |
| $ size --format=SysV ranlib size | |
| ranlib : | |
| section size addr | |
| .text 294880 8192 | |
| .data 81920 303104 | |
| .bss 11592 385024 | |
| Total 388392 | |
| size : | |
| section size addr | |
| .text 294880 8192 | |
| .data 81920 303104 | |
| .bss 11888 385024 | |
| Total 388688 | |
| @end smallexample | |
| @item --help | |
| @itemx -h | |
| @itemx -H | |
| @item -? | |
| Show a summary of acceptable arguments and options. | |
| @item -d | |
| @itemx -o | |
| @itemx -x | |
| @itemx --radix=@var{number} | |
| @cindex @command{size} number format | |
| @cindex radix for section sizes | |
| Using one of these options, you can control whether the size of each | |
| section is given in decimal (@option{-d}, or @option{--radix=10}); octal | |
| (@option{-o}, or @option{--radix=8}); or hexadecimal (@option{-x}, or | |
| @option{--radix=16}). In @option{--radix=@var{number}}, only the three | |
| values (8, 10, 16) are supported. The total size is always given in two | |
| radices; decimal and hexadecimal for @option{-d} or @option{-x} output, or | |
| octal and hexadecimal if you're using @option{-o}. | |
| @item --common | |
| Print total size of common symbols in each file. When using Berkeley | |
| or GNU format these are included in the bss size. | |
| @item -t | |
| @itemx --totals | |
| Show totals of all objects listed (Berkeley or GNU format mode only). | |
| @item --target=@var{bfdname} | |
| @cindex object code format | |
| Specify that the object-code format for @var{objfile} is | |
| @var{bfdname}. This option may not be necessary; @command{size} can | |
| automatically recognize many formats. | |
| @xref{Target Selection}, for more information. | |
| @item -v | |
| @item -V | |
| @itemx --version | |
| Display the version number of @command{size}. | |
| @item -f | |
| Ignored. This option is used by other versions of the @command{size} | |
| program, but it is not supported by the GNU Binutils version. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO size | |
| ar(1), objdump(1), readelf(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node strings | |
| @chapter strings | |
| @kindex strings | |
| @cindex listings strings | |
| @cindex printing strings | |
| @cindex strings, printing | |
| @c man title strings print the sequences of printable characters in files | |
| @smallexample | |
| @c man begin SYNOPSIS strings | |
| strings [@option{-afovV}] [@option{-}@var{min-len}] | |
| [@option{-n} @var{min-len}] [@option{--bytes=}@var{min-len}] | |
| [@option{-t} @var{radix}] [@option{--radix=}@var{radix}] | |
| [@option{-e} @var{encoding}] [@option{--encoding=}@var{encoding}] | |
| [@option{-U} @var{method}] [@option{--unicode=}@var{method}] | |
| [@option{-}] [@option{--all}] [@option{--print-file-name}] | |
| [@option{-T} @var{bfdname}] [@option{--target=}@var{bfdname}] | |
| [@option{-w}] [@option{--include-all-whitespace}] | |
| [@option{-s}] [@option{--output-separator} @var{sep_string}] | |
| [@option{--help}] [@option{--version}] @var{file}@dots{} | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION strings | |
| For each @var{file} given, @sc{gnu} @command{strings} prints the | |
| printable character sequences that are at least 4 characters long (or | |
| the number given with the options below) and are followed by an | |
| unprintable character. | |
| Depending upon how the strings program was configured it will default | |
| to either displaying all the printable sequences that it can find in | |
| each file, or only those sequences that are in loadable, initialized | |
| data sections. If the file type is unrecognizable, or if strings is | |
| reading from stdin then it will always display all of the printable | |
| sequences that it can find. | |
| For backwards compatibility any file that occurs after a command-line | |
| option of just @option{-} will also be scanned in full, regardless of | |
| the presence of any @option{-d} option. | |
| @command{strings} is mainly useful for determining the contents of | |
| non-text files. | |
| @c man end | |
| @c man begin OPTIONS strings | |
| @table @env | |
| @item -a | |
| @itemx --all | |
| @itemx - | |
| Scan the whole file, regardless of what sections it contains or | |
| whether those sections are loaded or initialized. Normally this is | |
| the default behaviour, but strings can be configured so that the | |
| @option{-d} is the default instead. | |
| The @option{-} option is position dependent and forces strings to | |
| perform full scans of any file that is mentioned after the @option{-} | |
| on the command line, even if the @option{-d} option has been | |
| specified. | |
| @item -d | |
| @itemx --data | |
| Only print strings from initialized, loaded data sections in the | |
| file. This may reduce the amount of garbage in the output, but it | |
| also exposes the strings program to any security flaws that may be | |
| present in the BFD library used to scan and load sections. Strings | |
| can be configured so that this option is the default behaviour. In | |
| such cases the @option{-a} option can be used to avoid using the BFD | |
| library and instead just print all of the strings found in the file. | |
| @item -f | |
| @itemx --print-file-name | |
| Print the name of the file before each string. | |
| @item --help | |
| Print a summary of the program usage on the standard output and exit. | |
| @item -@var{min-len} | |
| @itemx -n @var{min-len} | |
| @itemx --bytes=@var{min-len} | |
| Print sequences of displayable characters that are at least | |
| @var{min-len} characters long. If not specified a default minimum | |
| length of 4 is used. The distinction between displayable and | |
| non-displayable characters depends upon the setting of the | |
| @option{-e} and @option{-U} options. Sequences are always terminated | |
| at control characters such as new-line and carriage-return, but not | |
| the tab character. | |
| @item -o | |
| Like @samp{-t o}. Some other versions of @command{strings} have @option{-o} | |
| act like @samp{-t d} instead. Since we can not be compatible with both | |
| ways, we simply chose one. | |
| @item -t @var{radix} | |
| @itemx --radix=@var{radix} | |
| Print the offset within the file before each string. The single | |
| character argument specifies the radix of the offset---@samp{o} for | |
| octal, @samp{x} for hexadecimal, or @samp{d} for decimal. | |
| @item -e @var{encoding} | |
| @itemx --encoding=@var{encoding} | |
| Select the character encoding of the strings that are to be found. | |
| Possible values for @var{encoding} are: @samp{s} = single-7-bit-byte | |
| characters (default), @samp{S} = | |
| single-8-bit-byte characters, @samp{b} = 16-bit bigendian, @samp{l} = | |
| 16-bit littleendian, @samp{B} = 32-bit bigendian, @samp{L} = 32-bit | |
| littleendian. Useful for finding wide character strings. (@samp{l} | |
| and @samp{b} apply to, for example, Unicode UTF-16/UCS-2 encodings). | |
| @item -U @var{[d|i|l|e|x|h]} | |
| @itemx --unicode=@var{[default|invalid|locale|escape|hex|highlight]} | |
| Controls the display of UTF-8 encoded multibyte characters in strings. | |
| The default (@option{--unicode=default}) is to give them no special | |
| treatment, and instead rely upon the setting of the | |
| @option{--encoding} option. The other values for this option | |
| automatically enable @option{--encoding=S}. | |
| The @option{--unicode=invalid} option treats them as non-graphic | |
| characters and hence not part of a valid string. All the remaining | |
| options treat them as valid string characters. | |
| The @option{--unicode=locale} option displays them in the current | |
| locale, which may or may not support UTF-8 encoding. The | |
| @option{--unicode=hex} option displays them as hex byte sequences | |
| enclosed between @var{<>} characters. The @option{--unicode=escape} | |
| option displays them as escape sequences (@var{\uxxxx}) and the | |
| @option{--unicode=highlight} option displays them as escape sequences | |
| highlighted in red (if supported by the output device). The colouring | |
| is intended to draw attention to the presence of unicode sequences | |
| where they might not be expected. | |
| @item -T @var{bfdname} | |
| @itemx --target=@var{bfdname} | |
| @cindex object code format | |
| Specify an object code format other than your system's default format. | |
| @xref{Target Selection}, for more information. | |
| @item -v | |
| @itemx -V | |
| @itemx --version | |
| Print the program version number on the standard output and exit. | |
| @item -w | |
| @itemx --include-all-whitespace | |
| By default tab and space characters are included in the strings that | |
| are displayed, but other whitespace characters, such a newlines and | |
| carriage returns, are not. The @option{-w} option changes this so | |
| that all whitespace characters are considered to be part of a string. | |
| @item -s | |
| @itemx --output-separator | |
| By default, output strings are delimited by a new-line. This option | |
| allows you to supply any string to be used as the output record | |
| separator. Useful with --include-all-whitespace where strings | |
| may contain new-lines internally. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO strings | |
| ar(1), nm(1), objdump(1), ranlib(1), readelf(1) | |
| and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node strip | |
| @chapter strip | |
| @kindex strip | |
| @cindex removing symbols | |
| @cindex discarding symbols | |
| @cindex symbols, discarding | |
| @c man title strip discard symbols and other data from object files | |
| @smallexample | |
| @c man begin SYNOPSIS strip | |
| strip [@option{-F} @var{bfdname} |@option{--target=}@var{bfdname}] | |
| [@option{-I} @var{bfdname} |@option{--input-target=}@var{bfdname}] | |
| [@option{-O} @var{bfdname} |@option{--output-target=}@var{bfdname}] | |
| [@option{-s}|@option{--strip-all}] | |
| [@option{-S}|@option{-g}|@option{-d}|@option{--strip-debug}] | |
| [@option{--strip-dwo}] | |
| [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}] | |
| [@option{-M}|@option{--merge-notes}][@option{--no-merge-notes}] | |
| [@option{-N} @var{symbolname} |@option{--strip-symbol=}@var{symbolname}] | |
| [@option{-w}|@option{--wildcard}] | |
| [@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}] | |
| [@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}] | |
| [@option{--keep-section=}@var{sectionpattern}] | |
| [@option{--remove-relocations=}@var{sectionpattern}] | |
| [@option{--strip-section-headers}] | |
| [@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}] | |
| [@option{-D}|@option{--enable-deterministic-archives}] | |
| [@option{-U}|@option{--disable-deterministic-archives}] | |
| [@option{--keep-section-symbols}] | |
| [@option{--keep-file-symbols}] | |
| [@option{--only-keep-debug}] | |
| [@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}] | |
| [@option{--help}] [@option{--info}] | |
| @var{objfile}@dots{} | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION strip | |
| @sc{gnu} @command{strip} discards all symbols from object files | |
| @var{objfile}. The list of object files may include archives. | |
| At least one object file must be given. | |
| @command{strip} modifies the files named in its argument, | |
| rather than writing modified copies under different names. | |
| @c man end | |
| @c man begin OPTIONS strip | |
| @table @env | |
| @item -F @var{bfdname} | |
| @itemx --target=@var{bfdname} | |
| Treat the original @var{objfile} as a file with the object | |
| code format @var{bfdname}, and rewrite it in the same format. | |
| @xref{Target Selection}, for more information. | |
| @item --help | |
| Show a summary of the options to @command{strip} and exit. | |
| @item --info | |
| Display a list showing all architectures and object formats available. | |
| @item -I @var{bfdname} | |
| @itemx --input-target=@var{bfdname} | |
| Treat the original @var{objfile} as a file with the object | |
| code format @var{bfdname}. | |
| @xref{Target Selection}, for more information. | |
| @item -O @var{bfdname} | |
| @itemx --output-target=@var{bfdname} | |
| Replace @var{objfile} with a file in the output format @var{bfdname}. | |
| @xref{Target Selection}, for more information. | |
| @item -R @var{sectionname} | |
| @itemx --remove-section=@var{sectionname} | |
| Remove any section named @var{sectionname} from the output file, in | |
| addition to whatever sections would otherwise be removed. This | |
| option may be given more than once. Note that using this option | |
| inappropriately may make the output file unusable. The wildcard | |
| character @samp{*} may be given at the end of @var{sectionname}. If | |
| so, then any section starting with @var{sectionname} will be removed. | |
| If the first character of @var{sectionpattern} is the exclamation | |
| point (!) then matching sections will not be removed even if an | |
| earlier use of @option{--remove-section} on the same command line | |
| would otherwise remove it. For example: | |
| @smallexample | |
| --remove-section=.text.* --remove-section=!.text.foo | |
| @end smallexample | |
| will remove all sections matching the pattern '.text.*', but will not | |
| remove the section '.text.foo'. | |
| @item --keep-section=@var{sectionpattern} | |
| When removing sections from the output file, keep sections that match | |
| @var{sectionpattern}. | |
| @item --remove-relocations=@var{sectionpattern} | |
| Remove relocations from the output file for any section matching | |
| @var{sectionpattern}. This option may be given more than once. Note | |
| that using this option inappropriately may make the output file | |
| unusable. Wildcard characters are accepted in @var{sectionpattern}. | |
| For example: | |
| @smallexample | |
| --remove-relocations=.text.* | |
| @end smallexample | |
| will remove the relocations for all sections matching the patter | |
| '.text.*'. | |
| If the first character of @var{sectionpattern} is the exclamation | |
| point (!) then matching sections will not have their relocation | |
| removed even if an earlier use of @option{--remove-relocations} on the | |
| same command line would otherwise cause the relocations to be removed. | |
| For example: | |
| @smallexample | |
| --remove-relocations=.text.* --remove-relocations=!.text.foo | |
| @end smallexample | |
| will remove all relocations for sections matching the pattern | |
| '.text.*', but will not remove relocations for the section | |
| '.text.foo'. | |
| @item --strip-section-headers | |
| Strip section headers. This option is specific to ELF files. Implies | |
| @option{--strip-all} and @option{--merge-notes}. | |
| @item -s | |
| @itemx --strip-all | |
| Remove all symbols. | |
| @item -g | |
| @itemx -S | |
| @itemx -d | |
| @itemx --strip-debug | |
| Remove debugging symbols only. | |
| @item --strip-dwo | |
| Remove the contents of all DWARF .dwo sections, leaving the | |
| remaining debugging sections and all symbols intact. | |
| See the description of this option in the @command{objcopy} section | |
| for more information. | |
| @item --strip-unneeded | |
| Remove all symbols that are not needed for relocation processing in | |
| addition to debugging symbols and sections stripped by | |
| @option{--strip-debug}. | |
| @item -K @var{symbolname} | |
| @itemx --keep-symbol=@var{symbolname} | |
| When stripping symbols, keep symbol @var{symbolname} even if it would | |
| normally be stripped. This option may be given more than once. | |
| @item -M | |
| @itemx --merge-notes | |
| @itemx --no-merge-notes | |
| For ELF files, attempt (or do not attempt) to reduce the size of any | |
| SHT_NOTE type sections by removing duplicate notes. The default is to | |
| attempt this reduction unless stripping debug or DWO information. | |
| @item -N @var{symbolname} | |
| @itemx --strip-symbol=@var{symbolname} | |
| Remove symbol @var{symbolname} from the source file. This option may be | |
| given more than once, and may be combined with strip options other than | |
| @option{-K}. | |
| @item -o @var{file} | |
| Put the stripped output in @var{file}, rather than replacing the | |
| existing file. When this argument is used, only one @var{objfile} | |
| argument may be specified. | |
| @item -p | |
| @itemx --preserve-dates | |
| Preserve the access and modification dates of the file. | |
| @item -D | |
| @itemx --enable-deterministic-archives | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Operate in @emph{deterministic} mode. When copying archive members | |
| and writing the archive index, use zero for UIDs, GIDs, timestamps, | |
| and use consistent file modes for all files. | |
| If @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}, then this mode is on by default. | |
| It can be disabled with the @samp{-U} option, below. | |
| @item -U | |
| @itemx --disable-deterministic-archives | |
| @cindex deterministic archives | |
| @kindex --enable-deterministic-archives | |
| Do @emph{not} operate in @emph{deterministic} mode. This is the | |
| inverse of the @option{-D} option, above: when copying archive members | |
| and writing the archive index, use their actual UID, GID, timestamp, | |
| and file mode values. | |
| This is the default unless @file{binutils} was configured with | |
| @option{--enable-deterministic-archives}. | |
| @item -w | |
| @itemx --wildcard | |
| Permit regular expressions in @var{symbolname}s used in other command | |
| line options. The question mark (?), asterisk (*), backslash (\) and | |
| square brackets ([]) operators can be used anywhere in the symbol | |
| name. If the first character of the symbol name is the exclamation | |
| point (!) then the sense of the switch is reversed for that symbol. | |
| For example: | |
| @smallexample | |
| -w -K !foo -K fo* | |
| @end smallexample | |
| would cause strip to only keep symbols that start with the letters | |
| ``fo'', but to discard the symbol ``foo''. | |
| @item -x | |
| @itemx --discard-all | |
| Remove non-global symbols. | |
| @item -X | |
| @itemx --discard-locals | |
| Remove compiler-generated local symbols. | |
| (These usually start with @samp{L} or @samp{.}.) | |
| @item --keep-section-symbols | |
| When stripping a file, perhaps with @option{--strip-debug} or | |
| @option{--strip-unneeded}, retain any symbols specifying section names, | |
| which would otherwise get stripped. | |
| @item --keep-file-symbols | |
| When stripping a file, perhaps with @option{--strip-debug} or | |
| @option{--strip-unneeded}, retain any symbols specifying source file names, | |
| which would otherwise get stripped. | |
| @item --only-keep-debug | |
| Strip a file, emptying the contents of any sections that would not be | |
| stripped by @option{--strip-debug} and leaving the debugging sections | |
| intact. In ELF files, this preserves all the note sections in the | |
| output as well. | |
| Note - the section headers of the stripped sections are preserved, | |
| including their sizes, but the contents of the section are discarded. | |
| The section headers are preserved so that other tools can match up the | |
| debuginfo file with the real executable, even if that executable has | |
| been relocated to a different address space. | |
| The intention is that this option will be used in conjunction with | |
| @option{--add-gnu-debuglink} to create a two part executable. One a | |
| stripped binary which will occupy less space in RAM and in a | |
| distribution and the second a debugging information file which is only | |
| needed if debugging abilities are required. The suggested procedure | |
| to create these files is as follows: | |
| @enumerate | |
| @item Link the executable as normal. Assuming that it is called | |
| @code{foo} then... | |
| @item Run @code{objcopy --only-keep-debug foo foo.dbg} to | |
| create a file containing the debugging info. | |
| @item Run @code{objcopy --strip-debug foo} to create a | |
| stripped executable. | |
| @item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo} | |
| to add a link to the debugging info into the stripped executable. | |
| @end enumerate | |
| Note---the choice of @code{.dbg} as an extension for the debug info | |
| file is arbitrary. Also the @code{--only-keep-debug} step is | |
| optional. You could instead do this: | |
| @enumerate | |
| @item Link the executable as normal. | |
| @item Copy @code{foo} to @code{foo.full} | |
| @item Run @code{strip --strip-debug foo} | |
| @item Run @code{objcopy --add-gnu-debuglink=foo.full foo} | |
| @end enumerate | |
| i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the | |
| full executable. It does not have to be a file created by the | |
| @option{--only-keep-debug} switch. | |
| Note---this switch is only intended for use on fully linked files. It | |
| does not make sense to use it on object files where the debugging | |
| information may be incomplete. Besides the gnu_debuglink feature | |
| currently only supports the presence of one filename containing | |
| debugging information, not multiple filenames on a one-per-object-file | |
| basis. | |
| @item -V | |
| @itemx --version | |
| Show the version number for @command{strip}. | |
| @item -v | |
| @itemx --verbose | |
| Verbose output: list all object files modified. In the case of | |
| archives, @samp{strip -v} lists all members of the archive. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO strip | |
| the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node c++filt, addr2line, strip, Top | |
| @chapter c++filt | |
| @kindex c++filt | |
| @cindex demangling C++ symbols | |
| @c man title cxxfilt demangle C++ and Java symbols | |
| @smallexample | |
| @c man begin SYNOPSIS cxxfilt | |
| c++filt [@option{-_}|@option{--strip-underscore}] | |
| [@option{-n}|@option{--no-strip-underscore}] | |
| [@option{-p}|@option{--no-params}] | |
| [@option{-t}|@option{--types}] | |
| [@option{-i}|@option{--no-verbose}] | |
| [@option{-r}|@option{--no-recurse-limit}] | |
| [@option{-R}|@option{--recurse-limit}] | |
| [@option{-s} @var{format}|@option{--format=}@var{format}] | |
| [@option{--help}] [@option{--version}] [@var{symbol}@dots{}] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION cxxfilt | |
| @kindex cxxfilt | |
| The C++ and Java languages provide function overloading, which means | |
| that you can write many functions with the same name, providing that | |
| each function takes parameters of different types. In order to be | |
| able to distinguish these similarly named functions C++ and Java | |
| encode them into a low-level assembler name which uniquely identifies | |
| each different version. This process is known as @dfn{mangling}. The | |
| @command{c++filt} | |
| @footnote{MS-DOS does not allow @kbd{+} characters in file names, so on | |
| MS-DOS this program is named @command{CXXFILT}.} | |
| program does the inverse mapping: it decodes (@dfn{demangles}) low-level | |
| names into user-level names so that they can be read. | |
| Every alphanumeric word (consisting of letters, digits, underscores, | |
| dollars, or periods) seen in the input is a potential mangled name. | |
| If the name decodes into a C++ name, the C++ name replaces the | |
| low-level name in the output, otherwise the original word is output. | |
| In this way you can pass an entire assembler source file, containing | |
| mangled names, through @command{c++filt} and see the same source file | |
| containing demangled names. | |
| You can also use @command{c++filt} to decipher individual symbols by | |
| passing them on the command line: | |
| @example | |
| c++filt @var{symbol} | |
| @end example | |
| If no @var{symbol} arguments are given, @command{c++filt} reads symbol | |
| names from the standard input instead. All the results are printed on | |
| the standard output. The difference between reading names from the | |
| command line versus reading names from the standard input is that | |
| command-line arguments are expected to be just mangled names and no | |
| checking is performed to separate them from surrounding text. Thus | |
| for example: | |
| @smallexample | |
| c++filt -n _Z1fv | |
| @end smallexample | |
| will work and demangle the name to ``f()'' whereas: | |
| @smallexample | |
| c++filt -n _Z1fv, | |
| @end smallexample | |
| will not work. (Note the extra comma at the end of the mangled | |
| name which makes it invalid). This command however will work: | |
| @smallexample | |
| echo _Z1fv, | c++filt -n | |
| @end smallexample | |
| and will display ``f(),'', i.e., the demangled name followed by a | |
| trailing comma. This behaviour is because when the names are read | |
| from the standard input it is expected that they might be part of an | |
| assembler source file where there might be extra, extraneous | |
| characters trailing after a mangled name. For example: | |
| @smallexample | |
| .type _Z1fv, @@function | |
| @end smallexample | |
| @c man end | |
| @c man begin OPTIONS cxxfilt | |
| @table @env | |
| @item -_ | |
| @itemx --strip-underscore | |
| On some systems, both the C and C++ compilers put an underscore in front | |
| of every name. For example, the C name @code{foo} gets the low-level | |
| name @code{_foo}. This option removes the initial underscore. Whether | |
| @command{c++filt} removes the underscore by default is target dependent. | |
| @item -n | |
| @itemx --no-strip-underscore | |
| Do not remove the initial underscore. | |
| @item -p | |
| @itemx --no-params | |
| When demangling the name of a function, do not display the types of | |
| the function's parameters. | |
| @item -t | |
| @itemx --types | |
| Attempt to demangle types as well as function names. This is disabled | |
| by default since mangled types are normally only used internally in | |
| the compiler, and they can be confused with non-mangled names. For example, | |
| a function called ``a'' treated as a mangled type name would be | |
| demangled to ``signed char''. | |
| @item -i | |
| @itemx --no-verbose | |
| Do not include implementation details (if any) in the demangled | |
| output. | |
| @item -r | |
| @itemx -R | |
| @itemx --recurse-limit | |
| @itemx --no-recurse-limit | |
| @itemx --recursion-limit | |
| @itemx --no-recursion-limit | |
| Enables or disables a limit on the amount of recursion performed | |
| whilst demangling strings. Since the name mangling formats allow for | |
| an infinite level of recursion it is possible to create strings whose | |
| decoding will exhaust the amount of stack space available on the host | |
| machine, triggering a memory fault. The limit tries to prevent this | |
| from happening by restricting recursion to 2048 levels of nesting. | |
| The default is for this limit to be enabled, but disabling it may be | |
| necessary in order to demangle truly complicated names. Note however | |
| that if the recursion limit is disabled then stack exhaustion is | |
| possible and any bug reports about such an event will be rejected. | |
| The @option{-r} option is a synonym for the | |
| @option{--no-recurse-limit} option. The @option{-R} option is a | |
| synonym for the @option{--recurse-limit} option. | |
| @item -s @var{format} | |
| @itemx --format=@var{format} | |
| @command{c++filt} can decode various methods of mangling, used by | |
| different compilers. The argument to this option selects which | |
| method it uses: | |
| @table @code | |
| @item auto | |
| Automatic selection based on executable (the default method) | |
| @item gnu | |
| the one used by the @sc{gnu} C++ compiler (g++) | |
| @item lucid | |
| the one used by the Lucid compiler (lcc) | |
| @item arm | |
| the one specified by the C++ Annotated Reference Manual | |
| @item hp | |
| the one used by the HP compiler (aCC) | |
| @item edg | |
| the one used by the EDG compiler | |
| @item gnu-v3 | |
| the one used by the @sc{gnu} C++ compiler (g++) with the V3 ABI. | |
| @item java | |
| the one used by the @sc{gnu} Java compiler (gcj) | |
| @item gnat | |
| the one used by the @sc{gnu} Ada compiler (GNAT). | |
| @end table | |
| @item --help | |
| Print a summary of the options to @command{c++filt} and exit. | |
| @item --version | |
| Print the version number of @command{c++filt} and exit. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO cxxfilt | |
| the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @quotation | |
| @emph{Warning:} @command{c++filt} is a new utility, and the details of its | |
| user interface are subject to change in future releases. In particular, | |
| a command-line option may be required in the future to decode a name | |
| passed as an argument on the command line; in other words, | |
| @example | |
| c++filt @var{symbol} | |
| @end example | |
| @noindent | |
| may in a future release become | |
| @example | |
| c++filt @var{option} @var{symbol} | |
| @end example | |
| @end quotation | |
| @node addr2line | |
| @chapter addr2line | |
| @kindex addr2line | |
| @cindex address to file name and line number | |
| @c man title addr2line convert addresses or symbol+offset into file names and line numbers | |
| @smallexample | |
| @c man begin SYNOPSIS addr2line | |
| addr2line [@option{-a}|@option{--addresses}] | |
| [@option{-b} @var{bfdname}|@option{--target=}@var{bfdname}] | |
| [@option{-C}|@option{--demangle}[=@var{style}]] | |
| [@option{-r}|@option{--no-recurse-limit}] | |
| [@option{-R}|@option{--recurse-limit}] | |
| [@option{-e} @var{filename}|@option{--exe=}@var{filename}] | |
| [@option{-f}|@option{--functions}] [@option{-s}|@option{--basename}] | |
| [@option{-i}|@option{--inlines}] | |
| [@option{-p}|@option{--pretty-print}] | |
| [@option{-j}|@option{--section=}@var{name}] | |
| [@option{-H}|@option{--help}] [@option{-V}|@option{--version}] | |
| [addr addr @dots{}] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION addr2line | |
| @command{addr2line} translates addresses or symbol+offset into file names and line numbers. | |
| Given an address or symbol+offset in an executable or an offset in a section of a relocatable | |
| object, it uses the debugging information to figure out which file name and | |
| line number are associated with it. | |
| The executable or relocatable object to use is specified with the @option{-e} | |
| option. The default is the file @file{a.out}. The section in the relocatable | |
| object to use is specified with the @option{-j} option. | |
| @command{addr2line} has two modes of operation. | |
| In the first, hexadecimal addresses or symbol+offset are specified on the command line, | |
| and @command{addr2line} displays the file name and line number for each | |
| address. | |
| In the second, @command{addr2line} reads hexadecimal addresses or symbol+offset from | |
| standard input, and prints the file name and line number for each | |
| address on standard output. In this mode, @command{addr2line} may be used | |
| in a pipe to convert dynamically chosen addresses. | |
| The format of the output is @samp{FILENAME:LINENO}. By default | |
| each input address generates one line of output. | |
| Two options can generate additional lines before each | |
| @samp{FILENAME:LINENO} line (in that order). | |
| If the @option{-a} option is used then a line with the input address | |
| is displayed. | |
| If the @option{-f} option is used, then a line with the | |
| @samp{FUNCTIONNAME} is displayed. This is the name of the function | |
| containing the address. | |
| One option can generate additional lines after the | |
| @samp{FILENAME:LINENO} line. | |
| If the @option{-i} option is used and the code at the given address is | |
| present there because of inlining by the compiler then additional | |
| lines are displayed afterwards. One or two extra lines (if the | |
| @option{-f} option is used) are displayed for each inlined function. | |
| Alternatively if the @option{-p} option is used then each input | |
| address generates a single, long, output line containing the address, | |
| the function name, the file name and the line number. If the | |
| @option{-i} option has also been used then any inlined functions will | |
| be displayed in the same manner, but on separate lines, and prefixed | |
| by the text @samp{(inlined by)}. | |
| If the file name or function name can not be determined, | |
| @command{addr2line} will print two question marks in their place. If the | |
| line number can not be determined, @command{addr2line} will print 0. | |
| When symbol+offset is used, +offset is optional, except when the symbol | |
| is ambigious with a hex number. The resolved symbols can be mangled | |
| or unmangled, except unmangled symbols with + are not allowed. | |
| @c man end | |
| @c man begin OPTIONS addr2line | |
| The long and short forms of options, shown here as alternatives, are | |
| equivalent. | |
| @table @env | |
| @item -a | |
| @itemx --addresses | |
| Display the address before the function name, file and line number | |
| information. The address is printed with a @samp{0x} prefix to easily | |
| identify it. | |
| @item -b @var{bfdname} | |
| @itemx --target=@var{bfdname} | |
| @cindex object code format | |
| Specify that the object-code format for the object files is | |
| @var{bfdname}. | |
| @item -C | |
| @itemx --demangle[=@var{style}] | |
| @cindex demangling in objdump | |
| Decode (@dfn{demangle}) low-level symbol names into user-level names. | |
| Besides removing any initial underscore prepended by the system, this | |
| makes C++ function names readable. Different compilers have different | |
| mangling styles. The optional demangling style argument can be used to | |
| choose an appropriate demangling style for your compiler. @xref{c++filt}, | |
| for more information on demangling. | |
| @item -e @var{filename} | |
| @itemx --exe=@var{filename} | |
| Specify the name of the executable for which addresses should be | |
| translated. The default file is @file{a.out}. | |
| @item -f | |
| @itemx --functions | |
| Display function names as well as file and line number information. | |
| @item -s | |
| @itemx --basenames | |
| Display only the base of each file name. | |
| @item -i | |
| @itemx --inlines | |
| If the address belongs to a function that was inlined, the source | |
| information for all enclosing scopes back to the first non-inlined | |
| function will also be printed. For example, if @code{main} inlines | |
| @code{callee1} which inlines @code{callee2}, and address is from | |
| @code{callee2}, the source information for @code{callee1} and @code{main} | |
| will also be printed. | |
| @item -j | |
| @itemx --section | |
| Read offsets relative to the specified section instead of absolute addresses. | |
| @item -p | |
| @itemx --pretty-print | |
| Make the output more human friendly: each location are printed on one line. | |
| If option @option{-i} is specified, lines for all enclosing scopes are | |
| prefixed with @samp{(inlined by)}. | |
| @item -r | |
| @itemx -R | |
| @itemx --recurse-limit | |
| @itemx --no-recurse-limit | |
| @itemx --recursion-limit | |
| @itemx --no-recursion-limit | |
| Enables or disables a limit on the amount of recursion performed | |
| whilst demangling strings. Since the name mangling formats allow for | |
| an infinite level of recursion it is possible to create strings whose | |
| decoding will exhaust the amount of stack space available on the host | |
| machine, triggering a memory fault. The limit tries to prevent this | |
| from happening by restricting recursion to 2048 levels of nesting. | |
| The default is for this limit to be enabled, but disabling it may be | |
| necessary in order to demangle truly complicated names. Note however | |
| that if the recursion limit is disabled then stack exhaustion is | |
| possible and any bug reports about such an event will be rejected. | |
| The @option{-r} option is a synonym for the | |
| @option{--no-recurse-limit} option. The @option{-R} option is a | |
| synonym for the @option{--recurse-limit} option. | |
| Note this option is only effective if the @option{-C} or | |
| @option{--demangle} option has been enabled. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO addr2line | |
| Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node windmc | |
| @chapter windmc | |
| @command{windmc} may be used to generator Windows message resources. | |
| @quotation | |
| @emph{Warning:} @command{windmc} is not always built as part of the binary | |
| utilities, since it is only useful for Windows targets. | |
| @end quotation | |
| @c man title windmc generates Windows message resources | |
| @smallexample | |
| @c man begin SYNOPSIS windmc | |
| windmc [options] input-file | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION windmc | |
| @command{windmc} reads message definitions from an input file (.mc) and | |
| translate them into a set of output files. The output files may be of | |
| four kinds: | |
| @table @code | |
| @item h | |
| A C header file containing the message definitions. | |
| @item rc | |
| A resource file compilable by the @command{windres} tool. | |
| @item bin | |
| One or more binary files containing the resource data for a specific | |
| message language. | |
| @item dbg | |
| A C include file that maps message id's to their symbolic name. | |
| @end table | |
| The exact description of these different formats is available in | |
| documentation from Microsoft. | |
| When @command{windmc} converts from the @code{mc} format to the @code{bin} | |
| format, @code{rc}, @code{h}, and optional @code{dbg} it is acting like the | |
| Windows Message Compiler. | |
| @c man end | |
| @c man begin OPTIONS windmc | |
| @table @env | |
| @item -a | |
| @itemx --ascii_in | |
| Specifies that the input file specified is ASCII. This is the default | |
| behaviour. | |
| @item -A | |
| @itemx --ascii_out | |
| Specifies that messages in the output @code{bin} files should be in ASCII | |
| format. | |
| @item -b | |
| @itemx --binprefix | |
| Specifies that @code{bin} filenames should have to be prefixed by the | |
| basename of the source file. | |
| @item -c | |
| @itemx --customflag | |
| Sets the customer bit in all message id's. | |
| @item -C @var{codepage} | |
| @itemx --codepage_in @var{codepage} | |
| Sets the default codepage to be used to convert input file to UTF16. The | |
| default is ocdepage 1252. | |
| @item -d | |
| @itemx --decimal_values | |
| Outputs the constants in the header file in decimal. Default is using | |
| hexadecimal output. | |
| @item -e @var{ext} | |
| @itemx --extension @var{ext} | |
| The extension for the header file. The default is .h extension. | |
| @item -F @var{target} | |
| @itemx --target @var{target} | |
| Specify the BFD format to use for a bin file as output. This | |
| is a BFD target name; you can use the @option{--help} option to see a list | |
| of supported targets. Normally @command{windmc} will use the default | |
| format, which is the first one listed by the @option{--help} option. | |
| @ifclear man | |
| @ref{Target Selection}. | |
| @end ifclear | |
| @item -h @var{path} | |
| @itemx --headerdir @var{path} | |
| The target directory of the generated header file. The default is the | |
| current directory. | |
| @item -H | |
| @itemx --help | |
| Displays a list of command-line options and then exits. | |
| @item -m @var{characters} | |
| @itemx --maxlength @var{characters} | |
| Instructs @command{windmc} to generate a warning if the length | |
| of any message exceeds the number specified. | |
| @item -n | |
| @itemx --nullterminate | |
| Terminate message text in @code{bin} files by zero. By default they are | |
| terminated by CR/LF. | |
| @item -o | |
| @itemx --hresult_use | |
| Not yet implemented. Instructs @code{windmc} to generate an OLE2 header | |
| file, using HRESULT definitions. Status codes are used if the flag is not | |
| specified. | |
| @item -O @var{codepage} | |
| @itemx --codepage_out @var{codepage} | |
| Sets the default codepage to be used to output text files. The default | |
| is ocdepage 1252. | |
| @item -r @var{path} | |
| @itemx --rcdir @var{path} | |
| The target directory for the generated @code{rc} script and the generated | |
| @code{bin} files that the resource compiler script includes. The default | |
| is the current directory. | |
| @item -u | |
| @itemx --unicode_in | |
| Specifies that the input file is UTF16. | |
| @item -U | |
| @itemx --unicode_out | |
| Specifies that messages in the output @code{bin} file should be in UTF16 | |
| format. This is the default behaviour. | |
| @item -v | |
| @item --verbose | |
| Enable verbose mode. | |
| @item -V | |
| @item --version | |
| Prints the version number for @command{windmc}. | |
| @item -x @var{path} | |
| @itemx --xdgb @var{path} | |
| The path of the @code{dbg} C include file that maps message id's to the | |
| symbolic name. No such file is generated without specifying the switch. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO windmc | |
| the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node windres | |
| @chapter windres | |
| @command{windres} may be used to manipulate Windows resources. | |
| @quotation | |
| @emph{Warning:} @command{windres} is not always built as part of the binary | |
| utilities, since it is only useful for Windows targets. | |
| @end quotation | |
| @c man title windres manipulate Windows resources | |
| @smallexample | |
| @c man begin SYNOPSIS windres | |
| windres [options] [input-file] [output-file] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION windres | |
| @command{windres} reads resources from an input file and copies them into | |
| an output file. Either file may be in one of three formats: | |
| @table @code | |
| @item rc | |
| A text format read by the Resource Compiler. | |
| @item res | |
| A binary format generated by the Resource Compiler. | |
| @item coff | |
| A COFF object or executable. | |
| @end table | |
| The exact description of these different formats is available in | |
| documentation from Microsoft. | |
| When @command{windres} converts from the @code{rc} format to the @code{res} | |
| format, it is acting like the Windows Resource Compiler. When | |
| @command{windres} converts from the @code{res} format to the @code{coff} | |
| format, it is acting like the Windows @code{CVTRES} program. | |
| When @command{windres} generates an @code{rc} file, the output is similar | |
| but not identical to the format expected for the input. When an input | |
| @code{rc} file refers to an external filename, an output @code{rc} file | |
| will instead include the file contents. | |
| If the input or output format is not specified, @command{windres} will | |
| guess based on the file name, or, for the input file, the file contents. | |
| A file with an extension of @file{.rc} will be treated as an @code{rc} | |
| file, a file with an extension of @file{.res} will be treated as a | |
| @code{res} file, and a file with an extension of @file{.o} or | |
| @file{.exe} will be treated as a @code{coff} file. | |
| If no output file is specified, @command{windres} will print the resources | |
| in @code{rc} format to standard output. | |
| The normal use is for you to write an @code{rc} file, use @command{windres} | |
| to convert it to a COFF object file, and then link the COFF file into | |
| your application. This will make the resources described in the | |
| @code{rc} file available to Windows. | |
| @c man end | |
| @c man begin OPTIONS windres | |
| @table @env | |
| @item -i @var{filename} | |
| @itemx --input @var{filename} | |
| The name of the input file. If this option is not used, then | |
| @command{windres} will use the first non-option argument as the input file | |
| name. If there are no non-option arguments, then @command{windres} will | |
| read from standard input. @command{windres} can not read a COFF file from | |
| standard input. | |
| @item -o @var{filename} | |
| @itemx --output @var{filename} | |
| The name of the output file. If this option is not used, then | |
| @command{windres} will use the first non-option argument, after any used | |
| for the input file name, as the output file name. If there is no | |
| non-option argument, then @command{windres} will write to standard output. | |
| @command{windres} can not write a COFF file to standard output. Note, | |
| for compatibility with @command{rc} the option @option{-fo} is also | |
| accepted, but its use is not recommended. | |
| @item -J @var{format} | |
| @itemx --input-format @var{format} | |
| The input format to read. @var{format} may be @samp{res}, @samp{rc}, or | |
| @samp{coff}. If no input format is specified, @command{windres} will | |
| guess, as described above. | |
| @item -O @var{format} | |
| @itemx --output-format @var{format} | |
| The output format to generate. @var{format} may be @samp{res}, | |
| @samp{rc}, or @samp{coff}. If no output format is specified, | |
| @command{windres} will guess, as described above. | |
| @item -F @var{target} | |
| @itemx --target @var{target} | |
| Specify the BFD format to use for a COFF file as input or output. This | |
| is a BFD target name; you can use the @option{--help} option to see a list | |
| of supported targets. Normally @command{windres} will use the default | |
| format, which is the first one listed by the @option{--help} option. | |
| @ifclear man | |
| @ref{Target Selection}. | |
| @end ifclear | |
| @item --preprocessor @var{program} | |
| When @command{windres} reads an @code{rc} file, it runs it through the C | |
| preprocessor first. This option may be used to specify the preprocessor | |
| to use. The default preprocessor is @code{gcc}. | |
| @item --preprocessor-arg @var{option} | |
| When @command{windres} reads an @code{rc} file, it runs it through | |
| the C preprocessor first. This option may be used to specify additional | |
| text to be passed to preprocessor on its command line. | |
| This option can be used multiple times to add multiple options to the | |
| preprocessor command line. | |
| If the @option{--preprocessor} option has not been specified then a | |
| default set of preprocessor arguments will be used, with any | |
| @option{--preprocessor-arg} options being placed after them on the | |
| command line. These default arguments are @code{-E}, | |
| @code{-xc-header} and @code{-DRC_INVOKED}. | |
| @item -I @var{directory} | |
| @itemx --include-dir @var{directory} | |
| Specify an include directory to use when reading an @code{rc} file. | |
| @command{windres} will pass this to the preprocessor as an @option{-I} | |
| option. @command{windres} will also search this directory when looking for | |
| files named in the @code{rc} file. If the argument passed to this command | |
| matches any of the supported @var{formats} (as described in the @option{-J} | |
| option), it will issue a deprecation warning, and behave just like the | |
| @option{-J} option. New programs should not use this behaviour. If a | |
| directory happens to match a @var{format}, simple prefix it with @samp{./} | |
| to disable the backward compatibility. | |
| @item -D @var{target} | |
| @itemx --define @var{sym}[=@var{val}] | |
| Specify a @option{-D} option to pass to the preprocessor when reading an | |
| @code{rc} file. | |
| @item -U @var{target} | |
| @itemx --undefine @var{sym} | |
| Specify a @option{-U} option to pass to the preprocessor when reading an | |
| @code{rc} file. | |
| @item -r | |
| Ignored for compatibility with rc. | |
| @item -v | |
| Enable verbose mode. This tells you what the preprocessor is if you | |
| didn't specify one. | |
| @item -c @var{val} | |
| @item --codepage @var{val} | |
| Specify the default codepage to use when reading an @code{rc} file. | |
| @var{val} should be a hexadecimal prefixed by @samp{0x} or decimal | |
| codepage code. The valid range is from zero up to 0xffff, but the | |
| validity of the codepage is host and configuration dependent. | |
| @item -l @var{val} | |
| @item --language @var{val} | |
| Specify the default language to use when reading an @code{rc} file. | |
| @var{val} should be a hexadecimal language code. The low eight bits are | |
| the language, and the high eight bits are the sublanguage. | |
| @item --use-temp-file | |
| Use a temporary file to instead of using popen to read the output of | |
| the preprocessor. Use this option if the popen implementation is buggy | |
| on the host (eg., certain non-English language versions of Windows 95 and | |
| Windows 98 are known to have buggy popen where the output will instead | |
| go the console). | |
| @item --no-use-temp-file | |
| Use popen, not a temporary file, to read the output of the preprocessor. | |
| This is the default behaviour. | |
| @item -h | |
| @item --help | |
| Prints a usage summary. | |
| @item -V | |
| @item --version | |
| Prints the version number for @command{windres}. | |
| @item --yydebug | |
| If @command{windres} is compiled with @code{YYDEBUG} defined as @code{1}, | |
| this will turn on parser debugging. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO windres | |
| the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node dlltool | |
| @chapter dlltool | |
| @cindex DLL | |
| @kindex dlltool | |
| @command{dlltool} is used to create the files needed to create dynamic | |
| link libraries (DLLs) on systems which understand PE format image | |
| files such as Windows. A DLL contains an export table which contains | |
| information that the runtime loader needs to resolve references from a | |
| referencing program. | |
| The export table is generated by this program by reading in a | |
| @file{.def} file or scanning the @file{.a} and @file{.o} files which | |
| will be in the DLL. A @file{.o} file can contain information in | |
| special @samp{.drectve} sections with export information. | |
| @quotation | |
| @emph{Note:} @command{dlltool} is not always built as part of the | |
| binary utilities, since it is only useful for those targets which | |
| support DLLs. | |
| @end quotation | |
| @c man title dlltool create files needed to build and use DLLs | |
| @smallexample | |
| @c man begin SYNOPSIS dlltool | |
| dlltool [@option{-d}|@option{--input-def} @var{def-file-name}] | |
| [@option{-b}|@option{--base-file} @var{base-file-name}] | |
| [@option{-e}|@option{--output-exp} @var{exports-file-name}] | |
| [@option{-z}|@option{--output-def} @var{def-file-name}] | |
| [@option{-l}|@option{--output-lib} @var{library-file-name}] | |
| [@option{-y}|@option{--output-delaylib} @var{library-file-name}] | |
| [@option{--export-all-symbols}] [@option{--no-export-all-symbols}] | |
| [@option{--exclude-symbols} @var{list}] | |
| [@option{--no-default-excludes}] | |
| [@option{-S}|@option{--as} @var{path-to-assembler}] [@option{-f}|@option{--as-flags} @var{options}] | |
| [@option{-D}|@option{--dllname} @var{name}] [@option{-m}|@option{--machine} @var{machine}] | |
| [@option{-a}|@option{--add-indirect}] | |
| [@option{-U}|@option{--add-underscore}] [@option{--add-stdcall-underscore}] | |
| [@option{-k}|@option{--kill-at}] [@option{-A}|@option{--add-stdcall-alias}] | |
| [@option{-p}|@option{--ext-prefix-alias} @var{prefix}] | |
| [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}] | |
| [@option{--use-nul-prefixed-import-tables}] | |
| [@option{-I}|@option{--identify} @var{library-file-name}] [@option{--identify-strict}] | |
| [@option{-i}|@option{--interwork}] | |
| [@option{-n}|@option{--nodelete}] [@option{-t}|@option{--temp-prefix} @var{prefix}] | |
| [@option{-v}|@option{--verbose}] | |
| [@option{-h}|@option{--help}] [@option{-V}|@option{--version}] | |
| [@option{--no-leading-underscore}] [@option{--leading-underscore}] | |
| [@option{--deterministic-libraries}] [@option{--non-deterministic-libraries}] | |
| [object-file @dots{}] | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION dlltool | |
| @command{dlltool} reads its inputs, which can come from the @option{-d} and | |
| @option{-b} options as well as object files specified on the command | |
| line. It then processes these inputs and if the @option{-e} option has | |
| been specified it creates a exports file. If the @option{-l} option | |
| has been specified it creates a library file and if the @option{-z} option | |
| has been specified it creates a def file. Any or all of the @option{-e}, | |
| @option{-l} and @option{-z} options can be present in one invocation of | |
| dlltool. | |
| When creating a DLL, along with the source for the DLL, it is necessary | |
| to have three other files. @command{dlltool} can help with the creation of | |
| these files. | |
| The first file is a @file{.def} file which specifies which functions are | |
| exported from the DLL, which functions the DLL imports, and so on. This | |
| is a text file and can be created by hand, or @command{dlltool} can be used | |
| to create it using the @option{-z} option. In this case @command{dlltool} | |
| will scan the object files specified on its command line looking for | |
| those functions which have been specially marked as being exported and | |
| put entries for them in the @file{.def} file it creates. | |
| In order to mark a function as being exported from a DLL, it needs to | |
| have an @option{-export:<name_of_function>} entry in the @samp{.drectve} | |
| section of the object file. This can be done in C by using the | |
| asm() operator: | |
| @smallexample | |
| asm (".section .drectve"); | |
| asm (".ascii \"-export:my_func\""); | |
| int my_func (void) @{ @dots{} @} | |
| @end smallexample | |
| The second file needed for DLL creation is an exports file. This file | |
| is linked with the object files that make up the body of the DLL and it | |
| handles the interface between the DLL and the outside world. This is a | |
| binary file and it can be created by giving the @option{-e} option to | |
| @command{dlltool} when it is creating or reading in a @file{.def} file. | |
| The third file needed for DLL creation is the library file that programs | |
| will link with in order to access the functions in the DLL (an `import | |
| library'). This file can be created by giving the @option{-l} option to | |
| dlltool when it is creating or reading in a @file{.def} file. | |
| If the @option{-y} option is specified, dlltool generates a delay-import | |
| library that can be used instead of the normal import library to allow | |
| a program to link to the dll only as soon as an imported function is | |
| called for the first time. The resulting executable will need to be | |
| linked to the static delayimp library containing __delayLoadHelper2(), | |
| which in turn will import LoadLibraryA and GetProcAddress from kernel32. | |
| @command{dlltool} builds the library file by hand, but it builds the | |
| exports file by creating temporary files containing assembler statements | |
| and then assembling these. The @option{-S} command-line option can be | |
| used to specify the path to the assembler that dlltool will use, | |
| and the @option{-f} option can be used to pass specific flags to that | |
| assembler. The @option{-n} can be used to prevent dlltool from deleting | |
| these temporary assembler files when it is done, and if @option{-n} is | |
| specified twice then this will prevent dlltool from deleting the | |
| temporary object files it used to build the library. | |
| Here is an example of creating a DLL from a source file @samp{dll.c} and | |
| also creating a program (from an object file called @samp{program.o}) | |
| that uses that DLL: | |
| @smallexample | |
| gcc -c dll.c | |
| dlltool -e exports.o -l dll.lib dll.o | |
| gcc dll.o exports.o -o dll.dll | |
| gcc program.o dll.lib -o program | |
| @end smallexample | |
| @command{dlltool} may also be used to query an existing import library | |
| to determine the name of the DLL to which it is associated. See the | |
| description of the @option{-I} or @option{--identify} option. | |
| @c man end | |
| @c man begin OPTIONS dlltool | |
| The command-line options have the following meanings: | |
| @table @env | |
| @item -d @var{filename} | |
| @itemx --input-def @var{filename} | |
| @cindex input .def file | |
| Specifies the name of a @file{.def} file to be read in and processed. | |
| @item -b @var{filename} | |
| @itemx --base-file @var{filename} | |
| @cindex base files | |
| Specifies the name of a base file to be read in and processed. The | |
| contents of this file will be added to the relocation section in the | |
| exports file generated by dlltool. | |
| @item -e @var{filename} | |
| @itemx --output-exp @var{filename} | |
| Specifies the name of the export file to be created by dlltool. | |
| @item -z @var{filename} | |
| @itemx --output-def @var{filename} | |
| Specifies the name of the @file{.def} file to be created by dlltool. | |
| @item -l @var{filename} | |
| @itemx --output-lib @var{filename} | |
| Specifies the name of the library file to be created by dlltool. | |
| @item -y @var{filename} | |
| @itemx --output-delaylib @var{filename} | |
| Specifies the name of the delay-import library file to be created by dlltool. | |
| @item --deterministic-libraries | |
| @itemx --non-deterministic-libraries | |
| When creating output libraries in response to either the | |
| @option{--output-lib} or @option{--output-delaylib} options either use | |
| the value of zero for any timestamps, user ids and group ids created | |
| (@option{--deterministic-libraries}) or the actual timestamps, user | |
| ids and group ids (@option{--non-deterministic-libraries}). | |
| @item --export-all-symbols | |
| Treat all global and weak defined symbols found in the input object | |
| files as symbols to be exported. There is a small list of symbols which | |
| are not exported by default; see the @option{--no-default-excludes} | |
| option. You may add to the list of symbols to not export by using the | |
| @option{--exclude-symbols} option. | |
| @item --no-export-all-symbols | |
| Only export symbols explicitly listed in an input @file{.def} file or in | |
| @samp{.drectve} sections in the input object files. This is the default | |
| behaviour. The @samp{.drectve} sections are created by @samp{dllexport} | |
| attributes in the source code. | |
| @item --exclude-symbols @var{list} | |
| Do not export the symbols in @var{list}. This is a list of symbol names | |
| separated by comma or colon characters. The symbol names should not | |
| contain a leading underscore. This is only meaningful when | |
| @option{--export-all-symbols} is used. | |
| @item --no-default-excludes | |
| When @option{--export-all-symbols} is used, it will by default avoid | |
| exporting certain special symbols. The current list of symbols to avoid | |
| exporting is @samp{DllMain@@12}, @samp{DllEntryPoint@@0}, | |
| @samp{impure_ptr}. You may use the @option{--no-default-excludes} option | |
| to go ahead and export these special symbols. This is only meaningful | |
| when @option{--export-all-symbols} is used. | |
| @item -S @var{path} | |
| @itemx --as @var{path} | |
| Specifies the path, including the filename, of the assembler to be used | |
| to create the exports file. | |
| @item -f @var{options} | |
| @itemx --as-flags @var{options} | |
| Specifies any specific command-line options to be passed to the | |
| assembler when building the exports file. This option will work even if | |
| the @option{-S} option is not used. This option only takes one argument, | |
| and if it occurs more than once on the command line, then later | |
| occurrences will override earlier occurrences. So if it is necessary to | |
| pass multiple options to the assembler they should be enclosed in | |
| double quotes. | |
| @item -D @var{name} | |
| @itemx --dll-name @var{name} | |
| Specifies the name to be stored in the @file{.def} file as the name of | |
| the DLL when the @option{-e} option is used. If this option is not | |
| present, then the filename given to the @option{-e} option will be | |
| used as the name of the DLL. | |
| @item -m @var{machine} | |
| @itemx -machine @var{machine} | |
| Specifies the type of machine for which the library file should be | |
| built. @command{dlltool} has a built in default type, depending upon how | |
| it was created, but this option can be used to override that. This is | |
| normally only useful when creating DLLs for an ARM processor, when the | |
| contents of the DLL are actually encode using Thumb instructions. | |
| @item -a | |
| @itemx --add-indirect | |
| Specifies that when @command{dlltool} is creating the exports file it | |
| should add a section which allows the exported functions to be | |
| referenced without using the import library. Whatever the hell that | |
| means! | |
| @item -U | |
| @itemx --add-underscore | |
| Specifies that when @command{dlltool} is creating the exports file it | |
| should prepend an underscore to the names of @emph{all} exported symbols. | |
| @item --no-leading-underscore | |
| @item --leading-underscore | |
| Specifies whether standard symbol should be forced to be prefixed, or | |
| not. | |
| @item --add-stdcall-underscore | |
| Specifies that when @command{dlltool} is creating the exports file it | |
| should prepend an underscore to the names of exported @emph{stdcall} | |
| functions. Variable names and non-stdcall function names are not modified. | |
| This option is useful when creating GNU-compatible import libs for third | |
| party DLLs that were built with MS-Windows tools. | |
| @item -k | |
| @itemx --kill-at | |
| Specifies that @samp{@@<number>} suffixes should be omitted from the names | |
| of stdcall functions that will be imported from the DLL. This is | |
| useful when creating an import library for a DLL which exports stdcall | |
| functions but without the usual @samp{@@<number>} symbol name suffix. | |
| This does not change the naming of symbols provided by the import library | |
| to programs linked against it, but only the entries in the import table | |
| (ie the .idata section). | |
| @item -A | |
| @itemx --add-stdcall-alias | |
| Specifies that when @command{dlltool} is creating the exports file it | |
| should add aliases for stdcall symbols without @samp{@@ <number>} | |
| in addition to the symbols with @samp{@@ <number>}. | |
| @item -p | |
| @itemx --ext-prefix-alias @var{prefix} | |
| Causes @command{dlltool} to create external aliases for all DLL | |
| imports with the specified prefix. The aliases are created for both | |
| external and import symbols with no leading underscore. | |
| @item -x | |
| @itemx --no-idata4 | |
| Specifies that when @command{dlltool} is creating the exports and library | |
| files it should omit the @code{.idata4} section. This is for compatibility | |
| with certain operating systems. | |
| @item --use-nul-prefixed-import-tables | |
| Specifies that when @command{dlltool} is creating the exports and library | |
| files it should prefix the @code{.idata4} and @code{.idata5} by zero an | |
| element. This emulates old gnu import library generation of | |
| @code{dlltool}. By default this option is turned off. | |
| @item -c | |
| @itemx --no-idata5 | |
| Specifies that when @command{dlltool} is creating the exports and library | |
| files it should omit the @code{.idata5} section. This is for compatibility | |
| with certain operating systems. | |
| @item -I @var{filename} | |
| @itemx --identify @var{filename} | |
| Specifies that @command{dlltool} should inspect the import library | |
| indicated by @var{filename} and report, on @code{stdout}, the name(s) | |
| of the associated DLL(s). This can be performed in addition to any | |
| other operations indicated by the other options and arguments. | |
| @command{dlltool} fails if the import library does not exist or is not | |
| actually an import library. See also @option{--identify-strict}. | |
| @item --identify-strict | |
| Modifies the behavior of the @option{--identify} option, such | |
| that an error is reported if @var{filename} is associated with | |
| more than one DLL. | |
| @item -i | |
| @itemx --interwork | |
| Specifies that @command{dlltool} should mark the objects in the library | |
| file and exports file that it produces as supporting interworking | |
| between ARM and Thumb code. | |
| @item -n | |
| @itemx --nodelete | |
| Makes @command{dlltool} preserve the temporary assembler files it used to | |
| create the exports file. If this option is repeated then dlltool will | |
| also preserve the temporary object files it uses to create the library | |
| file. | |
| @item -t @var{prefix} | |
| @itemx --temp-prefix @var{prefix} | |
| Makes @command{dlltool} use @var{prefix} when constructing the names of | |
| temporary assembler and object files. By default, the temp file prefix | |
| is generated from the pid. | |
| @item -v | |
| @itemx --verbose | |
| Make dlltool describe what it is doing. | |
| @item -h | |
| @itemx --help | |
| Displays a list of command-line options and then exits. | |
| @item -V | |
| @itemx --version | |
| Displays dlltool's version number and then exits. | |
| @end table | |
| @c man end | |
| @menu | |
| * def file format:: The format of the dlltool @file{.def} file | |
| @end menu | |
| @node def file format | |
| @section The format of the @command{dlltool} @file{.def} file | |
| A @file{.def} file contains any number of the following commands: | |
| @table @asis | |
| @item @code{NAME} @var{name} @code{[ ,} @var{base} @code{]} | |
| The result is going to be named @var{name}@code{.exe}. | |
| @item @code{LIBRARY} @var{name} @code{[ ,} @var{base} @code{]} | |
| The result is going to be named @var{name}@code{.dll}. | |
| Note: If you want to use LIBRARY as name then you need to quote. Otherwise | |
| this will fail due a necessary hack for libtool (see PR binutils/13710 for more | |
| details). | |
| @item @code{EXPORTS ( ( (} @var{name1} @code{[ = } @var{name2} @code{] ) | ( } @var{name1} @code{=} @var{module-name} @code{.} @var{external-name} @code{) ) [ == } @var{its_name} @code{]} | |
| @item @code{[} @var{integer} @code{] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *} | |
| Declares @var{name1} as an exported symbol from the DLL, with optional | |
| ordinal number @var{integer}, or declares @var{name1} as an alias | |
| (forward) of the function @var{external-name} in the DLL. | |
| If @var{its_name} is specified, this name is used as string in export table. | |
| @var{module-name}. | |
| Note: The @code{EXPORTS} has to be the last command in .def file, as keywords | |
| are treated - beside @code{LIBRARY} - as simple name-identifiers. | |
| If you want to use LIBRARY as name then you need to quote it. | |
| @item @code{IMPORTS ( (} @var{internal-name} @code{=} @var{module-name} @code{.} @var{integer} @code{) | [} @var{internal-name} @code{= ]} @var{module-name} @code{.} @var{external-name} @code{) [ == ) @var{its_name} @code{]} *} | |
| Declares that @var{external-name} or the exported function whose | |
| ordinal number is @var{integer} is to be imported from the file | |
| @var{module-name}. If @var{internal-name} is specified then this is | |
| the name that the imported function will be referred to in the body of | |
| the DLL. | |
| If @var{its_name} is specified, this name is used as string in import table. | |
| Note: The @code{IMPORTS} has to be the last command in .def file, as keywords | |
| are treated - beside @code{LIBRARY} - as simple name-identifiers. | |
| If you want to use LIBRARY as name then you need to quote it. | |
| @item @code{DESCRIPTION} @var{string} | |
| Puts @var{string} into the output @file{.exp} file in the | |
| @code{.rdata} section. | |
| @item @code{STACKSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]} | |
| @item @code{HEAPSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]} | |
| Generates @code{--stack} or @code{--heap} | |
| @var{number-reserve},@var{number-commit} in the output @code{.drectve} | |
| section. The linker will see this and act upon it. | |
| @item @code{CODE} @var{attr} @code{+} | |
| @item @code{DATA} @var{attr} @code{+} | |
| @item @code{SECTIONS (} @var{section-name} @var{attr}@code{ + ) *} | |
| Generates @code{--attr} @var{section-name} @var{attr} in the output | |
| @code{.drectve} section, where @var{attr} is one of @code{READ}, | |
| @code{WRITE}, @code{EXECUTE} or @code{SHARED}. The linker will see | |
| this and act upon it. | |
| @end table | |
| @ignore | |
| @c man begin SEEALSO dlltool | |
| The Info pages for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node readelf | |
| @chapter readelf | |
| @cindex ELF file information | |
| @kindex readelf | |
| @c man title readelf display information about ELF files | |
| @smallexample | |
| @c man begin SYNOPSIS readelf | |
| readelf [@option{-a}|@option{--all}] | |
| [@option{-h}|@option{--file-header}] | |
| [@option{-l}|@option{--program-headers}|@option{--segments}] | |
| [@option{-S}|@option{--section-headers}|@option{--sections}] | |
| [@option{-g}|@option{--section-groups}] | |
| [@option{-t}|@option{--section-details}] | |
| [@option{-e}|@option{--headers}] | |
| [@option{-s}|@option{--syms}|@option{--symbols}] | |
| [@option{--dyn-syms}|@option{--lto-syms}] | |
| [@option{--sym-base=[0|8|10|16]}] | |
| [@option{--demangle@var{=style}}|@option{--no-demangle}] | |
| [@option{--quiet}] | |
| [@option{--recurse-limit}|@option{--no-recurse-limit}] | |
| [@option{-U} @var{method}|@option{--unicode=}@var{method}] | |
| [@option{-X}|@option{--extra-sym-info}|@option{--no-extra-sym-info}] | |
| [@option{-n}|@option{--notes}] | |
| [@option{-r}|@option{--relocs}] | |
| [@option{-u}|@option{--unwind}] | |
| [@option{-d}|@option{--dynamic}] | |
| [@option{-V}|@option{--version-info}] | |
| [@option{-A}|@option{--arch-specific}] | |
| [@option{-D}|@option{--use-dynamic}] | |
| [@option{-L}|@option{--lint}|@option{--enable-checks}] | |
| [@option{-x} <number or name>|@option{--hex-dump=}<number or name>] | |
| [@option{-p} <number or name>|@option{--string-dump=}<number or name>] | |
| [@option{-R} <number or name>|@option{--relocated-dump=}<number or name>] | |
| [@option{-j} <number or name>|@option{--display-section=}<number or name>] | |
| [@option{-z}|@option{--decompress}] | |
| [@option{-c}|@option{--archive-index}] | |
| [@option{-w[lLiaprmfFsoORtUuTgAck]}| | |
| @option{--debug-dump}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]] | |
| [@option{-wK}|@option{--debug-dump=follow-links}] | |
| [@option{-wN}|@option{--debug-dump=no-follow-links}] | |
| [@option{-wD}|@option{--debug-dump=use-debuginfod}] | |
| [@option{-wE}|@option{--debug-dump=do-not-use-debuginfod}] | |
| [@option{-P}|@option{--process-links}] | |
| [@option{--dwarf-depth=@var{n}}] | |
| [@option{--dwarf-start=@var{n}}] | |
| [@option{--ctf=}@var{section}] | |
| [@option{--ctf-parent=}@var{section}] | |
| [@option{--ctf-symbols=}@var{section}] | |
| [@option{--ctf-strings=}@var{section}] | |
| [@option{--sframe=}@var{section}] | |
| [@option{-I}|@option{--histogram}] | |
| [@option{-v}|@option{--version}] | |
| [@option{-W}|@option{--wide}] | |
| [@option{-T}|@option{--silent-truncation}] | |
| [@option{-H}|@option{--help}] | |
| @var{elffile}@dots{} | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION readelf | |
| @command{readelf} displays information about one or more ELF format object | |
| files. The options control what particular information to display. | |
| @var{elffile}@dots{} are the object files to be examined. 32-bit and | |
| 64-bit ELF files are supported, as are archives containing ELF files. | |
| This program performs a similar function to @command{objdump} but it | |
| goes into more detail and it exists independently of the @sc{bfd} | |
| library, so if there is a bug in @sc{bfd} then readelf will not be | |
| affected. | |
| @c man end | |
| @c man begin OPTIONS readelf | |
| The long and short forms of options, shown here as alternatives, are | |
| equivalent. At least one option besides @samp{-v} or @samp{-H} must be | |
| given. | |
| @table @env | |
| @item -a | |
| @itemx --all | |
| Equivalent to specifying @option{--file-header}, | |
| @option{--program-headers}, @option{--sections}, @option{--symbols}, | |
| @option{--relocs}, @option{--dynamic}, @option{--notes}, | |
| @option{--version-info}, @option{--arch-specific}, @option{--unwind}, | |
| @option{--section-groups} and @option{--histogram}. | |
| Note - this option does not enable @option{--use-dynamic} itself, so | |
| if that option is not present on the command line then dynamic symbols | |
| and dynamic relocs will not be displayed. | |
| @item -h | |
| @itemx --file-header | |
| @cindex ELF file header information | |
| Displays the information contained in the ELF header at the start of the | |
| file. | |
| @item -l | |
| @itemx --program-headers | |
| @itemx --segments | |
| @cindex ELF program header information | |
| @cindex ELF segment information | |
| Displays the information contained in the file's segment headers, if it | |
| has any. | |
| @item --quiet | |
| @cindex quiet | |
| Suppress "no symbols" diagnostic. | |
| @item -S | |
| @itemx --sections | |
| @itemx --section-headers | |
| @cindex ELF section information | |
| Displays the information contained in the file's section headers, if it | |
| has any. | |
| @item -g | |
| @itemx --section-groups | |
| @cindex ELF section group information | |
| Displays the information contained in the file's section groups, if it | |
| has any. | |
| @item -t | |
| @itemx --section-details | |
| @cindex ELF section information | |
| Displays the detailed section information. Implies @option{-S}. | |
| @item -s | |
| @itemx --symbols | |
| @itemx --syms | |
| @cindex ELF symbol table information | |
| Displays the entries in symbol table section of the file, if it has one. | |
| If a symbol has version information associated with it then this is | |
| displayed as well. The version string is displayed as a suffix to the | |
| symbol name, preceded by an @@ character. For example | |
| @samp{foo@@VER_1}. If the version is the default version to be used | |
| when resolving unversioned references to the symbol then it is | |
| displayed as a suffix preceded by two @@ characters. For example | |
| @samp{foo@@@@VER_2}. | |
| @item --dyn-syms | |
| @cindex ELF dynamic symbol table information | |
| Displays the entries in dynamic symbol table section of the file, if it | |
| has one. The output format is the same as the format used by the | |
| @option{--syms} option. | |
| @item --lto-syms | |
| @cindex LTO symbol table | |
| Displays the contents of any LTO symbol tables in the file. | |
| @item --sym-base=[0|8|10|16] | |
| @cindex symbol table size base | |
| Forces the size field of the symbol table to use the given base. Any | |
| unrecognized options will be treated as @samp{0}. @option{--sym-base=0} | |
| represents the default and legacy behaviour. This will output sizes as decimal | |
| for numbers less than 100000. For sizes 100000 and greater hexadecimal notation | |
| will be used with a 0x prefix. | |
| @option{--sym-base=8} will give the symbol sizes in octal. | |
| @option{--sym-base=10} will always give the symbol sizes in decimal. | |
| @option{--sym-base=16} will always give the symbol sizes in hexadecimal with a | |
| 0x prefix. | |
| @item -C | |
| @itemx --demangle[=@var{style}] | |
| @cindex demangling in nm | |
| Decode (@dfn{demangle}) low-level symbol names into user-level names. | |
| This makes C++ function names readable. Different compilers have | |
| different mangling styles. The optional demangling style argument can | |
| be used to choose an appropriate demangling style for your | |
| compiler. @xref{c++filt}, for more information on demangling. | |
| @item --no-demangle | |
| Do not demangle low-level symbol names. This is the default. | |
| @item --recurse-limit | |
| @itemx --no-recurse-limit | |
| @itemx --recursion-limit | |
| @itemx --no-recursion-limit | |
| Enables or disables a limit on the amount of recursion performed | |
| whilst demangling strings. Since the name mangling formats allow for | |
| an infinite level of recursion it is possible to create strings whose | |
| decoding will exhaust the amount of stack space available on the host | |
| machine, triggering a memory fault. The limit tries to prevent this | |
| from happening by restricting recursion to 2048 levels of nesting. | |
| The default is for this limit to be enabled, but disabling it may be | |
| necessary in order to demangle truly complicated names. Note however | |
| that if the recursion limit is disabled then stack exhaustion is | |
| possible and any bug reports about such an event will be rejected. | |
| @item -U @var{[d|i|l|e|x|h]} | |
| @itemx --unicode=[default|invalid|locale|escape|hex|highlight] | |
| Controls the display of non-ASCII characters in identifier names. | |
| The default (@option{--unicode=locale} or @option{--unicode=default}) is | |
| to treat them as multibyte characters and display them in the current | |
| locale. All other versions of this option treat the bytes as UTF-8 | |
| encoded values and attempt to interpret them. If they cannot be | |
| interpreted or if the @option{--unicode=invalid} option is used then | |
| they are displayed as a sequence of hex bytes, encloses in curly | |
| parethesis characters. | |
| Using the @option{--unicode=escape} option will display the characters | |
| as as unicode escape sequences (@var{\uxxxx}). Using the | |
| @option{--unicode=hex} will display the characters as hex byte | |
| sequences enclosed between angle brackets. | |
| Using the @option{--unicode=highlight} will display the characters as | |
| unicode escape sequences but it will also highlighted them in red, | |
| assuming that colouring is supported by the output device. The | |
| colouring is intended to draw attention to the presence of unicode | |
| sequences when they might not be expected. | |
| @item -X | |
| @itemx --extra-sym-info | |
| When displaying details of symbols, include extra information not | |
| normally presented. Currently this just adds the name of the section | |
| referenced by the symbol's index field, if there is one. In the | |
| future more information may be displayed when this option is enabled. | |
| Enabling this option effectively enables the @option{--wide} option as | |
| well, at least when displaying symbol information. | |
| @item --no-extra-sym-info | |
| Disables the effect of the @option{--extra-sym-info} option. This | |
| is the default. | |
| @item -e | |
| @itemx --headers | |
| Display all the headers in the file. Equivalent to @option{-h -l -S}. | |
| @item -n | |
| @itemx --notes | |
| @cindex ELF notes | |
| Displays the contents of the NOTE segments and/or sections, if any. | |
| @item -r | |
| @itemx --relocs | |
| @cindex ELF reloc information | |
| Displays the contents of the file's relocation section, if it has one. | |
| @item -u | |
| @itemx --unwind | |
| @cindex unwind information | |
| Displays the contents of the file's unwind section, if it has one. Only | |
| the unwind sections for IA64 ELF files, as well as ARM unwind tables | |
| (@code{.ARM.exidx} / @code{.ARM.extab}) are currently supported. If | |
| support is not yet implemented for your architecture you could try | |
| dumping the contents of the @var{.eh_frames} section using the | |
| @option{--debug-dump=frames} or @option{--debug-dump=frames-interp} | |
| options. | |
| @item -d | |
| @itemx --dynamic | |
| @cindex ELF dynamic section information | |
| Displays the contents of the file's dynamic section, if it has one. | |
| @item -V | |
| @itemx --version-info | |
| @cindex ELF version sections information | |
| Displays the contents of the version sections in the file, it they | |
| exist. | |
| @item -A | |
| @itemx --arch-specific | |
| Displays architecture-specific information in the file, if there | |
| is any. | |
| @item -D | |
| @itemx --use-dynamic | |
| When displaying symbols, this option makes @command{readelf} use the | |
| symbol hash tables in the file's dynamic section, rather than the | |
| symbol table sections. | |
| When displaying relocations, this option makes @command{readelf} | |
| display the dynamic relocations rather than the static relocations. | |
| @item -L | |
| @itemx --lint | |
| @itemx --enable-checks | |
| Displays warning messages about possible problems with the file(s) | |
| being examined. If used on its own then all of the contents of the | |
| file(s) will be examined. If used with one of the dumping options | |
| then the warning messages will only be produced for the things being | |
| displayed. | |
| @item -x <number or name> | |
| @itemx --hex-dump=<number or name> | |
| Displays the contents of the indicated section as a hexadecimal bytes. | |
| A number identifies a particular section by index in the section table; | |
| any other string identifies all sections with that name in the object file. | |
| This option can be repeated multiple times on the command line in | |
| order to request multiple hex dumps. | |
| @item -R <number or name> | |
| @itemx --relocated-dump=<number or name> | |
| Displays the contents of the indicated section as a hexadecimal | |
| bytes. A number identifies a particular section by index in the | |
| section table; any other string identifies all sections with that name | |
| in the object file. The contents of the section will be relocated | |
| before they are displayed. | |
| This option can be repeated multiple times on the command line in | |
| order to request multiple relocated dumps. | |
| @item -p <number or name> | |
| @itemx --string-dump=<number or name> | |
| Displays the contents of the indicated section as printable strings. | |
| A number identifies a particular section by index in the section table; | |
| any other string identifies all sections with that name in the object file. | |
| This option can be repeated multiple times on the command line in | |
| order to request multiple string dumps. | |
| @item -j <number or name> | |
| @itemx --display-section | |
| Displays the contents of the indicated section according to its | |
| section header type. Sections containing relocations will be | |
| displayed as if the @option{--relocations} option had been used, | |
| sections contains symbols will be displayed as if the @option{--syms} | |
| option had been used and so on. | |
| A number identifies a particular section by index in the section | |
| table; any other string identifies all sections with that name in the | |
| input file(s). | |
| This option can be repeated multiple times on the command line in | |
| order to request multiple section dumps. | |
| @item -z | |
| @itemx --decompress | |
| Requests that the section(s) being dumped by @option{x}, @option{R} or | |
| @option{p} options are decompressed before being displayed. If the | |
| section(s) are not compressed then they are displayed as is. | |
| @item -c | |
| @itemx --archive-index | |
| @cindex Archive file symbol index information | |
| Displays the file symbol index information contained in the header part | |
| of binary archives. Performs the same function as the @option{t} | |
| command to @command{ar}, but without using the BFD library. @xref{ar}. | |
| @item -w[lLiaprmfFsOoRtUuTgAckK] | |
| @itemx --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links] | |
| @include debug.options.texi | |
| @item -P | |
| @itemx --process-links | |
| Display the contents of non-debug sections found in separate debuginfo | |
| files that are linked to the main file. This option automatically | |
| implies the @option{-wK} option, and only sections requested by other | |
| command line options will be displayed. | |
| @include ctf.options.texi | |
| @item --ctf-symbols=@var{section} | |
| @item --ctf-strings=@var{section} | |
| Specify the name of another section from which the CTF file can inherit | |
| strings and symbols. By default, the @code{.symtab} and its linked | |
| string table are used. | |
| If either of @option{--ctf-symbols} or @option{--ctf-strings} is specified, the | |
| other must be specified as well. | |
| @item -I | |
| @itemx --histogram | |
| Display a histogram of bucket list lengths when displaying the contents | |
| of the symbol tables. | |
| @item -v | |
| @itemx --version | |
| Display the version number of readelf. | |
| @item -W | |
| @itemx --wide | |
| Don't break output lines to fit into 80 columns. By default | |
| @command{readelf} breaks section header and segment listing lines for | |
| 64-bit ELF files, so that they fit into 80 columns. This option causes | |
| @command{readelf} to print each section header resp. each segment one a | |
| single line, which is far more readable on terminals wider than 80 columns. | |
| @item -T | |
| @itemx --silent-truncation | |
| Normally when readelf is displaying a symbol name, and it has to | |
| truncate the name to fit into an 80 column display, it will add a | |
| suffix of @code{[...]} to the name. This command line option | |
| disables this behaviour, allowing 5 more characters of the name to be | |
| displayed and restoring the old behaviour of readelf (prior to release | |
| 2.35). | |
| @item -H | |
| @itemx --help | |
| Display the command-line options understood by @command{readelf}. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO readelf | |
| objdump(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node elfedit | |
| @chapter elfedit | |
| @cindex Update ELF header | |
| @kindex elfedit | |
| @c man title elfedit update ELF header and program property of ELF files | |
| @smallexample | |
| @c man begin SYNOPSIS elfedit | |
| elfedit [@option{--input-mach=}@var{machine}] | |
| [@option{--input-type=}@var{type}] | |
| [@option{--input-osabi=}@var{osabi}] | |
| [@option{--input-abiversion=}@var{version}] | |
| @option{--output-mach=}@var{machine} | |
| @option{--output-type=}@var{type} | |
| @option{--output-osabi=}@var{osabi} | |
| @option{--output-abiversion=}@var{version} | |
| @option{--enable-x86-feature=}@var{feature} | |
| @option{--disable-x86-feature=}@var{feature} | |
| [@option{-v}|@option{--version}] | |
| [@option{-h}|@option{--help}] | |
| @var{elffile}@dots{} | |
| @c man end | |
| @end smallexample | |
| @c man begin DESCRIPTION elfedit | |
| @command{elfedit} updates the ELF header and program property of ELF | |
| files which have the matching ELF machine and file types. The options | |
| control how and which fields in the ELF header and program property | |
| should be updated. | |
| @var{elffile}@dots{} are the ELF files to be updated. 32-bit and | |
| 64-bit ELF files are supported, as are archives containing ELF files. | |
| @c man end | |
| @c man begin OPTIONS elfedit | |
| The long and short forms of options, shown here as alternatives, are | |
| equivalent. At least one of the @option{--output-mach}, | |
| @option{--output-type}, @option{--output-osabi}, | |
| @option{--output-abiversion}, | |
| @option{--enable-x86-feature} and @option{--disable-x86-feature} | |
| options must be given. | |
| @table @env | |
| @item --input-mach=@var{machine} | |
| Set the matching input ELF machine type to @var{machine}. If | |
| @option{--input-mach} isn't specified, it will match any ELF | |
| machine types. | |
| The supported ELF machine types are, @var{i386}, @var{IAMCU}, @var{L1OM}, | |
| @var{K1OM} and @var{x86-64}. | |
| @item --output-mach=@var{machine} | |
| Change the ELF machine type in the ELF header to @var{machine}. The | |
| supported ELF machine types are the same as @option{--input-mach}. | |
| @item --input-type=@var{type} | |
| Set the matching input ELF file type to @var{type}. If | |
| @option{--input-type} isn't specified, it will match any ELF file types. | |
| The supported ELF file types are, @var{rel}, @var{exec} and @var{dyn}. | |
| @item --output-type=@var{type} | |
| Change the ELF file type in the ELF header to @var{type}. The | |
| supported ELF types are the same as @option{--input-type}. | |
| @item --input-osabi=@var{osabi} | |
| Set the matching input ELF file OSABI to @var{osabi}. If | |
| @option{--input-osabi} isn't specified, it will match any ELF OSABIs. | |
| The supported ELF OSABIs are, @var{none}, @var{HPUX}, @var{NetBSD}, | |
| @var{GNU}, @var{Linux} (alias for @var{GNU}), | |
| @var{Solaris}, @var{AIX}, @var{Irix}, | |
| @var{FreeBSD}, @var{TRU64}, @var{Modesto}, @var{OpenBSD}, @var{OpenVMS}, | |
| @var{NSK}, @var{AROS} and @var{FenixOS}. | |
| @item --output-osabi=@var{osabi} | |
| Change the ELF OSABI in the ELF header to @var{osabi}. The | |
| supported ELF OSABI are the same as @option{--input-osabi}. | |
| @item --input-abiversion=@var{version} | |
| Set the matching input ELF file ABIVERSION to @var{version}. | |
| @var{version} must be between 0 and 255. If @option{--input-abiversion} | |
| isn't specified, it will match any ELF ABIVERSIONs. | |
| @item --output-abiversion=@var{version} | |
| Change the ELF ABIVERSION in the ELF header to @var{version}. | |
| @var{version} must be between 0 and 255. | |
| @item --enable-x86-feature=@var{feature} | |
| Set the @var{feature} bit in program property in @var{exec} or @var{dyn} | |
| ELF files with machine types of @var{i386} or @var{x86-64}. The | |
| supported features are, @var{ibt}, @var{shstk}, @var{lam_u48} and | |
| @var{lam_u57}. | |
| @item --disable-x86-feature=@var{feature} | |
| Clear the @var{feature} bit in program property in @var{exec} or | |
| @var{dyn} ELF files with machine types of @var{i386} or @var{x86-64}. | |
| The supported features are the same as @option{--enable-x86-feature}. | |
| Note: @option{--enable-x86-feature} and @option{--disable-x86-feature} | |
| are available only on hosts with @samp{mmap} support. | |
| @item -v | |
| @itemx --version | |
| Display the version number of @command{elfedit}. | |
| @item -h | |
| @itemx --help | |
| Display the command-line options understood by @command{elfedit}. | |
| @end table | |
| @c man end | |
| @ignore | |
| @c man begin SEEALSO elfedit | |
| readelf(1), and the Info entries for @file{binutils}. | |
| @c man end | |
| @end ignore | |
| @node Common Options | |
| @chapter Common Options | |
| The following command-line options are supported by all of the | |
| programs described in this manual. | |
| @c man begin OPTIONS | |
| @table @env | |
| @include at-file.texi | |
| @c man end | |
| @item --help | |
| Display the command-line options supported by the program. | |
| @item --version | |
| Display the version number of the program. | |
| @c man begin OPTIONS | |
| @end table | |
| @c man end | |
| @node Selecting the Target System | |
| @chapter Selecting the Target System | |
| You can specify two aspects of the target system to the @sc{gnu} | |
| binary file utilities, each in several ways: | |
| @itemize @bullet | |
| @item | |
| the target | |
| @item | |
| the architecture | |
| @end itemize | |
| In the following summaries, the lists of ways to specify values are in | |
| order of decreasing precedence. The ways listed first override those | |
| listed later. | |
| The commands to list valid values only list the values for which the | |
| programs you are running were configured. If they were configured with | |
| @option{--enable-targets=all}, the commands list most of the available | |
| values, but a few are left out; not all targets can be configured in at | |
| once because some of them can only be configured @dfn{native} (on hosts | |
| with the same type as the target system). | |
| @menu | |
| * Target Selection:: | |
| * Architecture Selection:: | |
| @end menu | |
| @node Target Selection | |
| @section Target Selection | |
| A @dfn{target} is an object file format. A given target may be | |
| supported for multiple architectures (@pxref{Architecture Selection}). | |
| A target selection may also have variations for different operating | |
| systems or architectures. | |
| The command to list valid target values is @samp{objdump -i} | |
| (the first column of output contains the relevant information). | |
| Some sample values are: @samp{a.out-hp300bsd}, @samp{ecoff-littlemips}, | |
| @samp{a.out-sunos-big}. | |
| You can also specify a target using a configuration triplet. This is | |
| the same sort of name that is passed to @file{configure} to specify a | |
| target. When you use a configuration triplet as an argument, it must be | |
| fully canonicalized. You can see the canonical version of a triplet by | |
| running the shell script @file{config.sub} which is included with the | |
| sources. | |
| Some sample configuration triplets are: @samp{m68k-hp-bsd}, | |
| @samp{mips-dec-ultrix}, @samp{sparc-sun-sunos}. | |
| @subheading @command{objdump} Target | |
| Ways to specify: | |
| @enumerate | |
| @item | |
| command-line option: @option{-b} or @option{--target} | |
| @item | |
| environment variable @code{GNUTARGET} | |
| @item | |
| deduced from the input file | |
| @end enumerate | |
| @subheading @command{objcopy} and @command{strip} Input Target | |
| Ways to specify: | |
| @enumerate | |
| @item | |
| command-line options: @option{-I} or @option{--input-target}, or @option{-F} or @option{--target} | |
| @item | |
| environment variable @code{GNUTARGET} | |
| @item | |
| deduced from the input file | |
| @end enumerate | |
| @subheading @command{objcopy} and @command{strip} Output Target | |
| Ways to specify: | |
| @enumerate | |
| @item | |
| command-line options: @option{-O} or @option{--output-target}, or @option{-F} or @option{--target} | |
| @item | |
| the input target (see ``@command{objcopy} and @command{strip} Input Target'' above) | |
| @item | |
| environment variable @code{GNUTARGET} | |
| @item | |
| deduced from the input file | |
| @end enumerate | |
| @subheading @command{nm}, @command{size}, and @command{strings} Target | |
| Ways to specify: | |
| @enumerate | |
| @item | |
| command-line option: @option{--target} | |
| @item | |
| environment variable @code{GNUTARGET} | |
| @item | |
| deduced from the input file | |
| @end enumerate | |
| @node Architecture Selection | |
| @section Architecture Selection | |
| An @dfn{architecture} is a type of @sc{cpu} on which an object file is | |
| to run. Its name may contain a colon, separating the name of the | |
| processor family from the name of the particular @sc{cpu}. | |
| The command to list valid architecture values is @samp{objdump -i} (the | |
| second column contains the relevant information). | |
| Sample values: @samp{m68k:68020}, @samp{mips:3000}, @samp{sparc}. | |
| @subheading @command{objdump} Architecture | |
| Ways to specify: | |
| @enumerate | |
| @item | |
| command-line option: @option{-m} or @option{--architecture} | |
| @item | |
| deduced from the input file | |
| @end enumerate | |
| @subheading @command{objcopy}, @command{nm}, @command{size}, @command{strings} Architecture | |
| Ways to specify: | |
| @enumerate | |
| @item | |
| deduced from the input file | |
| @end enumerate | |
| @node debuginfod | |
| @chapter debuginfod | |
| @cindex separate debug files | |
| debuginfod is a web service that indexes ELF/DWARF debugging resources | |
| by build-id and serves them over HTTP. For more information see: | |
| @emph{https://sourceware.org/elfutils/Debuginfod.html} | |
| Binutils can be built with the debuginfod client library | |
| @code{libdebuginfod} using the @option{--with-debuginfod} configure option. | |
| This option is enabled by default if @code{libdebuginfod} is installed | |
| and found at configure time. This allows @command{objdump} and | |
| @command{readelf} to automatically query debuginfod servers for | |
| separate debug files when the files are otherwise not found. | |
| debuginfod is packaged with elfutils, starting with version 0.178. | |
| You can get the latest version from `https://sourceware.org/elfutils/'. | |
| The DWARF info dumping tools (@command{readelf} and @command{objdump}) | |
| have options to control when they should access the debuginfod | |
| servers. By default this access is enabled. | |
| @node Reporting Bugs | |
| @chapter Reporting Bugs | |
| @cindex bugs | |
| @cindex reporting bugs | |
| Your bug reports play an essential role in making the binary utilities | |
| reliable. | |
| Reporting a bug may help you by bringing a solution to your problem, or | |
| it may not. But in any case the principal function of a bug report is | |
| to help the entire community by making the next version of the binary | |
| utilities work better. Bug reports are your contribution to their | |
| maintenance. | |
| In order for a bug report to serve its purpose, you must include the | |
| information that enables us to fix the bug. | |
| @menu | |
| * Bug Criteria:: Have you found a bug? | |
| * Bug Reporting:: How to report bugs | |
| @end menu | |
| @node Bug Criteria | |
| @section Have You Found a Bug? | |
| @cindex bug criteria | |
| If you are not sure whether you have found a bug, here are some guidelines: | |
| @itemize @bullet | |
| @cindex fatal signal | |
| @cindex crash | |
| @item | |
| If a binary utility gets a fatal signal, for any input whatever, that is | |
| a bug. Reliable utilities never crash. | |
| @cindex error on valid input | |
| @item | |
| If a binary utility produces an error message for valid input, that is a | |
| bug. | |
| @item | |
| If you are an experienced user of binary utilities, your suggestions for | |
| improvement are welcome in any case. | |
| @end itemize | |
| @node Bug Reporting | |
| @section How to Report Bugs | |
| @cindex bug reports | |
| @cindex bugs, reporting | |
| A number of companies and individuals offer support for @sc{gnu} | |
| products. If you obtained the binary utilities from a support | |
| organization, we recommend you contact that organization first. | |
| You can find contact information for many support companies and | |
| individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs | |
| distribution. | |
| @ifset BUGURL | |
| In any event, we also recommend that you send bug reports for the binary | |
| utilities to @value{BUGURL}. | |
| @end ifset | |
| The fundamental principle of reporting bugs usefully is this: | |
| @strong{report all the facts}. If you are not sure whether to state a | |
| fact or leave it out, state it! | |
| Often people omit facts because they think they know what causes the | |
| problem and assume that some details do not matter. Thus, you might | |
| assume that the name of a file you use in an example does not matter. | |
| Well, probably it does not, but one cannot be sure. Perhaps the bug is | |
| a stray memory reference which happens to fetch from the location where | |
| that pathname is stored in memory; perhaps, if the pathname were | |
| different, the contents of that location would fool the utility into | |
| doing the right thing despite the bug. Play it safe and give a | |
| specific, complete example. That is the easiest thing for you to do, | |
| and the most helpful. | |
| Keep in mind that the purpose of a bug report is to enable us to fix the bug if | |
| it is new to us. Therefore, always write your bug reports on the assumption | |
| that the bug has not been reported previously. | |
| Sometimes people give a few sketchy facts and ask, ``Does this ring a | |
| bell?'' This cannot help us fix a bug, so it is basically useless. We | |
| respond by asking for enough details to enable us to investigate. | |
| You might as well expedite matters by sending them to begin with. | |
| To enable us to fix the bug, you should include all these things: | |
| @itemize @bullet | |
| @item | |
| The version of the utility. Each utility announces it if you start it | |
| with the @option{--version} argument. | |
| Without this, we will not know whether there is any point in looking for | |
| the bug in the current version of the binary utilities. | |
| @item | |
| Any patches you may have applied to the source, including any patches | |
| made to the @code{BFD} library. | |
| @item | |
| The type of machine you are using, and the operating system name and | |
| version number. | |
| @item | |
| What compiler (and its version) was used to compile the utilities---e.g. | |
| ``@code{gcc-2.7}''. | |
| @item | |
| The command arguments you gave the utility to observe the bug. To | |
| guarantee you will not omit something important, list them all. A copy | |
| of the Makefile (or the output from make) is sufficient. | |
| If we were to try to guess the arguments, we would probably guess wrong | |
| and then we might not encounter the bug. | |
| @item | |
| A complete input file, or set of input files, that will reproduce the | |
| bug. If the utility is reading an object file or files, then it is | |
| generally most helpful to send the actual object files. | |
| If the source files were produced exclusively using @sc{gnu} programs | |
| (e.g., @command{gcc}, @command{gas}, and/or the @sc{gnu} @command{ld}), then it | |
| may be OK to send the source files rather than the object files. In | |
| this case, be sure to say exactly what version of @command{gcc}, or | |
| whatever, was used to produce the object files. Also say how | |
| @command{gcc}, or whatever, was configured. | |
| @item | |
| A description of what behavior you observe that you believe is | |
| incorrect. For example, ``It gets a fatal signal.'' | |
| Of course, if the bug is that the utility gets a fatal signal, then we | |
| will certainly notice it. But if the bug is incorrect output, we might | |
| not notice unless it is glaringly wrong. You might as well not give us | |
| a chance to make a mistake. | |
| Even if the problem you experience is a fatal signal, you should still | |
| say so explicitly. Suppose something strange is going on, such as your | |
| copy of the utility is out of sync, or you have encountered a bug in | |
| the C library on your system. (This has happened!) Your copy might | |
| crash and ours would not. If you told us to expect a crash, then when | |
| ours fails to crash, we would know that the bug was not happening for | |
| us. If you had not told us to expect a crash, then we would not be able | |
| to draw any conclusion from our observations. | |
| @item | |
| If you wish to suggest changes to the source, send us context diffs, as | |
| generated by @command{diff} with the @option{-u}, @option{-c}, or @option{-p} | |
| option. Always send diffs from the old file to the new file. If you | |
| wish to discuss something in the @command{ld} source, refer to it by | |
| context, not by line number. | |
| The line numbers in our development sources will not match those in your | |
| sources. Your line numbers would convey no useful information to us. | |
| @end itemize | |
| Here are some things that are not necessary: | |
| @itemize @bullet | |
| @item | |
| A description of the envelope of the bug. | |
| Often people who encounter a bug spend a lot of time investigating | |
| which changes to the input file will make the bug go away and which | |
| changes will not affect it. | |
| This is often time consuming and not very useful, because the way we | |
| will find the bug is by running a single example under the debugger | |
| with breakpoints, not by pure deduction from a series of examples. | |
| We recommend that you save your time for something else. | |
| Of course, if you can find a simpler example to report @emph{instead} | |
| of the original one, that is a convenience for us. Errors in the | |
| output will be easier to spot, running under the debugger will take | |
| less time, and so on. | |
| However, simplification is not vital; if you do not want to do this, | |
| report the bug anyway and send us the entire test case you used. | |
| @item | |
| A patch for the bug. | |
| A patch for the bug does help us if it is a good one. But do not omit | |
| the necessary information, such as the test case, on the assumption that | |
| a patch is all we need. We might see problems with your patch and decide | |
| to fix the problem another way, or we might not understand it at all. | |
| Sometimes with programs as complicated as the binary utilities it is | |
| very hard to construct an example that will make the program follow a | |
| certain path through the code. If you do not send us the example, we | |
| will not be able to construct one, so we will not be able to verify that | |
| the bug is fixed. | |
| And if we cannot understand what bug you are trying to fix, or why your | |
| patch should be an improvement, we will not install it. A test case will | |
| help us to understand. | |
| @item | |
| A guess about what the bug is or what it depends on. | |
| Such guesses are usually wrong. Even we cannot guess right about such | |
| things without first using the debugger to find the facts. | |
| @end itemize | |
| @node GNU Free Documentation License | |
| @appendix GNU Free Documentation License | |
| @include fdl.texi | |
| @node Binutils Index | |
| @unnumbered Binutils Index | |
| @printindex cp | |
| @bye |