ar [-]p[mod [relpos]] archive [member...] ar -M [ <mri-script ]
The GNU ar
program creates, modifies, and extracts from
archives. An 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 members of the archive).
As an alternative to listing the member names explicitly you can
specify a list of files with the syntax @listfile
. Here
listfile
is the name of a file containing a list of file names,
one per line.
The original files' contents, mode (permissions), timestamp, owner, and group are preserved in the archive, and can be restored on extraction.
GNU ar
can maintain archives whose members have names of any
length; however, depending on how 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).
ar
is considered a binary utility because archives of this sort
are most often used as libraries holding commonly needed
subroutines.
ar
creates an index to the symbols defined in relocatable
object modules in the archive when you specify the modifier `s'.
Once created, this index is updated in the archive whenever ar
makes a change to its contents (save for the `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 `nm -s' or `nm --print-armap' to list this index
table. If an archive lacks the table, another form of ar
called
ranlib
can be used to add just the table.
GNU ar
is designed to be compatible with two different
facilities. You can control its activity using command-line options,
like the different varieties of ar
on Unix systems; or, if you
specify the single command-line option `-M', you can control it
with a script supplied via standard input, like the MRI "librarian"
program.
ar
on the command linear [-]p[mod [relpos]] archive [member...]
When you use ar
in the Unix style, ar
insists on at least two
arguments to execute: one keyletter specifying the operation
(optionally accompanied by other keyletters specifying
modifiers), and the archive name to act on.
Most operations can also accept further member arguments, specifying particular files to operate on.
GNU ar
allows you to mix the operation code p and modifier
flags mod in any order, within the first command-line argument.
If you wish, you may begin the first command-line argument with a dash.
The p keyletter specifies what operation to execute; it may be any of the following, but you must specify only one of them:
d
ar
lists each module
as it is deleted.
m
m
, any members you name in the
member arguments are moved to the end of the archive;
you can use the `a', `b', or `i' modifiers to move them to a
specified place instead.
p
q
ar
list each file as it is appended.
Since the point of this operation is speed, the archive's symbol table
index is not updated, even if it already existed; you can use `ar s' or
ranlib
explicitly to update the symbol table index.
r
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 `a', `b', or `i' to request
placement relative to some existing member.
The modifier `v' used with this operation elicits a line of
output for each file inserted, along with one of the letters `a' or
`r' to indicate whether the file was appended (no old member
deleted) or replaced.
t
x
ar
list each name as it extracts it.
If you do not specify a member, all files in the archive
are extracted.
A number of modifiers (mod) may immediately follow the p keyletter, to specify variations on an operation's behavior:
a
b
c
f
ar
will normally permit file
names of any length. This will cause it to create archives which are
not compatible with the native ar
program on some systems. If
this is a concern, the `f' modifier may be used to truncate file
names when putting them in the archive.
i
l
o
s
u
v
V
ar
.
ar
with a scriptar -M [ <script ]
If you use the single command-line option `-M' with ar
, you
can control its operation with a rudimentary command language. This
form of ar
operates interactively if standard input is coming
directly from a terminal. During interactive use, ar
prompts for
input (the prompt is `AR >'), and continues executing even after
errors. If you redirect standard input to a script file, no prompts are
issued, and ar
abandons execution (with a nonzero exit code)
on any error.
The ar
command language is 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 GNU ar
for developers who already have scripts
written for the MRI "librarian" program.
The syntax for the ar
command language is straightforward:
LIST
is the same as list
. In the following descriptions, commands are
shown in upper case for clarity.
ar
command, you can separate the individual names with either commas or
blanks. Commas are shown in the explanations below, for clarity.
Here are the commands you can use in ar
scripts, or when using
ar
interactively. Three of them have special significance:
OPEN
or CREATE
specify a current archive, which is
a temporary file required for most of the other commands.
SAVE
commits the changes so far specified by the script. Prior
to SAVE
, commands affect only the temporary copy of the current
archive.
ADDLIB archive
ADDLIB archive (module, module, ... module)
OPEN
or CREATE
.
ADDMOD member, member, ... member
OPEN
or CREATE
.
CLEAR
SAVE
. May be executed (with no
effect) even if no current archive is specified.
CREATE archive
SAVE
.
You can overwrite existing archives; similarly, the contents of any
existing file named archive will not be destroyed until SAVE
.
DELETE module, module, ... module
OPEN
or CREATE
.
DIRECTORY archive (module, ... module)
DIRECTORY archive (module, ... module) outputfile
VERBOSE
specifies the form of the output: when verbose
output is off, output is like that of `ar -t archive
module...'. When verbose output is on, the listing is like
`ar -tv archive module...'.
Output normally goes to the standard output stream; however, if you
specify outputfile as a final argument, ar
directs the
output to that file.
END
ar
, with a 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 SAVE
command, those
changes are lost.
EXTRACT module, module, ... module
OPEN
or CREATE
.
LIST
VERBOSE
. The effect is like `ar
tv archive'). (This single command is a GNU ld
enhancement, rather than present for MRI compatibility.)
Requires prior use of OPEN
or CREATE
.
OPEN archive
SAVE
.
REPLACE module, module, ... module
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 OPEN
or CREATE
.
VERBOSE
DIRECTORY
.
When the flag is on, DIRECTORY
output matches output from
`ar -tv '....
SAVE
CREATE
or OPEN
command.
Requires prior use of OPEN
or CREATE
.
The GNU linker ld
is now described in a separate manual.
See section `Overview' in Using LD: the GNU linker.
nm [ -a | --debug-syms ] [ -g | --extern-only ] [ -B ] [ -C | --demangle ] [ -D | --dynamic ] [ -s | --print-armap ] [ -A | -o | --print-file-name ] [ -n | -v | --numeric-sort ] [ -p | --no-sort ] [ -r | --reverse-sort ] [ --size-sort ] [ -u | --undefined-only ] [ -t radix | --radix=radix ] [ -P | --portability ] [ --target=bfdname ] [ -f format | --format=format ] [ --defined-only ] [ --no-demangle ] [ -V | --version ] [ --help ] [ objfile... ]
GNU nm
lists the symbols from object files objfile....
If no object files are listed as arguments, nm
assumes
`a.out'. Alternatively a list of files may be specified using the
syntax @listfile
. Here listfile
is the name of a file
containing a list of file names, one per line.
For each symbol, nm
shows:
A
B
C
D
G
I
N
R
S
T
U
W
-
?
The long and short forms of options, shown here as alternatives, are equivalent.
-A
-o
--print-file-name
-a
--debug-syms
-B
nm
).
-C
--demangle
--no-demangle
-D
--dynamic
-f format
--format=format
bsd
,
sysv
, or posix
. The default is bsd
.
Only the first character of format is significant; it can be
either upper or lower case.
-g
--extern-only
-n
-v
--numeric-sort
-p
--no-sort
-P
--portability
-s
--print-armap
ar
or ranlib
) of which modules
contain definitions for which names.
-r
--reverse-sort
--size-sort
-t radix
--radix=radix
--target=bfdname
-u
--undefined-only
--defined-only
-V
--version
nm
and exit.
--help
nm
and exit.
objcopy [ -F bfdname | --target=bfdname ] [ -I bfdname | --input-target=bfdname ] [ -O bfdname | --output-target=bfdname ] [ -S | --strip-all ] [ -g | --strip-debug ] [ -K symbolname | --keep-symbol=symbolname ] [ -N symbolname | --strip-symbol=symbolname ] [ -x | --discard-all ] [ -X | --discard-locals ] [ -b byte | --byte=byte ] [ -i interleave | --interleave=interleave ] [ -R sectionname | --remove-section=sectionname ] [ --debugging ] [ --gap-fill=val ] [ --pad-to=address ] [ --set-start=val ] [ --adjust-start=incr ] [ --adjust-vma=incr ] [ --adjust-section-vma=section{=,+,-}val ] [ --adjust-warnings ] [ --no-adjust-warnings ] [ --set-section-flags=section=flags ] [ --add-section=sectionname=filename ] [ --remove-leading-char ] [ -v | --verbose ] [ -V | --version ] [ --help ] infile [outfile]
The GNU objcopy
utility copies the contents of an object
file to another. objcopy
uses the GNU 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 objcopy
is controlled by command-line options.
objcopy
creates temporary files to do its translations and
deletes them afterward. objcopy
uses BFD to do all its
translation work; it has access to all the formats described in BFD
and thus is able to recognize most formats without being told
explicitly. See section `BFD' in Using LD.
objcopy
can be used to generate S-records by using an output
target of `srec' (e.g., use `-O srec').
objcopy
can be used to generate a raw binary file by using an
output target of `binary' (e.g., use `-O binary'). When
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 virtual 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 `-S' to remove sections containing debugging information. In some cases `-R' will be useful to remove sections which contain information which is not needed by the binary file.
infile
outfile
objcopy
creates a
temporary file and destructively renames the result with
the name of infile.
-I bfdname
--input-target=bfdname
-O bfdname
--output-target=bfdname
-F bfdname
--target=bfdname
-R sectionname
--remove-section=sectionname
-S
--strip-all
-g
--strip-debug
--strip-unneeded
-K symbolname
--keep-symbol=symbolname
-N symbolname
--strip-symbol=symbolname
-K
.
-x
--discard-all
-X
--discard-locals
-b byte
--byte=byte
srec
output
target.
-i interleave
--interleave=interleave
objcopy
ignores this option if you do not specify either `-b' or
`--byte'.
--debugging
--gap-fill val
--pad-to address
--set-start val
--adjust-start incr
--adjust-vma incr
--adjust-section-vma section{=,+,-}val
--adjust-warnings
--no-adjust-warnings
--set-section-flags section=flags
--add-section sectionname=filename
--remove-leading-char
-V
--version
objcopy
.
-v
--verbose
--help
objcopy
.
objdump [ -a | --archive-headers ] [ -b bfdname | --target=bfdname ] [ --debugging ] [ -d | --disassemble ] [ -D | --disassemble-all ] [ -f | --file-headers ] [ -h | --section-headers | --headers ] [ -i | --info ] [ -j section | --section=section ] [ -l | --line-numbers ] [ -S | --source ] [ -m machine | --architecture=machine ] [ -r | --reloc ] [ -R | --dynamic-reloc ] [ -s | --full-contents ] [ --stabs ] [ -t | --syms ] [ -T | --dynamic-syms ] [ -x | --all-headers ] [ --version ] [ --help ] objfile... [ -w | --wide ] [ --start-address=address ] [ --stop-address=address ] [ --show-raw-insn ] [ --version ] [ --help ] objfile...
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.
objfile... are the object files to be examined. When you
specify archives, objdump
shows information on each of the member
object files.
The long and short forms of options, shown here as alternatives, are equivalent. At least one option besides `-l' must be given.
-a
--archive-header
-b bfdname
--target=bfdname
objdump -b oasys -m vax -h fu.odisplays summary information from the section headers (`-h') of `fu.o', which is explicitly identified (`-m') as a VAX object file in the format produced by Oasys compilers. You can list the formats available with the `-i' option. See section Target Selection, for more information.
--debugging
-d
--disassemble
-D
--disassemble-all
-f
--file-header
-h
--section-header
--header
ld
. However, some object file formats, such as a.out, do not
store the starting address of the file segments. In those situations,
although ld
relocates the sections correctly, using `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.
--help
objdump
and exit.
-i
--info
-j name
--section=name
-l
--line-numbers
-m machine
--architecture=machine
-r
--reloc
-R
--dynamic-reloc
-s
--full-contents
-S
--source
--show-raw-insn
--stabs
.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 `--syms'
output. For more information on stabs symbols, see section `Stabs Overview' in The "stabs" debug format.
--start-address=address
-d
, -r
and -s
options.
--stop-address=address
-d
, -r
and -s
options.
-t
--syms
-T
--dynamic-syms
--version
objdump
and exit.
-x
--all-header
-w
--wide
ranlib [-vV] archive
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 `nm -s' or `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 GNU ranlib
program is another form of GNU ar
; running
ranlib
is completely equivalent to executing `ar -s'.
See section ar.
-v
-V
ranlib
.
size [ -A | -B | --format=compatibility ] [ --help ] [ -d | -o | -x | --radix=number ] [ --target=bfdname ] [ -V | --version ] objfile...
The GNU size
utility lists the section sizes--and the total
size--for each of the object or archive files objfile in its
argument list. By default, one line of output is generated for each
object file or each module in an archive.
objfile... are the object files to be examined.
The command line options have the following meanings:
-A
-B
--format=compatibility
size
resembles output from System V size
(using `-A',
or `--format=sysv'), or Berkeley size
(using `-B', or
`--format=berkeley'). The default is the one-line format similar to
Berkeley's.
Here is an example of the Berkeley (default) format of output from
size
:
size --format=Berkeley ranlib size text data bss dec hex filename 294880 81920 11592 388392 5ed28 ranlib 294880 81920 11888 388688 5ee50 sizeThis is the same data, but displayed closer to System V conventions:
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
--help
-d
-o
-x
--radix=number
--target=bfdname
size
can
automatically recognize many formats.
See section Target Selection, for more information.
-V
--version
size
.
strings [-afov] [-min-len] [-n min-len] [-t radix] [-] [--all] [--print-file-name] [--bytes=min-len] [--radix=radix] [--target=bfdname] [--help] [--version] file...
For each file given, GNU 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. By default, it only prints the strings from the initialized
and loaded sections of object files; for other types of files, it prints
the strings from the whole file.
strings
is mainly useful for determining the contents of non-text
files.
-a
--all
-
-f
--print-file-name
--help
-min-len
-n min-len
--bytes=min-len
-o
strings
have `-o'
act like `-t d' instead. Since we can not be compatible with both
ways, we simply chose one.
-t radix
--radix=radix
--target=bfdname
-v
--version
strip [ -F bfdname | --target=bfdname | --target=bfdname ] [ -I bfdname | --input-target=bfdname ] [ -O bfdname | --output-target=bfdname ] [ -s | --strip-all ] [ -S | -g | --strip-debug ] [ -K symbolname | --keep-symbol=symbolname ] [ -N symbolname | --strip-symbol=symbolname ] [ -x | --discard-all ] [ -X | --discard-locals ] [ -R sectionname | --remove-section=sectionname ] [ -v | --verbose ] [ -V | --version ] [ --help ] objfile...
GNU strip
discards all symbols from object files
objfile. The list of object files may include archives.
At least one object file must be given.
strip
modifies the files named in its argument,
rather than writing modified copies under different names.
-F bfdname
--target=bfdname
--help
strip
and exit.
-I bfdname
--input-target=bfdname
-O bfdname
--output-target=bfdname
-R sectionname
--remove-section=sectionname
-s
--strip-all
-g
-S
--strip-debug
--strip-unneeded
-K symbolname
--keep-symbol=symbolname
-N symbolname
--strip-symbol=symbolname
-K
.
-x
--discard-all
-X
--discard-locals
-V
--version
strip
.
-v
--verbose
c++filt [ -_ | --strip-underscores ] [ -n | --no-strip-underscores ] [ -s format | --format=format ] [ --help ] [ --version ] [ symbol... ]
The C++ language provides function overloading, which means that you can
write many functions with the same name (providing each takes parameters
of different types). All C++ function names are encoded into a
low-level assembly label (this process is known as
mangling). The c++filt
program does the inverse mapping: it
decodes (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 label decodes into a C++ name, the C++ name replaces the low-level name in the output.
You can use c++filt
to decipher individual symbols:
c++filt symbol
If no symbol arguments are given, c++filt
reads symbol
names from the standard input and writes the demangled names to the
standard output. All results are printed on the standard output.
-_
--strip-underscores
foo
gets the low-level
name _foo
. This option removes the initial underscore. Whether
c++filt
removes the underscore by default is target dependent.
-n
--no-strip-underscores
-s format
--format=format
nm
can decode three different methods of mangling, used by
different C++ compilers. The argument to this option selects which
method it uses:
gnu
lucid
arm
--help
c++filt
and exit.
--version
c++filt
and exit.
Warning:
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 the future to decode a name passed as an argument on the command line; in other words,c++filt symbolmay in a future release become
c++filt option symbol
You can specify three aspects of the target system to the GNU binary file utilities, each in several ways:
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 `--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 native (on hosts with the same type as the target system).
A target is an object file format. A given target may be supported for multiple architectures (see section Architecture selection). A target selection may also have variations for different operating systems or architectures.
The command to list valid target values is `objdump -i' (the first column of output contains the relevant information).
Some sample values are: `a.out-hp300bsd', `ecoff-littlemips', `a.out-sunos-big'.
objdump
TargetWays to specify:
GNUTARGET
objcopy
and strip
Input TargetWays to specify:
GNUTARGET
objcopy
and strip
Output TargetWays to specify:
objcopy
and strip
Input Target" above)
GNUTARGET
nm
, size
, and strings
TargetWays to specify:
GNUTARGET
Ways to specify:
TARGET
(see section `Option Commands' in Using LD)
GNUTARGET
(see section `Environment' in Using LD)
Ways to specify:
OUTPUT_FORMAT
(see section `Option Commands' in Using LD)
An architecture is a type of 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 CPU.
The command to list valid architecture values is `objdump -i' (the second column contains the relevant information).
Sample values: `m68k:68020', `mips:3000', `sparc'.
objdump
ArchitectureWays to specify:
objcopy
, nm
, size
, strings
ArchitectureWays to specify:
Ways to specify:
Ways to specify:
OUTPUT_ARCH
(see section `Option Commands' in Using LD)
A linker emulation is a "personality" of the linker, which gives the linker default values for the other aspects of the target system. In particular, it consists of
The command to list valid linker emulation values is `ld -V'.
Sample values: `hp300bsd', `mipslit', `sun4'.
Ways to specify:
LDEMULATION
DEFAULT_EMULATION
from `Makefile',
which comes from EMUL
in `config/target.mt'
Jump to: . - a - c - d - e - f - h - i - l - m - n - o - p - q - r - s - u - w
ar
compatibility
ar
ar
nm
compatibility, nm
compatibility
nm
format, nm
format
ar
size
display format
size
number format
ar
This document was generated on 23 March 1999 using the texi2html translator version 1.52.