Linux
Application Development |
Michael K. Johnson Erik W. Troan |
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).
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 ] [-l | --line-numbers ] [ --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'.
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
-l
--line-numbers
-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 ] [ -p | --preserve-dates ] [ --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 ] [ --change-leading-char ] [ --remove-leading-char ] [ --weaken ] [ -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 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 `-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'.
-p
--preserve-dates
--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
--change-leading-char
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.
--remove-leading-char
--change-leading-char
because it always changes the symbol name
when appropriate, regardless of the object file format of the output
file.
--weaken
-R
option to the linker. This option is only effective when
using an object file format which supports weak symbols.
-V
--version
objcopy
.
-v
--verbose
--help
objcopy
.
objdump [ -a | --archive-headers ] [ -b bfdname | --target=bfdname ] [ --debugging ] [ -C | --demangle ] [ -d | --disassemble ] [ -D | --disassemble-all ] [ --disassemble-zeroes ] [ -EB | -EL | --endian={big | little } ] [ -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 ] [ -w | --wide ] [ --start-address=address ] [ --stop-address=address ] [ --prefix-addresses] [ --[no-]show-raw-insn ] [ --adjust-vma=offset ] [ --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
--adjust-vma=offset
-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.
-C
--demangle
--debugging
-d
--disassemble
-D
--disassemble-all
--prefix-addresses
--disassemble-zeroes
-EB
-EL
--endian={big|little}
-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
--prefix-addresses
is used.
--no-show-raw-insn
--prefix-addresses
is used.
--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 ] [ -o file ] [ -p | --preserve-dates ] [ -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
.
-o file
-p
--preserve-dates
-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
addr2line [ -b bfdname | --target=bfdname ] [ -C | --demangle ] [ -e filename | --exe=filename ] [ -f | --functions ] [ -s | --basename ] [ -H | --help ] [ -V | --version ] [ addr addr ... ]
addr2line
translates program addresses into file names and line
numbers. Given an address and an executable, it uses the debugging
information in the executable to figure out which file name and line
number are associated with a given address.
The executable to use is specified with the -e
option. The
default is `a.out'.
addr2line
has two modes of operation.
In the first, hexadecimal addresses are specified on the command line,
and addr2line
displays the file name and line number for each
address.
In the second, addr2line
reads hexadecimal addresses from
standard input, and prints the file name and line number for each
address on standard output. In this mode, addr2line
may be used
in a pipe to convert dynamically chosen addresses.
The format of the output is `FILENAME:LINENO'. The file name and
line number for each address is printed on a separate line. If the
-f
option is used, then each `FILENAME:LINENO' line is
preceded by a `FUNCTIONNAME' line which is the name of the function
containing the address.
If the file name or function name can not be determined,
addr2line
will print two question marks in their place. If the
line number can not be determined, addr2line
will print 0.
The long and short forms of options, shown here as alternatives, are equivalent.
-b bfdname
--target=bfdname
-C
--demangle
-e filename
--exe=filename
-f
--functions
-s
--basenames
nlmconv
converts a relocatable object file into a NetWare
Loadable Module.
Warning:
nlmconv
is not always built as part of the binary utilities, since it is only useful for NLM targets.
nlmconv [ -I bfdname | --input-target=bfdname ] [ -O bfdname | --output-target=bfdname ] [ -T headerfile | --header-file=headerfile ] [ -d | --debug] [ -l linker | --linker=linker ] [ -h | --help ] [ -V | --version ] infile outfile
nlmconv
converts the relocatable `i386' object file
infile into the NetWare Loadable Module outfile, optionally
reading headerfile for NLM header information. For instructions
on writing the NLM command file language used in header files, see the
`linkers' section, `NLMLINK' in particular, of the NLM
Development and Tools Overview, which is part of the NLM Software
Developer's Kit ("NLM SDK"), available from Novell, Inc.
nlmconv
uses the GNU Binary File Descriptor library to read
infile; see section `BFD' in Using LD, for
more information.
nlmconv
can perform a link step. In other words, you can list
more than one object file for input if you list them in the definitions
file (rather than simply specifying one input file on the command line).
In this case, nlmconv
calls the linker for you.
-I bfdname
--input-target=bfdname
nlmconv
can usually determine
the format of a given file (so no default is necessary).
See section Target Selection, for more information.
-O bfdname
--output-target=bfdname
nlmconv
infers the output
format based on the input format, e.g. for a `i386' input file the
output format is `nlm32-i386'.
See section Target Selection, for more information.
-T headerfile
--header-file=headerfile
-d
--debug
nlmconv
.
-l linker
--linker=linker
-h
--help
-V
--version
nlmconv
.
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'.
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 running the shell script `config.sub' which is included with the sources.
Some sample configuration triplets are: `m68k-hp-bsd', `mips-dec-ultrix', `sparc-sun-sunos'.
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'
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.
If you are not sure whether you have found a bug, here are some guidelines:
A number of companies and individuals offer support for 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 `etc/SERVICE' in the GNU Emacs distribution.
In any event, we also recommend that you send bug reports for the binary utilities to `bug-gnu-utils@prep.ai.mit.edu'.
The fundamental principle of reporting bugs usefully is this: 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?" Those bug reports are useless, and we urge everyone to refuse to respond to them except to chide the sender to report bugs properly.
To enable us to fix the bug, you should include all these things:
BFD
library.
gcc-2.7
".
gcc
, gas
, and/or the GNU 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 gcc
, or
whatever, was used to produce the object files. Also say how
gcc
, or whatever, was configured.
diff
with the `-u', `-c', or `-p'
option. Always send diffs from the old file to the new file. If you
even discuss something in the 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.
Here are some things that are not necessary:
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 20 November 1997 using the texi2html translator version 1.51.