1 changed files with 517 additions and 0 deletions
@ -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