mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 04:12:10 +08:00
Initial revision
This commit is contained in:
parent
2c5c06749f
commit
de5fd53b81
517
binutils/binutils.texinfo
Executable file
517
binutils/binutils.texinfo
Executable file
@ -0,0 +1,517 @@
|
||||
\input texinfo
|
||||
@setfilename binutils.info
|
||||
@synindex ky cp
|
||||
@c
|
||||
@c This file documents the GNU binary utilities "ar", "ld", "objdump", "nm",
|
||||
@c "size", "strip", and "ranlib".
|
||||
@c
|
||||
@c Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
@c
|
||||
@c This text may be freely distributed under the terms of the GNU
|
||||
@c General Public License.
|
||||
@c
|
||||
@c $Id$
|
||||
@tex
|
||||
@finalout
|
||||
@c @smallbook
|
||||
@end tex
|
||||
@c @cropmarks
|
||||
@setchapternewpage odd
|
||||
@settitle GNU Binary Utilities
|
||||
@titlepage
|
||||
@title{The GNU Binary Utilities}
|
||||
@sp 1
|
||||
@subtitle January 1991
|
||||
@author{Roland H. Pesch}
|
||||
@author{Cygnus Support}
|
||||
@page
|
||||
|
||||
@tex
|
||||
\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$
|
||||
\xdef\manvers{\$Revision$} % For use in headers, footers too
|
||||
{\parskip=0pt \hfill Cygnus Support\par \hfill \manvers\par \hfill
|
||||
\TeX{}info \texinfoversion\par }
|
||||
@end tex
|
||||
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1991 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided also that
|
||||
the entire resulting derived work is distributed under the terms of a
|
||||
permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions.
|
||||
@end titlepage
|
||||
|
||||
@ifinfo
|
||||
@node Top, ar, (dir), (dir)
|
||||
This file documents the GNU binary utilities @samp{ar}, @samp{ld},
|
||||
@samp{objdump}, @samp{nm}, @samp{size}, @samp{strip}, and
|
||||
@samp{ranlib}.@refill
|
||||
|
||||
Copyright @copyright{} 1991 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of
|
||||
this manual provided the copyright notice and this permission notice
|
||||
are preserved on all copies.
|
||||
|
||||
@ignore
|
||||
Permission is granted to process this file through TeX and print the
|
||||
results, provided the printed document carries a copying permission
|
||||
notice identical to this one except for the removal of this paragraph
|
||||
(this paragraph not being relevant to the printed manual).
|
||||
|
||||
@end ignore
|
||||
|
||||
Permission is granted to copy and distribute modified versions of this
|
||||
manual under the conditions for verbatim copying, provided also that
|
||||
the entire resulting derived work is distributed under the terms of a
|
||||
permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this manual
|
||||
into another language, under the above conditions for modified versions.
|
||||
@end ifinfo
|
||||
|
||||
@menu
|
||||
* ar:: ar
|
||||
* ld:: ld
|
||||
* nm:: nm
|
||||
* objdump:: objdump
|
||||
* ranlib:: ranlib
|
||||
* size:: size
|
||||
* strip:: strip
|
||||
|
||||
@end menu
|
||||
|
||||
@node ar, ld, Top, Top
|
||||
@chapter ar
|
||||
|
||||
@smallexample
|
||||
ar [-]@var{Op}@var{Mod} [ @var{membername} ] @var{archive} @var{files}@dots{}
|
||||
@end smallexample
|
||||
|
||||
The GNU @code{ar} program creates, modifies, and extracts
|
||||
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 may be reconstituted on
|
||||
extraction.
|
||||
|
||||
Only the first fifteen characters of a file name are kept in archives.
|
||||
@c Note: with next (BFD) version, this will depend on obj format.
|
||||
|
||||
@code{ar} is considered a binary utility because archives of this sort
|
||||
are most often used as @dfn{libraries} holding commonly needed
|
||||
subroutines.
|
||||
|
||||
@code{ar} will create an index to the symbols defined in relocatable
|
||||
object modules in the archive when you specify the option @samp{s}.
|
||||
Once created, this index is updated in the archive whenever @code{ar}
|
||||
makes a change to its contents. 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.
|
||||
@c This auto-update may happen-always only for WRS version; Gumby says, for
|
||||
@c instance, that it doesn't happen with 'q' updates elsewhere.
|
||||
|
||||
You may use @samp{nm -s} or @samp{nm +print-symdefs} to list this index
|
||||
table. If an archive lacks the table, another form of @code{ar} called
|
||||
@code{ranlib} can be used to add just the table.
|
||||
|
||||
@code{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{files} arguments,
|
||||
specifying particular files to operate on.
|
||||
|
||||
GNU @code{ar} allows you to mix the operation code and modifier flags in
|
||||
any order, within the first command-line argument.
|
||||
|
||||
If you wish, you may precede the first command-line argument with a
|
||||
dash.
|
||||
|
||||
The @var{Op} keyletter specifies what operation to execute; it may be
|
||||
any of the following, but you must specify only one of them:
|
||||
|
||||
@table @code
|
||||
@item d
|
||||
@emph{Delete} modules from the archive. Specify the names of modules to
|
||||
be deleted as @var{files}; the archive is untouched if you
|
||||
specify no files to delete.
|
||||
|
||||
If you wish to delete an archive's index, you can use this option to do
|
||||
it; the internal name of the index (which you will need to specify in
|
||||
@var{files} to delete it) is @samp{__.SYMDEF}.
|
||||
|
||||
If you specify the @samp{v} option flag, @code{ar} will list each module
|
||||
as it is deleted.
|
||||
|
||||
@item m
|
||||
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 option flags are used with @code{m}, any members you name in the
|
||||
@var{files} arguments are moved to the @emph{end} of the archive;
|
||||
you can use the @samp{a}, @samp{b}, or @samp{i} options to move them to a
|
||||
specified place instead.
|
||||
|
||||
@item p
|
||||
@emph{Print} the specified members of the archive, to the standard
|
||||
output file. If the @samp{v} option flag is specified, show the member
|
||||
name before copying its contents to standard output.
|
||||
|
||||
If you specify no @var{files}, all the files in the archive are printed,
|
||||
save for the index (if any), which is listed only if you ask for it by
|
||||
name: @samp{__.SYMDEF}.
|
||||
|
||||
@item q
|
||||
@emph{Quick append}; add @var{files} to the end of @var{archive},
|
||||
without checking for replacement.
|
||||
|
||||
The options @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 option @samp{v} makes @code{ar} list each file as it is appended.
|
||||
|
||||
@c per Gumby, versions other than WRS of this will *not* auto-update
|
||||
@c SYMDEF index on 'q' updates.
|
||||
|
||||
@item r
|
||||
Insert @var{files} 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{files} doesn't exist, @code{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 options @samp{a}, @samp{b}, or @samp{i} to request
|
||||
placement relative to some existing member.
|
||||
|
||||
The option flag @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 t
|
||||
Display a @emph{table} listing the contents of @var{archive}, or those
|
||||
of the files listed in @var{files} that are present in the
|
||||
archive. Normally only the member name is shown; if you also want to
|
||||
see the modes (permissions), timestamp, owner, group, and size, you can
|
||||
request that by also specifying the @samp{v} option flag.
|
||||
|
||||
If you do not specify any @var{files}, all files in the archive
|
||||
are listed; but the index to symbols from relocatable modules, called
|
||||
@samp{__.SYMDEF}, is not listed unless you explicitly request it by
|
||||
name.
|
||||
|
||||
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} will list 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
|
||||
@emph{Extract} a member from the archive. The @samp{v} option flag
|
||||
requests that @code{ar} list each name as it extracts it.
|
||||
|
||||
If you do not specify any @var{files}, all files in the archive
|
||||
are extracted; but the index to symbols from relocatable modules, called
|
||||
@samp{__.SYMDEF}, is not extracted unless you explicitly request it by
|
||||
name.
|
||||
|
||||
@end table
|
||||
|
||||
A number of modifiers may immediately follow the @var{Op} keyletter, to
|
||||
specify variations on an operation's behavior:
|
||||
|
||||
@table @code
|
||||
@item a
|
||||
Add new files @emph{after} an existing member of the
|
||||
archive. If you use the modifier @code{a}, the name of an existing archive
|
||||
member must be present as the @var{membername} argument, before the
|
||||
@var{archive} specification.
|
||||
|
||||
@item b
|
||||
Add new files @emph{before} an existing member of the
|
||||
archive. If you use the modifier @code{b}, the name of an existing archive
|
||||
member must be present as the @var{membername} argument, before the
|
||||
@var{archive} specification. (same as @samp{i}).
|
||||
|
||||
@item c
|
||||
@emph{Create} the archive. The specified @var{archive} is always
|
||||
created if it didn't 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 option flag.
|
||||
|
||||
@item i
|
||||
Insert new files @emph{before} an existing member of the
|
||||
archive. If you use the modifier @code{i}, the name of an existing archive
|
||||
member must be present as the @var{membername} argument, before the
|
||||
@var{archive} specification. (same as @samp{b}).
|
||||
|
||||
@item l
|
||||
This option flag is recognized but not used; it is permitted for
|
||||
compatibility with other forms of @code{ar}.
|
||||
@c ???---pesch@@cygnus.com, 25jan91
|
||||
|
||||
@item o
|
||||
Preserve the @emph{original} dates of members when extracting them. If
|
||||
you do not specify this option flag, files extracted from the archive
|
||||
will be stamped with the time of extraction.
|
||||
|
||||
@item s
|
||||
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 option
|
||||
flag either with any operation, or alone. Running @samp{ar s} on an
|
||||
archive is equivalent to running @samp{ranlib} on it.
|
||||
|
||||
@item u
|
||||
Normally, @code{ar r}@dots{} or @code{ar q}@dots{} insert 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 option. The option-flag combination @samp{qu} is
|
||||
equivalent to @samp{ru}; checking the timestamps loses any speed
|
||||
advantage, so @code{ar} treats both commands as replace operations with
|
||||
the @samp{u} option appended.
|
||||
|
||||
@c u actually turns *anything* into a replace. I claim this is a bug;
|
||||
@c 'du' and 'tu' for example should either be rejected or equivalent to
|
||||
@c plain 'd' and 't'. ---pesch@@cygnus.com, 25jan91
|
||||
|
||||
@item v
|
||||
This option requests the @emph{verbose} version of an operations. Many
|
||||
operations display additional information, such as filenames processed,
|
||||
when the option @samp{v} is appended.
|
||||
|
||||
@end table
|
||||
|
||||
@node ld, nm, ar, Top
|
||||
@chapter ld
|
||||
The GNU linker @code{ld} is now described in a separate manual.
|
||||
@xref{Top, , Overview, , GLD: the GNU linker}.
|
||||
|
||||
@node nm, objdump, ld, Top
|
||||
@chapter nm
|
||||
|
||||
@smallexample
|
||||
nm [ -a | +debug-syms ] [ -g | +extern-only ]
|
||||
[ -n | +numeric-sort ] [ -o | +print-file-name ]
|
||||
[ -p | +no-sort ] [ -r | +reverse-sort ]
|
||||
[ -s | +print-symdefs ] [ -u | +undefined-only ]
|
||||
[ @var{objfiles}@dots{} ]
|
||||
@end smallexample
|
||||
|
||||
GNU @code{nm} will list the symbols from object files @var{objfiles}.
|
||||
Any command-line options must precede all object files; no option takes
|
||||
an argument.
|
||||
|
||||
The long and short forms of options, shown here as alternatives, are
|
||||
equivalent.
|
||||
|
||||
@table @code
|
||||
@item @var{objfiles}@dots{}
|
||||
Object files whose symbols are to be listed. If no object files are
|
||||
listed as arguments, @code{nm} assumes @samp{a.out}.
|
||||
|
||||
@item -a | +debug-syms
|
||||
Display debugger-only symbols; normally these are not listed.
|
||||
|
||||
@item -g | +extern-only
|
||||
Display only external symbols.
|
||||
|
||||
@item -n | +numeric-sort
|
||||
Sort symbols numerically by their addresses, not alphabetically by their
|
||||
names.
|
||||
|
||||
@item -o | +print-file-name
|
||||
Precede each symbol by the name of the input file where it was found,
|
||||
rather than identifying the input file once only before all of its
|
||||
symbols.
|
||||
|
||||
@item -p | +no-sort
|
||||
Don't bother to sort the symbols in any order; just print them in the
|
||||
order encountered.
|
||||
|
||||
@item -r | +reverse-sort
|
||||
Reverse the sense of the sort (whether numeric or alphabetic); let the
|
||||
last come first.
|
||||
|
||||
@item -s | +print-symdefs
|
||||
When listing symbols from archives, list the index: a mapping (stored in
|
||||
the archive by @code{ar} or @code{ranlib} of what modules contain
|
||||
definitions for what names.
|
||||
|
||||
@item -u | +undefined-only
|
||||
Display only undefined symbols (those external to each object file).
|
||||
|
||||
@end table
|
||||
|
||||
@node objdump, ranlib, nm, Top
|
||||
@chapter objdump
|
||||
|
||||
@smallexample
|
||||
objdump [ -h | +header ] [ -n | +nstuff ] [ -r | +reloc ]
|
||||
[ -t | +syms ] @var{objfiles}@dots{}
|
||||
@end smallexample
|
||||
|
||||
@code{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.
|
||||
|
||||
The long and short forms of options, shown here as alternatives, are
|
||||
equivalent.
|
||||
|
||||
@table @code
|
||||
@item @var{objfiles}@dots{}
|
||||
The object files to be examined.
|
||||
|
||||
@item -h | +header
|
||||
Header. Print summary information from the header of the object file.
|
||||
|
||||
@item -n | +nstuff
|
||||
@samp{N_} symbols. Print the values of various macros from @file{a.out.h}
|
||||
as applied to the object file; e.g. @code{N_TXTOFF}.
|
||||
|
||||
@item -r | +reloc
|
||||
Relocation. Print the relocation entries of the file.
|
||||
|
||||
@item -t | +syms
|
||||
Symbol Table. Print the symbol table entries of the file.
|
||||
This is similar to the information provided by the @samp{nm} program.
|
||||
|
||||
@end table
|
||||
|
||||
@node ranlib, size, objdump, Top
|
||||
@chapter ranlib
|
||||
|
||||
@smallexample
|
||||
ranlib [ -t | +touch ] [ -v | +verbose ] @var{archive}
|
||||
@end smallexample
|
||||
|
||||
@code{ranlib} generates the 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 @code{nm -s} or @code{nm +print-symdefs} to list this table.
|
||||
The index is internally stored in the archive under the name
|
||||
@samp{__.SYMDEF}.
|
||||
|
||||
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 GNU @code{ranlib} program is another form of GNU @code{ar}.
|
||||
|
||||
@code{ranlib}'s options make it report on what it's doing and fake an
|
||||
update of a particular archive's index.
|
||||
|
||||
Any command-line options must precede the archive name.
|
||||
|
||||
The long and short forms of options, shown here as alternatives, are
|
||||
equivalent.
|
||||
|
||||
@table @code
|
||||
|
||||
@item -t | +touch
|
||||
You can use the ``touch'' option to fake an update of the index
|
||||
table in archives; @code{ranlib} will first set the current date for the
|
||||
index object module in the archive (to make it appear to have changed).
|
||||
|
||||
@item -v | +verbose
|
||||
Use this option if you'd like informational messages about what
|
||||
@code{ranlib} is up to, while it loops through the specified archives.
|
||||
|
||||
@end table
|
||||
|
||||
@node size, strip, ranlib, Top
|
||||
@chapter size
|
||||
|
||||
@smallexample
|
||||
size @var{objfiles}@dots{}
|
||||
@end smallexample
|
||||
|
||||
The GNU @code{size} utility lists the segment (@code{text}, @code{data},
|
||||
@code{bss} sizes ---and the total size--- for the object files
|
||||
@var{objfiles} in its argument list. For archives, one line of output
|
||||
is generated for each module.
|
||||
|
||||
@code{size} has no command-line options.
|
||||
|
||||
If more than one object module is listed, @code{size} labels each line
|
||||
of output with the module's name:
|
||||
@smallexample
|
||||
% size a.out libX11.a
|
||||
text data bss dec hex
|
||||
49152 49152 0 98304 18000 a.out
|
||||
1256 16 0 1272 4f8 libX11.a(Context.o)
|
||||
176 0 0 176 b0 libX11.a(Depths.o)
|
||||
1360 56 0 1416 588 libX11.a(ParseCmd.o)
|
||||
904 24 4096 5024 13a0 libX11.a(Quarks.o)
|
||||
216 0 0 216 d8 libX11.a(XAllCells.o)
|
||||
.
|
||||
.
|
||||
.
|
||||
|
||||
@end smallexample
|
||||
[sample output truncated]
|
||||
|
||||
@node strip, , size, Top
|
||||
@chapter strip
|
||||
|
||||
@smallexample
|
||||
strip [ -s | +strip-all ] [ -S | +strip-debug ]
|
||||
[ -x | +discard-all ] [ -X | +discard-locals ]
|
||||
@var{objfiles}@dots{}
|
||||
@end smallexample
|
||||
|
||||
GNU @code{strip} will discard all symbols from object files
|
||||
@var{objfiles}, if no options are specified; or only certain symbols,
|
||||
depending on its command-line options.
|
||||
|
||||
@code{strip} will not execute unless at least one object file is listed.
|
||||
|
||||
@emph{WARNING:} @code{strip} modifies the files named in its argument,
|
||||
rather than writing modified copies under different names.
|
||||
|
||||
The long and short forms of options, shown here as alternatives, are
|
||||
equivalent.
|
||||
|
||||
@table @code
|
||||
@item -s | +strip-all
|
||||
This is the default case: strip all symbol entries from @var{objfiles}.
|
||||
|
||||
@item -S | +strip-debug
|
||||
Discard only debugging symbol information from @var{objfiles}.
|
||||
|
||||
@item -x | +discard-all
|
||||
Discard all symbols local to each file in @var{objfiles}.
|
||||
@emph{WARNING:} Note that @code{+discard-all} discards only @emph{local}
|
||||
symbols, in spite of its name.
|
||||
|
||||
@item -X | +discard-locals
|
||||
Discard local symbols starting with @samp{L} from each file in
|
||||
@var{objfiles}. (Some compilers produce internally-used symbols that
|
||||
begin with @samp{L}.)
|
||||
@end table
|
||||
|
||||
|
||||
@contents
|
||||
@bye
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user