@ifinfo
@format
START-INFO-DIR-ENTRY
-* Binutils: (binutils). The GNU binary utilities "ar", "objcopy",
- "objdump", "nm", "nlmconv", "size", "readelf"
- "strings", "strip", "ranlib" and "dlltool".
+* Binutils: (binutils). The GNU binary utilities.
+* ar: (binutils)ar. Create, modify, and extract from archives
+* 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
+* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols
+* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt
+* addr2line: (binutils)addr2line. Convert addresses to file and line
+* nlmconv: (binutils)nlmconv. Converts object code into an NLM
+* windres: (binutils)windres. Manipulate Windows resources
+* dlltool: (binutils)dlltool. Create files needed to build and use DLLs
END-INFO-DIR-ENTRY
@end format
@end ifinfo
@ifinfo
-Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
+Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@c This file documents the GNU binary utilities "ar", "ld", "objcopy",
@c "objdump", "nm", "size", "strings", "strip", "readelf" and "ranlib".
@c
-@c Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
+@c Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
@c
@c This text may be freely distributed under the terms of the GNU
@c General Public License.
Discard symbols
@item c++filt
-Demangle encoded C++ symbols
+Demangle encoded C++ symbols (on MS-DOS, this program is named
+@code{cxxfilt})
@item addr2line
Convert addresses into file names and line numbers
* strings:: List printable strings from files
* strip:: Discard symbols
* c++filt:: Filter to demangle encoded C++ symbols
+* cxxfilt: c++filt. MS-DOS name for c++filt
* addr2line:: Convert addresses to file and line
* nlmconv:: Converts object code into an NLM
* windres:: Manipulate Windows resources
@cindex archives
@cindex collections of files
@smallexample
-ar [-]@var{p}[@var{mod} [@var{relpos}]] @var{archive} [@var{member}@dots{}]
+ar [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}]
ar -M [ <mri-script ]
@end smallexample
@section Controlling @code{ar} on the command line
@smallexample
-ar [-]@var{p}[@var{mod} [@var{relpos}]] @var{archive} [@var{member}@dots{}]
+ar [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}]
@end smallexample
@cindex Unix compatibility, @code{ar}
@c whaffor ar l modifier??? presumably compat; with
@c what???---doc@@cygnus.com, 25jan91
+@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 P
+Use the full path name when matching names in the archive. @sc{gnu}
+@code{ar} can not create an archive with a full path name (such archives
+are not POSIX complaint), but other archive creators can. This option
+will cause @sc{gnu} @code{ar} to match file names using a complete path
+name, which can be convenient when extracting a single file from an
+archive created by another tool.
+
@item s
@cindex writing archive index
Write an object-file index into the archive, or update an existing one,
@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} @code{ld}
+tv @var{archive}}. (This single command is a @sc{gnu} @code{ar}
enhancement, rather than present for MRI compatibility.)
Requires prior use of @code{OPEN} or @code{CREATE}.
@end smallexample
@sc{gnu} @code{nm} lists the symbols from object files @var{objfile}@dots{}.
-If no object files are listed as arguments, @code{nm} assumes
+If no object files are listed as arguments, @code{nm} assumes the file
@file{a.out}.
For each symbol, @code{nm} shows:
@cindex input file name
@cindex file name
@cindex source file name
-Precede each symbol by the name of the input file (or archive element)
+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.
[ -x | --discard-all ] [ -X | --discard-locals ]
[ -b @var{byte} | --byte=@var{byte} ]
[ -i @var{interleave} | --interleave=@var{interleave} ]
+ [ -j @var{sectionname} | --only-section=@var{sectionname} ]
[ -R @var{sectionname} | --remove-section=@var{sectionname} ]
[ -p | --preserve-dates ] [ --debugging ]
[ --gap-fill=@var{val} ] [ --pad-to=@var{address} ]
When generating an S-record or a raw binary file, it may be helpful to
use @samp{-S} to remove sections containing debugging information. In
some cases @samp{-R} will be useful to remove sections which contain
-information which is not needed by the binary file.
+information that is not needed by the binary file.
@table @code
@item @var{infile}
@itemx @var{outfile}
-The source and output files, respectively.
+The input and output files, respectively.
If you do not specify @var{outfile}, @code{objcopy} creates a
temporary file and destructively renames the result with
the name of @var{infile}.
file; i.e., simply transfer data from source to destination with no
translation. @xref{Target Selection}, for more information.
+@item -j @var{sectionname}
+@itemx --only-section=@var{sectionname}
+Copy only the named section 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.
+
@item -R @var{sectionname}
@itemx --remove-section=@var{sectionname}
Remove any section named @var{sectionname} from the output file. This
filled in with the value specified by @samp{--gap-fill} (default zero).
@item --set-start @var{val}
-Set the address of the new file to @var{val}. Not all object file
+Set the start address of the new file to @var{val}. Not all object file
formats support setting the start address.
@item --change-start @var{incr}
@item --set-section-flags @var{section}=@var{flags}
Set the flags for the named section. The @var{flags} argument is a
comma separated string of flag names. The recognized names are
-@samp{alloc}, @samp{contents}, @samp{load}, @samp{readonly},
-@samp{code}, @samp{data}, and @samp{rom}. 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.
+@samp{alloc}, @samp{contents}, @samp{load}, @samp{noload},
+@samp{readonly}, @samp{code}, @samp{data}, @samp{rom}, @samp{share}, and
+@samp{debug}. You can set the @samp{contents} flag for a section which
+does not have contents, but it is not meaningful to clear the
+@samp{contents} flag of a section which does have contents--just remove
+the section instead. Not all flags are meaningful for all object file
+formats.
@item --add-section @var{sectionname}=@var{filename}
Add a new section named @var{sectionname} while copying the file. The
@smallexample
objdump [ -a | --archive-headers ]
- [ -b @var{bfdname} | --target=@var{bfdname} ] [ --debugging ]
- [ -C | --demangle ] [ -d | --disassemble ]
- [ -D | --disassemble-all ] [ --disassemble-zeroes ]
+ [ -b @var{bfdname} | --target=@var{bfdname} ]
+ [ -C | --demangle ]
+ [ -d | --disassemble ]
+ [ -D | --disassemble-all ]
+ [ -z | --disassemble-zeroes ]
[ -EB | -EL | --endian=@{big | little @} ]
[ -f | --file-headers ]
- [ -h | --section-headers | --headers ] [ -i | --info ]
+ [ -g | --debugging ]
+ [ -h | --section-headers | --headers ]
+ [ -i | --info ]
[ -j @var{section} | --section=@var{section} ]
- [ -l | --line-numbers ] [ -S | --source ]
+ [ -l | --line-numbers ]
+ [ -S | --source ]
[ -m @var{machine} | --architecture=@var{machine} ]
+ [ -M @var{options} | --disassembler-options=@var{options}]
[ -p | --private-headers ]
- [ -r | --reloc ] [ -R | --dynamic-reloc ]
- [ -s | --full-contents ] [ --stabs ]
- [ -t | --syms ] [ -T | --dynamic-syms ] [ -x | --all-headers ]
- [ -w | --wide ] [ --start-address=@var{address} ]
+ [ -r | --reloc ]
+ [ -R | --dynamic-reloc ]
+ [ -s | --full-contents ]
+ [ -G | --stabs ]
+ [ -t | --syms ]
+ [ -T | --dynamic-syms ]
+ [ -x | --all-headers ]
+ [ -w | --wide ]
+ [ --start-address=@var{address} ]
[ --stop-address=@var{address} ]
- [ --prefix-addresses] [ --[no-]show-raw-insn ]
+ [ --prefix-addresses]
+ [ --[no-]show-raw-insn ]
[ --adjust-vma=@var{offset} ]
- [ --version ] [ --help ]
+ [ -V | --version ]
+ [ -H | --help ]
@var{objfile}@dots{}
@end smallexample
object files.
The long and short forms of options, shown here as alternatives, are
-equivalent. At least one option besides @samp{-l} must be given.
+equivalent. At least one option from the list
+@samp{-a,-d,-D,-f,-g,-G,-h,-H,-p,-r,-R,-S,-t,-T,-V,-x} must be given.
@table @code
@item -a
makes C++ function names readable. @xref{c++filt}, for more information
on demangling.
+@item -G
@item --debugging
Display debugging information. This attempts to parse debugging
information stored in the file and print it out using a C like syntax.
architecture information, such as S-records. You can list the available
architectures with the @samp{-i} option.
+@item -M @var{options}
+@itemx --disassembler-options=@var{options}
+Pass target specific information to the disassembler. Only supported on
+some targets.
+
+If the target is an ARM architecture then this switch can be used to
+select which register name set is used during disassembler. Specifying
+@samp{--disassembler-options=reg-name-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 @samp{--disassembler-options=reg-names-apcs} will
+select the name set used by the ARM Procedure Call Standard, whilst
+specifying @samp{--disassembler-options=reg-names-raw} will just use
+@samp{r} followed by the register number.
+
+This option can also be used for ARM architectures to force the
+disassembler to interpret all instructions as THUMB instructions by
+using the switch @samp{--disassembler-options=force-thumb}. This can be
+useful when attempting to disassemble thumb code produced by other
+compilers.
+
@item -p
@itemx --private-headers
Print information that is specific to the object file format. The exact
When disassembling instructions, do not print the instruction bytes.
This is the default when @code{--prefix-addresses} is used.
+@item -G
@item --stabs
@cindex stab
@cindex .stab
@table @code
@item -v
@itemx -V
+@itemx --version
Show the version number of @code{ranlib}.
@end table
Here is an example of the Berkeley (default) format of output from
@code{size}:
@smallexample
-size --format=Berkeley ranlib size
+$ size --format=Berkeley ranlib size
text data bss dec hex filename
294880 81920 11592 388392 5ed28 ranlib
294880 81920 11888 388688 5ee50 size
This is the same data, but displayed closer to System V conventions:
@smallexample
-size --format=SysV ranlib size
+$ size --format=SysV ranlib size
ranlib :
section size addr
.text 294880 8192
archives, @samp{strip -v} lists all members of the archive.
@end table
-@node c++filt
+@node c++filt, addr2line, strip, Top
@chapter c++filt
@kindex c++filt
[ --help ] [ --version ] [ @var{symbol}@dots{} ]
@end smallexample
+@kindex cxxfilt
The C++ and Java languages provides function overloading, which means
that you can write many functions with the same name (providing each
takes parameters of different types). All C++ and Java function names
are encoded into a low-level assembly label (this process is known as
-@dfn{mangling}). The @code{c++filt} program does the inverse mapping: it
-decodes (@dfn{demangles}) low-level names into user-level names so that
-the linker can keep these overloaded functions from clashing.
+@dfn{mangling}). The @code{c++filt}
+@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
+MS-DOS this program is named @code{cxxfilt}.}
+program does the inverse mapping: it decodes (@dfn{demangles}) low-level
+names into user-level names so that the linker can keep these overloaded
+functions from clashing.
Every alphanumeric word (consisting of letters, digits, underscores,
dollars, or periods) seen in the input is a potential label. If the
number are associated with a given address.
The executable to use is specified with the @code{-e} option. The
-default is @file{a.out}.
+default is the file @file{a.out}.
@code{addr2line} has two modes of operation.
files named in the @code{rc} file.
@item -D @var{target}
-@item --define @var{sym[=val]}
+@itemx --define @var{sym}[=@var{val}]
Specify a @code{-D} option to pass to the preprocessor 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 --help
Prints a usage summary.
[ -S | --section-headers | --sections]
[ -e | --headers]
[ -s | --syms | --symbols]
+ [ -n | --notes]
[ -r | --relocs]
[ -d | --dynamic]
[ -V | --version-info]
@itemx --all
Equivalent to specifiying @samp{--file-header},
@samp{--program-headers}, @samp{--sections}, @samp{--symbols},
-@samp{--relocs}, @samp{--dynamic} and @samp{--version-info}.
+@samp{--relocs}, @samp{--dynamic}, @samp{--notes} and
+@samp{--version-info}.
@item -h
@itemx --file-header
@itemx --headers
Display all the headers in the file. Equivalent to @samp{-h -l -S}.
+@item -n
+@itemx --notes
+@cindex ELF core notes
+Displays the contents of the NOTE segment, if it exists.
+
@item -r
@itemx --relocs
@cindex ELF reloc information
@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 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
+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.
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, uuencoded if
-necessary to get them through the mail system. Making them available
-for anonymous FTP is not as good, but may be the only reasonable choice
-for large object files.
+necessary to get them through the mail system. Note that
+@samp{bug-gnu-utils@@gnu.org} is a mailing list, so you should avoid
+sending very large files to it. Making the files available for
+anonymous FTP is OK.
If the source files were produced exclusively using @sc{gnu} programs
(e.g., @code{gcc}, @code{gas}, and/or the @sc{gnu} @code{ld}), then it
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
+say so explicitly. Suppose something strange is going on, such as your
copy of the utility is out of synch, 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
If you wish to suggest changes to the source, send us context diffs, as
generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
option. Always send diffs from the old file to the new file. If you
-even discuss something in the @code{ld} source, refer to it by context,
-not by line number.
+wish to discuss something in the @code{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.