Update some comments.
[deliverable/binutils-gdb.git] / binutils / binutils.texi
CommitLineData
252b5132
RH
1\input texinfo @c -*- Texinfo -*-
2@setfilename binutils.info
3@include config.texi
4
5@ifinfo
6@format
7START-INFO-DIR-ENTRY
8* Binutils: (binutils). The GNU binary utilities "ar", "objcopy",
9 "objdump", "nm", "nlmconv", "size", "readelf"
10 "strings", "strip", "ranlib" and "dlltool".
11END-INFO-DIR-ENTRY
12@end format
13@end ifinfo
14
15@ifinfo
16Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
17
18Permission is granted to make and distribute verbatim copies of
19this manual provided the copyright notice and this permission notice
20are preserved on all copies.
21
22@ignore
23Permission is granted to process this file through TeX and print the
24results, provided the printed document carries a copying permission
25notice identical to this one except for the removal of this paragraph
26(this paragraph not being relevant to the printed manual).
27
28@end ignore
29
30Permission is granted to copy and distribute modified versions of this
31manual under the conditions for verbatim copying, provided also that
32the entire resulting derived work is distributed under the terms of a
33permission notice identical to this one.
34
35Permission is granted to copy and distribute translations of this manual
36into another language, under the above conditions for modified versions.
37@end ifinfo
38
39@synindex ky cp
40@c
41@c This file documents the GNU binary utilities "ar", "ld", "objcopy",
42@c "objdump", "nm", "size", "strings", "strip", "readelf" and "ranlib".
43@c
44@c Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
45@c
46@c This text may be freely distributed under the terms of the GNU
47@c General Public License.
48@c
49
50@setchapternewpage odd
51@settitle @sc{gnu} Binary Utilities
52@titlepage
53@finalout
54@title The @sc{gnu} Binary Utilities
55@subtitle Version @value{VERSION}
56@sp 1
57@subtitle May 1993
58@author Roland H. Pesch
59@author Jeffrey M. Osier
60@author Cygnus Support
61@page
62
63@tex
64{\parskip=0pt \hfill Cygnus Support\par \hfill
65\TeX{}info \texinfoversion\par }
66@end tex
67
68@vskip 0pt plus 1filll
69Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
70
71Permission is granted to make and distribute verbatim copies of
72this manual provided the copyright notice and this permission notice
73are preserved on all copies.
74
75Permission is granted to copy and distribute modified versions of this
76manual under the conditions for verbatim copying, provided also that
77the entire resulting derived work is distributed under the terms of a
78permission notice identical to this one.
79
80Permission is granted to copy and distribute translations of this manual
81into another language, under the above conditions for modified versions.
82@end titlepage
83
84@node Top
85@top Introduction
86
87@cindex version
88This brief manual contains preliminary documentation for the @sc{gnu} binary
89utilities (collectively version @value{VERSION}):
90
91@iftex
92@table @code
93@item ar
94Create, modify, and extract from archives
95
96@item nm
97List symbols from object files
98
99@item objcopy
100Copy and translate object files
101
102@item objdump
103Display information from object files
104
105@item ranlib
106Generate index to archive contents
107
108@item readelf
109Display the contents of ELF format files.
110
111@item size
112List file section sizes and total size
113
114@item strings
115List printable strings from files
116
117@item strip
118Discard symbols
119
120@item c++filt
9d51cc66
ILT
121Demangle encoded C++ symbols (on MS-DOS, this program is named
122@code{cxxfilt})
252b5132
RH
123
124@item addr2line
125Convert addresses into file names and line numbers
126
127@item nlmconv
128Convert object code into a Netware Loadable Module
129
130@item windres
131Manipulate Windows resources
132
133@item dlltool
134Create the files needed to build and use Dynamic Link Libraries
135@end table
136@end iftex
137
138@menu
139* ar:: Create, modify, and extract from archives
140* nm:: List symbols from object files
141* objcopy:: Copy and translate object files
142* objdump:: Display information from object files
143* ranlib:: Generate index to archive contents
144* readelf:: Display the contents of ELF format files.
145* size:: List section sizes and total size
146* strings:: List printable strings from files
147* strip:: Discard symbols
148* c++filt:: Filter to demangle encoded C++ symbols
9d51cc66 149* cxxfilt: c++filt. MS-DOS name for c++filt
252b5132
RH
150* addr2line:: Convert addresses to file and line
151* nlmconv:: Converts object code into an NLM
152* windres:: Manipulate Windows resources
153* dlltool:: Create files needed to build and use DLLs
154* Selecting The Target System:: How these utilities determine the target.
155* Reporting Bugs:: Reporting Bugs
156* Index:: Index
157@end menu
158
159@node ar
160@chapter ar
161
162@kindex ar
163@cindex archives
164@cindex collections of files
165@smallexample
166ar [-]@var{p}[@var{mod} [@var{relpos}]] @var{archive} [@var{member}@dots{}]
167ar -M [ <mri-script ]
168@end smallexample
169
170The @sc{gnu} @code{ar} program creates, modifies, and extracts from
171archives. An @dfn{archive} is a single file holding a collection of
172other files in a structure that makes it possible to retrieve
173the original individual files (called @dfn{members} of the archive).
174
175The original files' contents, mode (permissions), timestamp, owner, and
176group are preserved in the archive, and can be restored on
177extraction.
178
179@cindex name length
180@sc{gnu} @code{ar} can maintain archives whose members have names of any
181length; however, depending on how @code{ar} is configured on your
182system, a limit on member-name length may be imposed for compatibility
183with archive formats maintained with other tools. If it exists, the
184limit is often 15 characters (typical of formats related to a.out) or 16
185characters (typical of formats related to coff).
186
187@cindex libraries
188@code{ar} is considered a binary utility because archives of this sort
189are most often used as @dfn{libraries} holding commonly needed
190subroutines.
191
192@cindex symbol index
193@code{ar} creates an index to the symbols defined in relocatable
194object modules in the archive when you specify the modifier @samp{s}.
195Once created, this index is updated in the archive whenever @code{ar}
196makes a change to its contents (save for the @samp{q} update operation).
197An archive with such an index speeds up linking to the library, and
198allows routines in the library to call each other without regard to
199their placement in the archive.
200
201You may use @samp{nm -s} or @samp{nm --print-armap} to list this index
202table. If an archive lacks the table, another form of @code{ar} called
203@code{ranlib} can be used to add just the table.
204
205@cindex compatibility, @code{ar}
206@cindex @code{ar} compatibility
207@sc{gnu} @code{ar} is designed to be compatible with two different
208facilities. You can control its activity using command-line options,
209like the different varieties of @code{ar} on Unix systems; or, if you
210specify the single command-line option @samp{-M}, you can control it
211with a script supplied via standard input, like the MRI ``librarian''
212program.
213
214@menu
215* ar cmdline:: Controlling @code{ar} on the command line
216* ar scripts:: Controlling @code{ar} with a script
217@end menu
218
219@page
220@node ar cmdline
221@section Controlling @code{ar} on the command line
222
223@smallexample
224ar [-]@var{p}[@var{mod} [@var{relpos}]] @var{archive} [@var{member}@dots{}]
225@end smallexample
226
227@cindex Unix compatibility, @code{ar}
228When you use @code{ar} in the Unix style, @code{ar} insists on at least two
229arguments to execute: one keyletter specifying the @emph{operation}
230(optionally accompanied by other keyletters specifying
231@emph{modifiers}), and the archive name to act on.
232
233Most operations can also accept further @var{member} arguments,
234specifying particular files to operate on.
235
236@sc{gnu} @code{ar} allows you to mix the operation code @var{p} and modifier
237flags @var{mod} in any order, within the first command-line argument.
238
239If you wish, you may begin the first command-line argument with a
240dash.
241
242@cindex operations on archive
243The @var{p} keyletter specifies what operation to execute; it may be
244any of the following, but you must specify only one of them:
245
246@table @code
247@item d
248@cindex deleting from archive
249@emph{Delete} modules from the archive. Specify the names of modules to
250be deleted as @var{member}@dots{}; the archive is untouched if you
251specify no files to delete.
252
253If you specify the @samp{v} modifier, @code{ar} lists each module
254as it is deleted.
255
256@item m
257@cindex moving in archive
258Use this operation to @emph{move} members in an archive.
259
260The ordering of members in an archive can make a difference in how
261programs are linked using the library, if a symbol is defined in more
262than one member.
263
264If no modifiers are used with @code{m}, any members you name in the
265@var{member} arguments are moved to the @emph{end} of the archive;
266you can use the @samp{a}, @samp{b}, or @samp{i} modifiers to move them to a
267specified place instead.
268
269@item p
270@cindex printing from archive
271@emph{Print} the specified members of the archive, to the standard
272output file. If the @samp{v} modifier is specified, show the member
273name before copying its contents to standard output.
274
275If you specify no @var{member} arguments, all the files in the archive are
276printed.
277
278@item q
279@cindex quick append to archive
280@emph{Quick append}; Historically, add the files @var{member}@dots{} to the end of
281@var{archive}, without checking for replacement.
282
283The modifiers @samp{a}, @samp{b}, and @samp{i} do @emph{not} affect this
284operation; new members are always placed at the end of the archive.
285
286The modifier @samp{v} makes @code{ar} list each file as it is appended.
287
288Since the point of this operation is speed, the archive's symbol table
289index is not updated, even if it already existed; you can use @samp{ar s} or
290@code{ranlib} explicitly to update the symbol table index.
291
292However, too many different systems assume quick append rebuilds the
293index, so GNU ar implements @code{q} as a synonym for @code{r}.
294
295@item r
296@cindex replacement in archive
297Insert the files @var{member}@dots{} into @var{archive} (with
298@emph{replacement}). This operation differs from @samp{q} in that any
299previously existing members are deleted if their names match those being
300added.
301
302If one of the files named in @var{member}@dots{} does not exist, @code{ar}
303displays an error message, and leaves undisturbed any existing members
304of the archive matching that name.
305
306By default, new members are added at the end of the file; but you may
307use one of the modifiers @samp{a}, @samp{b}, or @samp{i} to request
308placement relative to some existing member.
309
310The modifier @samp{v} used with this operation elicits a line of
311output for each file inserted, along with one of the letters @samp{a} or
312@samp{r} to indicate whether the file was appended (no old member
313deleted) or replaced.
314
315@item t
316@cindex contents of archive
317Display a @emph{table} listing the contents of @var{archive}, or those
318of the files listed in @var{member}@dots{} that are present in the
319archive. Normally only the member name is shown; if you also want to
320see the modes (permissions), timestamp, owner, group, and size, you can
321request that by also specifying the @samp{v} modifier.
322
323If you do not specify a @var{member}, all files in the archive
324are listed.
325
326@cindex repeated names in archive
327@cindex name duplication in archive
328If there is more than one file with the same name (say, @samp{fie}) in
329an archive (say @samp{b.a}), @samp{ar t b.a fie} lists only the
330first instance; to see them all, you must ask for a complete
331listing---in our example, @samp{ar t b.a}.
332@c WRS only; per Gumby, this is implementation-dependent, and in a more
333@c recent case in fact works the other way.
334
335@item x
336@cindex extract from archive
337@emph{Extract} members (named @var{member}) from the archive. You can
338use the @samp{v} modifier with this operation, to request that
339@code{ar} list each name as it extracts it.
340
341If you do not specify a @var{member}, all files in the archive
342are extracted.
343
344@end table
345
346A number of modifiers (@var{mod}) may immediately follow the @var{p}
347keyletter, to specify variations on an operation's behavior:
348
349@table @code
350@item a
351@cindex relative placement in archive
352Add new files @emph{after} an existing member of the
353archive. If you use the modifier @samp{a}, the name of an existing archive
354member must be present as the @var{relpos} argument, before the
355@var{archive} specification.
356
357@item b
358Add new files @emph{before} an existing member of the
359archive. If you use the modifier @samp{b}, the name of an existing archive
360member must be present as the @var{relpos} argument, before the
361@var{archive} specification. (same as @samp{i}).
362
363@item c
364@cindex creating archives
365@emph{Create} the archive. The specified @var{archive} is always
366created if it did not exist, when you request an update. But a warning is
367issued unless you specify in advance that you expect to create it, by
368using this modifier.
369
370@item f
371Truncate names in the archive. @sc{gnu} @code{ar} will normally permit file
372names of any length. This will cause it to create archives which are
373not compatible with the native @code{ar} program on some systems. If
374this is a concern, the @samp{f} modifier may be used to truncate file
375names when putting them in the archive.
376
377@item i
378Insert new files @emph{before} an existing member of the
379archive. If you use the modifier @samp{i}, the name of an existing archive
380member must be present as the @var{relpos} argument, before the
381@var{archive} specification. (same as @samp{b}).
382
383@item l
384This modifier is accepted but not used.
385@c whaffor ar l modifier??? presumably compat; with
386@c what???---doc@@cygnus.com, 25jan91
387
388@item o
389@cindex dates in archive
390Preserve the @emph{original} dates of members when extracting them. If
391you do not specify this modifier, files extracted from the archive
392are stamped with the time of extraction.
393
394@item s
395@cindex writing archive index
396Write an object-file index into the archive, or update an existing one,
397even if no other change is made to the archive. You may use this modifier
398flag either with any operation, or alone. Running @samp{ar s} on an
399archive is equivalent to running @samp{ranlib} on it.
400
401@item S
402@cindex not writing archive index
403Do not generate an archive symbol table. This can speed up building a
404large library in several steps. The resulting archive can not be used
405with the linker. In order to build a symbol table, you must omit the
406@samp{S} modifier on the last execution of @samp{ar}, or you must run
407@samp{ranlib} on the archive.
408
409@item u
410@cindex updating an archive
411Normally, @samp{ar r}@dots{} inserts all files
412listed into the archive. If you would like to insert @emph{only} those
413of the files you list that are newer than existing members of the same
414names, use this modifier. The @samp{u} modifier is allowed only for the
415operation @samp{r} (replace). In particular, the combination @samp{qu} is
416not allowed, since checking the timestamps would lose any speed
417advantage from the operation @samp{q}.
418
419@item v
420This modifier requests the @emph{verbose} version of an operation. Many
421operations display additional information, such as filenames processed,
422when the modifier @samp{v} is appended.
423
424@item V
425This modifier shows the version number of @code{ar}.
426@end table
427
428@node ar scripts
429@section Controlling @code{ar} with a script
430
431@smallexample
432ar -M [ <@var{script} ]
433@end smallexample
434
435@cindex MRI compatibility, @code{ar}
436@cindex scripts, @code{ar}
437If you use the single command-line option @samp{-M} with @code{ar}, you
438can control its operation with a rudimentary command language. This
439form of @code{ar} operates interactively if standard input is coming
440directly from a terminal. During interactive use, @code{ar} prompts for
441input (the prompt is @samp{AR >}), and continues executing even after
442errors. If you redirect standard input to a script file, no prompts are
443issued, and @code{ar} abandons execution (with a nonzero exit code)
444on any error.
445
446The @code{ar} command language is @emph{not} designed to be equivalent
447to the command-line options; in fact, it provides somewhat less control
448over archives. The only purpose of the command language is to ease the
449transition to @sc{gnu} @code{ar} for developers who already have scripts
450written for the MRI ``librarian'' program.
451
452The syntax for the @code{ar} command language is straightforward:
453@itemize @bullet
454@item
455commands are recognized in upper or lower case; for example, @code{LIST}
456is the same as @code{list}. In the following descriptions, commands are
457shown in upper case for clarity.
458
459@item
460a single command may appear on each line; it is the first word on the
461line.
462
463@item
464empty lines are allowed, and have no effect.
465
466@item
467comments are allowed; text after either of the characters @samp{*}
468or @samp{;} is ignored.
469
470@item
471Whenever you use a list of names as part of the argument to an @code{ar}
472command, you can separate the individual names with either commas or
473blanks. Commas are shown in the explanations below, for clarity.
474
475@item
476@samp{+} is used as a line continuation character; if @samp{+} appears
477at the end of a line, the text on the following line is considered part
478of the current command.
479@end itemize
480
481Here are the commands you can use in @code{ar} scripts, or when using
482@code{ar} interactively. Three of them have special significance:
483
484@code{OPEN} or @code{CREATE} specify a @dfn{current archive}, which is
485a temporary file required for most of the other commands.
486
487@code{SAVE} commits the changes so far specified by the script. Prior
488to @code{SAVE}, commands affect only the temporary copy of the current
489archive.
490
491@table @code
492@item ADDLIB @var{archive}
493@itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module})
494Add all the contents of @var{archive} (or, if specified, each named
495@var{module} from @var{archive}) to the current archive.
496
497Requires prior use of @code{OPEN} or @code{CREATE}.
498
499@item ADDMOD @var{member}, @var{member}, @dots{} @var{member}
500@c FIXME! w/Replacement?? If so, like "ar r @var{archive} @var{names}"
501@c else like "ar q..."
502Add each named @var{member} as a module in the current archive.
503
504Requires prior use of @code{OPEN} or @code{CREATE}.
505
506@item CLEAR
507Discard the contents of the current archive, canceling the effect of
508any operations since the last @code{SAVE}. May be executed (with no
509effect) even if no current archive is specified.
510
511@item CREATE @var{archive}
512Creates an archive, and makes it the current archive (required for many
513other commands). The new archive is created with a temporary name; it
514is not actually saved as @var{archive} until you use @code{SAVE}.
515You can overwrite existing archives; similarly, the contents of any
516existing file named @var{archive} will not be destroyed until @code{SAVE}.
517
518@item DELETE @var{module}, @var{module}, @dots{} @var{module}
519Delete each listed @var{module} from the current archive; equivalent to
520@samp{ar -d @var{archive} @var{module} @dots{} @var{module}}.
521
522Requires prior use of @code{OPEN} or @code{CREATE}.
523
524@item DIRECTORY @var{archive} (@var{module}, @dots{} @var{module})
525@itemx DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) @var{outputfile}
526List each named @var{module} present in @var{archive}. The separate
527command @code{VERBOSE} specifies the form of the output: when verbose
528output is off, output is like that of @samp{ar -t @var{archive}
529@var{module}@dots{}}. When verbose output is on, the listing is like
530@samp{ar -tv @var{archive} @var{module}@dots{}}.
531
532Output normally goes to the standard output stream; however, if you
533specify @var{outputfile} as a final argument, @code{ar} directs the
534output to that file.
535
536@item END
537Exit from @code{ar}, with a @code{0} exit code to indicate successful
538completion. This command does not save the output file; if you have
539changed the current archive since the last @code{SAVE} command, those
540changes are lost.
541
542@item EXTRACT @var{module}, @var{module}, @dots{} @var{module}
543Extract each named @var{module} from the current archive, writing them
544into the current directory as separate files. Equivalent to @samp{ar -x
545@var{archive} @var{module}@dots{}}.
546
547Requires prior use of @code{OPEN} or @code{CREATE}.
548
549@ignore
550@c FIXME Tokens but no commands???
551@item FULLDIR
552
553@item HELP
554@end ignore
555
556@item LIST
557Display full contents of the current archive, in ``verbose'' style
558regardless of the state of @code{VERBOSE}. The effect is like @samp{ar
c89746f6 559tv @var{archive}}. (This single command is a @sc{gnu} @code{ar}
252b5132
RH
560enhancement, rather than present for MRI compatibility.)
561
562Requires prior use of @code{OPEN} or @code{CREATE}.
563
564@item OPEN @var{archive}
565Opens an existing archive for use as the current archive (required for
566many other commands). Any changes as the result of subsequent commands
567will not actually affect @var{archive} until you next use @code{SAVE}.
568
569@item REPLACE @var{module}, @var{module}, @dots{} @var{module}
570In the current archive, replace each existing @var{module} (named in
571the @code{REPLACE} arguments) from files in the current working directory.
572To execute this command without errors, both the file, and the module in
573the current archive, must exist.
574
575Requires prior use of @code{OPEN} or @code{CREATE}.
576
577@item VERBOSE
578Toggle an internal flag governing the output from @code{DIRECTORY}.
579When the flag is on, @code{DIRECTORY} output matches output from
580@samp{ar -tv }@dots{}.
581
582@item SAVE
583Commit your changes to the current archive, and actually save it as a
584file with the name specified in the last @code{CREATE} or @code{OPEN}
585command.
586
587Requires prior use of @code{OPEN} or @code{CREATE}.
588
589@end table
590
591@iftex
592@node ld
593@chapter ld
594@cindex linker
595@kindex ld
596The @sc{gnu} linker @code{ld} is now described in a separate manual.
597@xref{Top,, Overview,, Using LD: the @sc{gnu} linker}.
598@end iftex
599
600@node nm
601@chapter nm
602@cindex symbols
603@kindex nm
604
605@smallexample
606nm [ -a | --debug-syms ] [ -g | --extern-only ]
607 [ -B ] [ -C | --demangle ] [ -D | --dynamic ]
608 [ -s | --print-armap ] [ -A | -o | --print-file-name ]
609 [ -n | -v | --numeric-sort ] [ -p | --no-sort ]
610 [ -r | --reverse-sort ] [ --size-sort ] [ -u | --undefined-only ]
611 [ -t @var{radix} | --radix=@var{radix} ] [ -P | --portability ]
612 [ --target=@var{bfdname} ] [ -f @var{format} | --format=@var{format} ]
613 [ --defined-only ] [-l | --line-numbers ]
614 [ --no-demangle ] [ -V | --version ] [ --help ] [ @var{objfile}@dots{} ]
615@end smallexample
616
617@sc{gnu} @code{nm} lists the symbols from object files @var{objfile}@dots{}.
618If no object files are listed as arguments, @code{nm} assumes
619@file{a.out}.
620
621For each symbol, @code{nm} shows:
622
623@itemize @bullet
624@item
625The symbol value, in the radix selected by options (see below), or
626hexadecimal by default.
627
628@item
629The symbol type. At least the following types are used; others are, as
630well, depending on the object file format. If lowercase, the symbol is
631local; if uppercase, the symbol is global (external).
632
633@c Some more detail on exactly what these symbol types are used for
634@c would be nice.
635@table @code
636@item A
637The symbol's value is absolute, and will not be changed by further
638linking.
639
640@item B
641The symbol is in the uninitialized data section (known as BSS).
642
643@item C
644The symbol is common. Common symbols are uninitialized data. When
645linking, multiple common symbols may appear with the same name. If the
646symbol is defined anywhere, the common symbols are treated as undefined
647references. For more details on common symbols, see the discussion of
648--warn-common in @ref{Options,,Linker options,ld.info,The GNU linker}.
649
650@item D
651The symbol is in the initialized data section.
652
653@item G
654The symbol is in an initialized data section for small objects. Some
655object file formats permit more efficient access to small data objects,
656such as a global int variable as opposed to a large global array.
657
658@item I
659The symbol is an indirect reference to another symbol. This is a GNU
660extension to the a.out object file format which is rarely used.
661
662@item N
663The symbol is a debugging symbol.
664
665@item R
666The symbol is in a read only data section.
667
668@item S
669The symbol is in an uninitialized data section for small objects.
670
671@item T
672The symbol is in the text (code) section.
673
674@item U
675The symbol is undefined.
676
677@item W
678The symbol is weak. When a weak defined symbol is linked with a normal
679defined symbol, the normal defined symbol is used with no error. When a
680weak undefined symbol is linked and the symbol is not defined, the value
681of the weak symbol becomes zero with no error.
682
683@item -
684The symbol is a stabs symbol in an a.out object file. In this case, the
685next values printed are the stabs other field, the stabs desc field, and
686the stab type. Stabs symbols are used to hold debugging information;
687for more information, see @ref{Top,Stabs,Stabs Overview,stabs.info, The
688``stabs'' debug format}.
689
690@item ?
691The symbol type is unknown, or object file format specific.
692@end table
693
694@item
695The symbol name.
696@end itemize
697
698The long and short forms of options, shown here as alternatives, are
699equivalent.
700
701@table @code
702@item -A
703@itemx -o
704@itemx --print-file-name
705@cindex input file name
706@cindex file name
707@cindex source file name
708Precede each symbol by the name of the input file (or archive element)
709in which it was found, rather than identifying the input file once only,
710before all of its symbols.
711
712@item -a
713@itemx --debug-syms
714@cindex debugging symbols
715Display all symbols, even debugger-only symbols; normally these are not
716listed.
717
718@item -B
719@cindex @code{nm} format
720@cindex @code{nm} compatibility
721The same as @samp{--format=bsd} (for compatibility with the MIPS @code{nm}).
722
723@item -C
724@itemx --demangle
725@cindex demangling in nm
726Decode (@dfn{demangle}) low-level symbol names into user-level names.
727Besides removing any initial underscore prepended by the system, this
728makes C++ function names readable. @xref{c++filt}, for more information
729on demangling.
730
731@item --no-demangle
732Do not demangle low-level symbol names. This is the default.
733
734@item -D
735@itemx --dynamic
736@cindex dynamic symbols
737Display the dynamic symbols rather than the normal symbols. This is
738only meaningful for dynamic objects, such as certain types of shared
739libraries.
740
741@item -f @var{format}
742@itemx --format=@var{format}
743@cindex @code{nm} format
744@cindex @code{nm} compatibility
745Use the output format @var{format}, which can be @code{bsd},
746@code{sysv}, or @code{posix}. The default is @code{bsd}.
747Only the first character of @var{format} is significant; it can be
748either upper or lower case.
749
750@item -g
751@itemx --extern-only
752@cindex external symbols
753Display only external symbols.
754
755@item -l
756@itemx --line-numbers
757@cindex symbol line numbers
758For each symbol, use debugging information to try to find a filename and
759line number. For a defined symbol, look for the line number of the
760address of the symbol. For an undefined symbol, look for the line
761number of a relocation entry which refers to the symbol. If line number
762information can be found, print it after the other symbol information.
763
764@item -n
765@itemx -v
766@itemx --numeric-sort
767Sort symbols numerically by their addresses, rather than alphabetically
768by their names.
769
770@item -p
771@itemx --no-sort
772@cindex sorting symbols
773Do not bother to sort the symbols in any order; print them in the order
774encountered.
775
776@item -P
777@itemx --portability
778Use the POSIX.2 standard output format instead of the default format.
779Equivalent to @samp{-f posix}.
780
781@item -s
782@itemx --print-armap
783@cindex symbol index, listing
784When listing symbols from archive members, include the index: a mapping
785(stored in the archive by @code{ar} or @code{ranlib}) of which modules
786contain definitions for which names.
787
788@item -r
789@itemx --reverse-sort
790Reverse the order of the sort (whether numeric or alphabetic); let the
791last come first.
792
793@item --size-sort
794Sort symbols by size. The size is computed as the difference between
795the value of the symbol and the value of the symbol with the next higher
796value. The size of the symbol is printed, rather than the value.
797
798@item -t @var{radix}
799@itemx --radix=@var{radix}
800Use @var{radix} as the radix for printing the symbol values. It must be
801@samp{d} for decimal, @samp{o} for octal, or @samp{x} for hexadecimal.
802
803@item --target=@var{bfdname}
804@cindex object code format
805Specify an object code format other than your system's default format.
806@xref{Target Selection}, for more information.
807
808@item -u
809@itemx --undefined-only
810@cindex external symbols
811@cindex undefined symbols
812Display only undefined symbols (those external to each object file).
813
814@item --defined-only
815@cindex external symbols
816@cindex undefined symbols
817Display only defined symbols for each object file.
818
819@item -V
820@itemx --version
821Show the version number of @code{nm} and exit.
822
823@item --help
824Show a summary of the options to @code{nm} and exit.
825@end table
826
827@node objcopy
828@chapter objcopy
829
830@smallexample
831objcopy [ -F @var{bfdname} | --target=@var{bfdname} ]
832 [ -I @var{bfdname} | --input-target=@var{bfdname} ]
833 [ -O @var{bfdname} | --output-target=@var{bfdname} ]
834 [ -S | --strip-all ] [ -g | --strip-debug ]
835 [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ]
836 [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ]
837 [ -L @var{symbolname} | --localize-symbol=@var{symbolname} ]
838 [ -W @var{symbolname} | --weaken-symbol=@var{symbolname} ]
839 [ -x | --discard-all ] [ -X | --discard-locals ]
840 [ -b @var{byte} | --byte=@var{byte} ]
841 [ -i @var{interleave} | --interleave=@var{interleave} ]
f91ea849 842 [ -j @var{sectionname} | --only-section=@var{sectionname} ]
252b5132
RH
843 [ -R @var{sectionname} | --remove-section=@var{sectionname} ]
844 [ -p | --preserve-dates ] [ --debugging ]
845 [ --gap-fill=@var{val} ] [ --pad-to=@var{address} ]
846 [ --set-start=@var{val} ] [ --adjust-start=@var{incr} ]
847 [ --change-addresses=@var{incr} ]
848 [ --change-section-address=@var{section}@{=,+,-@}@var{val} ]
849 [ --change-section-lma=@var{section}@{=,+,-@}@var{val} ]
850 [ --change-section-vma=@var{section}@{=,+,-@}@var{val} ]
851 [ --change-warnings ] [ --no-change-warnings ]
852 [ --set-section-flags=@var{section}=@var{flags} ]
853 [ --add-section=@var{sectionname}=@var{filename} ]
854 [ --change-leading-char ] [ --remove-leading-char ]
855 [ --weaken ]
856 [ -v | --verbose ] [ -V | --version ] [ --help ]
857 @var{infile} [@var{outfile}]
858@end smallexample
859
860The @sc{gnu} @code{objcopy} utility copies the contents of an object
861file to another. @code{objcopy} uses the @sc{gnu} @sc{bfd} Library to
862read and write the object files. It can write the destination object
863file in a format different from that of the source object file. The
864exact behavior of @code{objcopy} is controlled by command-line options.
865
866@code{objcopy} creates temporary files to do its translations and
867deletes them afterward. @code{objcopy} uses @sc{bfd} to do all its
868translation work; it has access to all the formats described in @sc{bfd}
869and thus is able to recognize most formats without being told
870explicitly. @xref{BFD,,BFD,ld.info,Using LD}.
871
872@code{objcopy} can be used to generate S-records by using an output
873target of @samp{srec} (e.g., use @samp{-O srec}).
874
875@code{objcopy} can be used to generate a raw binary file by using an
876output target of @samp{binary} (e.g., use @samp{-O binary}). When
877@code{objcopy} generates a raw binary file, it will essentially produce
878a memory dump of the contents of the input object file. All symbols and
879relocation information will be discarded. The memory dump will start at
880the load address of the lowest section copied into the output file.
881
882When generating an S-record or a raw binary file, it may be helpful to
883use @samp{-S} to remove sections containing debugging information. In
884some cases @samp{-R} will be useful to remove sections which contain
885information which is not needed by the binary file.
886
887@table @code
888@item @var{infile}
889@itemx @var{outfile}
890The source and output files, respectively.
891If you do not specify @var{outfile}, @code{objcopy} creates a
892temporary file and destructively renames the result with
893the name of @var{infile}.
894
895@item -I @var{bfdname}
896@itemx --input-target=@var{bfdname}
897Consider the source file's object format to be @var{bfdname}, rather than
898attempting to deduce it. @xref{Target Selection}, for more information.
899
900@item -O @var{bfdname}
901@itemx --output-target=@var{bfdname}
902Write the output file using the object format @var{bfdname}.
903@xref{Target Selection}, for more information.
904
905@item -F @var{bfdname}
906@itemx --target=@var{bfdname}
907Use @var{bfdname} as the object format for both the input and the output
908file; i.e., simply transfer data from source to destination with no
909translation. @xref{Target Selection}, for more information.
910
f91ea849
ILT
911@item -j @var{sectionname}
912@itemx --only-section=@var{sectionname}
913Copy only the named section from the input file to the output file.
914This option may be given more than once. Note that using this option
915inappropriately may make the output file unusable.
916
252b5132
RH
917@item -R @var{sectionname}
918@itemx --remove-section=@var{sectionname}
919Remove any section named @var{sectionname} from the output file. This
920option may be given more than once. Note that using this option
921inappropriately may make the output file unusable.
922
923@item -S
924@itemx --strip-all
925Do not copy relocation and symbol information from the source file.
926
927@item -g
928@itemx --strip-debug
929Do not copy debugging symbols from the source file.
930
931@item --strip-unneeded
932Strip all symbols that are not needed for relocation processing.
933
934@item -K @var{symbolname}
935@itemx --keep-symbol=@var{symbolname}
936Copy only symbol @var{symbolname} from the source file. This option may
937be given more than once.
938
939@item -N @var{symbolname}
940@itemx --strip-symbol=@var{symbolname}
941Do not copy symbol @var{symbolname} from the source file. This option
942may be given more than once.
943
944@item -L @var{symbolname}
945@itemx --localize-symbol=@var{symbolname}
946Make symbol @var{symbolname} local to the file, so that it is not
947visible externally. This option may be given more than once.
948
949@item -W @var{symbolname}
950@itemx --weaken-symbol=@var{symbolname}
951Make symbol @var{symbolname} weak. This option may be given more than once.
952
953@item -x
954@itemx --discard-all
955Do not copy non-global symbols from the source file.
956@c FIXME any reason to prefer "non-global" to "local" here?
957
958@item -X
959@itemx --discard-locals
960Do not copy compiler-generated local symbols.
961(These usually start with @samp{L} or @samp{.}.)
962
963@item -b @var{byte}
964@itemx --byte=@var{byte}
965Keep only every @var{byte}th byte of the input file (header data is not
966affected). @var{byte} can be in the range from 0 to @var{interleave}-1,
967where @var{interleave} is given by the @samp{-i} or @samp{--interleave}
968option, or the default of 4. This option is useful for creating files
969to program @sc{rom}. It is typically used with an @code{srec} output
970target.
971
972@item -i @var{interleave}
973@itemx --interleave=@var{interleave}
974Only copy one out of every @var{interleave} bytes. Select which byte to
975copy with the @var{-b} or @samp{--byte} option. The default is 4.
976@code{objcopy} ignores this option if you do not specify either @samp{-b} or
977@samp{--byte}.
978
979@item -p
980@itemx --preserve-dates
981Set the access and modification dates of the output file to be the same
982as those of the input file.
983
984@item --debugging
985Convert debugging information, if possible. This is not the default
986because only certain debugging formats are supported, and the
987conversion process can be time consuming.
988
989@item --gap-fill @var{val}
990Fill gaps between sections with @var{val}. This operation applies to
991the @emph{load address} (LMA) of the sections. It is done by increasing
992the size of the section with the lower address, and filling in the extra
993space created with @var{val}.
994
995@item --pad-to @var{address}
996Pad the output file up to the load address @var{address}. This is
997done by increasing the size of the last section. The extra space is
998filled in with the value specified by @samp{--gap-fill} (default zero).
999
1000@item --set-start @var{val}
1001Set the address of the new file to @var{val}. Not all object file
1002formats support setting the start address.
1003
1004@item --change-start @var{incr}
1005@itemx --adjust-start @var{incr}
1006@cindex changing start address
1007Change the start address by adding @var{incr}. Not all object file
1008formats support setting the start address.
1009
1010@item --change-addresses @var{incr}
1011@itemx --adjust-vma @var{incr}
1012@cindex changing object addresses
1013Change the VMA and LMA addresses of all sections, as well as the start
1014address, by adding @var{incr}. Some object file formats do not permit
1015section addresses to be changed arbitrarily. Note that this does not
1016relocate the sections; if the program expects sections to be loaded at a
1017certain address, and this option is used to change the sections such
1018that they are loaded at a different address, the program may fail.
1019
1020@item --change-section-address @var{section}@{=,+,-@}@var{val}
1021@itemx --adjust-section-vma @var{section}@{=,+,-@}@var{val}
1022@cindex changing section address
1023Set or change both the VMA address and the LMA address of the named
1024@var{section}. If @samp{=} is used, the section address is set to
1025@var{val}. Otherwise, @var{val} is added to or subtracted from the
1026section address. See the comments under @samp{--change-addresses},
1027above. If @var{section} does not exist in the input file, a warning will
1028be issued, unless @samp{--no-change-warnings} is used.
1029
1030@item --change-section-lma @var{section}@{=,+,-@}@var{val}
1031@cindex changing section LMA
1032Set or change the LMA address of the named @var{section}. The LMA
1033address is the address where the section will be loaded into memory at
1034program load time. Normally this is the same as the VMA address, which
1035is the address of the section at program run time, but on some systems,
1036especially those where a program is held in ROM, the two can be
1037different. If @samp{=} is used, the section address is set to
1038@var{val}. Otherwise, @var{val} is added to or subtracted from the
1039section address. See the comments under @samp{--change-addresses},
1040above. If @var{section} does not exist in the input file, a warning
1041will be issued, unless @samp{--no-change-warnings} is used.
1042
1043@item --change-section-vma @var{section}@{=,+,-@}@var{val}
1044@cindex changing section VMA
1045Set or change the VMA address of the named @var{section}. The VMA
1046address is the address where the section will be located once the
1047program has started executing. Normally this is the same as the LMA
1048address, which is the address where the section will be loaded into
1049memory, but on some systems, especially those where a program is held in
1050ROM, the two can be different. If @samp{=} is used, the section address
1051is set to @var{val}. Otherwise, @var{val} is added to or subtracted
1052from the section address. See the comments under
1053@samp{--change-addresses}, above. If @var{section} does not exist in
1054the input file, a warning will be issued, unless
1055@samp{--no-change-warnings} is used.
1056
1057@item --change-warnings
1058@itemx --adjust-warnings
1059If @samp{--change-section-address} or @samp{--change-section-lma} or
1060@samp{--change-section-vma} is used, and the named section does not
1061exist, issue a warning. This is the default.
1062
1063@item --no-change-warnings
1064@itemx --no-adjust-warnings
1065Do not issue a warning if @samp{--change-section-address} or
1066@samp{--adjust-section-lma} or @samp{--adjust-section-vma} is used, even
1067if the named section does not exist.
1068
1069@item --set-section-flags @var{section}=@var{flags}
1070Set the flags for the named section. The @var{flags} argument is a
1071comma separated string of flag names. The recognized names are
1072@samp{alloc}, @samp{contents}, @samp{load}, @samp{readonly},
1073@samp{code}, @samp{data}, and @samp{rom}. You can set the
1074@samp{contents} flag for a section which does not have contents, but it
1075is not meaningful to clear the @samp{contents} flag of a section which
1076does have contents--just remove the section instead. Not all flags are
1077meaningful for all object file formats.
1078
1079@item --add-section @var{sectionname}=@var{filename}
1080Add a new section named @var{sectionname} while copying the file. The
1081contents of the new section are taken from the file @var{filename}. The
1082size of the section will be the size of the file. This option only
1083works on file formats which can support sections with arbitrary names.
1084
1085@item --change-leading-char
1086Some object file formats use special characters at the start of
1087symbols. The most common such character is underscore, which compilers
1088often add before every symbol. This option tells @code{objcopy} to
1089change the leading character of every symbol when it converts between
1090object file formats. If the object file formats use the same leading
1091character, this option has no effect. Otherwise, it will add a
1092character, or remove a character, or change a character, as
1093appropriate.
1094
1095@item --remove-leading-char
1096If the first character of a global symbol is a special symbol leading
1097character used by the object file format, remove the character. The
1098most common symbol leading character is underscore. This option will
1099remove a leading underscore from all global symbols. This can be useful
1100if you want to link together objects of different file formats with
1101different conventions for symbol names. This is different from
1102@code{--change-leading-char} because it always changes the symbol name
1103when appropriate, regardless of the object file format of the output
1104file.
1105
1106@item --weaken
1107Change all global symbols in the file to be weak. This can be useful
1108when building an object which will be linked against other objects using
1109the @code{-R} option to the linker. This option is only effective when
1110using an object file format which supports weak symbols.
1111
1112@item -V
1113@itemx --version
1114Show the version number of @code{objcopy}.
1115
1116@item -v
1117@itemx --verbose
1118Verbose output: list all object files modified. In the case of
1119archives, @samp{objcopy -V} lists all members of the archive.
1120
1121@item --help
1122Show a summary of the options to @code{objcopy}.
1123@end table
1124
1125@node objdump
1126@chapter objdump
1127
1128@cindex object file information
1129@kindex objdump
1130
1131@smallexample
1132objdump [ -a | --archive-headers ]
1133 [ -b @var{bfdname} | --target=@var{bfdname} ] [ --debugging ]
1134 [ -C | --demangle ] [ -d | --disassemble ]
1135 [ -D | --disassemble-all ] [ --disassemble-zeroes ]
1136 [ -EB | -EL | --endian=@{big | little @} ]
1137 [ -f | --file-headers ]
1138 [ -h | --section-headers | --headers ] [ -i | --info ]
1139 [ -j @var{section} | --section=@var{section} ]
1140 [ -l | --line-numbers ] [ -S | --source ]
1141 [ -m @var{machine} | --architecture=@var{machine} ]
dd92f639 1142 [ -M @var{options} | --disassembler-options=@var{options}]
252b5132
RH
1143 [ -p | --private-headers ]
1144 [ -r | --reloc ] [ -R | --dynamic-reloc ]
1145 [ -s | --full-contents ] [ --stabs ]
1146 [ -t | --syms ] [ -T | --dynamic-syms ] [ -x | --all-headers ]
1147 [ -w | --wide ] [ --start-address=@var{address} ]
1148 [ --stop-address=@var{address} ]
1149 [ --prefix-addresses] [ --[no-]show-raw-insn ]
1150 [ --adjust-vma=@var{offset} ]
1151 [ --version ] [ --help ]
1152 @var{objfile}@dots{}
1153@end smallexample
1154
1155@code{objdump} displays information about one or more object files.
1156The options control what particular information to display. This
1157information is mostly useful to programmers who are working on the
1158compilation tools, as opposed to programmers who just want their
1159program to compile and work.
1160
1161@var{objfile}@dots{} are the object files to be examined. When you
1162specify archives, @code{objdump} shows information on each of the member
1163object files.
1164
1165The long and short forms of options, shown here as alternatives, are
1166equivalent. At least one option besides @samp{-l} must be given.
1167
1168@table @code
1169@item -a
1170@itemx --archive-header
1171@cindex archive headers
1172If any of the @var{objfile} files are archives, display the archive
1173header information (in a format similar to @samp{ls -l}). Besides the
1174information you could list with @samp{ar tv}, @samp{objdump -a} shows
1175the object file format of each archive member.
1176
1177@item --adjust-vma=@var{offset}
1178@cindex section addresses in objdump
1179@cindex VMA in objdump
1180When dumping information, first add @var{offset} to all the section
1181addresses. This is useful if the section addresses do not correspond to
1182the symbol table, which can happen when putting sections at particular
1183addresses when using a format which can not represent section addresses,
1184such as a.out.
1185
1186@item -b @var{bfdname}
1187@itemx --target=@var{bfdname}
1188@cindex object code format
1189Specify that the object-code format for the object files is
1190@var{bfdname}. This option may not be necessary; @var{objdump} can
1191automatically recognize many formats.
1192
1193For example,
1194@example
1195objdump -b oasys -m vax -h fu.o
1196@end example
1197@noindent
1198displays summary information from the section headers (@samp{-h}) of
1199@file{fu.o}, which is explicitly identified (@samp{-m}) as a VAX object
1200file in the format produced by Oasys compilers. You can list the
1201formats available with the @samp{-i} option.
1202@xref{Target Selection}, for more information.
1203
1204@item -C
1205@itemx --demangle
1206@cindex demangling in objdump
1207Decode (@dfn{demangle}) low-level symbol names into user-level names.
1208Besides removing any initial underscore prepended by the system, this
1209makes C++ function names readable. @xref{c++filt}, for more information
1210on demangling.
1211
1212@item --debugging
1213Display debugging information. This attempts to parse debugging
1214information stored in the file and print it out using a C like syntax.
1215Only certain types of debugging information have been implemented.
1216
1217@item -d
1218@itemx --disassemble
1219@cindex disassembling object code
1220@cindex machine instructions
1221Display the assembler mnemonics for the machine instructions from
1222@var{objfile}. This option only disassembles those sections which are
1223expected to contain instructions.
1224
1225@item -D
1226@itemx --disassemble-all
1227Like @samp{-d}, but disassemble the contents of all sections, not just
1228those expected to contain instructions.
1229
1230@item --prefix-addresses
1231When disassembling, print the complete address on each line. This is
1232the older disassembly format.
1233
1234@item --disassemble-zeroes
1235Normally the disassembly output will skip blocks of zeroes. This
1236option directs the disassembler to disassemble those blocks, just like
1237any other data.
1238
1239@item -EB
1240@itemx -EL
1241@itemx --endian=@{big|little@}
1242@cindex endianness
1243@cindex disassembly endianness
1244Specify the endianness of the object files. This only affects
1245disassembly. This can be useful when disassembling a file format which
1246does not describe endianness information, such as S-records.
1247
1248@item -f
1249@itemx --file-header
1250@cindex object file header
1251Display summary information from the overall header of
1252each of the @var{objfile} files.
1253
1254@item -h
1255@itemx --section-header
1256@itemx --header
1257@cindex section headers
1258Display summary information from the section headers of the
1259object file.
1260
1261File segments may be relocated to nonstandard addresses, for example by
1262using the @samp{-Ttext}, @samp{-Tdata}, or @samp{-Tbss} options to
1263@code{ld}. However, some object file formats, such as a.out, do not
1264store the starting address of the file segments. In those situations,
1265although @code{ld} relocates the sections correctly, using @samp{objdump
1266-h} to list the file section headers cannot show the correct addresses.
1267Instead, it shows the usual addresses, which are implicit for the
1268target.
1269
1270@item --help
1271Print a summary of the options to @code{objdump} and exit.
1272
1273@item -i
1274@itemx --info
1275@cindex architectures available
1276@cindex object formats available
1277Display a list showing all architectures and object formats available
1278for specification with @samp{-b} or @samp{-m}.
1279
1280@item -j @var{name}
1281@itemx --section=@var{name}
1282@cindex section information
1283Display information only for section @var{name}.
1284
1285@item -l
1286@itemx --line-numbers
1287@cindex source filenames for object files
1288Label the display (using debugging information) with the filename and
1289source line numbers corresponding to the object code or relocs shown.
1290Only useful with @samp{-d}, @samp{-D}, or @samp{-r}.
1291
1292@item -m @var{machine}
1293@itemx --architecture=@var{machine}
1294@cindex architecture
1295@cindex disassembly architecture
1296Specify the architecture to use when disassembling object files. This
1297can be useful when disassembling object files which do not describe
1298architecture information, such as S-records. You can list the available
1299architectures with the @samp{-i} option.
1300
dd92f639
NC
1301@item -M @var{options}
1302@itemx --disassembler-options=@var{options}
1303Pass target specific information to the disassembler. Only supported on
1304some targets.
1305
1306If the target is an ARM architecture then this switch can be used to
1307select which register name set is used during disassembler. Specifying
1308@samp{--disassembler-options=reg-name-std} (the default) will select the
1309register names as used in ARM's instruction set documentation, but with
1310register 13 called 'sp', register 14 called 'lr' and register 15 called
1311'pc'. Specifying @samp{--disassembler-options=reg-names-apcs} will
1312select the name set used by the ARM Procedure Call Standard, whilst
1313specifying @samp{--disassembler-options=reg-names-raw} will just use
1314@samp{r} followed by the register number.
1315
252b5132
RH
1316@item -p
1317@itemx --private-headers
1318Print information that is specific to the object file format. The exact
1319information printed depends upon the object file format. For some
1320object file formats, no additional information is printed.
1321
1322@item -r
1323@itemx --reloc
1324@cindex relocation entries, in object file
1325Print the relocation entries of the file. If used with @samp{-d} or
1326@samp{-D}, the relocations are printed interspersed with the
1327disassembly.
1328
1329@item -R
1330@itemx --dynamic-reloc
1331@cindex dynamic relocation entries, in object file
1332Print the dynamic relocation entries of the file. This is only
1333meaningful for dynamic objects, such as certain types of shared
1334libraries.
1335
1336@item -s
1337@itemx --full-contents
1338@cindex sections, full contents
1339@cindex object file sections
1340Display the full contents of any sections requested.
1341
1342@item -S
1343@itemx --source
1344@cindex source disassembly
1345@cindex disassembly, with source
1346Display source code intermixed with disassembly, if possible. Implies
1347@samp{-d}.
1348
1349@item --show-raw-insn
1350When disassembling instructions, print the instruction in hex as well as
1351in symbolic form. This is the default except when
1352@code{--prefix-addresses} is used.
1353
1354@item --no-show-raw-insn
1355When disassembling instructions, do not print the instruction bytes.
1356This is the default when @code{--prefix-addresses} is used.
1357
1358@item --stabs
1359@cindex stab
1360@cindex .stab
1361@cindex debug symbols
1362@cindex ELF object file format
1363Display the full contents of any sections requested. Display the
1364contents of the .stab and .stab.index and .stab.excl sections from an
1365ELF file. This is only useful on systems (such as Solaris 2.0) in which
1366@code{.stab} debugging symbol-table entries are carried in an ELF
1367section. In most other file formats, debugging symbol-table entries are
1368interleaved with linkage symbols, and are visible in the @samp{--syms}
1369output. For more information on stabs symbols, see @ref{Top,Stabs,Stabs
1370Overview,stabs.info, The ``stabs'' debug format}.
1371
1372@item --start-address=@var{address}
1373@cindex start-address
1374Start displaying data at the specified address. This affects the output
1375of the @code{-d}, @code{-r} and @code{-s} options.
1376
1377@item --stop-address=@var{address}
1378@cindex stop-address
1379Stop displaying data at the specified address. This affects the output
1380of the @code{-d}, @code{-r} and @code{-s} options.
1381
1382@item -t
1383@itemx --syms
1384@cindex symbol table entries, printing
1385Print the symbol table entries of the file.
1386This is similar to the information provided by the @samp{nm} program.
1387
1388@item -T
1389@itemx --dynamic-syms
1390@cindex dynamic symbol table entries, printing
1391Print the dynamic symbol table entries of the file. This is only
1392meaningful for dynamic objects, such as certain types of shared
1393libraries. This is similar to the information provided by the @samp{nm}
1394program when given the @samp{-D} (@samp{--dynamic}) option.
1395
1396@item --version
1397Print the version number of @code{objdump} and exit.
1398
1399@item -x
1400@itemx --all-header
1401@cindex all header information, object file
1402@cindex header information, all
1403Display all available header information, including the symbol table and
1404relocation entries. Using @samp{-x} is equivalent to specifying all of
1405@samp{-a -f -h -r -t}.
1406
1407@item -w
1408@itemx --wide
1409@cindex wide output, printing
1410Format some lines for output devices that have more than 80 columns.
1411@end table
1412
1413@node ranlib
1414@chapter ranlib
1415
1416@kindex ranlib
1417@cindex archive contents
1418@cindex symbol index
1419
1420@smallexample
1421ranlib [-vV] @var{archive}
1422@end smallexample
1423
1424@code{ranlib} generates an index to the contents of an archive and
1425stores it in the archive. The index lists each symbol defined by a
1426member of an archive that is a relocatable object file.
1427
1428You may use @samp{nm -s} or @samp{nm --print-armap} to list this index.
1429
1430An archive with such an index speeds up linking to the library and
1431allows routines in the library to call each other without regard to
1432their placement in the archive.
1433
1434The @sc{gnu} @code{ranlib} program is another form of @sc{gnu} @code{ar}; running
1435@code{ranlib} is completely equivalent to executing @samp{ar -s}.
1436@xref{ar}.
1437
1438@table @code
1439@item -v
1440@itemx -V
1441Show the version number of @code{ranlib}.
1442@end table
1443
1444@node size
1445@chapter size
1446
1447@kindex size
1448@cindex section sizes
1449
1450@smallexample
1451size [ -A | -B | --format=@var{compatibility} ]
1452 [ --help ] [ -d | -o | -x | --radix=@var{number} ]
1453 [ --target=@var{bfdname} ] [ -V | --version ]
1454 [ @var{objfile}@dots{} ]
1455@end smallexample
1456
1457The @sc{gnu} @code{size} utility lists the section sizes---and the total
1458size---for each of the object or archive files @var{objfile} in its
1459argument list. By default, one line of output is generated for each
1460object file or each module in an archive.
1461
1462@var{objfile}@dots{} are the object files to be examined.
1463If none are specified, the file @code{a.out} will be used.
1464
1465The command line options have the following meanings:
1466
1467@table @code
1468@item -A
1469@itemx -B
1470@itemx --format=@var{compatibility}
1471@cindex @code{size} display format
1472Using one of these options, you can choose whether the output from @sc{gnu}
1473@code{size} resembles output from System V @code{size} (using @samp{-A},
1474or @samp{--format=sysv}), or Berkeley @code{size} (using @samp{-B}, or
1475@samp{--format=berkeley}). The default is the one-line format similar to
1476Berkeley's.
1477@c Bonus for doc-source readers: you can also say --format=strange (or
1478@c anything else that starts with 's') for sysv, and --format=boring (or
1479@c anything else that starts with 'b') for Berkeley.
1480
1481Here is an example of the Berkeley (default) format of output from
1482@code{size}:
1483@smallexample
1484size --format=Berkeley ranlib size
1485text data bss dec hex filename
1486294880 81920 11592 388392 5ed28 ranlib
1487294880 81920 11888 388688 5ee50 size
1488@end smallexample
1489
1490@noindent
1491This is the same data, but displayed closer to System V conventions:
1492
1493@smallexample
1494size --format=SysV ranlib size
1495ranlib :
1496section size addr
1497.text 294880 8192
1498.data 81920 303104
1499.bss 11592 385024
1500Total 388392
1501
1502
1503size :
1504section size addr
1505.text 294880 8192
1506.data 81920 303104
1507.bss 11888 385024
1508Total 388688
1509@end smallexample
1510
1511@item --help
1512Show a summary of acceptable arguments and options.
1513
1514@item -d
1515@itemx -o
1516@itemx -x
1517@itemx --radix=@var{number}
1518@cindex @code{size} number format
1519@cindex radix for section sizes
1520Using one of these options, you can control whether the size of each
1521section is given in decimal (@samp{-d}, or @samp{--radix=10}); octal
1522(@samp{-o}, or @samp{--radix=8}); or hexadecimal (@samp{-x}, or
1523@samp{--radix=16}). In @samp{--radix=@var{number}}, only the three
1524values (8, 10, 16) are supported. The total size is always given in two
1525radices; decimal and hexadecimal for @samp{-d} or @samp{-x} output, or
1526octal and hexadecimal if you're using @samp{-o}.
1527
1528@item --target=@var{bfdname}
1529@cindex object code format
1530Specify that the object-code format for @var{objfile} is
1531@var{bfdname}. This option may not be necessary; @code{size} can
1532automatically recognize many formats.
1533@xref{Target Selection}, for more information.
1534
1535@item -V
1536@itemx --version
1537Display the version number of @code{size}.
1538@end table
1539
1540@node strings
1541@chapter strings
1542@kindex strings
1543@cindex listings strings
1544@cindex printing strings
1545@cindex strings, printing
1546
1547@smallexample
1548strings [-afov] [-@var{min-len}] [-n @var{min-len}] [-t @var{radix}] [-]
1549 [--all] [--print-file-name] [--bytes=@var{min-len}]
1550 [--radix=@var{radix}] [--target=@var{bfdname}]
1551 [--help] [--version] @var{file}@dots{}
1552@end smallexample
1553
1554For each @var{file} given, @sc{gnu} @code{strings} prints the printable
1555character sequences that are at least 4 characters long (or the number
1556given with the options below) and are followed by an unprintable
1557character. By default, it only prints the strings from the initialized
1558and loaded sections of object files; for other types of files, it prints
1559the strings from the whole file.
1560
1561@code{strings} is mainly useful for determining the contents of non-text
1562files.
1563
1564@table @code
1565@item -a
1566@itemx --all
1567@itemx -
1568Do not scan only the initialized and loaded sections of object files;
1569scan the whole files.
1570
1571@item -f
1572@itemx --print-file-name
1573Print the name of the file before each string.
1574
1575@item --help
1576Print a summary of the program usage on the standard output and exit.
1577
1578@item -@var{min-len}
1579@itemx -n @var{min-len}
1580@itemx --bytes=@var{min-len}
1581Print sequences of characters that are at least @var{min-len} characters
1582long, instead of the default 4.
1583
1584@item -o
1585Like @samp{-t o}. Some other versions of @code{strings} have @samp{-o}
1586act like @samp{-t d} instead. Since we can not be compatible with both
1587ways, we simply chose one.
1588
1589@item -t @var{radix}
1590@itemx --radix=@var{radix}
1591Print the offset within the file before each string. The single
1592character argument specifies the radix of the offset---@samp{o} for
1593octal, @samp{x} for hexadecimal, or @samp{d} for decimal.
1594
1595@item --target=@var{bfdname}
1596@cindex object code format
1597Specify an object code format other than your system's default format.
1598@xref{Target Selection}, for more information.
1599
1600@item -v
1601@itemx --version
1602Print the program version number on the standard output and exit.
1603@end table
1604
1605@node strip
1606@chapter strip
1607
1608@kindex strip
1609@cindex removing symbols
1610@cindex discarding symbols
1611@cindex symbols, discarding
1612
1613@smallexample
1614strip [ -F @var{bfdname} | --target=@var{bfdname} ]
1615 [ -I @var{bfdname} | --input-target=@var{bfdname} ]
1616 [ -O @var{bfdname} | --output-target=@var{bfdname} ]
1617 [ -s | --strip-all ] [ -S | -g | --strip-debug ]
1618 [ -K @var{symbolname} | --keep-symbol=@var{symbolname} ]
1619 [ -N @var{symbolname} | --strip-symbol=@var{symbolname} ]
1620 [ -x | --discard-all ] [ -X | --discard-locals ]
1621 [ -R @var{sectionname} | --remove-section=@var{sectionname} ]
1622 [ -o @var{file} ] [ -p | --preserve-dates ]
1623 [ -v | --verbose ] [ -V | --version ] [ --help ]
1624 @var{objfile}@dots{}
1625@end smallexample
1626
1627@sc{gnu} @code{strip} discards all symbols from object files
1628@var{objfile}. The list of object files may include archives.
1629At least one object file must be given.
1630
1631@code{strip} modifies the files named in its argument,
1632rather than writing modified copies under different names.
1633
1634@table @code
1635@item -F @var{bfdname}
1636@itemx --target=@var{bfdname}
1637Treat the original @var{objfile} as a file with the object
1638code format @var{bfdname}, and rewrite it in the same format.
1639@xref{Target Selection}, for more information.
1640
1641@item --help
1642Show a summary of the options to @code{strip} and exit.
1643
1644@item -I @var{bfdname}
1645@itemx --input-target=@var{bfdname}
1646Treat the original @var{objfile} as a file with the object
1647code format @var{bfdname}.
1648@xref{Target Selection}, for more information.
1649
1650@item -O @var{bfdname}
1651@itemx --output-target=@var{bfdname}
1652Replace @var{objfile} with a file in the output format @var{bfdname}.
1653@xref{Target Selection}, for more information.
1654
1655@item -R @var{sectionname}
1656@itemx --remove-section=@var{sectionname}
1657Remove any section named @var{sectionname} from the output file. This
1658option may be given more than once. Note that using this option
1659inappropriately may make the output file unusable.
1660
1661@item -s
1662@itemx --strip-all
1663Remove all symbols.
1664
1665@item -g
1666@itemx -S
1667@itemx --strip-debug
1668Remove debugging symbols only.
1669
1670@item --strip-unneeded
1671Remove all symbols that are not needed for relocation processing.
1672
1673@item -K @var{symbolname}
1674@itemx --keep-symbol=@var{symbolname}
1675Keep only symbol @var{symbolname} from the source file. This option may
1676be given more than once.
1677
1678@item -N @var{symbolname}
1679@itemx --strip-symbol=@var{symbolname}
1680Remove symbol @var{symbolname} from the source file. This option may be
1681given more than once, and may be combined with strip options other than
1682@code{-K}.
1683
1684@item -o @var{file}
1685Put the stripped output in @var{file}, rather than replacing the
1686existing file. When this argument is used, only one @var{objfile}
1687argument may be specified.
1688
1689@item -p
1690@itemx --preserve-dates
1691Preserve the access and modification dates of the file.
1692
1693@item -x
1694@itemx --discard-all
1695Remove non-global symbols.
1696
1697@item -X
1698@itemx --discard-locals
1699Remove compiler-generated local symbols.
1700(These usually start with @samp{L} or @samp{.}.)
1701
1702@item -V
1703@itemx --version
1704Show the version number for @code{strip}.
1705
1706@item -v
1707@itemx --verbose
1708Verbose output: list all object files modified. In the case of
1709archives, @samp{strip -v} lists all members of the archive.
1710@end table
1711
9d51cc66 1712@node c++filt, addr2line, strip, Top
252b5132
RH
1713@chapter c++filt
1714
1715@kindex c++filt
1716@cindex demangling C++ symbols
1717
1718@smallexample
1719c++filt [ -_ | --strip-underscores ]
1720 [ -j | --java ]
1721 [ -n | --no-strip-underscores ]
1722 [ -s @var{format} | --format=@var{format} ]
1723 [ --help ] [ --version ] [ @var{symbol}@dots{} ]
1724@end smallexample
1725
9d51cc66 1726@kindex cxxfilt
252b5132
RH
1727The C++ and Java languages provides function overloading, which means
1728that you can write many functions with the same name (providing each
1729takes parameters of different types). All C++ and Java function names
1730are encoded into a low-level assembly label (this process is known as
9d51cc66
ILT
1731@dfn{mangling}). The @code{c++filt}
1732@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
1733MS-DOS this program is named @code{cxxfilt}.}
1734program does the inverse mapping: it decodes (@dfn{demangles}) low-level
1735names into user-level names so that the linker can keep these overloaded
1736functions from clashing.
252b5132
RH
1737
1738Every alphanumeric word (consisting of letters, digits, underscores,
1739dollars, or periods) seen in the input is a potential label. If the
1740label decodes into a C++ name, the C++ name replaces the low-level
1741name in the output.
1742
1743You can use @code{c++filt} to decipher individual symbols:
1744
1745@example
1746c++filt @var{symbol}
1747@end example
1748
1749If no @var{symbol} arguments are given, @code{c++filt} reads symbol
1750names from the standard input and writes the demangled names to the
1751standard output. All results are printed on the standard output.
1752
1753@table @code
1754@item -_
1755@itemx --strip-underscores
1756On some systems, both the C and C++ compilers put an underscore in front
1757of every name. For example, the C name @code{foo} gets the low-level
1758name @code{_foo}. This option removes the initial underscore. Whether
1759@code{c++filt} removes the underscore by default is target dependent.
1760
1761@item -j
1762@itemx --java
1763Prints demangled names using Java syntax. The default is to use C++
1764syntax.
1765
1766@item -n
1767@itemx --no-strip-underscores
1768Do not remove the initial underscore.
1769
1770@item -s @var{format}
1771@itemx --format=@var{format}
1772@sc{gnu} @code{nm} can decode three different methods of mangling, used by
1773different C++ compilers. The argument to this option selects which
1774method it uses:
1775
1776@table @code
1777@item gnu
1778the one used by the @sc{gnu} compiler (the default method)
1779@item lucid
1780the one used by the Lucid compiler
1781@item arm
1782the one specified by the C++ Annotated Reference Manual
1783@item hp
1784the one used by the HP compiler
1785@item edg
1786the one used by the EDG compiler
1787@end table
1788
1789@item --help
1790Print a summary of the options to @code{c++filt} and exit.
1791
1792@item --version
1793Print the version number of @code{c++filt} and exit.
1794@end table
1795
1796@quotation
1797@emph{Warning:} @code{c++filt} is a new utility, and the details of its
1798user interface are subject to change in future releases. In particular,
1799a command-line option may be required in the the future to decode a name
1800passed as an argument on the command line; in other words,
1801
1802@example
1803c++filt @var{symbol}
1804@end example
1805
1806@noindent
1807may in a future release become
1808
1809@example
1810c++filt @var{option} @var{symbol}
1811@end example
1812@end quotation
1813
1814@node addr2line
1815@chapter addr2line
1816
1817@kindex addr2line
1818@cindex address to file name and line number
1819
1820@smallexample
1821addr2line [ -b @var{bfdname} | --target=@var{bfdname} ]
1822 [ -C | --demangle ]
1823 [ -e @var{filename} | --exe=@var{filename} ]
1824 [ -f | --functions ] [ -s | --basename ]
1825 [ -H | --help ] [ -V | --version ]
1826 [ addr addr ... ]
1827@end smallexample
1828
1829@code{addr2line} translates program addresses into file names and line
1830numbers. Given an address and an executable, it uses the debugging
1831information in the executable to figure out which file name and line
1832number are associated with a given address.
1833
1834The executable to use is specified with the @code{-e} option. The
1835default is @file{a.out}.
1836
1837@code{addr2line} has two modes of operation.
1838
1839In the first, hexadecimal addresses are specified on the command line,
1840and @code{addr2line} displays the file name and line number for each
1841address.
1842
1843In the second, @code{addr2line} reads hexadecimal addresses from
1844standard input, and prints the file name and line number for each
1845address on standard output. In this mode, @code{addr2line} may be used
1846in a pipe to convert dynamically chosen addresses.
1847
1848The format of the output is @samp{FILENAME:LINENO}. The file name and
1849line number for each address is printed on a separate line. If the
1850@code{-f} option is used, then each @samp{FILENAME:LINENO} line is
1851preceded by a @samp{FUNCTIONNAME} line which is the name of the function
1852containing the address.
1853
1854If the file name or function name can not be determined,
1855@code{addr2line} will print two question marks in their place. If the
1856line number can not be determined, @code{addr2line} will print 0.
1857
1858The long and short forms of options, shown here as alternatives, are
1859equivalent.
1860
1861@table @code
1862@item -b @var{bfdname}
1863@itemx --target=@var{bfdname}
1864@cindex object code format
1865Specify that the object-code format for the object files is
1866@var{bfdname}.
1867
1868@item -C
1869@itemx --demangle
1870@cindex demangling in objdump
1871Decode (@dfn{demangle}) low-level symbol names into user-level names.
1872Besides removing any initial underscore prepended by the system, this
1873makes C++ function names readable. @xref{c++filt}, for more information
1874on demangling.
1875
1876@item -e @var{filename}
1877@itemx --exe=@var{filename}
1878Specify the name of the executable for which addresses should be
1879translated. The default file is @file{a.out}.
1880
1881@item -f
1882@itemx --functions
1883Display function names as well as file and line number information.
1884
1885@item -s
1886@itemx --basenames
1887Display only the base of each file name.
1888@end table
1889
1890@node nlmconv
1891@chapter nlmconv
1892
1893@code{nlmconv} converts a relocatable object file into a NetWare
1894Loadable Module.
1895
1896@ignore
1897@code{nlmconv} currently works with @samp{i386} object
1898files in @code{coff}, @sc{elf}, or @code{a.out} format, and @sc{SPARC}
1899object files in @sc{elf}, or @code{a.out} format@footnote{
1900@code{nlmconv} should work with any @samp{i386} or @sc{sparc} object
1901format in the Binary File Descriptor library. It has only been tested
1902with the above formats.}.
1903@end ignore
1904
1905@quotation
1906@emph{Warning:} @code{nlmconv} is not always built as part of the binary
1907utilities, since it is only useful for NLM targets.
1908@end quotation
1909
1910@smallexample
1911nlmconv [ -I @var{bfdname} | --input-target=@var{bfdname} ]
1912 [ -O @var{bfdname} | --output-target=@var{bfdname} ]
1913 [ -T @var{headerfile} | --header-file=@var{headerfile} ]
1914 [ -d | --debug] [ -l @var{linker} | --linker=@var{linker} ]
1915 [ -h | --help ] [ -V | --version ]
1916 @var{infile} @var{outfile}
1917@end smallexample
1918
1919@code{nlmconv} converts the relocatable @samp{i386} object file
1920@var{infile} into the NetWare Loadable Module @var{outfile}, optionally
1921reading @var{headerfile} for NLM header information. For instructions
1922on writing the NLM command file language used in header files, see the
1923@samp{linkers} section, @samp{NLMLINK} in particular, of the @cite{NLM
1924Development and Tools Overview}, which is part of the NLM Software
1925Developer's Kit (``NLM SDK''), available from Novell, Inc.
1926@code{nlmconv} uses the @sc{gnu} Binary File Descriptor library to read
1927@var{infile}; see @ref{BFD,,BFD,ld.info,Using LD}, for
1928more information.
1929
1930@code{nlmconv} can perform a link step. In other words, you can list
1931more than one object file for input if you list them in the definitions
1932file (rather than simply specifying one input file on the command line).
1933In this case, @code{nlmconv} calls the linker for you.
1934
1935@table @code
1936@item -I @var{bfdname}
1937@itemx --input-target=@var{bfdname}
1938Object format of the input file. @code{nlmconv} can usually determine
1939the format of a given file (so no default is necessary).
1940@xref{Target Selection}, for more information.
1941
1942@item -O @var{bfdname}
1943@itemx --output-target=@var{bfdname}
1944Object format of the output file. @code{nlmconv} infers the output
1945format based on the input format, e.g. for a @samp{i386} input file the
1946output format is @samp{nlm32-i386}.
1947@xref{Target Selection}, for more information.
1948
1949@item -T @var{headerfile}
1950@itemx --header-file=@var{headerfile}
1951Reads @var{headerfile} for NLM header information. For instructions on
1952writing the NLM command file language used in header files, see@ see the
1953@samp{linkers} section, of the @cite{NLM Development and Tools
1954Overview}, which is part of the NLM Software Developer's Kit, available
1955from Novell, Inc.
1956
1957@item -d
1958@itemx --debug
1959Displays (on standard error) the linker command line used by @code{nlmconv}.
1960
1961@item -l @var{linker}
1962@itemx --linker=@var{linker}
1963Use @var{linker} for any linking. @var{linker} can be an absolute or a
1964relative pathname.
1965
1966@item -h
1967@itemx --help
1968Prints a usage summary.
1969
1970@item -V
1971@itemx --version
1972Prints the version number for @code{nlmconv}.
1973@end table
1974
1975@node windres
1976@chapter windres
1977
1978@code{windres} may be used to manipulate Windows resources.
1979
1980@quotation
1981@emph{Warning:} @code{windres} is not always built as part of the binary
1982utilities, since it is only useful for Windows targets.
1983@end quotation
1984
1985@smallexample
1986windres [options] [input-file] [output-file]
1987@end smallexample
1988
1989@code{windres} reads resources from an input file and copies them into
1990an output file. Either file may be in one of three formats:
1991
1992@table @code
1993@item rc
1994A text format read by the Resource Compiler.
1995
1996@item res
1997A binary format generated by the Resource Compiler.
1998
1999@item coff
2000A COFF object or executable.
2001@end table
2002
2003The exact description of these different formats is available in
2004documentation from Microsoft.
2005
2006When @code{windres} converts from the @code{rc} format to the @code{res}
2007format, it is acting like the Windows Resource Compiler. When
2008@code{windres} converts from the @code{res} format to the @code{coff}
2009format, it is acting like the Windows @code{CVTRES} program.
2010
2011When @code{windres} generates an @code{rc} file, the output is similar
2012but not identical to the format expected for the input. When an input
2013@code{rc} file refers to an external filename, an output @code{rc} file
2014will instead include the file contents.
2015
2016If the input or output format is not specified, @code{windres} will
2017guess based on the file name, or, for the input file, the file contents.
2018A file with an extension of @file{.rc} will be treated as an @code{rc}
2019file, a file with an extension of @file{.res} will be treated as a
2020@code{res} file, and a file with an extension of @file{.o} or
2021@file{.exe} will be treated as a @code{coff} file.
2022
2023If no output file is specified, @code{windres} will print the resources
2024in @code{rc} format to standard output.
2025
2026The normal use is for you to write an @code{rc} file, use @code{windres}
2027to convert it to a COFF object file, and then link the COFF file into
2028your application. This will make the resources described in the
2029@code{rc} file available to Windows.
2030
2031@table @code
2032@item -i @var{filename}
2033@itemx --input @var{filename}
2034The name of the input file. If this option is not used, then
2035@code{windres} will use the first non-option argument as the input file
2036name. If there are no non-option arguments, then @code{windres} will
2037read from standard input. @code{windres} can not read a COFF file from
2038standard input.
2039
2040@item -o @var{filename}
2041@itemx --output @var{filename}
2042The name of the output file. If this option is not used, then
2043@code{windres} will use the first non-option argument, after any used
2044for the input file name, as the output file name. If there is no
2045non-option argument, then @code{windres} will write to standard output.
2046@code{windres} can not write a COFF file to standard output.
2047
2048@item -I @var{format}
2049@itemx --input-format @var{format}
2050The input format to read. @var{format} may be @samp{res}, @samp{rc}, or
2051@samp{coff}. If no input format is specified, @code{windres} will
2052guess, as described above.
2053
2054@item -O @var{format}
2055@itemx --output-format @var{format}
2056The output format to generate. @var{format} may be @samp{res},
2057@samp{rc}, or @samp{coff}. If no output format is specified,
2058@code{windres} will guess, as described above.
2059
2060@item -F @var{target}
2061@itemx --target @var{target}
2062Specify the BFD format to use for a COFF file as input or output. This
2063is a BFD target name; you can use the @code{--help} option to see a list
2064of supported targets. Normally @code{windres} will use the default
2065format, which is the first one listed by the @code{--help} option.
2066@ref{Target Selection}.
2067
2068@item --preprocessor @var{program}
2069When @code{windres} reads an @code{rc} file, it runs it through the C
2070preprocessor first. This option may be used to specify the preprocessor
2071to use, including any leading arguments. The default preprocessor
2072argument is @code{gcc -E -xc-header -DRC_INVOKED}.
2073
2074@item --include-dir @var{directory}
2075Specify an include directory to use when reading an @code{rc} file.
2076@code{windres} will pass this to the preprocessor as an @code{-I}
2077option. @code{windres} will also search this directory when looking for
2078files named in the @code{rc} file.
2079
751d21b5 2080@item -D @var{target}
c89746f6 2081@itemx --define @var{sym[=val]}
252b5132
RH
2082Specify a @code{-D} option to pass to the preprocessor when reading an
2083@code{rc} file.
2084
751d21b5
DD
2085@item -v
2086Enable verbose mode. This tells you what the preprocessor is if you
2087didn't specify one.
2088
252b5132
RH
2089@item --language @var{val}
2090Specify the default language to use when reading an @code{rc} file.
2091@var{val} should be a hexadecimal language code. The low eight bits are
2092the language, and the high eight bits are the sublanguage.
2093
2094@item --help
2095Prints a usage summary.
2096
2097@item --version
2098Prints the version number for @code{windres}.
2099
2100@item --yydebug
2101If @code{windres} is compiled with @code{YYDEBUG} defined as @code{1},
2102this will turn on parser debugging.
2103@end table
2104
2105
2106@node dlltool
2107@chapter Create files needed to build and use DLLs
2108@cindex DLL
2109@kindex dlltool
2110
2111@code{dlltool} may be used to create the files needed to build and use
2112dynamic link libraries (DLLs).
2113
2114@quotation
2115@emph{Warning:} @code{dlltool} is not always built as part of the binary
2116utilities, since it is only useful for those targets which support DLLs.
2117@end quotation
2118
2119@smallexample
2120dlltool [-d|--input-def @var{def-file-name}]
2121 [-b|--base-file @var{base-file-name}]
2122 [-e|--output-exp @var{exports-file-name}]
2123 [-z|--output-def @var{def-file-name}]
2124 [-l|--output-lib @var{library-file-name}]
2125 [--export-all-symbols] [--no-export-all-symbols]
2126 [--exclude-symbols @var{list}]
2127 [--no-default-excludes]
2128 [-S|--as @var{path-to-assembler}] [-f|--as-flags @var{options}]
2129 [-D|--dllname @var{name}] [-m|--machine @var{machine}]
2130 [-a|--add-indirect] [-U|--add-underscore] [-k|--kill-at]
2131 [-A|--add-stdcall-alias]
2132 [-x|--no-idata4] [-c|--no-idata5] [-i|--interwork]
2133 [-n|--nodelete] [-v|--verbose] [-h|--help] [-V|--version]
2134 [object-file @dots{}]
2135@end smallexample
2136
2137@code{dlltool} reads its inputs, which can come from the @samp{-d} and
2138@samp{-b} options as well as object files specified on the command
2139line. It then processes these inputs and if the @samp{-e} option has
2140been specified it creates a exports file. If the @samp{-l} option
2141has been specified it creates a library file and if the @samp{-z} option
2142has been specified it creates a def file. Any or all of the -e, -l
2143and -z options can be present in one invocation of dlltool.
2144
2145When creating a DLL, along with the source for the DLL, it is necessary
2146to have three other files. @code{dlltool} can help with the creation of
2147these files.
2148
2149The first file is a @samp{.def} file which specifies which functions are
2150exported from the DLL, which functions the DLL imports, and so on. This
2151is a text file and can be created by hand, or @code{dlltool} can be used
2152to create it using the @samp{-z} option. In this case @code{dlltool}
2153will scan the object files specified on its command line looking for
2154those functions which have been specially marked as being exported and
2155put entries for them in the .def file it creates.
2156
2157In order to mark a function as being exported from a DLL, it needs to
2158have an @samp{-export:<name_of_function>} entry in the @samp{.drectve}
2159section of the object file. This can be done in C by using the
2160asm() operator:
2161
2162@smallexample
2163 asm (".section .drectve");
2164 asm (".ascii \"-export:my_func\"");
2165
2166 int my_func (void) @{ @dots{} @}
2167@end smallexample
2168
2169The second file needed for DLL creation is an exports file. This file
2170is linked with the object files that make up the body of the DLL and it
2171handles the interface between the DLL and the outside world. This is a
2172binary file and it can be created by giving the @samp{-e} option to
2173@code{dlltool} when it is creating or reading in a .def file.
2174
2175The third file needed for DLL creation is the library file that programs
2176will link with in order to access the functions in the DLL. This file
2177can be created by giving the @samp{-l} option to dlltool when it
2178is creating or reading in a .def file.
2179
2180@code{dlltool} builds the library file by hand, but it builds the
2181exports file by creating temporary files containing assembler statements
2182and then assembling these. The @samp{-S} command line option can be
2183used to specify the path to the assembler that dlltool will use,
2184and the @samp{-f} option can be used to pass specific flags to that
2185assembler. The @samp{-n} can be used to prevent dlltool from deleting
2186these temporary assembler files when it is done, and if @samp{-n} is
2187specified twice then this will prevent dlltool from deleting the
2188temporary object files it used to build the library.
2189
2190Here is an example of creating a DLL from a source file @samp{dll.c} and
2191also creating a program (from an object file called @samp{program.o})
2192that uses that DLL:
2193
2194@smallexample
2195 gcc -c dll.c
2196 dlltool -e exports.o -l dll.lib dll.o
2197 gcc dll.o exports.o -o dll.dll
2198 gcc program.o dll.lib -o program
2199@end smallexample
2200
2201The command line options have the following meanings:
2202
2203@table @code
2204
2205@item -d @var{filename}
2206@itemx --input-def @var{filename}
2207@cindex input .def file
2208Specifies the name of a .def file to be read in and processed.
2209
2210@item -b @var{filename}
2211@itemx --base-file @var{filename}
2212@cindex base files
2213Specifies the name of a base file to be read in and processed. The
2214contents of this file will be added to the relocation section in the
2215exports file generated by dlltool.
2216
2217@item -e @var{filename}
2218@itemx --output-exp @var{filename}
2219Specifies the name of the export file to be created by dlltool.
2220
2221@item -z @var{filename}
2222@itemx --output-def @var{filename}
2223Specifies the name of the .def file to be created by dlltool.
2224
2225@item -l @var{filename}
2226@itemx --output-lib @var{filename}
2227Specifies the name of the library file to be created by dlltool.
2228
2229@item --export-all-symbols
2230Treat all global and weak defined symbols found in the input object
2231files as symbols to be exported. There is a small list of symbols which
2232are not exported by default; see the @code{--no-default-excludes}
2233option. You may add to the list of symbols to not export by using the
2234@code{--exclude-symbols} option.
2235
2236@item --no-export-all-symbols
2237Only export symbols explicitly listed in an input .def file or in
2238@samp{.drectve} sections in the input object files. This is the default
2239behaviour. The @samp{.drectve} sections are created by @samp{dllexport}
2240attributes in the source code.
2241
2242@item --exclude-symbols @var{list}
2243Do not export the symbols in @var{list}. This is a list of symbol names
2244separated by comma or colon characters. The symbol names should not
2245contain a leading underscore. This is only meaningful when
2246@code{--export-all-symbols} is used.
2247
2248@item --no-default-excludes
2249When @code{--export-all-symbols} is used, it will by default avoid
2250exporting certain special symbols. The current list of symbols to avoid
2251exporting is @samp{DllMain@@12}, @samp{DllEntryPoint@@0},
2252@samp{impure_ptr}. You may use the @code{--no-default-excludes} option
2253to go ahead and export these special symbols. This is only meaningful
2254when @code{--export-all-symbols} is used.
2255
2256@item -S @var{path}
2257@itemx --as @var{path}
2258Specifies the path, including the filename, of the assembler to be used
2259to create the exports file.
2260
2261@item -f @var{switches}
2262@itemx --as-flags @var{switches}
2263Specifies any specific command line switches to be passed to the
2264assembler when building the exports file. This option will work even if
2265the @samp{-S} option is not used. This option only takes one argument,
2266and if it occurs more than once on the command line, then later
2267occurrences will override earlier occurrences. So if it is necessary to
2268pass multiple switches to the assembler they should be enclosed in
2269double quotes.
2270
2271@item -D @var{name}
2272@itemx --dll-name @var{name}
2273Specifies the name to be stored in the .def file as the name of the DLL
2274when the @samp{-e} option is used. If this option is not present, then
2275the filename given to the @samp{-e} option will be used as the name of
2276the DLL.
2277
2278@item -m @var{machine}
2279@itemx -machine @var{machine}
2280Specifies the type of machine for which the library file should be
2281built. @code{dlltool} has a built in default type, depending upon how
2282it was created, but this option can be used to override that. This is
2283normally only useful when creating DLLs for an ARM processor, when the
2284contents of the DLL are actually encode using THUMB instructions.
2285
2286@item -a
2287@itemx --add-indirect
2288Specifies that when @code{dlltool} is creating the exports file it
2289should add a section which allows the exported functions to be
2290referenced without using the import library. Whatever the hell that
2291means!
2292
2293@item -U
2294@itemx --add-underscore
2295Specifies that when @code{dlltool} is creating the exports file it
2296should prepend an underscore to the names of the exported functions.
2297
2298@item -k
2299@itemx --kill-at
2300Specifies that when @code{dlltool} is creating the exports file it
2301should not append the string @samp{@@ <number>}. These numbers are
2302called ordinal numbers and they represent another way of accessing the
2303function in a DLL, other than by name.
2304
2305@item -A
2306@itemx --add-stdcall-alias
2307Specifies that when @code{dlltool} is creating the exports file it
2308should add aliases for stdcall symbols without @samp{@@ <number>}
2309in addition to the symbols with @samp{@@ <number>}.
2310
2311@item -x
2312@itemx --no-idata4
2313Specifies that when @code{dlltool} is creating the exports and library
2314files it should omit the .idata4 section. This is for compatibility
2315with certain operating systems.
2316
2317@item -c
2318@itemx --no-idata5
2319Specifies that when @code{dlltool} is creating the exports and library
2320files it should omit the .idata5 section. This is for compatibility
2321with certain operating systems.
2322
2323@item -i
2324@itemx --interwork
2325Specifies that @code{dlltool} should mark the objects in the library
2326file and exports file that it produces as supporting interworking
2327between ARM and THUMB code.
2328
2329@item -n
2330@itemx --nodelete
2331Makes @code{dlltool} preserve the temporary assembler files it used to
2332create the exports file. If this option is repeated then dlltool will
2333also preserve the temporary object files it uses to create the library
2334file.
2335
2336@item -v
2337@itemx --verbose
2338Make dlltool describe what it is doing.
2339
2340@item -h
2341@itemx --help
2342Displays a list of command line options and then exits.
2343
2344@item -V
2345@itemx --version
2346Displays dlltool's version number and then exits.
2347
2348@end table
2349
2350@node readelf
2351@chapter readelf
2352
2353@cindex ELF file information
2354@kindex readelf
2355
2356@smallexample
2357readelf [ -a | --all ]
2358 [ -h | --file-header]
2359 [ -l | --program-headers | --segments]
2360 [ -S | --section-headers | --sections]
2361 [ -e | --headers]
2362 [ -s | --syms | --symbols]
779fe533 2363 [ -n | --notes]
252b5132
RH
2364 [ -r | --relocs]
2365 [ -d | --dynamic]
2366 [ -V | --version-info]
2367 [ -D | --use-dynamic]
2368 [ -x <number> | --hex-dump=<number>]
2369 [ -w[liapr] | --debug-dump[=info,=line,=abbrev,=pubnames,=ranges]]
2370 [ --histogram]
2371 [ -v | --version]
2372 [ -H | --help]
2373 @var{elffile}@dots{}
2374@end smallexample
2375
2376@code{readelf} displays information about one or more ELF format object
2377files. The options control what particular information to display.
2378
2379@var{elffile}@dots{} are the object files to be examined. At the
2380moment, @code{readelf} does not support examining archives, nor does it
2381support examing 64 bit ELF files.
2382
2383The long and short forms of options, shown here as alternatives, are
2384equivalent. At least one option besides @samp{-v} or @samp{-H} must be
2385given.
2386
2387@table @code
2388@item -a
2389@itemx --all
2390Equivalent to specifiying @samp{--file-header},
2391@samp{--program-headers}, @samp{--sections}, @samp{--symbols},
779fe533
NC
2392@samp{--relocs}, @samp{--dynamic}, @samp{--notes} and
2393@samp{--version-info}.
252b5132
RH
2394
2395@item -h
2396@itemx --file-header
2397@cindex ELF file header information
2398Displays the information contained in the ELF header at the start of the
2399file.
2400
2401@item -l
2402@itemx --program-headers
2403@itemx --segments
2404@cindex ELF program header information
2405@cindex ELF segment information
2406Displays the information contained in the file's segment headers, if it
2407has any.
2408
2409@item -S
2410@itemx --sections
2411@itemx --section-headers
2412@cindex ELF section information
2413Displays the information contained in the file's section headers, if it
2414has any.
2415
2416@item -s
2417@itemx --symbols
2418@itemx --syms
2419@cindex ELF symbol table information
2420Displays the entries in symbol table section of the file, if it has one.
2421
2422@item -e
2423@itemx --headers
2424Display all the headers in the file. Equivalent to @samp{-h -l -S}.
2425
779fe533
NC
2426@item -n
2427@itemx --notes
2428@cindex ELF core notes
2429Displays the contents of the NOTE segment, if it exists.
2430
252b5132
RH
2431@item -r
2432@itemx --relocs
2433@cindex ELF reloc information
2434Displays the contents of the file's relocation section, if it ha one.
2435
2436@item -d
2437@itemx --dynamic
2438@cindex ELF dynamic section information
2439Displays the contents of the file's dynamic section, if it has one.
2440
2441@item -V
2442@itemx --version-info
2443@cindex ELF version sections informations
2444Displays the contents of the version sections in the file, it they
2445exist.
2446
2447@item -D
2448@itemx --use-dynamic
2449When displaying symbols, this option makes @code{readelf} use the
2450symblol table in the file's dynamic section, rather than the one in the
2451symbols section.
2452
2453@item -x <number>
2454@itemx --hex-dump=<number>
2455Displays the contents of the indicated section as a hexadecimal dump.
2456
2457@item -w[liapr]
2458@itemx --debug-dump[=line,=info,=abbrev,=pubnames,=ranges]
2459Displays the contents of the debug sections in the file, if any are
2460present. If one of the optional letters or words follows the switch
2461then only data found in those specific sections will be dumped.
2462
2463@item --histogram
2464Display a histogram of bucket list lengths when displaying the contents
2465of the symbol tables.
2466
2467@item -v
2468@itemx --version
2469Display the version number of readelf.
2470
2471@item -H
2472@itemx --help
2473Display the command line options understood by @code{readelf}.
2474
2475@end table
2476
2477
2478@node Selecting The Target System
2479@chapter Selecting the target system
2480
2481You can specify three aspects of the target system to the @sc{gnu}
2482binary file utilities, each in several ways:
2483
2484@itemize @bullet
2485@item
2486the target
2487
2488@item
2489the architecture
2490
2491@item
2492the linker emulation (which applies to the linker only)
2493@end itemize
2494
2495In the following summaries, the lists of ways to specify values are in
2496order of decreasing precedence. The ways listed first override those
2497listed later.
2498
2499The commands to list valid values only list the values for which the
2500programs you are running were configured. If they were configured with
2501@samp{--enable-targets=all}, the commands list most of the available
2502values, but a few are left out; not all targets can be configured in at
2503once because some of them can only be configured @dfn{native} (on hosts
2504with the same type as the target system).
2505
2506@menu
2507* Target Selection::
2508* Architecture Selection::
2509* Linker Emulation Selection::
2510@end menu
2511
2512@node Target Selection
2513@section Target Selection
2514
2515A @dfn{target} is an object file format. A given target may be
2516supported for multiple architectures (@pxref{Architecture Selection}).
2517A target selection may also have variations for different operating
2518systems or architectures.
2519
2520The command to list valid target values is @samp{objdump -i}
2521(the first column of output contains the relevant information).
2522
2523Some sample values are: @samp{a.out-hp300bsd}, @samp{ecoff-littlemips},
2524@samp{a.out-sunos-big}.
2525
2526You can also specify a target using a configuration triplet. This is
2527the same sort of name that is passed to configure to specify a target.
2528When you use a configuration triplet as an argument, it must be fully
2529canonicalized. You can see the canonical version of a triplet by
2530running the shell script @file{config.sub} which is included with the
2531sources.
2532
2533Some sample configuration triplets are: @samp{m68k-hp-bsd},
2534@samp{mips-dec-ultrix}, @samp{sparc-sun-sunos}.
2535
2536@subheading @code{objdump} Target
2537
2538Ways to specify:
2539
2540@enumerate
2541@item
2542command line option: @samp{-b} or @samp{--target}
2543
2544@item
2545environment variable @code{GNUTARGET}
2546
2547@item
2548deduced from the input file
2549@end enumerate
2550
2551@subheading @code{objcopy} and @code{strip} Input Target
2552
2553Ways to specify:
2554
2555@enumerate
2556@item
2557command line options: @samp{-I} or @samp{--input-target}, or @samp{-F} or @samp{--target}
2558
2559@item
2560environment variable @code{GNUTARGET}
2561
2562@item
2563deduced from the input file
2564@end enumerate
2565
2566@subheading @code{objcopy} and @code{strip} Output Target
2567
2568Ways to specify:
2569
2570@enumerate
2571@item
2572command line options: @samp{-O} or @samp{--output-target}, or @samp{-F} or @samp{--target}
2573
2574@item
2575the input target (see ``@code{objcopy} and @code{strip} Input Target'' above)
2576
2577@item
2578environment variable @code{GNUTARGET}
2579
2580@item
2581deduced from the input file
2582@end enumerate
2583
2584@subheading @code{nm}, @code{size}, and @code{strings} Target
2585
2586Ways to specify:
2587
2588@enumerate
2589@item
2590command line option: @samp{--target}
2591
2592@item
2593environment variable @code{GNUTARGET}
2594
2595@item
2596deduced from the input file
2597@end enumerate
2598
2599@subheading Linker Input Target
2600
2601Ways to specify:
2602
2603@enumerate
2604@item
2605command line option: @samp{-b} or @samp{--format}
2606(@pxref{Options,,Options,ld.info,Using LD})
2607
2608@item
2609script command @code{TARGET}
2610(@pxref{Option Commands,,Option Commands,ld.info,Using LD})
2611
2612@item
2613environment variable @code{GNUTARGET}
2614(@pxref{Environment,,Environment,ld.info,Using LD})
2615
2616@item
2617the default target of the selected linker emulation
2618(@pxref{Linker Emulation Selection})
2619@end enumerate
2620
2621@subheading Linker Output Target
2622
2623Ways to specify:
2624
2625@enumerate
2626@item
2627command line option: @samp{-oformat}
2628(@pxref{Options,,Options,ld.info,Using LD})
2629
2630@item
2631script command @code{OUTPUT_FORMAT}
2632(@pxref{Option Commands,,Option Commands,ld.info,Using LD})
2633
2634@item
2635the linker input target (see ``Linker Input Target'' above)
2636@end enumerate
2637
2638@node Architecture Selection
2639@section Architecture selection
2640
2641An @dfn{architecture} is a type of @sc{cpu} on which an object file is
2642to run. Its name may contain a colon, separating the name of the
2643processor family from the name of the particular @sc{cpu}.
2644
2645The command to list valid architecture values is @samp{objdump -i} (the
2646second column contains the relevant information).
2647
2648Sample values: @samp{m68k:68020}, @samp{mips:3000}, @samp{sparc}.
2649
2650@subheading @code{objdump} Architecture
2651
2652Ways to specify:
2653
2654@enumerate
2655@item
2656command line option: @samp{-m} or @samp{--architecture}
2657
2658@item
2659deduced from the input file
2660@end enumerate
2661
2662@subheading @code{objcopy}, @code{nm}, @code{size}, @code{strings} Architecture
2663
2664Ways to specify:
2665
2666@enumerate
2667@item
2668deduced from the input file
2669@end enumerate
2670
2671@subheading Linker Input Architecture
2672
2673Ways to specify:
2674
2675@enumerate
2676@item
2677deduced from the input file
2678@end enumerate
2679
2680@subheading Linker Output Architecture
2681
2682Ways to specify:
2683
2684@enumerate
2685@item
2686script command @code{OUTPUT_ARCH}
2687(@pxref{Option Commands,,Option Commands,ld.info,Using LD})
2688
2689@item
2690the default architecture from the linker output target
2691(@pxref{Target Selection})
2692@end enumerate
2693
2694@node Linker Emulation Selection
2695@section Linker emulation selection
2696
2697A linker @dfn{emulation} is a ``personality'' of the linker, which gives
2698the linker default values for the other aspects of the target system.
2699In particular, it consists of
2700
2701@itemize @bullet
2702@item
2703the linker script
2704
2705@item
2706the target
2707
2708@item
2709several ``hook'' functions that are run at certain stages of the linking
2710process to do special things that some targets require
2711@end itemize
2712
2713The command to list valid linker emulation values is @samp{ld -V}.
2714
2715Sample values: @samp{hp300bsd}, @samp{mipslit}, @samp{sun4}.
2716
2717Ways to specify:
2718
2719@enumerate
2720@item
2721command line option: @samp{-m}
2722(@pxref{Options,,Options,ld.info,Using LD})
2723
2724@item
2725environment variable @code{LDEMULATION}
2726
2727@item
2728compiled-in @code{DEFAULT_EMULATION} from @file{Makefile},
2729which comes from @code{EMUL} in @file{config/@var{target}.mt}
2730@end enumerate
2731
2732@node Reporting Bugs
2733@chapter Reporting Bugs
2734@cindex bugs
2735@cindex reporting bugs
2736
2737Your bug reports play an essential role in making the binary utilities
2738reliable.
2739
2740Reporting a bug may help you by bringing a solution to your problem, or
2741it may not. But in any case the principal function of a bug report is
2742to help the entire community by making the next version of the binary
2743utilities work better. Bug reports are your contribution to their
2744maintenance.
2745
2746In order for a bug report to serve its purpose, you must include the
2747information that enables us to fix the bug.
2748
2749@menu
2750* Bug Criteria:: Have you found a bug?
2751* Bug Reporting:: How to report bugs
2752@end menu
2753
2754@node Bug Criteria
2755@section Have you found a bug?
2756@cindex bug criteria
2757
2758If you are not sure whether you have found a bug, here are some guidelines:
2759
2760@itemize @bullet
2761@cindex fatal signal
2762@cindex crash
2763@item
2764If a binary utility gets a fatal signal, for any input whatever, that is
2765a bug. Reliable utilities never crash.
2766
2767@cindex error on valid input
2768@item
2769If a binary utility produces an error message for valid input, that is a
2770bug.
2771
2772@item
2773If you are an experienced user of binary utilities, your suggestions for
2774improvement are welcome in any case.
2775@end itemize
2776
2777@node Bug Reporting
2778@section How to report bugs
2779@cindex bug reports
2780@cindex bugs, reporting
2781
2782A number of companies and individuals offer support for @sc{gnu}
2783products. If you obtained the binary utilities from a support
2784organization, we recommend you contact that organization first.
2785
2786You can find contact information for many support companies and
2787individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
2788distribution.
2789
2790In any event, we also recommend that you send bug reports for the binary
2791utilities to @samp{bug-gnu-utils@@gnu.org}.
2792
2793The fundamental principle of reporting bugs usefully is this:
2794@strong{report all the facts}. If you are not sure whether to state a
2795fact or leave it out, state it!
2796
2797Often people omit facts because they think they know what causes the
2798problem and assume that some details do not matter. Thus, you might
2799assume that the name of a file you use in an example does not matter.
2800Well, probably it does not, but one cannot be sure. Perhaps the bug is
2801a stray memory reference which happens to fetch from the location where
2802that pathname is stored in memory; perhaps, if the pathname were
2803different, the contents of that location would fool the utility into
2804doing the right thing despite the bug. Play it safe and give a
2805specific, complete example. That is the easiest thing for you to do,
2806and the most helpful.
2807
2808Keep in mind that the purpose of a bug report is to enable us to fix the bug if
2809it is new to us. Therefore, always write your bug reports on the assumption
2810that the bug has not been reported previously.
2811
2812Sometimes people give a few sketchy facts and ask, ``Does this ring a
2813bell?'' Those bug reports are useless, and we urge everyone to
2814@emph{refuse to respond to them} except to chide the sender to report
2815bugs properly.
2816
2817To enable us to fix the bug, you should include all these things:
2818
2819@itemize @bullet
2820@item
2821The version of the utility. Each utility announces it if you start it
2822with the @samp{--version} argument.
2823
2824Without this, we will not know whether there is any point in looking for
2825the bug in the current version of the binary utilities.
2826
2827@item
2828Any patches you may have applied to the source, including any patches
2829made to the @code{BFD} library.
2830
2831@item
2832The type of machine you are using, and the operating system name and
2833version number.
2834
2835@item
2836What compiler (and its version) was used to compile the utilities---e.g.
2837``@code{gcc-2.7}''.
2838
2839@item
2840The command arguments you gave the utility to observe the bug. To
2841guarantee you will not omit something important, list them all. A copy
2842of the Makefile (or the output from make) is sufficient.
2843
2844If we were to try to guess the arguments, we would probably guess wrong
2845and then we might not encounter the bug.
2846
2847@item
2848A complete input file, or set of input files, that will reproduce the
2849bug. If the utility is reading an object file or files, then it is
2850generally most helpful to send the actual object files, uuencoded if
757acbc5
ILT
2851necessary to get them through the mail system. Note that
2852@samp{bug-gnu-utils@@gnu.org} is a mailing list, so you should avoid
2853sending very large files to it. Making the files available for
2854anonymous FTP is OK.
252b5132
RH
2855
2856If the source files were produced exclusively using @sc{gnu} programs
2857(e.g., @code{gcc}, @code{gas}, and/or the @sc{gnu} @code{ld}), then it
2858may be OK to send the source files rather than the object files. In
2859this case, be sure to say exactly what version of @code{gcc}, or
2860whatever, was used to produce the object files. Also say how
2861@code{gcc}, or whatever, was configured.
2862
2863@item
2864A description of what behavior you observe that you believe is
2865incorrect. For example, ``It gets a fatal signal.''
2866
2867Of course, if the bug is that the utility gets a fatal signal, then we
2868will certainly notice it. But if the bug is incorrect output, we might
2869not notice unless it is glaringly wrong. You might as well not give us
2870a chance to make a mistake.
2871
2872Even if the problem you experience is a fatal signal, you should still
2873say so explicitly. Suppose something strange is going on, such as, your
2874copy of the utility is out of synch, or you have encountered a bug in
2875the C library on your system. (This has happened!) Your copy might
2876crash and ours would not. If you told us to expect a crash, then when
2877ours fails to crash, we would know that the bug was not happening for
2878us. If you had not told us to expect a crash, then we would not be able
2879to draw any conclusion from our observations.
2880
2881@item
2882If you wish to suggest changes to the source, send us context diffs, as
2883generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
2884option. Always send diffs from the old file to the new file. If you
2885even discuss something in the @code{ld} source, refer to it by context,
2886not by line number.
2887
2888The line numbers in our development sources will not match those in your
2889sources. Your line numbers would convey no useful information to us.
2890@end itemize
2891
2892Here are some things that are not necessary:
2893
2894@itemize @bullet
2895@item
2896A description of the envelope of the bug.
2897
2898Often people who encounter a bug spend a lot of time investigating
2899which changes to the input file will make the bug go away and which
2900changes will not affect it.
2901
2902This is often time consuming and not very useful, because the way we
2903will find the bug is by running a single example under the debugger
2904with breakpoints, not by pure deduction from a series of examples.
2905We recommend that you save your time for something else.
2906
2907Of course, if you can find a simpler example to report @emph{instead}
2908of the original one, that is a convenience for us. Errors in the
2909output will be easier to spot, running under the debugger will take
2910less time, and so on.
2911
2912However, simplification is not vital; if you do not want to do this,
2913report the bug anyway and send us the entire test case you used.
2914
2915@item
2916A patch for the bug.
2917
2918A patch for the bug does help us if it is a good one. But do not omit
2919the necessary information, such as the test case, on the assumption that
2920a patch is all we need. We might see problems with your patch and decide
2921to fix the problem another way, or we might not understand it at all.
2922
2923Sometimes with programs as complicated as the binary utilities it is
2924very hard to construct an example that will make the program follow a
2925certain path through the code. If you do not send us the example, we
2926will not be able to construct one, so we will not be able to verify that
2927the bug is fixed.
2928
2929And if we cannot understand what bug you are trying to fix, or why your
2930patch should be an improvement, we will not install it. A test case will
2931help us to understand.
2932
2933@item
2934A guess about what the bug is or what it depends on.
2935
2936Such guesses are usually wrong. Even we cannot guess right about such
2937things without first using the debugger to find the facts.
2938@end itemize
2939
2940@node Index
2941@unnumbered Index
2942
2943@printindex cp
2944
2945@contents
2946@bye
This page took 0.133682 seconds and 4 git commands to generate.