Remove spurious conflict indicators.
[deliverable/binutils-gdb.git] / binutils / doc / binutils.texi
CommitLineData
252b5132
RH
1\input texinfo @c -*- Texinfo -*-
2@setfilename binutils.info
e016ec1f
NC
3@settitle @sc{gnu} Binary Utilities
4@finalout
5@synindex ky cp
8c2bc687 6
dff70155 7@c man begin INCLUDE
c428fa83 8@include bfdver.texi
dff70155 9@c man end
252b5132 10
0e9517a9 11@copying
0285c67d 12@c man begin COPYRIGHT
2423fbe6 13Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
ec25acb3 142000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
ed22650e 15Free Software Foundation, Inc.
252b5132 16
0285c67d 17Permission is granted to copy, distribute and/or modify this document
793c5807 18under the terms of the GNU Free Documentation License, Version 1.3
0285c67d
NC
19or any later version published by the Free Software Foundation;
20with no Invariant Sections, with no Front-Cover Texts, and with no
21Back-Cover Texts. A copy of the license is included in the
947ed062 22section entitled ``GNU Free Documentation License''.
252b5132 23
0285c67d 24@c man end
0e9517a9 25@end copying
252b5132 26
e016ec1f
NC
27@dircategory Software development
28@direntry
29* Binutils: (binutils). The GNU binary utilities.
30@end direntry
31
32@dircategory Individual utilities
33@direntry
34* addr2line: (binutils)addr2line. Convert addresses to file and line.
35* ar: (binutils)ar. Create, modify, and extract from archives.
36* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols.
37* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt.
38* dlltool: (binutils)dlltool. Create files needed to build and use DLLs.
39* nlmconv: (binutils)nlmconv. Converts object code into an NLM.
40* nm: (binutils)nm. List symbols from object files.
41* objcopy: (binutils)objcopy. Copy and translate object files.
42* objdump: (binutils)objdump. Display information from object files.
43* ranlib: (binutils)ranlib. Generate index to archive contents.
44* readelf: (binutils)readelf. Display the contents of ELF format files.
45* size: (binutils)size. List section sizes and total size.
46* strings: (binutils)strings. List printable strings from files.
47* strip: (binutils)strip. Discard symbols.
30fd33bb 48* elfedit: (binutils)elfedit. Update the ELF header of ELF files.
e016ec1f
NC
49* windmc: (binutils)windmc. Generator for Windows message resources.
50* windres: (binutils)windres. Manipulate Windows resources.
51@end direntry
52
252b5132 53@titlepage
252b5132 54@title The @sc{gnu} Binary Utilities
e49e529d
JM
55@ifset VERSION_PACKAGE
56@subtitle @value{VERSION_PACKAGE}
57@end ifset
252b5132
RH
58@subtitle Version @value{VERSION}
59@sp 1
36607f99 60@subtitle @value{UPDATED}
252b5132
RH
61@author Roland H. Pesch
62@author Jeffrey M. Osier
63@author Cygnus Support
64@page
65
66@tex
67{\parskip=0pt \hfill Cygnus Support\par \hfill
e016ec1f 68Texinfo \texinfoversion\par }
252b5132
RH
69@end tex
70
71@vskip 0pt plus 1filll
e016ec1f 72@insertcopying
252b5132 73@end titlepage
4ecceb71 74@contents
252b5132
RH
75
76@node Top
77@top Introduction
78
79@cindex version
947ed062 80This brief manual contains documentation for the @sc{gnu} binary
e49e529d
JM
81utilities
82@ifset VERSION_PACKAGE
83@value{VERSION_PACKAGE}
84@end ifset
85version @value{VERSION}:
252b5132
RH
86
87@iftex
88@table @code
89@item ar
90Create, modify, and extract from archives
91
92@item nm
93List symbols from object files
94
95@item objcopy
96Copy and translate object files
97
98@item objdump
99Display information from object files
100
101@item ranlib
102Generate index to archive contents
103
104@item readelf
105Display the contents of ELF format files.
106
107@item size
108List file section sizes and total size
109
110@item strings
111List printable strings from files
112
113@item strip
114Discard symbols
115
30fd33bb
L
116@item elfedit
117Update the ELF header of ELF files.
118
252b5132 119@item c++filt
9d51cc66
ILT
120Demangle encoded C++ symbols (on MS-DOS, this program is named
121@code{cxxfilt})
252b5132
RH
122
123@item addr2line
124Convert addresses into file names and line numbers
125
126@item nlmconv
127Convert object code into a Netware Loadable Module
128
129@item windres
130Manipulate Windows resources
131
692ed3e7
NC
132@item windmc
133Genertor for Windows message resources
134
252b5132
RH
135@item dlltool
136Create the files needed to build and use Dynamic Link Libraries
137@end table
138@end iftex
139
cf055d54 140This document is distributed under the terms of the GNU Free
793c5807
NC
141Documentation License version 1.3. A copy of the license is included
142in the section entitled ``GNU Free Documentation License''.
cf055d54 143
252b5132
RH
144@menu
145* ar:: Create, modify, and extract from archives
146* nm:: List symbols from object files
147* objcopy:: Copy and translate object files
148* objdump:: Display information from object files
149* ranlib:: Generate index to archive contents
fff279a7 150* readelf:: Display the contents of ELF format files
252b5132
RH
151* size:: List section sizes and total size
152* strings:: List printable strings from files
153* strip:: Discard symbols
30fd33bb 154* elfedit:: Update the ELF header of ELF files
252b5132 155* c++filt:: Filter to demangle encoded C++ symbols
9d51cc66 156* cxxfilt: c++filt. MS-DOS name for c++filt
252b5132
RH
157* addr2line:: Convert addresses to file and line
158* nlmconv:: Converts object code into an NLM
159* windres:: Manipulate Windows resources
692ed3e7 160* windmc:: Generator for Windows message resources
252b5132 161* dlltool:: Create files needed to build and use DLLs
07012eee 162* Common Options:: Command-line options for all utilities
fff279a7 163* Selecting the Target System:: How these utilities determine the target
252b5132 164* Reporting Bugs:: Reporting Bugs
cf055d54 165* GNU Free Documentation License:: GNU Free Documentation License
fa0d8a3e 166* Binutils Index:: Binutils Index
252b5132
RH
167@end menu
168
169@node ar
170@chapter ar
171
172@kindex ar
173@cindex archives
174@cindex collections of files
0285c67d
NC
175
176@c man title ar create, modify, and extract from archives
177
252b5132 178@smallexample
b3364cb9 179ar [@option{--plugin} @var{name}] [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] [@option{--target} @var{bfdname}] @var{archive} [@var{member}@dots{}]
252b5132
RH
180ar -M [ <mri-script ]
181@end smallexample
182
0285c67d
NC
183@c man begin DESCRIPTION ar
184
c7c55b78 185The @sc{gnu} @command{ar} program creates, modifies, and extracts from
252b5132
RH
186archives. An @dfn{archive} is a single file holding a collection of
187other files in a structure that makes it possible to retrieve
188the original individual files (called @dfn{members} of the archive).
189
190The original files' contents, mode (permissions), timestamp, owner, and
191group are preserved in the archive, and can be restored on
c1c0eb9e 192extraction.
252b5132
RH
193
194@cindex name length
c7c55b78
NC
195@sc{gnu} @command{ar} can maintain archives whose members have names of any
196length; however, depending on how @command{ar} is configured on your
252b5132
RH
197system, a limit on member-name length may be imposed for compatibility
198with archive formats maintained with other tools. If it exists, the
199limit is often 15 characters (typical of formats related to a.out) or 16
200characters (typical of formats related to coff).
201
202@cindex libraries
c7c55b78 203@command{ar} is considered a binary utility because archives of this sort
252b5132
RH
204are most often used as @dfn{libraries} holding commonly needed
205subroutines.
206
207@cindex symbol index
c7c55b78 208@command{ar} creates an index to the symbols defined in relocatable
252b5132 209object modules in the archive when you specify the modifier @samp{s}.
c7c55b78 210Once created, this index is updated in the archive whenever @command{ar}
252b5132
RH
211makes a change to its contents (save for the @samp{q} update operation).
212An archive with such an index speeds up linking to the library, and
213allows routines in the library to call each other without regard to
214their placement in the archive.
215
216You may use @samp{nm -s} or @samp{nm --print-armap} to list this index
c7c55b78
NC
217table. If an archive lacks the table, another form of @command{ar} called
218@command{ranlib} can be used to add just the table.
252b5132 219
a8da6403
NC
220@cindex thin archives
221@sc{gnu} @command{ar} can optionally create a @emph{thin} archive,
222which contains a symbol index and references to the original copies
223of the member files of the archives. Such an archive is useful
224for building libraries for use within a local build, where the
225relocatable objects are expected to remain available, and copying the
226contents of each object would only waste time and space. Thin archives
227are also @emph{flattened}, so that adding one or more archives to a
228thin archive will add the elements of the nested archive individually.
229The paths to the elements of the archive are stored relative to the
230archive itself.
231
c7c55b78
NC
232@cindex compatibility, @command{ar}
233@cindex @command{ar} compatibility
234@sc{gnu} @command{ar} is designed to be compatible with two different
252b5132 235facilities. You can control its activity using command-line options,
c7c55b78
NC
236like the different varieties of @command{ar} on Unix systems; or, if you
237specify the single command-line option @option{-M}, you can control it
252b5132
RH
238with a script supplied via standard input, like the MRI ``librarian''
239program.
240
0285c67d
NC
241@c man end
242
252b5132 243@menu
c7c55b78
NC
244* ar cmdline:: Controlling @command{ar} on the command line
245* ar scripts:: Controlling @command{ar} with a script
252b5132
RH
246@end menu
247
248@page
249@node ar cmdline
947ed062 250@section Controlling @command{ar} on the Command Line
252b5132
RH
251
252@smallexample
0285c67d 253@c man begin SYNOPSIS ar
8adf5d70 254ar [@option{--plugin} @var{name}] [@option{-X32_64}] [@option{-}]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] [@option{--target} @var{bfdname}] @var{archive} [@var{member}@dots{}]
0285c67d 255@c man end
252b5132
RH
256@end smallexample
257
c7c55b78
NC
258@cindex Unix compatibility, @command{ar}
259When you use @command{ar} in the Unix style, @command{ar} insists on at least two
252b5132
RH
260arguments to execute: one keyletter specifying the @emph{operation}
261(optionally accompanied by other keyletters specifying
262@emph{modifiers}), and the archive name to act on.
263
264Most operations can also accept further @var{member} arguments,
265specifying particular files to operate on.
266
0285c67d
NC
267@c man begin OPTIONS ar
268
c7c55b78 269@sc{gnu} @command{ar} allows you to mix the operation code @var{p} and modifier
252b5132
RH
270flags @var{mod} in any order, within the first command-line argument.
271
272If you wish, you may begin the first command-line argument with a
273dash.
274
275@cindex operations on archive
276The @var{p} keyletter specifies what operation to execute; it may be
277any of the following, but you must specify only one of them:
278
c7c55b78 279@table @samp
252b5132
RH
280@item d
281@cindex deleting from archive
282@emph{Delete} modules from the archive. Specify the names of modules to
283be deleted as @var{member}@dots{}; the archive is untouched if you
284specify no files to delete.
285
c7c55b78 286If you specify the @samp{v} modifier, @command{ar} lists each module
252b5132
RH
287as it is deleted.
288
289@item m
290@cindex moving in archive
291Use this operation to @emph{move} members in an archive.
292
293The ordering of members in an archive can make a difference in how
294programs are linked using the library, if a symbol is defined in more
c1c0eb9e 295than one member.
252b5132
RH
296
297If no modifiers are used with @code{m}, any members you name in the
298@var{member} arguments are moved to the @emph{end} of the archive;
299you can use the @samp{a}, @samp{b}, or @samp{i} modifiers to move them to a
300specified place instead.
301
302@item p
303@cindex printing from archive
304@emph{Print} the specified members of the archive, to the standard
305output file. If the @samp{v} modifier is specified, show the member
306name before copying its contents to standard output.
307
308If you specify no @var{member} arguments, all the files in the archive are
309printed.
310
311@item q
312@cindex quick append to archive
313@emph{Quick append}; Historically, add the files @var{member}@dots{} to the end of
314@var{archive}, without checking for replacement.
315
316The modifiers @samp{a}, @samp{b}, and @samp{i} do @emph{not} affect this
317operation; new members are always placed at the end of the archive.
318
c7c55b78 319The modifier @samp{v} makes @command{ar} list each file as it is appended.
252b5132
RH
320
321Since the point of this operation is speed, the archive's symbol table
322index is not updated, even if it already existed; you can use @samp{ar s} or
c7c55b78 323@command{ranlib} explicitly to update the symbol table index.
252b5132
RH
324
325However, too many different systems assume quick append rebuilds the
947ed062 326index, so @sc{gnu} @command{ar} implements @samp{q} as a synonym for @samp{r}.
252b5132
RH
327
328@item r
329@cindex replacement in archive
330Insert the files @var{member}@dots{} into @var{archive} (with
331@emph{replacement}). This operation differs from @samp{q} in that any
332previously existing members are deleted if their names match those being
333added.
334
c7c55b78 335If one of the files named in @var{member}@dots{} does not exist, @command{ar}
252b5132
RH
336displays an error message, and leaves undisturbed any existing members
337of the archive matching that name.
338
339By default, new members are added at the end of the file; but you may
340use one of the modifiers @samp{a}, @samp{b}, or @samp{i} to request
341placement relative to some existing member.
342
343The modifier @samp{v} used with this operation elicits a line of
344output for each file inserted, along with one of the letters @samp{a} or
345@samp{r} to indicate whether the file was appended (no old member
346deleted) or replaced.
347
e58bcb8f
NC
348@item s
349@cindex ranlib
350Add an index to the archive, or update it if it already exists. Note
351this command is an exception to the rule that there can only be one
352command letter, as it is possible to use it as either a command or a
353modifier. In either case it does the same thing.
354
252b5132
RH
355@item t
356@cindex contents of archive
357Display a @emph{table} listing the contents of @var{archive}, or those
358of the files listed in @var{member}@dots{} that are present in the
359archive. Normally only the member name is shown; if you also want to
360see the modes (permissions), timestamp, owner, group, and size, you can
361request that by also specifying the @samp{v} modifier.
362
363If you do not specify a @var{member}, all files in the archive
364are listed.
365
366@cindex repeated names in archive
367@cindex name duplication in archive
368If there is more than one file with the same name (say, @samp{fie}) in
369an archive (say @samp{b.a}), @samp{ar t b.a fie} lists only the
370first instance; to see them all, you must ask for a complete
371listing---in our example, @samp{ar t b.a}.
372@c WRS only; per Gumby, this is implementation-dependent, and in a more
373@c recent case in fact works the other way.
374
375@item x
376@cindex extract from archive
377@emph{Extract} members (named @var{member}) from the archive. You can
378use the @samp{v} modifier with this operation, to request that
c7c55b78 379@command{ar} list each name as it extracts it.
252b5132
RH
380
381If you do not specify a @var{member}, all files in the archive
382are extracted.
383
a8da6403
NC
384Files cannot be extracted from a thin archive.
385
8adf5d70
NC
386@item --help
387Displays the list of command line options supported by @command{ar}
388and then exits.
389
390@item --version
391Displays the version information of @command{ar} and then exits.
392
252b5132
RH
393@end table
394
395A number of modifiers (@var{mod}) may immediately follow the @var{p}
396keyletter, to specify variations on an operation's behavior:
397
c7c55b78 398@table @samp
252b5132
RH
399@item a
400@cindex relative placement in archive
401Add new files @emph{after} an existing member of the
402archive. If you use the modifier @samp{a}, the name of an existing archive
403member must be present as the @var{relpos} argument, before the
404@var{archive} specification.
405
406@item b
407Add new files @emph{before} an existing member of the
408archive. If you use the modifier @samp{b}, the name of an existing archive
409member must be present as the @var{relpos} argument, before the
410@var{archive} specification. (same as @samp{i}).
411
412@item c
413@cindex creating archives
414@emph{Create} the archive. The specified @var{archive} is always
415created if it did not exist, when you request an update. But a warning is
416issued unless you specify in advance that you expect to create it, by
417using this modifier.
418
36e4dce6
CD
419@item D
420@cindex deterministic archives
9cb80f72 421@kindex --enable-deterministic-archives
36e4dce6
CD
422Operate in @emph{deterministic} mode. When adding files and the archive
423index use zero for UIDs, GIDs, timestamps, and use consistent file modes
424for all files. When this option is used, if @command{ar} is used with
425identical options and identical input files, multiple runs will create
426identical output files regardless of the input files' owners, groups,
427file modes, or modification times.
428
9cb80f72
RM
429If @file{binutils} was configured with
430@option{--enable-deterministic-archives}, then this mode is on by default.
431It can be disabled with the @samp{U} modifier, below.
432
252b5132 433@item f
c7c55b78 434Truncate names in the archive. @sc{gnu} @command{ar} will normally permit file
252b5132 435names of any length. This will cause it to create archives which are
c7c55b78 436not compatible with the native @command{ar} program on some systems. If
252b5132
RH
437this is a concern, the @samp{f} modifier may be used to truncate file
438names when putting them in the archive.
439
440@item i
441Insert new files @emph{before} an existing member of the
442archive. If you use the modifier @samp{i}, the name of an existing archive
443member must be present as the @var{relpos} argument, before the
444@var{archive} specification. (same as @samp{b}).
445
446@item l
447This modifier is accepted but not used.
448@c whaffor ar l modifier??? presumably compat; with
c1c0eb9e 449@c what???---doc@@cygnus.com, 25jan91
252b5132 450
3de39064
ILT
451@item N
452Uses the @var{count} parameter. This is used if there are multiple
453entries in the archive with the same name. Extract or delete instance
454@var{count} of the given name from the archive.
455
252b5132
RH
456@item o
457@cindex dates in archive
458Preserve the @emph{original} dates of members when extracting them. If
459you do not specify this modifier, files extracted from the archive
460are stamped with the time of extraction.
461
3de39064
ILT
462@item P
463Use the full path name when matching names in the archive. @sc{gnu}
c7c55b78 464@command{ar} can not create an archive with a full path name (such archives
3de39064 465are not POSIX complaint), but other archive creators can. This option
c7c55b78 466will cause @sc{gnu} @command{ar} to match file names using a complete path
3de39064
ILT
467name, which can be convenient when extracting a single file from an
468archive created by another tool.
469
252b5132
RH
470@item s
471@cindex writing archive index
472Write an object-file index into the archive, or update an existing one,
473even if no other change is made to the archive. You may use this modifier
474flag either with any operation, or alone. Running @samp{ar s} on an
475archive is equivalent to running @samp{ranlib} on it.
476
477@item S
478@cindex not writing archive index
479Do not generate an archive symbol table. This can speed up building a
480large library in several steps. The resulting archive can not be used
481with the linker. In order to build a symbol table, you must omit the
482@samp{S} modifier on the last execution of @samp{ar}, or you must run
483@samp{ranlib} on the archive.
484
a8da6403
NC
485@item T
486@cindex creating thin archive
487Make the specified @var{archive} a @emph{thin} archive. If it already
488exists and is a regular archive, the existing members must be present
489in the same directory as @var{archive}.
490
252b5132
RH
491@item u
492@cindex updating an archive
493Normally, @samp{ar r}@dots{} inserts all files
494listed into the archive. If you would like to insert @emph{only} those
495of the files you list that are newer than existing members of the same
496names, use this modifier. The @samp{u} modifier is allowed only for the
497operation @samp{r} (replace). In particular, the combination @samp{qu} is
498not allowed, since checking the timestamps would lose any speed
499advantage from the operation @samp{q}.
500
9cb80f72
RM
501@item U
502@cindex deterministic archives
503@kindex --enable-deterministic-archives
504Do @emph{not} operate in @emph{deterministic} mode. This is the inverse
505of the @samp{D} modifier, above: added files and the archive index will
506get their actual UID, GID, timestamp, and file mode values.
507
508This is the default unless @file{binutils} was configured with
509@option{--enable-deterministic-archives}.
510
252b5132
RH
511@item v
512This modifier requests the @emph{verbose} version of an operation. Many
513operations display additional information, such as filenames processed,
514when the modifier @samp{v} is appended.
515
516@item V
c7c55b78 517This modifier shows the version number of @command{ar}.
252b5132
RH
518@end table
519
c7c55b78 520@command{ar} ignores an initial option spelt @samp{-X32_64}, for
6e800839 521compatibility with AIX. The behaviour produced by this option is the
947ed062 522default for @sc{gnu} @command{ar}. @command{ar} does not support any of the other
c7c55b78
NC
523@samp{-X} options; in particular, it does not support @option{-X32}
524which is the default for AIX @command{ar}.
6e800839 525
ce3c775b
NC
526The optional command line switch @option{--plugin} @var{name} causes
527@command{ar} to load the plugin called @var{name} which adds support
528for more file formats. This option is only available if the toolchain
529has been built with plugin support enabled.
530
8adf5d70
NC
531The optional command line switch @option{--target} @var{bfdname}
532specifies that the archive members are in an object code format
533different from your system's default format. See
534@xref{Target Selection}, for more information.
535
0285c67d
NC
536@c man end
537
538@ignore
539@c man begin SEEALSO ar
540nm(1), ranlib(1), and the Info entries for @file{binutils}.
541@c man end
542@end ignore
543
252b5132 544@node ar scripts
947ed062 545@section Controlling @command{ar} with a Script
252b5132
RH
546
547@smallexample
548ar -M [ <@var{script} ]
549@end smallexample
550
c7c55b78
NC
551@cindex MRI compatibility, @command{ar}
552@cindex scripts, @command{ar}
553If you use the single command-line option @samp{-M} with @command{ar}, you
252b5132 554can control its operation with a rudimentary command language. This
c7c55b78
NC
555form of @command{ar} operates interactively if standard input is coming
556directly from a terminal. During interactive use, @command{ar} prompts for
252b5132
RH
557input (the prompt is @samp{AR >}), and continues executing even after
558errors. If you redirect standard input to a script file, no prompts are
c7c55b78 559issued, and @command{ar} abandons execution (with a nonzero exit code)
252b5132
RH
560on any error.
561
c7c55b78 562The @command{ar} command language is @emph{not} designed to be equivalent
252b5132
RH
563to the command-line options; in fact, it provides somewhat less control
564over archives. The only purpose of the command language is to ease the
c7c55b78 565transition to @sc{gnu} @command{ar} for developers who already have scripts
252b5132
RH
566written for the MRI ``librarian'' program.
567
c7c55b78 568The syntax for the @command{ar} command language is straightforward:
252b5132
RH
569@itemize @bullet
570@item
571commands are recognized in upper or lower case; for example, @code{LIST}
572is the same as @code{list}. In the following descriptions, commands are
573shown in upper case for clarity.
574
575@item
576a single command may appear on each line; it is the first word on the
577line.
578
579@item
580empty lines are allowed, and have no effect.
581
582@item
583comments are allowed; text after either of the characters @samp{*}
584or @samp{;} is ignored.
585
586@item
c7c55b78 587Whenever you use a list of names as part of the argument to an @command{ar}
252b5132
RH
588command, you can separate the individual names with either commas or
589blanks. Commas are shown in the explanations below, for clarity.
590
591@item
592@samp{+} is used as a line continuation character; if @samp{+} appears
593at the end of a line, the text on the following line is considered part
594of the current command.
595@end itemize
596
c7c55b78
NC
597Here are the commands you can use in @command{ar} scripts, or when using
598@command{ar} interactively. Three of them have special significance:
252b5132
RH
599
600@code{OPEN} or @code{CREATE} specify a @dfn{current archive}, which is
601a temporary file required for most of the other commands.
602
603@code{SAVE} commits the changes so far specified by the script. Prior
604to @code{SAVE}, commands affect only the temporary copy of the current
605archive.
606
607@table @code
c1c0eb9e 608@item ADDLIB @var{archive}
252b5132
RH
609@itemx ADDLIB @var{archive} (@var{module}, @var{module}, @dots{} @var{module})
610Add all the contents of @var{archive} (or, if specified, each named
611@var{module} from @var{archive}) to the current archive.
612
613Requires prior use of @code{OPEN} or @code{CREATE}.
614
615@item ADDMOD @var{member}, @var{member}, @dots{} @var{member}
616@c FIXME! w/Replacement?? If so, like "ar r @var{archive} @var{names}"
617@c else like "ar q..."
618Add each named @var{member} as a module in the current archive.
619
620Requires prior use of @code{OPEN} or @code{CREATE}.
621
622@item CLEAR
623Discard the contents of the current archive, canceling the effect of
624any operations since the last @code{SAVE}. May be executed (with no
625effect) even if no current archive is specified.
626
627@item CREATE @var{archive}
628Creates an archive, and makes it the current archive (required for many
629other commands). The new archive is created with a temporary name; it
630is not actually saved as @var{archive} until you use @code{SAVE}.
631You can overwrite existing archives; similarly, the contents of any
632existing file named @var{archive} will not be destroyed until @code{SAVE}.
633
634@item DELETE @var{module}, @var{module}, @dots{} @var{module}
635Delete each listed @var{module} from the current archive; equivalent to
636@samp{ar -d @var{archive} @var{module} @dots{} @var{module}}.
637
638Requires prior use of @code{OPEN} or @code{CREATE}.
639
640@item DIRECTORY @var{archive} (@var{module}, @dots{} @var{module})
641@itemx DIRECTORY @var{archive} (@var{module}, @dots{} @var{module}) @var{outputfile}
642List each named @var{module} present in @var{archive}. The separate
643command @code{VERBOSE} specifies the form of the output: when verbose
644output is off, output is like that of @samp{ar -t @var{archive}
645@var{module}@dots{}}. When verbose output is on, the listing is like
646@samp{ar -tv @var{archive} @var{module}@dots{}}.
647
648Output normally goes to the standard output stream; however, if you
c7c55b78 649specify @var{outputfile} as a final argument, @command{ar} directs the
252b5132
RH
650output to that file.
651
652@item END
c7c55b78 653Exit from @command{ar}, with a @code{0} exit code to indicate successful
252b5132
RH
654completion. This command does not save the output file; if you have
655changed the current archive since the last @code{SAVE} command, those
656changes are lost.
657
658@item EXTRACT @var{module}, @var{module}, @dots{} @var{module}
659Extract each named @var{module} from the current archive, writing them
660into the current directory as separate files. Equivalent to @samp{ar -x
661@var{archive} @var{module}@dots{}}.
662
663Requires prior use of @code{OPEN} or @code{CREATE}.
664
665@ignore
666@c FIXME Tokens but no commands???
667@item FULLDIR
668
669@item HELP
670@end ignore
671
672@item LIST
673Display full contents of the current archive, in ``verbose'' style
674regardless of the state of @code{VERBOSE}. The effect is like @samp{ar
c7c55b78 675tv @var{archive}}. (This single command is a @sc{gnu} @command{ar}
252b5132
RH
676enhancement, rather than present for MRI compatibility.)
677
678Requires prior use of @code{OPEN} or @code{CREATE}.
679
680@item OPEN @var{archive}
681Opens an existing archive for use as the current archive (required for
682many other commands). Any changes as the result of subsequent commands
683will not actually affect @var{archive} until you next use @code{SAVE}.
684
685@item REPLACE @var{module}, @var{module}, @dots{} @var{module}
686In the current archive, replace each existing @var{module} (named in
687the @code{REPLACE} arguments) from files in the current working directory.
688To execute this command without errors, both the file, and the module in
c1c0eb9e 689the current archive, must exist.
252b5132
RH
690
691Requires prior use of @code{OPEN} or @code{CREATE}.
692
693@item VERBOSE
694Toggle an internal flag governing the output from @code{DIRECTORY}.
695When the flag is on, @code{DIRECTORY} output matches output from
696@samp{ar -tv }@dots{}.
697
698@item SAVE
699Commit your changes to the current archive, and actually save it as a
700file with the name specified in the last @code{CREATE} or @code{OPEN}
c1c0eb9e 701command.
252b5132
RH
702
703Requires prior use of @code{OPEN} or @code{CREATE}.
704
705@end table
706
707@iftex
708@node ld
709@chapter ld
710@cindex linker
711@kindex ld
c7c55b78 712The @sc{gnu} linker @command{ld} is now described in a separate manual.
252b5132
RH
713@xref{Top,, Overview,, Using LD: the @sc{gnu} linker}.
714@end iftex
715
716@node nm
717@chapter nm
718@cindex symbols
719@kindex nm
720
0285c67d
NC
721@c man title nm list symbols from object files
722
252b5132 723@smallexample
0285c67d 724@c man begin SYNOPSIS nm
ce3c775b
NC
725nm [@option{-a}|@option{--debug-syms}]
726 [@option{-g}|@option{--extern-only}][@option{--plugin} @var{name}]
c7c55b78 727 [@option{-B}] [@option{-C}|@option{--demangle}[=@var{style}]] [@option{-D}|@option{--dynamic}]
72797995 728 [@option{-S}|@option{--print-size}] [@option{-s}|@option{--print-armap}]
3c9458e9 729 [@option{-A}|@option{-o}|@option{--print-file-name}][@option{--special-syms}]
c7c55b78
NC
730 [@option{-n}|@option{-v}|@option{--numeric-sort}] [@option{-p}|@option{--no-sort}]
731 [@option{-r}|@option{--reverse-sort}] [@option{--size-sort}] [@option{-u}|@option{--undefined-only}]
732 [@option{-t} @var{radix}|@option{--radix=}@var{radix}] [@option{-P}|@option{--portability}]
733 [@option{--target=}@var{bfdname}] [@option{-f}@var{format}|@option{--format=}@var{format}]
734 [@option{--defined-only}] [@option{-l}|@option{--line-numbers}] [@option{--no-demangle}]
735 [@option{-V}|@option{--version}] [@option{-X 32_64}] [@option{--help}] [@var{objfile}@dots{}]
0285c67d 736@c man end
252b5132
RH
737@end smallexample
738
0285c67d 739@c man begin DESCRIPTION nm
c7c55b78
NC
740@sc{gnu} @command{nm} lists the symbols from object files @var{objfile}@dots{}.
741If no object files are listed as arguments, @command{nm} assumes the file
252b5132
RH
742@file{a.out}.
743
c7c55b78 744For each symbol, @command{nm} shows:
252b5132
RH
745
746@itemize @bullet
747@item
748The symbol value, in the radix selected by options (see below), or
749hexadecimal by default.
750
751@item
752The symbol type. At least the following types are used; others are, as
753well, depending on the object file format. If lowercase, the symbol is
0ba0c2b3
NC
754usually local; if uppercase, the symbol is global (external). There
755are however a few lowercase symbols that are shown for special global
756symbols (@code{u}, @code{v} and @code{w}).
252b5132
RH
757
758@c Some more detail on exactly what these symbol types are used for
759@c would be nice.
760@table @code
761@item A
762The symbol's value is absolute, and will not be changed by further
763linking.
764
765@item B
a1039809 766@itemx b
252b5132
RH
767The symbol is in the uninitialized data section (known as BSS).
768
769@item C
770The symbol is common. Common symbols are uninitialized data. When
771linking, multiple common symbols may appear with the same name. If the
772symbol is defined anywhere, the common symbols are treated as undefined
0285c67d
NC
773references.
774@ifclear man
775For more details on common symbols, see the discussion of
252b5132 776--warn-common in @ref{Options,,Linker options,ld.info,The GNU linker}.
0879a67a 777@end ifclear
252b5132
RH
778
779@item D
a1039809 780@itemx d
252b5132
RH
781The symbol is in the initialized data section.
782
783@item G
a1039809 784@itemx g
252b5132
RH
785The symbol is in an initialized data section for small objects. Some
786object file formats permit more efficient access to small data objects,
787such as a global int variable as opposed to a large global array.
788
a1039809 789@item i
3e7a7d11
NC
790For PE format files this indicates that the symbol is in a section
791specific to the implementation of DLLs. For ELF format files this
792indicates that the symbol is an indirect function. This is a GNU
793extension to the standard set of ELF symbol types. It indicates a
794symbol which if referenced by a relocation does not evaluate to its
795address, but instead must be invoked at runtime. The runtime
796execution will then return the value to be used in the relocation.
a1039809 797
252b5132
RH
798@item N
799The symbol is a debugging symbol.
800
a1039809
NC
801@item p
802The symbols is in a stack unwind section.
803
252b5132 804@item R
a1039809 805@itemx r
252b5132
RH
806The symbol is in a read only data section.
807
808@item S
a1039809 809@itemx s
252b5132
RH
810The symbol is in an uninitialized data section for small objects.
811
812@item T
a1039809 813@itemx t
252b5132
RH
814The symbol is in the text (code) section.
815
816@item U
817The symbol is undefined.
818
3e7a7d11
NC
819@item u
820The symbol is a unique global symbol. This is a GNU extension to the
821standard set of ELF symbol bindings. For such a symbol the dynamic linker
822will make sure that in the entire process there is just one symbol with
823this name and type in use.
824
fad6fcbb 825@item V
a1039809 826@itemx v
fad6fcbb
NC
827The symbol is a weak object. When a weak defined symbol is linked with
828a normal defined symbol, the normal defined symbol is used with no error.
829When a weak undefined symbol is linked and the symbol is not defined,
a1039809
NC
830the value of the weak symbol becomes zero with no error. On some
831systems, uppercase indicates that a default value has been specified.
fad6fcbb 832
252b5132 833@item W
a1039809 834@itemx w
fad6fcbb
NC
835The symbol is a weak symbol that has not been specifically tagged as a
836weak object symbol. When a weak defined symbol is linked with a normal
837defined symbol, the normal defined symbol is used with no error.
838When a weak undefined symbol is linked and the symbol is not defined,
c87db184 839the value of the symbol is determined in a system-specific manner without
c1c0eb9e 840error. On some systems, uppercase indicates that a default value has been
977cdf5a
NC
841specified.
842
252b5132
RH
843@item -
844The symbol is a stabs symbol in an a.out object file. In this case, the
845next values printed are the stabs other field, the stabs desc field, and
c7c55b78
NC
846the stab type. Stabs symbols are used to hold debugging information.
847@ifclear man
848For more information, see @ref{Top,Stabs,Stabs Overview,stabs.info, The
252b5132 849``stabs'' debug format}.
c7c55b78 850@end ifclear
252b5132
RH
851
852@item ?
853The symbol type is unknown, or object file format specific.
854@end table
855
856@item
857The symbol name.
858@end itemize
859
0285c67d
NC
860@c man end
861
862@c man begin OPTIONS nm
252b5132
RH
863The long and short forms of options, shown here as alternatives, are
864equivalent.
865
c7c55b78 866@table @env
252b5132
RH
867@item -A
868@itemx -o
c1c0eb9e 869@itemx --print-file-name
252b5132
RH
870@cindex input file name
871@cindex file name
872@cindex source file name
f20a759a 873Precede each symbol by the name of the input file (or archive member)
252b5132
RH
874in which it was found, rather than identifying the input file once only,
875before all of its symbols.
876
877@item -a
c1c0eb9e 878@itemx --debug-syms
252b5132
RH
879@cindex debugging symbols
880Display all symbols, even debugger-only symbols; normally these are not
881listed.
882
883@item -B
c7c55b78
NC
884@cindex @command{nm} format
885@cindex @command{nm} compatibility
886The same as @option{--format=bsd} (for compatibility with the MIPS @command{nm}).
252b5132
RH
887
888@item -C
28c309a2 889@itemx --demangle[=@var{style}]
252b5132
RH
890@cindex demangling in nm
891Decode (@dfn{demangle}) low-level symbol names into user-level names.
892Besides removing any initial underscore prepended by the system, this
28c309a2 893makes C++ function names readable. Different compilers have different
c1c0eb9e
RM
894mangling styles. The optional demangling style argument can be used to
895choose an appropriate demangling style for your compiler. @xref{c++filt},
28c309a2 896for more information on demangling.
252b5132
RH
897
898@item --no-demangle
899Do not demangle low-level symbol names. This is the default.
900
901@item -D
902@itemx --dynamic
903@cindex dynamic symbols
904Display the dynamic symbols rather than the normal symbols. This is
905only meaningful for dynamic objects, such as certain types of shared
906libraries.
907
908@item -f @var{format}
909@itemx --format=@var{format}
c7c55b78
NC
910@cindex @command{nm} format
911@cindex @command{nm} compatibility
252b5132
RH
912Use the output format @var{format}, which can be @code{bsd},
913@code{sysv}, or @code{posix}. The default is @code{bsd}.
914Only the first character of @var{format} is significant; it can be
915either upper or lower case.
916
917@item -g
c1c0eb9e 918@itemx --extern-only
252b5132
RH
919@cindex external symbols
920Display only external symbols.
921
ce3c775b
NC
922@item --plugin @var{name}
923@cindex load plugin
924Load the plugin called @var{name} to add support for extra target
925types. This option is only available if the toolchain has been built
926with plugin support enabled.
927
252b5132
RH
928@item -l
929@itemx --line-numbers
930@cindex symbol line numbers
931For each symbol, use debugging information to try to find a filename and
932line number. For a defined symbol, look for the line number of the
933address of the symbol. For an undefined symbol, look for the line
934number of a relocation entry which refers to the symbol. If line number
935information can be found, print it after the other symbol information.
936
937@item -n
938@itemx -v
c1c0eb9e 939@itemx --numeric-sort
252b5132 940Sort symbols numerically by their addresses, rather than alphabetically
c1c0eb9e 941by their names.
252b5132
RH
942
943@item -p
c1c0eb9e 944@itemx --no-sort
252b5132
RH
945@cindex sorting symbols
946Do not bother to sort the symbols in any order; print them in the order
947encountered.
948
949@item -P
950@itemx --portability
951Use the POSIX.2 standard output format instead of the default format.
952Equivalent to @samp{-f posix}.
953
72797995
L
954@item -S
955@itemx --print-size
1533edfb
AM
956Print both value and size of defined symbols for the @code{bsd} output style.
957This option has no effect for object formats that do not record symbol
958sizes, unless @samp{--size-sort} is also used in which case a
959calculated size is displayed.
72797995 960
252b5132
RH
961@item -s
962@itemx --print-armap
963@cindex symbol index, listing
964When listing symbols from archive members, include the index: a mapping
c7c55b78 965(stored in the archive by @command{ar} or @command{ranlib}) of which modules
252b5132
RH
966contain definitions for which names.
967
968@item -r
c1c0eb9e 969@itemx --reverse-sort
252b5132
RH
970Reverse the order of the sort (whether numeric or alphabetic); let the
971last come first.
972
973@item --size-sort
974Sort symbols by size. The size is computed as the difference between
975the value of the symbol and the value of the symbol with the next higher
c1c0eb9e
RM
976value. If the @code{bsd} output format is used the size of the symbol
977is printed, rather than the value, and @samp{-S} must be used in order
76ed1927 978both size and value to be printed.
252b5132 979
3c9458e9
NC
980@item --special-syms
981Display symbols which have a target-specific special meaning. These
982symbols are usually used by the target for some special processing and
983are not normally helpful when included included in the normal symbol
984lists. For example for ARM targets this option would skip the mapping
b45619c0 985symbols used to mark transitions between ARM code, THUMB code and
3c9458e9
NC
986data.
987
252b5132
RH
988@item -t @var{radix}
989@itemx --radix=@var{radix}
990Use @var{radix} as the radix for printing the symbol values. It must be
991@samp{d} for decimal, @samp{o} for octal, or @samp{x} for hexadecimal.
992
993@item --target=@var{bfdname}
994@cindex object code format
995Specify an object code format other than your system's default format.
996@xref{Target Selection}, for more information.
997
998@item -u
c1c0eb9e 999@itemx --undefined-only
252b5132
RH
1000@cindex external symbols
1001@cindex undefined symbols
1002Display only undefined symbols (those external to each object file).
1003
1004@item --defined-only
1005@cindex external symbols
1006@cindex undefined symbols
1007Display only defined symbols for each object file.
1008
1009@item -V
1010@itemx --version
c7c55b78 1011Show the version number of @command{nm} and exit.
252b5132 1012
6e800839
GK
1013@item -X
1014This option is ignored for compatibility with the AIX version of
c7c55b78
NC
1015@command{nm}. It takes one parameter which must be the string
1016@option{32_64}. The default mode of AIX @command{nm} corresponds
1017to @option{-X 32}, which is not supported by @sc{gnu} @command{nm}.
6e800839 1018
252b5132 1019@item --help
c7c55b78 1020Show a summary of the options to @command{nm} and exit.
252b5132
RH
1021@end table
1022
0285c67d
NC
1023@c man end
1024
1025@ignore
1026@c man begin SEEALSO nm
1027ar(1), objdump(1), ranlib(1), and the Info entries for @file{binutils}.
1028@c man end
1029@end ignore
1030
252b5132
RH
1031@node objcopy
1032@chapter objcopy
1033
0285c67d
NC
1034@c man title objcopy copy and translate object files
1035
252b5132 1036@smallexample
0285c67d 1037@c man begin SYNOPSIS objcopy
c7c55b78
NC
1038objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}]
1039 [@option{-I} @var{bfdname}|@option{--input-target=}@var{bfdname}]
1040 [@option{-O} @var{bfdname}|@option{--output-target=}@var{bfdname}]
1041 [@option{-B} @var{bfdarch}|@option{--binary-architecture=}@var{bfdarch}]
2593f09a
NC
1042 [@option{-S}|@option{--strip-all}]
1043 [@option{-g}|@option{--strip-debug}]
c7c55b78
NC
1044 [@option{-K} @var{symbolname}|@option{--keep-symbol=}@var{symbolname}]
1045 [@option{-N} @var{symbolname}|@option{--strip-symbol=}@var{symbolname}]
bcf32829 1046 [@option{--strip-unneeded-symbol=}@var{symbolname}]
c7c55b78 1047 [@option{-G} @var{symbolname}|@option{--keep-global-symbol=}@var{symbolname}]
d58c2e3a 1048 [@option{--localize-hidden}]
c7c55b78 1049 [@option{-L} @var{symbolname}|@option{--localize-symbol=}@var{symbolname}]
7b4a0685 1050 [@option{--globalize-symbol=}@var{symbolname}]
c7c55b78 1051 [@option{-W} @var{symbolname}|@option{--weaken-symbol=}@var{symbolname}]
5fe11841 1052 [@option{-w}|@option{--wildcard}]
2593f09a
NC
1053 [@option{-x}|@option{--discard-all}]
1054 [@option{-X}|@option{--discard-locals}]
c7c55b78 1055 [@option{-b} @var{byte}|@option{--byte=}@var{byte}]
b7dd81f7
NC
1056 [@option{-i} [@var{breadth}]|@option{--interleave}[=@var{breadth}]]
1057 [@option{--interleave-width=}@var{width}]
c7c55b78
NC
1058 [@option{-j} @var{sectionname}|@option{--only-section=}@var{sectionname}]
1059 [@option{-R} @var{sectionname}|@option{--remove-section=}@var{sectionname}]
1060 [@option{-p}|@option{--preserve-dates}]
1061 [@option{--debugging}]
2593f09a
NC
1062 [@option{--gap-fill=}@var{val}]
1063 [@option{--pad-to=}@var{address}]
1064 [@option{--set-start=}@var{val}]
1065 [@option{--adjust-start=}@var{incr}]
c7c55b78
NC
1066 [@option{--change-addresses=}@var{incr}]
1067 [@option{--change-section-address} @var{section}@{=,+,-@}@var{val}]
1068 [@option{--change-section-lma} @var{section}@{=,+,-@}@var{val}]
1069 [@option{--change-section-vma} @var{section}@{=,+,-@}@var{val}]
1070 [@option{--change-warnings}] [@option{--no-change-warnings}]
1071 [@option{--set-section-flags} @var{section}=@var{flags}]
1072 [@option{--add-section} @var{sectionname}=@var{filename}]
1073 [@option{--rename-section} @var{oldname}=@var{newname}[,@var{flags}]]
0408dee6 1074 [@option{--long-section-names} @{enable,disable,keep@}]
2593f09a 1075 [@option{--change-leading-char}] [@option{--remove-leading-char}]
9e48b4c6 1076 [@option{--reverse-bytes=}@var{num}]
2593f09a
NC
1077 [@option{--srec-len=}@var{ival}] [@option{--srec-forceS3}]
1078 [@option{--redefine-sym} @var{old}=@var{new}]
1079 [@option{--redefine-syms=}@var{filename}]
c7c55b78
NC
1080 [@option{--weaken}]
1081 [@option{--keep-symbols=}@var{filename}]
1082 [@option{--strip-symbols=}@var{filename}]
bcf32829 1083 [@option{--strip-unneeded-symbols=}@var{filename}]
c7c55b78
NC
1084 [@option{--keep-global-symbols=}@var{filename}]
1085 [@option{--localize-symbols=}@var{filename}]
7b4a0685 1086 [@option{--globalize-symbols=}@var{filename}]
c7c55b78 1087 [@option{--weaken-symbols=}@var{filename}]
c51238bc
DA
1088 [@option{--alt-machine-code=}@var{index}]
1089 [@option{--prefix-symbols=}@var{string}]
1090 [@option{--prefix-sections=}@var{string}]
1091 [@option{--prefix-alloc-sections=}@var{string}]
ed1653a7 1092 [@option{--add-gnu-debuglink=}@var{path-to-file}]
1637cd90 1093 [@option{--keep-file-symbols}]
ed1653a7 1094 [@option{--only-keep-debug}]
d3e52d40 1095 [@option{--extract-symbol}]
4087920c
MR
1096 [@option{--writable-text}]
1097 [@option{--readonly-text}]
1098 [@option{--pure}]
1099 [@option{--impure}]
92dd4511
L
1100 [@option{--file-alignment=}@var{num}]
1101 [@option{--heap=}@var{size}]
1102 [@option{--image-base=}@var{address}]
1103 [@option{--section-alignment=}@var{num}]
1104 [@option{--stack=}@var{size}]
1105 [@option{--subsystem=}@var{which}:@var{major}.@var{minor}]
4a114e3e
L
1106 [@option{--compress-debug-sections}]
1107 [@option{--decompress-debug-sections}]
fd2f0033
TT
1108 [@option{--dwarf-depth=@var{n}}]
1109 [@option{--dwarf-start=@var{n}}]
c7c55b78 1110 [@option{-v}|@option{--verbose}]
c1c0eb9e 1111 [@option{-V}|@option{--version}]
7c29036b 1112 [@option{--help}] [@option{--info}]
252b5132 1113 @var{infile} [@var{outfile}]
0285c67d 1114@c man end
252b5132
RH
1115@end smallexample
1116
0285c67d 1117@c man begin DESCRIPTION objcopy
c7c55b78
NC
1118The @sc{gnu} @command{objcopy} utility copies the contents of an object
1119file to another. @command{objcopy} uses the @sc{gnu} @sc{bfd} Library to
252b5132
RH
1120read and write the object files. It can write the destination object
1121file in a format different from that of the source object file. The
c7c55b78
NC
1122exact behavior of @command{objcopy} is controlled by command-line options.
1123Note that @command{objcopy} should be able to copy a fully linked file
ccd13d18
L
1124between any two formats. However, copying a relocatable object file
1125between any two formats may not work as expected.
252b5132 1126
c7c55b78
NC
1127@command{objcopy} creates temporary files to do its translations and
1128deletes them afterward. @command{objcopy} uses @sc{bfd} to do all its
252b5132
RH
1129translation work; it has access to all the formats described in @sc{bfd}
1130and thus is able to recognize most formats without being told
1131explicitly. @xref{BFD,,BFD,ld.info,Using LD}.
1132
c7c55b78 1133@command{objcopy} can be used to generate S-records by using an output
252b5132
RH
1134target of @samp{srec} (e.g., use @samp{-O srec}).
1135
c7c55b78
NC
1136@command{objcopy} can be used to generate a raw binary file by using an
1137output target of @samp{binary} (e.g., use @option{-O binary}). When
1138@command{objcopy} generates a raw binary file, it will essentially produce
252b5132
RH
1139a memory dump of the contents of the input object file. All symbols and
1140relocation information will be discarded. The memory dump will start at
1141the load address of the lowest section copied into the output file.
1142
1143When generating an S-record or a raw binary file, it may be helpful to
c7c55b78
NC
1144use @option{-S} to remove sections containing debugging information. In
1145some cases @option{-R} will be useful to remove sections which contain
f20a759a 1146information that is not needed by the binary file.
252b5132 1147
947ed062
NC
1148Note---@command{objcopy} is not able to change the endianness of its input
1149files. If the input format has an endianness (some formats do not),
c7c55b78 1150@command{objcopy} can only copy the inputs into file formats that have the
947ed062 1151same endianness or which have no endianness (e.g., @samp{srec}).
9e48b4c6 1152(However, see the @option{--reverse-bytes} option.)
18356cf2 1153
0285c67d
NC
1154@c man end
1155
1156@c man begin OPTIONS objcopy
1157
c7c55b78 1158@table @env
252b5132
RH
1159@item @var{infile}
1160@itemx @var{outfile}
f20a759a 1161The input and output files, respectively.
c7c55b78 1162If you do not specify @var{outfile}, @command{objcopy} creates a
252b5132
RH
1163temporary file and destructively renames the result with
1164the name of @var{infile}.
1165
c7c55b78 1166@item -I @var{bfdname}
252b5132
RH
1167@itemx --input-target=@var{bfdname}
1168Consider the source file's object format to be @var{bfdname}, rather than
1169attempting to deduce it. @xref{Target Selection}, for more information.
1170
1171@item -O @var{bfdname}
1172@itemx --output-target=@var{bfdname}
1173Write the output file using the object format @var{bfdname}.
1174@xref{Target Selection}, for more information.
1175
1176@item -F @var{bfdname}
1177@itemx --target=@var{bfdname}
1178Use @var{bfdname} as the object format for both the input and the output
1179file; i.e., simply transfer data from source to destination with no
1180translation. @xref{Target Selection}, for more information.
1181
43a0748c
NC
1182@item -B @var{bfdarch}
1183@itemx --binary-architecture=@var{bfdarch}
8b31b6c4
NC
1184Useful when transforming a architecture-less input file into an object file.
1185In this case the output architecture can be set to @var{bfdarch}. This
1186option will be ignored if the input file has a known @var{bfdarch}. You
43a0748c
NC
1187can access this binary data inside a program by referencing the special
1188symbols that are created by the conversion process. These symbols are
1189called _binary_@var{objfile}_start, _binary_@var{objfile}_end and
1190_binary_@var{objfile}_size. e.g. you can transform a picture file into
c1c0eb9e 1191an object file and then access it in your code using these symbols.
43a0748c 1192
f91ea849
ILT
1193@item -j @var{sectionname}
1194@itemx --only-section=@var{sectionname}
1195Copy only the named section from the input file to the output file.
1196This option may be given more than once. Note that using this option
1197inappropriately may make the output file unusable.
1198
252b5132
RH
1199@item -R @var{sectionname}
1200@itemx --remove-section=@var{sectionname}
1201Remove any section named @var{sectionname} from the output file. This
1202option may be given more than once. Note that using this option
1203inappropriately may make the output file unusable.
1204
1205@item -S
1206@itemx --strip-all
1207Do not copy relocation and symbol information from the source file.
1208
1209@item -g
1210@itemx --strip-debug
2593f09a 1211Do not copy debugging symbols or sections from the source file.
252b5132
RH
1212
1213@item --strip-unneeded
1214Strip all symbols that are not needed for relocation processing.
1215
1216@item -K @var{symbolname}
1217@itemx --keep-symbol=@var{symbolname}
e7f918ad
NC
1218When stripping symbols, keep symbol @var{symbolname} even if it would
1219normally be stripped. This option may be given more than once.
252b5132
RH
1220
1221@item -N @var{symbolname}
1222@itemx --strip-symbol=@var{symbolname}
1223Do not copy symbol @var{symbolname} from the source file. This option
1224may be given more than once.
1225
bcf32829
JB
1226@item --strip-unneeded-symbol=@var{symbolname}
1227Do not copy symbol @var{symbolname} from the source file unless it is needed
1228by a relocation. This option may be given more than once.
1229
16b2b71c
NC
1230@item -G @var{symbolname}
1231@itemx --keep-global-symbol=@var{symbolname}
1232Keep only symbol @var{symbolname} global. Make all other symbols local
1233to the file, so that they are not visible externally. This option may
1234be given more than once.
1235
d58c2e3a
RS
1236@item --localize-hidden
1237In an ELF object, mark all symbols that have hidden or internal visibility
1238as local. This option applies on top of symbol-specific localization options
1239such as @option{-L}.
1240
252b5132
RH
1241@item -L @var{symbolname}
1242@itemx --localize-symbol=@var{symbolname}
1243Make symbol @var{symbolname} local to the file, so that it is not
1244visible externally. This option may be given more than once.
1245
1246@item -W @var{symbolname}
1247@itemx --weaken-symbol=@var{symbolname}
1248Make symbol @var{symbolname} weak. This option may be given more than once.
1249
7b4a0685
NC
1250@item --globalize-symbol=@var{symbolname}
1251Give symbol @var{symbolname} global scoping so that it is visible
1252outside of the file in which it is defined. This option may be given
1253more than once.
1254
5fe11841
NC
1255@item -w
1256@itemx --wildcard
1257Permit regular expressions in @var{symbolname}s used in other command
1258line options. The question mark (?), asterisk (*), backslash (\) and
1259square brackets ([]) operators can be used anywhere in the symbol
1260name. If the first character of the symbol name is the exclamation
1261point (!) then the sense of the switch is reversed for that symbol.
1262For example:
1263
1264@smallexample
1265 -w -W !foo -W fo*
1266@end smallexample
1267
1268would cause objcopy to weaken all symbols that start with ``fo''
1269except for the symbol ``foo''.
1270
252b5132
RH
1271@item -x
1272@itemx --discard-all
1273Do not copy non-global symbols from the source file.
1274@c FIXME any reason to prefer "non-global" to "local" here?
1275
1276@item -X
1277@itemx --discard-locals
1278Do not copy compiler-generated local symbols.
1279(These usually start with @samp{L} or @samp{.}.)
1280
1281@item -b @var{byte}
1282@itemx --byte=@var{byte}
b7dd81f7
NC
1283If interleaving has been enabled via the @option{--interleave} option
1284then start the range of bytes to keep at the @var{byte}th byte.
1285@var{byte} can be in the range from 0 to @var{breadth}-1, where
1286@var{breadth} is the value given by the @option{--interleave} option.
1287
1288@item -i [@var{breadth}]
1289@itemx --interleave[=@var{breadth}]
1290Only copy a range out of every @var{breadth} bytes. (Header data is
1291not affected). Select which byte in the range begins the copy with
1292the @option{--byte} option. Select the width of the range with the
1293@option{--interleave-width} option.
1294
1295This option is useful for creating files to program @sc{rom}. It is
1296typically used with an @code{srec} output target. Note that
1297@command{objcopy} will complain if you do not specify the
1298@option{--byte} option as well.
1299
1300The default interleave breadth is 4, so with @option{--byte} set to 0,
1301@command{objcopy} would copy the first byte out of every four bytes
1302from the input to the output.
1303
1304@item --interleave-width=@var{width}
1305When used with the @option{--interleave} option, copy @var{width}
1306bytes at a time. The start of the range of bytes to be copied is set
1307by the @option{--byte} option, and the extent of the range is set with
1308the @option{--interleave} option.
1309
1310The default value for this option is 1. The value of @var{width} plus
1311the @var{byte} value set by the @option{--byte} option must not exceed
1312the interleave breadth set by the @option{--interleave} option.
1313
1314This option can be used to create images for two 16-bit flashes interleaved
1315in a 32-bit bus by passing @option{-b 0 -i 4 --interleave-width=2}
1316and @option{-b 2 -i 4 --interleave-width=2} to two @command{objcopy}
1317commands. If the input was '12345678' then the outputs would be
1318'1256' and '3478' respectively.
252b5132
RH
1319
1320@item -p
1321@itemx --preserve-dates
1322Set the access and modification dates of the output file to be the same
1323as those of the input file.
1324
1325@item --debugging
1326Convert debugging information, if possible. This is not the default
1327because only certain debugging formats are supported, and the
1328conversion process can be time consuming.
1329
1330@item --gap-fill @var{val}
1331Fill gaps between sections with @var{val}. This operation applies to
1332the @emph{load address} (LMA) of the sections. It is done by increasing
1333the size of the section with the lower address, and filling in the extra
1334space created with @var{val}.
1335
1336@item --pad-to @var{address}
1337Pad the output file up to the load address @var{address}. This is
1338done by increasing the size of the last section. The extra space is
c7c55b78 1339filled in with the value specified by @option{--gap-fill} (default zero).
252b5132
RH
1340
1341@item --set-start @var{val}
f20a759a 1342Set the start address of the new file to @var{val}. Not all object file
252b5132
RH
1343formats support setting the start address.
1344
1345@item --change-start @var{incr}
1346@itemx --adjust-start @var{incr}
1347@cindex changing start address
1348Change the start address by adding @var{incr}. Not all object file
1349formats support setting the start address.
1350
1351@item --change-addresses @var{incr}
1352@itemx --adjust-vma @var{incr}
1353@cindex changing object addresses
1354Change the VMA and LMA addresses of all sections, as well as the start
1355address, by adding @var{incr}. Some object file formats do not permit
1356section addresses to be changed arbitrarily. Note that this does not
1357relocate the sections; if the program expects sections to be loaded at a
1358certain address, and this option is used to change the sections such
c1c0eb9e 1359that they are loaded at a different address, the program may fail.
252b5132
RH
1360
1361@item --change-section-address @var{section}@{=,+,-@}@var{val}
1362@itemx --adjust-section-vma @var{section}@{=,+,-@}@var{val}
1363@cindex changing section address
1364Set or change both the VMA address and the LMA address of the named
1365@var{section}. If @samp{=} is used, the section address is set to
1366@var{val}. Otherwise, @var{val} is added to or subtracted from the
c7c55b78 1367section address. See the comments under @option{--change-addresses},
252b5132 1368above. If @var{section} does not exist in the input file, a warning will
c7c55b78 1369be issued, unless @option{--no-change-warnings} is used.
252b5132
RH
1370
1371@item --change-section-lma @var{section}@{=,+,-@}@var{val}
1372@cindex changing section LMA
1373Set or change the LMA address of the named @var{section}. The LMA
1374address is the address where the section will be loaded into memory at
1375program load time. Normally this is the same as the VMA address, which
1376is the address of the section at program run time, but on some systems,
1377especially those where a program is held in ROM, the two can be
1378different. If @samp{=} is used, the section address is set to
1379@var{val}. Otherwise, @var{val} is added to or subtracted from the
c7c55b78 1380section address. See the comments under @option{--change-addresses},
252b5132 1381above. If @var{section} does not exist in the input file, a warning
c1c0eb9e 1382will be issued, unless @option{--no-change-warnings} is used.
252b5132
RH
1383
1384@item --change-section-vma @var{section}@{=,+,-@}@var{val}
1385@cindex changing section VMA
1386Set or change the VMA address of the named @var{section}. The VMA
1387address is the address where the section will be located once the
1388program has started executing. Normally this is the same as the LMA
1389address, which is the address where the section will be loaded into
1390memory, but on some systems, especially those where a program is held in
1391ROM, the two can be different. If @samp{=} is used, the section address
1392is set to @var{val}. Otherwise, @var{val} is added to or subtracted
1393from the section address. See the comments under
c7c55b78 1394@option{--change-addresses}, above. If @var{section} does not exist in
252b5132 1395the input file, a warning will be issued, unless
c1c0eb9e 1396@option{--no-change-warnings} is used.
252b5132
RH
1397
1398@item --change-warnings
1399@itemx --adjust-warnings
c7c55b78
NC
1400If @option{--change-section-address} or @option{--change-section-lma} or
1401@option{--change-section-vma} is used, and the named section does not
c1c0eb9e 1402exist, issue a warning. This is the default.
252b5132
RH
1403
1404@item --no-change-warnings
1405@itemx --no-adjust-warnings
c7c55b78
NC
1406Do not issue a warning if @option{--change-section-address} or
1407@option{--adjust-section-lma} or @option{--adjust-section-vma} is used, even
c1c0eb9e 1408if the named section does not exist.
252b5132
RH
1409
1410@item --set-section-flags @var{section}=@var{flags}
1411Set the flags for the named section. The @var{flags} argument is a
1412comma separated string of flag names. The recognized names are
3994e2c6
ILT
1413@samp{alloc}, @samp{contents}, @samp{load}, @samp{noload},
1414@samp{readonly}, @samp{code}, @samp{data}, @samp{rom}, @samp{share}, and
1415@samp{debug}. You can set the @samp{contents} flag for a section which
1416does not have contents, but it is not meaningful to clear the
1417@samp{contents} flag of a section which does have contents--just remove
1418the section instead. Not all flags are meaningful for all object file
1419formats.
252b5132
RH
1420
1421@item --add-section @var{sectionname}=@var{filename}
1422Add a new section named @var{sectionname} while copying the file. The
1423contents of the new section are taken from the file @var{filename}. The
1424size of the section will be the size of the file. This option only
1425works on file formats which can support sections with arbitrary names.
1426
594ef5db
NC
1427@item --rename-section @var{oldname}=@var{newname}[,@var{flags}]
1428Rename a section from @var{oldname} to @var{newname}, optionally
1429changing the section's flags to @var{flags} in the process. This has
1430the advantage over usng a linker script to perform the rename in that
1431the output stays as an object file and does not become a linked
1432executable.
1433
1434This option is particularly helpful when the input format is binary,
1435since this will always create a section called .data. If for example,
1436you wanted instead to create a section called .rodata containing binary
1437data you could use the following command line to achieve it:
1438
1439@smallexample
1440 objcopy -I binary -O <output_format> -B <architecture> \
1441 --rename-section .data=.rodata,alloc,load,readonly,data,contents \
1442 <input_binary_file> <output_object_file>
1443@end smallexample
1444
0408dee6
DK
1445@item --long-section-names @{enable,disable,keep@}
1446Controls the handling of long section names when processing @code{COFF}
1447and @code{PE-COFF} object formats. The default behaviour, @samp{keep},
1448is to preserve long section names if any are present in the input file.
1449The @samp{enable} and @samp{disable} options forcibly enable or disable
1450the use of long section names in the output object; when @samp{disable}
1451is in effect, any long section names in the input object will be truncated.
1452The @samp{enable} option will only emit long section names if any are
1453present in the inputs; this is mostly the same as @samp{keep}, but it
b3364cb9 1454is left undefined whether the @samp{enable} option might force the
0408dee6
DK
1455creation of an empty string table in the output file.
1456
252b5132
RH
1457@item --change-leading-char
1458Some object file formats use special characters at the start of
1459symbols. The most common such character is underscore, which compilers
c7c55b78 1460often add before every symbol. This option tells @command{objcopy} to
252b5132
RH
1461change the leading character of every symbol when it converts between
1462object file formats. If the object file formats use the same leading
1463character, this option has no effect. Otherwise, it will add a
1464character, or remove a character, or change a character, as
1465appropriate.
1466
1467@item --remove-leading-char
1468If the first character of a global symbol is a special symbol leading
1469character used by the object file format, remove the character. The
1470most common symbol leading character is underscore. This option will
1471remove a leading underscore from all global symbols. This can be useful
1472if you want to link together objects of different file formats with
1473different conventions for symbol names. This is different from
c7c55b78 1474@option{--change-leading-char} because it always changes the symbol name
252b5132
RH
1475when appropriate, regardless of the object file format of the output
1476file.
1477
9e48b4c6
NC
1478@item --reverse-bytes=@var{num}
1479Reverse the bytes in a section with output contents. A section length must
1480be evenly divisible by the value given in order for the swap to be able to
1481take place. Reversing takes place before the interleaving is performed.
1482
1483This option is used typically in generating ROM images for problematic
1484target systems. For example, on some target boards, the 32-bit words
1485fetched from 8-bit ROMs are re-assembled in little-endian byte order
1486regardless of the CPU byte order. Depending on the programming model, the
1487endianness of the ROM may need to be modified.
1488
1489Consider a simple file with a section containing the following eight
1490bytes: @code{12345678}.
1491
1492Using @samp{--reverse-bytes=2} for the above example, the bytes in the
1493output file would be ordered @code{21436587}.
1494
1495Using @samp{--reverse-bytes=4} for the above example, the bytes in the
1496output file would be ordered @code{43218765}.
1497
1498By using @samp{--reverse-bytes=2} for the above example, followed by
1499@samp{--reverse-bytes=4} on the output file, the bytes in the second
1500output file would be ordered @code{34127856}.
1501
420496c1
NC
1502@item --srec-len=@var{ival}
1503Meaningful only for srec output. Set the maximum length of the Srecords
1504being produced to @var{ival}. This length covers both address, data and
1505crc fields.
1506
1507@item --srec-forceS3
c1c0eb9e 1508Meaningful only for srec output. Avoid generation of S1/S2 records,
420496c1
NC
1509creating S3-only record format.
1510
57938635
AM
1511@item --redefine-sym @var{old}=@var{new}
1512Change the name of a symbol @var{old}, to @var{new}. This can be useful
1513when one is trying link two things together for which you have no
1514source, and there are name collisions.
1515
92991082
JT
1516@item --redefine-syms=@var{filename}
1517Apply @option{--redefine-sym} to each symbol pair "@var{old} @var{new}"
1518listed in the file @var{filename}. @var{filename} is simply a flat file,
1519with one symbol pair per line. Line comments may be introduced by the hash
1520character. This option may be given more than once.
1521
252b5132
RH
1522@item --weaken
1523Change all global symbols in the file to be weak. This can be useful
1524when building an object which will be linked against other objects using
c7c55b78 1525the @option{-R} option to the linker. This option is only effective when
252b5132
RH
1526using an object file format which supports weak symbols.
1527
16b2b71c 1528@item --keep-symbols=@var{filename}
c7c55b78 1529Apply @option{--keep-symbol} option to each symbol listed in the file
16b2b71c
NC
1530@var{filename}. @var{filename} is simply a flat file, with one symbol
1531name per line. Line comments may be introduced by the hash character.
1532This option may be given more than once.
1533
1534@item --strip-symbols=@var{filename}
c7c55b78 1535Apply @option{--strip-symbol} option to each symbol listed in the file
16b2b71c
NC
1536@var{filename}. @var{filename} is simply a flat file, with one symbol
1537name per line. Line comments may be introduced by the hash character.
1538This option may be given more than once.
1539
bcf32829
JB
1540@item --strip-unneeded-symbols=@var{filename}
1541Apply @option{--strip-unneeded-symbol} option to each symbol listed in
1542the file @var{filename}. @var{filename} is simply a flat file, with one
1543symbol name per line. Line comments may be introduced by the hash
1544character. This option may be given more than once.
1545
16b2b71c 1546@item --keep-global-symbols=@var{filename}
c7c55b78 1547Apply @option{--keep-global-symbol} option to each symbol listed in the
16b2b71c
NC
1548file @var{filename}. @var{filename} is simply a flat file, with one
1549symbol name per line. Line comments may be introduced by the hash
1550character. This option may be given more than once.
1551
1552@item --localize-symbols=@var{filename}
c7c55b78 1553Apply @option{--localize-symbol} option to each symbol listed in the file
16b2b71c
NC
1554@var{filename}. @var{filename} is simply a flat file, with one symbol
1555name per line. Line comments may be introduced by the hash character.
1556This option may be given more than once.
1557
7b4a0685
NC
1558@item --globalize-symbols=@var{filename}
1559Apply @option{--globalize-symbol} option to each symbol listed in the file
1560@var{filename}. @var{filename} is simply a flat file, with one symbol
1561name per line. Line comments may be introduced by the hash character.
1562This option may be given more than once.
1563
16b2b71c 1564@item --weaken-symbols=@var{filename}
c7c55b78 1565Apply @option{--weaken-symbol} option to each symbol listed in the file
16b2b71c
NC
1566@var{filename}. @var{filename} is simply a flat file, with one symbol
1567name per line. Line comments may be introduced by the hash character.
1568This option may be given more than once.
1569
1ae8b3d2
AO
1570@item --alt-machine-code=@var{index}
1571If the output architecture has alternate machine codes, use the
1572@var{index}th code instead of the default one. This is useful in case
c1c0eb9e 1573a machine is assigned an official code and the tool-chain adopts the
1ae8b3d2 1574new code, but other applications still depend on the original code
f9d4ad2a
NC
1575being used. For ELF based architectures if the @var{index}
1576alternative does not exist then the value is treated as an absolute
1577number to be stored in the e_machine field of the ELF header.
1ae8b3d2 1578
4087920c
MR
1579@item --writable-text
1580Mark the output text as writable. This option isn't meaningful for all
1581object file formats.
1582
1583@item --readonly-text
1584Make the output text write protected. This option isn't meaningful for all
1585object file formats.
1586
1587@item --pure
1588Mark the output file as demand paged. This option isn't meaningful for all
1589object file formats.
1590
1591@item --impure
1592Mark the output file as impure. This option isn't meaningful for all
1593object file formats.
1594
d7fb0dd2
NC
1595@item --prefix-symbols=@var{string}
1596Prefix all symbols in the output file with @var{string}.
1597
1598@item --prefix-sections=@var{string}
1599Prefix all section names in the output file with @var{string}.
1600
1601@item --prefix-alloc-sections=@var{string}
1602Prefix all the names of all allocated sections in the output file with
1603@var{string}.
1604
ed1653a7
NC
1605@item --add-gnu-debuglink=@var{path-to-file}
1606Creates a .gnu_debuglink section which contains a reference to @var{path-to-file}
1607and adds it to the output file.
1608
1637cd90
JB
1609@item --keep-file-symbols
1610When stripping a file, perhaps with @option{--strip-debug} or
1611@option{--strip-unneeded}, retain any symbols specifying source file names,
1612which would otherwise get stripped.
1613
ed1653a7 1614@item --only-keep-debug
36d3b955
MR
1615Strip a file, removing contents of any sections that would not be
1616stripped by @option{--strip-debug} and leaving the debugging sections
c1c0eb9e 1617intact. In ELF files, this preserves all note sections in the output.
ed1653a7
NC
1618
1619The intention is that this option will be used in conjunction with
1620@option{--add-gnu-debuglink} to create a two part executable. One a
1621stripped binary which will occupy less space in RAM and in a
1622distribution and the second a debugging information file which is only
1623needed if debugging abilities are required. The suggested procedure
1624to create these files is as follows:
1625
b96fec5e
DK
1626@enumerate
1627@item Link the executable as normal. Assuming that is is called
1628@code{foo} then...
1629@item Run @code{objcopy --only-keep-debug foo foo.dbg} to
1630create a file containing the debugging info.
1631@item Run @code{objcopy --strip-debug foo} to create a
1632stripped executable.
1633@item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo}
1634to add a link to the debugging info into the stripped executable.
1635@end enumerate
1636
1637Note---the choice of @code{.dbg} as an extension for the debug info
1638file is arbitrary. Also the @code{--only-keep-debug} step is
1639optional. You could instead do this:
1640
1641@enumerate
1642@item Link the executable as normal.
1643@item Copy @code{foo} to @code{foo.full}
1644@item Run @code{objcopy --strip-debug foo}
1645@item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
1646@end enumerate
1647
1648i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
1649full executable. It does not have to be a file created by the
1650@option{--only-keep-debug} switch.
1651
1652Note---this switch is only intended for use on fully linked files. It
1653does not make sense to use it on object files where the debugging
1654information may be incomplete. Besides the gnu_debuglink feature
1655currently only supports the presence of one filename containing
1656debugging information, not multiple filenames on a one-per-object-file
1657basis.
1658
92dd4511
L
1659@item --file-alignment @var{num}
1660Specify the file alignment. Sections in the file will always begin at
1661file offsets which are multiples of this number. This defaults to
1662512.
1663[This option is specific to PE targets.]
1664
1665@item --heap @var{reserve}
1666@itemx --heap @var{reserve},@var{commit}
1667Specify the number of bytes of memory to reserve (and optionally commit)
1668to be used as heap for this program.
1669[This option is specific to PE targets.]
1670
1671@item --image-base @var{value}
1672Use @var{value} as the base address of your program or dll. This is
1673the lowest memory location that will be used when your program or dll
1674is loaded. To reduce the need to relocate and improve performance of
1675your dlls, each should have a unique base address and not overlap any
1676other dlls. The default is 0x400000 for executables, and 0x10000000
1677for dlls.
1678[This option is specific to PE targets.]
1679
1680@item --section-alignment @var{num}
1681Sets the section alignment. Sections in memory will always begin at
1682addresses which are a multiple of this number. Defaults to 0x1000.
1683[This option is specific to PE targets.]
1684
1685@item --stack @var{reserve}
1686@itemx --stack @var{reserve},@var{commit}
1687Specify the number of bytes of memory to reserve (and optionally commit)
1688to be used as stack for this program.
1689[This option is specific to PE targets.]
1690
1691@item --subsystem @var{which}
1692@itemx --subsystem @var{which}:@var{major}
1693@itemx --subsystem @var{which}:@var{major}.@var{minor}
1694Specifies the subsystem under which your program will execute. The
1695legal values for @var{which} are @code{native}, @code{windows},
1696@code{console}, @code{posix}, @code{efi-app}, @code{efi-bsd},
d9118602 1697@code{efi-rtd}, @code{sal-rtd}, and @code{xbox}. You may optionally set
92dd4511
L
1698the subsystem version also. Numeric values are also accepted for
1699@var{which}.
1700[This option is specific to PE targets.]
1701
d3e52d40
RS
1702@item --extract-symbol
1703Keep the file's section flags and symbols but remove all section data.
1704Specifically, the option:
1705
1706@itemize
d3e52d40
RS
1707@item removes the contents of all sections;
1708@item sets the size of every section to zero; and
1709@item sets the file's start address to zero.
1710@end itemize
c1c0eb9e 1711
d3e52d40
RS
1712This option is used to build a @file{.sym} file for a VxWorks kernel.
1713It can also be a useful way of reducing the size of a @option{--just-symbols}
1714linker input file.
1715
4a114e3e
L
1716@item --compress-debug-sections
1717Compress DWARF debug sections using zlib.
1718
1719@item --decompress-debug-sections
1720Decompress DWARF debug sections using zlib.
1721
252b5132
RH
1722@item -V
1723@itemx --version
c7c55b78 1724Show the version number of @command{objcopy}.
252b5132
RH
1725
1726@item -v
1727@itemx --verbose
1728Verbose output: list all object files modified. In the case of
1729archives, @samp{objcopy -V} lists all members of the archive.
1730
1731@item --help
c7c55b78 1732Show a summary of the options to @command{objcopy}.
7c29036b
NC
1733
1734@item --info
1735Display a list showing all architectures and object formats available.
252b5132
RH
1736@end table
1737
0285c67d
NC
1738@c man end
1739
1740@ignore
1741@c man begin SEEALSO objcopy
1742ld(1), objdump(1), and the Info entries for @file{binutils}.
1743@c man end
1744@end ignore
1745
252b5132
RH
1746@node objdump
1747@chapter objdump
1748
1749@cindex object file information
1750@kindex objdump
1751
0285c67d
NC
1752@c man title objdump display information from object files.
1753
252b5132 1754@smallexample
0285c67d 1755@c man begin SYNOPSIS objdump
c7c55b78
NC
1756objdump [@option{-a}|@option{--archive-headers}]
1757 [@option{-b} @var{bfdname}|@option{--target=@var{bfdname}}]
1758 [@option{-C}|@option{--demangle}[=@var{style}] ]
1759 [@option{-d}|@option{--disassemble}]
1760 [@option{-D}|@option{--disassemble-all}]
1761 [@option{-z}|@option{--disassemble-zeroes}]
1762 [@option{-EB}|@option{-EL}|@option{--endian=}@{big | little @}]
1763 [@option{-f}|@option{--file-headers}]
98ec6e72 1764 [@option{-F}|@option{--file-offsets}]
c7c55b78
NC
1765 [@option{--file-start-context}]
1766 [@option{-g}|@option{--debugging}]
51cdc6e0 1767 [@option{-e}|@option{--debugging-tags}]
c7c55b78
NC
1768 [@option{-h}|@option{--section-headers}|@option{--headers}]
1769 [@option{-i}|@option{--info}]
1770 [@option{-j} @var{section}|@option{--section=}@var{section}]
1771 [@option{-l}|@option{--line-numbers}]
1772 [@option{-S}|@option{--source}]
1773 [@option{-m} @var{machine}|@option{--architecture=}@var{machine}]
1774 [@option{-M} @var{options}|@option{--disassembler-options=}@var{options}]
1775 [@option{-p}|@option{--private-headers}]
6abcee90 1776 [@option{-P} @var{options}|@option{--private=}@var{options}]
c7c55b78
NC
1777 [@option{-r}|@option{--reloc}]
1778 [@option{-R}|@option{--dynamic-reloc}]
1779 [@option{-s}|@option{--full-contents}]
f9f0e732 1780 [@option{-W[lLiaprmfFsoRt]}|
5bbdf3d5 1781 @option{--dwarf}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]]
c7c55b78
NC
1782 [@option{-G}|@option{--stabs}]
1783 [@option{-t}|@option{--syms}]
1784 [@option{-T}|@option{--dynamic-syms}]
1785 [@option{-x}|@option{--all-headers}]
1786 [@option{-w}|@option{--wide}]
1787 [@option{--start-address=}@var{address}]
1788 [@option{--stop-address=}@var{address}]
1789 [@option{--prefix-addresses}]
1790 [@option{--[no-]show-raw-insn}]
1791 [@option{--adjust-vma=}@var{offset}]
3c9458e9 1792 [@option{--special-syms}]
0dafdf3f
L
1793 [@option{--prefix=}@var{prefix}]
1794 [@option{--prefix-strip=}@var{level}]
3dcb3fcb 1795 [@option{--insn-width=}@var{width}]
c7c55b78
NC
1796 [@option{-V}|@option{--version}]
1797 [@option{-H}|@option{--help}]
252b5132 1798 @var{objfile}@dots{}
0285c67d 1799@c man end
252b5132
RH
1800@end smallexample
1801
0285c67d
NC
1802@c man begin DESCRIPTION objdump
1803
c7c55b78 1804@command{objdump} displays information about one or more object files.
252b5132
RH
1805The options control what particular information to display. This
1806information is mostly useful to programmers who are working on the
1807compilation tools, as opposed to programmers who just want their
1808program to compile and work.
1809
1810@var{objfile}@dots{} are the object files to be examined. When you
c7c55b78 1811specify archives, @command{objdump} shows information on each of the member
252b5132
RH
1812object files.
1813
0285c67d
NC
1814@c man end
1815
1816@c man begin OPTIONS objdump
1817
252b5132 1818The long and short forms of options, shown here as alternatives, are
1dada9c5 1819equivalent. At least one option from the list
6abcee90 1820@option{-a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-P,-r,-R,-s,-S,-t,-T,-V,-x} must be given.
252b5132 1821
c7c55b78 1822@table @env
252b5132
RH
1823@item -a
1824@itemx --archive-header
1825@cindex archive headers
1826If any of the @var{objfile} files are archives, display the archive
1827header information (in a format similar to @samp{ls -l}). Besides the
1828information you could list with @samp{ar tv}, @samp{objdump -a} shows
1829the object file format of each archive member.
1830
1831@item --adjust-vma=@var{offset}
1832@cindex section addresses in objdump
1833@cindex VMA in objdump
1834When dumping information, first add @var{offset} to all the section
1835addresses. This is useful if the section addresses do not correspond to
1836the symbol table, which can happen when putting sections at particular
1837addresses when using a format which can not represent section addresses,
1838such as a.out.
1839
1840@item -b @var{bfdname}
1841@itemx --target=@var{bfdname}
1842@cindex object code format
1843Specify that the object-code format for the object files is
1844@var{bfdname}. This option may not be necessary; @var{objdump} can
1845automatically recognize many formats.
1846
1847For example,
1848@example
1849objdump -b oasys -m vax -h fu.o
1850@end example
1851@noindent
c7c55b78
NC
1852displays summary information from the section headers (@option{-h}) of
1853@file{fu.o}, which is explicitly identified (@option{-m}) as a VAX object
252b5132 1854file in the format produced by Oasys compilers. You can list the
c7c55b78 1855formats available with the @option{-i} option.
252b5132
RH
1856@xref{Target Selection}, for more information.
1857
1858@item -C
28c309a2 1859@itemx --demangle[=@var{style}]
252b5132
RH
1860@cindex demangling in objdump
1861Decode (@dfn{demangle}) low-level symbol names into user-level names.
1862Besides removing any initial underscore prepended by the system, this
28c309a2 1863makes C++ function names readable. Different compilers have different
c1c0eb9e
RM
1864mangling styles. The optional demangling style argument can be used to
1865choose an appropriate demangling style for your compiler. @xref{c++filt},
28c309a2 1866for more information on demangling.
252b5132 1867
947ed062
NC
1868@item -g
1869@itemx --debugging
b922d590
NC
1870Display debugging information. This attempts to parse STABS and IEEE
1871debugging format information stored in the file and print it out using
1872a C like syntax. If neither of these formats are found this option
1873falls back on the @option{-W} option to print any DWARF information in
1874the file.
252b5132 1875
51cdc6e0
NC
1876@item -e
1877@itemx --debugging-tags
1878Like @option{-g}, but the information is generated in a format compatible
1879with ctags tool.
1880
252b5132
RH
1881@item -d
1882@itemx --disassemble
1883@cindex disassembling object code
1884@cindex machine instructions
1885Display the assembler mnemonics for the machine instructions from
1886@var{objfile}. This option only disassembles those sections which are
1887expected to contain instructions.
1888
1889@item -D
1890@itemx --disassemble-all
c7c55b78 1891Like @option{-d}, but disassemble the contents of all sections, not just
252b5132
RH
1892those expected to contain instructions.
1893
0313a2b8
NC
1894If the target is an ARM architecture this switch also has the effect
1895of forcing the disassembler to decode pieces of data found in code
1896sections as if they were instructions.
1897
252b5132
RH
1898@item --prefix-addresses
1899When disassembling, print the complete address on each line. This is
1900the older disassembly format.
1901
252b5132
RH
1902@item -EB
1903@itemx -EL
1904@itemx --endian=@{big|little@}
1905@cindex endianness
1906@cindex disassembly endianness
1907Specify the endianness of the object files. This only affects
1908disassembly. This can be useful when disassembling a file format which
1909does not describe endianness information, such as S-records.
1910
1911@item -f
947ed062 1912@itemx --file-headers
252b5132
RH
1913@cindex object file header
1914Display summary information from the overall header of
1915each of the @var{objfile} files.
1916
98ec6e72
NC
1917@item -F
1918@itemx --file-offsets
1919@cindex object file offsets
1920When disassembling sections, whenever a symbol is displayed, also
1921display the file offset of the region of data that is about to be
1922dumped. If zeroes are being skipped, then when disassembly resumes,
1923tell the user how many zeroes were skipped and the file offset of the
32760852
NC
1924location from where the disassembly resumes. When dumping sections,
1925display the file offset of the location from where the dump starts.
98ec6e72 1926
f1563258
TW
1927@item --file-start-context
1928@cindex source code context
1929Specify that when displaying interlisted source code/disassembly
c7c55b78 1930(assumes @option{-S}) from a file that has not yet been displayed, extend the
f1563258
TW
1931context to the start of the file.
1932
252b5132 1933@item -h
947ed062
NC
1934@itemx --section-headers
1935@itemx --headers
252b5132
RH
1936@cindex section headers
1937Display summary information from the section headers of the
1938object file.
1939
1940File segments may be relocated to nonstandard addresses, for example by
c7c55b78
NC
1941using the @option{-Ttext}, @option{-Tdata}, or @option{-Tbss} options to
1942@command{ld}. However, some object file formats, such as a.out, do not
252b5132 1943store the starting address of the file segments. In those situations,
c7c55b78 1944although @command{ld} relocates the sections correctly, using @samp{objdump
252b5132
RH
1945-h} to list the file section headers cannot show the correct addresses.
1946Instead, it shows the usual addresses, which are implicit for the
1947target.
1948
947ed062
NC
1949@item -H
1950@itemx --help
c7c55b78 1951Print a summary of the options to @command{objdump} and exit.
252b5132
RH
1952
1953@item -i
1954@itemx --info
1955@cindex architectures available
1956@cindex object formats available
1957Display a list showing all architectures and object formats available
c7c55b78 1958for specification with @option{-b} or @option{-m}.
252b5132
RH
1959
1960@item -j @var{name}
1961@itemx --section=@var{name}
1962@cindex section information
1963Display information only for section @var{name}.
1964
1965@item -l
1966@itemx --line-numbers
1967@cindex source filenames for object files
1968Label the display (using debugging information) with the filename and
1969source line numbers corresponding to the object code or relocs shown.
c7c55b78 1970Only useful with @option{-d}, @option{-D}, or @option{-r}.
252b5132
RH
1971
1972@item -m @var{machine}
1973@itemx --architecture=@var{machine}
1974@cindex architecture
1975@cindex disassembly architecture
1976Specify the architecture to use when disassembling object files. This
1977can be useful when disassembling object files which do not describe
1978architecture information, such as S-records. You can list the available
c7c55b78 1979architectures with the @option{-i} option.
252b5132 1980
0313a2b8
NC
1981If the target is an ARM architecture then this switch has an
1982additional effect. It restricts the disassembly to only those
1983instructions supported by the architecture specified by @var{machine}.
1984If it is necessary to use this switch because the input file does not
1985contain any architecture information, but it is also desired to
1986disassemble all the instructions use @option{-marm}.
1987
dd92f639
NC
1988@item -M @var{options}
1989@itemx --disassembler-options=@var{options}
1990Pass target specific information to the disassembler. Only supported on
31e0f3cd
NC
1991some targets. If it is necessary to specify more than one
1992disassembler option then multiple @option{-M} options can be used or
1993can be placed together into a comma separated list.
dd92f639
NC
1994
1995If the target is an ARM architecture then this switch can be used to
1996select which register name set is used during disassembler. Specifying
9c092ace 1997@option{-M reg-names-std} (the default) will select the register names as
58efb6c0
NC
1998used in ARM's instruction set documentation, but with register 13 called
1999'sp', register 14 called 'lr' and register 15 called 'pc'. Specifying
c7c55b78
NC
2000@option{-M reg-names-apcs} will select the name set used by the ARM
2001Procedure Call Standard, whilst specifying @option{-M reg-names-raw} will
58efb6c0
NC
2002just use @samp{r} followed by the register number.
2003
2004There are also two variants on the APCS register naming scheme enabled
c7c55b78
NC
2005by @option{-M reg-names-atpcs} and @option{-M reg-names-special-atpcs} which
2006use the ARM/Thumb Procedure Call Standard naming conventions. (Either
947ed062 2007with the normal register names or the special register names).
dd92f639 2008
8f915f68 2009This option can also be used for ARM architectures to force the
c36774d6 2010disassembler to interpret all instructions as Thumb instructions by
c7c55b78 2011using the switch @option{--disassembler-options=force-thumb}. This can be
8f915f68
NC
2012useful when attempting to disassemble thumb code produced by other
2013compilers.
2014
e396998b
AM
2015For the x86, some of the options duplicate functions of the @option{-m}
2016switch, but allow finer grained control. Multiple selections from the
2017following may be specified as a comma separated string.
b89e9eae 2018@option{x86-64}, @option{i386} and @option{i8086} select disassembly for
e396998b 2019the given architecture. @option{intel} and @option{att} select between
9d141669
L
2020intel syntax mode and AT&T syntax mode.
2021@option{intel-mnemonic} and @option{att-mnemonic} select between
2022intel mnemonic mode and AT&T mnemonic mode. @option{intel-mnemonic}
2023implies @option{intel} and @option{att-mnemonic} implies @option{att}.
2024@option{addr64}, @option{addr32},
e396998b
AM
2025@option{addr16}, @option{data32} and @option{data16} specify the default
2026address size and operand size. These four options will be overridden if
b89e9eae 2027@option{x86-64}, @option{i386} or @option{i8086} appear later in the
e396998b 2028option string. Lastly, @option{suffix}, when in AT&T mode,
b9e5d8e5 2029instructs the disassembler to print a mnemonic suffix even when the
e396998b
AM
2030suffix could be inferred by the operands.
2031
2f3bb96a
BE
2032For PowerPC, @option{booke} controls the disassembly of BookE
2033instructions. @option{32} and @option{64} select PowerPC and
2034PowerPC64 disassembly, respectively. @option{e300} selects
2035disassembly for the e300 family. @option{440} selects disassembly for
2036the PowerPC 440. @option{ppcps} selects disassembly for the paired
2037single instructions of the PPC750CL.
802a735e 2038
b45619c0 2039For MIPS, this option controls the printing of instruction mnemonic
e39893d7
FF
2040names and register names in disassembled instructions. Multiple
2041selections from the following may be specified as a comma separated
2042string, and invalid options are ignored:
640c0ccd
CD
2043
2044@table @code
e39893d7 2045@item no-aliases
b45619c0
NC
2046Print the 'raw' instruction mnemonic instead of some pseudo
2047instruction mnemonic. I.e., print 'daddu' or 'or' instead of 'move',
e39893d7
FF
2048'sll' instead of 'nop', etc.
2049
640c0ccd
CD
2050@item gpr-names=@var{ABI}
2051Print GPR (general-purpose register) names as appropriate
2052for the specified ABI. By default, GPR names are selected according to
2053the ABI of the binary being disassembled.
2054
2055@item fpr-names=@var{ABI}
2056Print FPR (floating-point register) names as
2057appropriate for the specified ABI. By default, FPR numbers are printed
2058rather than names.
2059
2060@item cp0-names=@var{ARCH}
2061Print CP0 (system control coprocessor; coprocessor 0) register names
2062as appropriate for the CPU or architecture specified by
2063@var{ARCH}. By default, CP0 register names are selected according to
2064the architecture and CPU of the binary being disassembled.
2065
af7ee8bf
CD
2066@item hwr-names=@var{ARCH}
2067Print HWR (hardware register, used by the @code{rdhwr} instruction) names
2068as appropriate for the CPU or architecture specified by
2069@var{ARCH}. By default, HWR names are selected according to
2070the architecture and CPU of the binary being disassembled.
2071
640c0ccd
CD
2072@item reg-names=@var{ABI}
2073Print GPR and FPR names as appropriate for the selected ABI.
2074
2075@item reg-names=@var{ARCH}
af7ee8bf
CD
2076Print CPU-specific register names (CP0 register and HWR names)
2077as appropriate for the selected CPU or architecture.
640c0ccd
CD
2078@end table
2079
2080For any of the options listed above, @var{ABI} or
2081@var{ARCH} may be specified as @samp{numeric} to have numbers printed
2082rather than names, for the selected types of registers.
2083You can list the available values of @var{ABI} and @var{ARCH} using
2084the @option{--help} option.
2085
ec72cfe5
NC
2086For VAX, you can specify function entry addresses with @option{-M
2087entry:0xf00ba}. You can use this multiple times to properly
2088disassemble VAX binary files that don't contain symbol tables (like
2089ROM dumps). In these cases, the function entry mask would otherwise
b45619c0 2090be decoded as VAX instructions, which would probably lead the rest
ec72cfe5
NC
2091of the function being wrongly disassembled.
2092
252b5132
RH
2093@item -p
2094@itemx --private-headers
2095Print information that is specific to the object file format. The exact
2096information printed depends upon the object file format. For some
2097object file formats, no additional information is printed.
2098
6abcee90
TG
2099@item -P @var{options}
2100@itemx --private=@var{options}
2101Print information that is specific to the object file format. The
2102argument @var{options} is a comma separated list that depends on the
2103format (the lists of options is displayed with the help).
2104
2105For XCOFF, the available options are: @option{header}, @option{aout},
2106@option{sections}, @option{syms}, @option{relocs}, @option{lineno},
2107@option{loader}, @option{except}, @option{typchk}, @option{traceback}
2108and @option{toc}.
2109
252b5132
RH
2110@item -r
2111@itemx --reloc
2112@cindex relocation entries, in object file
c7c55b78
NC
2113Print the relocation entries of the file. If used with @option{-d} or
2114@option{-D}, the relocations are printed interspersed with the
252b5132
RH
2115disassembly.
2116
2117@item -R
2118@itemx --dynamic-reloc
2119@cindex dynamic relocation entries, in object file
2120Print the dynamic relocation entries of the file. This is only
2121meaningful for dynamic objects, such as certain types of shared
840b96a7
AM
2122libraries. As for @option{-r}, if used with @option{-d} or
2123@option{-D}, the relocations are printed interspersed with the
2124disassembly.
252b5132
RH
2125
2126@item -s
2127@itemx --full-contents
2128@cindex sections, full contents
2129@cindex object file sections
155e0d23
NC
2130Display the full contents of any sections requested. By default all
2131non-empty sections are displayed.
252b5132
RH
2132
2133@item -S
2134@itemx --source
2135@cindex source disassembly
2136@cindex disassembly, with source
2137Display source code intermixed with disassembly, if possible. Implies
c7c55b78 2138@option{-d}.
252b5132 2139
0dafdf3f
L
2140@item --prefix=@var{prefix}
2141@cindex Add prefix to absolute paths
2142Specify @var{prefix} to add to the absolute paths when used with
b3364cb9 2143@option{-S}.
0dafdf3f
L
2144
2145@item --prefix-strip=@var{level}
2146@cindex Strip absolute paths
2147Indicate how many initial directory names to strip off the hardwired
2148absolute paths. It has no effect without @option{--prefix=}@var{prefix}.
2149
252b5132
RH
2150@item --show-raw-insn
2151When disassembling instructions, print the instruction in hex as well as
2152in symbolic form. This is the default except when
c7c55b78 2153@option{--prefix-addresses} is used.
252b5132
RH
2154
2155@item --no-show-raw-insn
2156When disassembling instructions, do not print the instruction bytes.
c7c55b78 2157This is the default when @option{--prefix-addresses} is used.
252b5132 2158
3dcb3fcb 2159@item --insn-width=@var{width}
b3364cb9 2160@cindex Instruction width
3dcb3fcb
L
2161Display @var{width} bytes on a single line when disassembling
2162instructions.
2163
f9f0e732 2164@item -W[lLiaprmfFsoRt]
5bbdf3d5 2165@itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]
4de2ad99
L
2166@cindex DWARF
2167@cindex debug symbols
4cb93e3b
TG
2168Displays the contents of the debug sections in the file, if any are
2169present. If one of the optional letters or words follows the switch
2170then only data found in those specific sections will be dumped.
4de2ad99 2171
6f875884 2172Note that there is no single letter option to display the content of
5bbdf3d5 2173trace sections or .gdb_index.
6f875884 2174
fd2f0033
TT
2175Note: the output from the @option{=info} option can also be affected
2176by the options @option{--dwarf-depth} and @option{--dwarf-start}.
2177
2178@item --dwarf-depth=@var{n}
2179Limit the dump of the @code{.debug_info} section to @var{n} children.
2180This is only useful with @option{--dwarf=info}. The default is
2181to print all DIEs; the special value 0 for @var{n} will also have this
2182effect.
2183
2184With a non-zero value for @var{n}, DIEs at or deeper than @var{n}
2185levels will not be printed. The range for @var{n} is zero-based.
2186
2187@item --dwarf-start=@var{n}
2188Print only DIEs beginning with the DIE numbered @var{n}. This is only
2189useful with @option{--dwarf=info}.
2190
2191If specified, this option will suppress printing of any header
2192information and all DIEs before the DIE numbered @var{n}. Only
2193siblings and children of the specified DIE will be printed.
2194
2195This can be used in conjunction with @option{--dwarf-depth}.
2196
1dada9c5 2197@item -G
947ed062 2198@itemx --stabs
252b5132
RH
2199@cindex stab
2200@cindex .stab
2201@cindex debug symbols
2202@cindex ELF object file format
2203Display the full contents of any sections requested. Display the
2204contents of the .stab and .stab.index and .stab.excl sections from an
2205ELF file. This is only useful on systems (such as Solaris 2.0) in which
2206@code{.stab} debugging symbol-table entries are carried in an ELF
2207section. In most other file formats, debugging symbol-table entries are
c7c55b78 2208interleaved with linkage symbols, and are visible in the @option{--syms}
0285c67d
NC
2209output.
2210@ifclear man
2211For more information on stabs symbols, see @ref{Top,Stabs,Stabs
252b5132 2212Overview,stabs.info, The ``stabs'' debug format}.
0285c67d 2213@end ifclear
252b5132
RH
2214
2215@item --start-address=@var{address}
2216@cindex start-address
2217Start displaying data at the specified address. This affects the output
c7c55b78 2218of the @option{-d}, @option{-r} and @option{-s} options.
252b5132
RH
2219
2220@item --stop-address=@var{address}
2221@cindex stop-address
2222Stop displaying data at the specified address. This affects the output
c7c55b78 2223of the @option{-d}, @option{-r} and @option{-s} options.
252b5132
RH
2224
2225@item -t
2226@itemx --syms
2227@cindex symbol table entries, printing
2228Print the symbol table entries of the file.
a1039809
NC
2229This is similar to the information provided by the @samp{nm} program,
2230although the display format is different. The format of the output
2231depends upon the format of the file being dumped, but there are two main
2232types. One looks like this:
2233
2234@smallexample
2235[ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss
2236[ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred
2237@end smallexample
2238
2239where the number inside the square brackets is the number of the entry
2240in the symbol table, the @var{sec} number is the section number, the
2241@var{fl} value are the symbol's flag bits, the @var{ty} number is the
2242symbol's type, the @var{scl} number is the symbol's storage class and
2243the @var{nx} value is the number of auxilary entries associated with
2244the symbol. The last two fields are the symbol's value and its name.
2245
2246The other common output format, usually seen with ELF based files,
2247looks like this:
2248
2249@smallexample
225000000000 l d .bss 00000000 .bss
225100000000 g .text 00000000 fred
2252@end smallexample
2253
2254Here the first number is the symbol's value (sometimes refered to as
2255its address). The next field is actually a set of characters and
2256spaces indicating the flag bits that are set on the symbol. These
af3e16d9
NC
2257characters are described below. Next is the section with which the
2258symbol is associated or @emph{*ABS*} if the section is absolute (ie
2259not connected with any section), or @emph{*UND*} if the section is
2260referenced in the file being dumped, but not defined there.
2261
2262After the section name comes another field, a number, which for common
2263symbols is the alignment and for other symbol is the size. Finally
2264the symbol's name is displayed.
a1039809
NC
2265
2266The flag characters are divided into 7 groups as follows:
2267@table @code
2268@item l
2269@itemx g
3e7a7d11 2270@itemx u
a1039809 2271@itemx !
3e7a7d11
NC
2272The symbol is a local (l), global (g), unique global (u), neither
2273global nor local (a space) or both global and local (!). A
928a4139 2274symbol can be neither local or global for a variety of reasons, e.g.,
a1039809 2275because it is used for debugging, but it is probably an indication of
3e7a7d11
NC
2276a bug if it is ever both local and global. Unique global symbols are
2277a GNU extension to the standard set of ELF symbol bindings. For such
2278a symbol the dynamic linker will make sure that in the entire process
2279there is just one symbol with this name and type in use.
a1039809
NC
2280
2281@item w
2282The symbol is weak (w) or strong (a space).
2283
2284@item C
2285The symbol denotes a constructor (C) or an ordinary symbol (a space).
2286
2287@item W
2288The symbol is a warning (W) or a normal symbol (a space). A warning
2289symbol's name is a message to be displayed if the symbol following the
2290warning symbol is ever referenced.
2291
2292@item I
171191ba
NC
2293@item i
2294The symbol is an indirect reference to another symbol (I), a function
2295to be evaluated during reloc processing (i) or a normal symbol (a
2296space).
a1039809
NC
2297
2298@item d
2299@itemx D
2300The symbol is a debugging symbol (d) or a dynamic symbol (D) or a
2301normal symbol (a space).
2302
2303@item F
2304@item f
2305@item O
af3e16d9 2306The symbol is the name of a function (F) or a file (f) or an object
a1039809
NC
2307(O) or just a normal symbol (a space).
2308@end table
252b5132
RH
2309
2310@item -T
2311@itemx --dynamic-syms
2312@cindex dynamic symbol table entries, printing
2313Print the dynamic symbol table entries of the file. This is only
2314meaningful for dynamic objects, such as certain types of shared
2315libraries. This is similar to the information provided by the @samp{nm}
c7c55b78 2316program when given the @option{-D} (@option{--dynamic}) option.
252b5132 2317
3c9458e9
NC
2318@item --special-syms
2319When displaying symbols include those which the target considers to be
2320special in some way and which would not normally be of interest to the
2321user.
2322
947ed062
NC
2323@item -V
2324@itemx --version
c7c55b78 2325Print the version number of @command{objdump} and exit.
252b5132
RH
2326
2327@item -x
947ed062 2328@itemx --all-headers
252b5132
RH
2329@cindex all header information, object file
2330@cindex header information, all
2331Display all available header information, including the symbol table and
c7c55b78 2332relocation entries. Using @option{-x} is equivalent to specifying all of
04c34128 2333@option{-a -f -h -p -r -t}.
252b5132
RH
2334
2335@item -w
2336@itemx --wide
2337@cindex wide output, printing
2338Format some lines for output devices that have more than 80 columns.
31104126 2339Also do not truncate symbol names when they are displayed.
aefbdd67
BE
2340
2341@item -z
2c0c15f9 2342@itemx --disassemble-zeroes
aefbdd67
BE
2343Normally the disassembly output will skip blocks of zeroes. This
2344option directs the disassembler to disassemble those blocks, just like
2345any other data.
252b5132
RH
2346@end table
2347
0285c67d
NC
2348@c man end
2349
2350@ignore
2351@c man begin SEEALSO objdump
2352nm(1), readelf(1), and the Info entries for @file{binutils}.
2353@c man end
2354@end ignore
2355
252b5132
RH
2356@node ranlib
2357@chapter ranlib
2358
2359@kindex ranlib
2360@cindex archive contents
2361@cindex symbol index
2362
0285c67d
NC
2363@c man title ranlib generate index to archive.
2364
252b5132 2365@smallexample
0285c67d 2366@c man begin SYNOPSIS ranlib
b3364cb9 2367ranlib [@option{-DhHvVt}] @var{archive}
0285c67d 2368@c man end
252b5132
RH
2369@end smallexample
2370
0285c67d
NC
2371@c man begin DESCRIPTION ranlib
2372
c7c55b78 2373@command{ranlib} generates an index to the contents of an archive and
252b5132 2374stores it in the archive. The index lists each symbol defined by a
c1c0eb9e 2375member of an archive that is a relocatable object file.
252b5132
RH
2376
2377You may use @samp{nm -s} or @samp{nm --print-armap} to list this index.
2378
2379An archive with such an index speeds up linking to the library and
2380allows routines in the library to call each other without regard to
2381their placement in the archive.
2382
c7c55b78
NC
2383The @sc{gnu} @command{ranlib} program is another form of @sc{gnu} @command{ar}; running
2384@command{ranlib} is completely equivalent to executing @samp{ar -s}.
252b5132
RH
2385@xref{ar}.
2386
0285c67d
NC
2387@c man end
2388
2389@c man begin OPTIONS ranlib
2390
c7c55b78 2391@table @env
b3364cb9
RM
2392@item -h
2393@itemx -H
2394@itemx --help
2395Show usage information for @command{ranlib}.
2396
252b5132
RH
2397@item -v
2398@itemx -V
f20a759a 2399@itemx --version
c7c55b78 2400Show the version number of @command{ranlib}.
b14f9da0 2401
b3364cb9
RM
2402@item -D
2403@cindex deterministic archives
9cb80f72 2404@kindex --enable-deterministic-archives
b3364cb9
RM
2405Operate in @emph{deterministic} mode. The symbol map archive member's
2406header will show zero for the UID, GID, and timestamp. When this
2407option is used, multiple runs will produce identical output files.
2408
9cb80f72
RM
2409This is the default unless @file{binutils} was configured with
2410@option{--enable-deterministic-archives}.
2411
b14f9da0
NC
2412@item -t
2413Update the timestamp of the symbol map of an archive.
9cb80f72
RM
2414
2415@item -U
2416@cindex deterministic archives
2417@kindex --enable-deterministic-archives
2418Do @emph{not} operate in @emph{deterministic} mode. This is the
2419inverse of the @samp{-D} option, above: the archive index will get
2420actual UID, GID, timestamp, and file mode values.
2421
2422This is the default unless @file{binutils} was configured with
2423@option{--enable-deterministic-archives}.
252b5132
RH
2424@end table
2425
0285c67d
NC
2426@c man end
2427
2428@ignore
2429@c man begin SEEALSO ranlib
2430ar(1), nm(1), and the Info entries for @file{binutils}.
2431@c man end
2432@end ignore
2433
252b5132
RH
2434@node size
2435@chapter size
2436
2437@kindex size
2438@cindex section sizes
2439
0285c67d
NC
2440@c man title size list section sizes and total size.
2441
252b5132 2442@smallexample
0285c67d 2443@c man begin SYNOPSIS size
c7c55b78 2444size [@option{-A}|@option{-B}|@option{--format=}@var{compatibility}]
15c82623
NC
2445 [@option{--help}]
2446 [@option{-d}|@option{-o}|@option{-x}|@option{--radix=}@var{number}]
29422971 2447 [@option{--common}]
15c82623 2448 [@option{-t}|@option{--totals}]
c1c0eb9e 2449 [@option{--target=}@var{bfdname}] [@option{-V}|@option{--version}]
c7c55b78 2450 [@var{objfile}@dots{}]
0285c67d 2451@c man end
252b5132
RH
2452@end smallexample
2453
0285c67d
NC
2454@c man begin DESCRIPTION size
2455
c7c55b78 2456The @sc{gnu} @command{size} utility lists the section sizes---and the total
252b5132
RH
2457size---for each of the object or archive files @var{objfile} in its
2458argument list. By default, one line of output is generated for each
2459object file or each module in an archive.
2460
2461@var{objfile}@dots{} are the object files to be examined.
2462If none are specified, the file @code{a.out} will be used.
2463
0285c67d
NC
2464@c man end
2465
2466@c man begin OPTIONS size
2467
252b5132
RH
2468The command line options have the following meanings:
2469
c7c55b78 2470@table @env
252b5132
RH
2471@item -A
2472@itemx -B
2473@itemx --format=@var{compatibility}
c7c55b78 2474@cindex @command{size} display format
252b5132 2475Using one of these options, you can choose whether the output from @sc{gnu}
c7c55b78
NC
2476@command{size} resembles output from System V @command{size} (using @option{-A},
2477or @option{--format=sysv}), or Berkeley @command{size} (using @option{-B}, or
2478@option{--format=berkeley}). The default is the one-line format similar to
c1c0eb9e 2479Berkeley's.
252b5132
RH
2480@c Bonus for doc-source readers: you can also say --format=strange (or
2481@c anything else that starts with 's') for sysv, and --format=boring (or
2482@c anything else that starts with 'b') for Berkeley.
2483
2484Here is an example of the Berkeley (default) format of output from
c1c0eb9e 2485@command{size}:
252b5132 2486@smallexample
f20a759a 2487$ size --format=Berkeley ranlib size
252b5132
RH
2488text data bss dec hex filename
2489294880 81920 11592 388392 5ed28 ranlib
2490294880 81920 11888 388688 5ee50 size
2491@end smallexample
2492
2493@noindent
2494This is the same data, but displayed closer to System V conventions:
2495
2496@smallexample
f20a759a 2497$ size --format=SysV ranlib size
252b5132
RH
2498ranlib :
2499section size addr
c1c0eb9e
RM
2500.text 294880 8192
2501.data 81920 303104
2502.bss 11592 385024
2503Total 388392
252b5132
RH
2504
2505
2506size :
2507section size addr
c1c0eb9e
RM
2508.text 294880 8192
2509.data 81920 303104
2510.bss 11888 385024
2511Total 388688
252b5132
RH
2512@end smallexample
2513
2514@item --help
2515Show a summary of acceptable arguments and options.
2516
2517@item -d
2518@itemx -o
2519@itemx -x
2520@itemx --radix=@var{number}
c7c55b78 2521@cindex @command{size} number format
252b5132
RH
2522@cindex radix for section sizes
2523Using one of these options, you can control whether the size of each
c7c55b78
NC
2524section is given in decimal (@option{-d}, or @option{--radix=10}); octal
2525(@option{-o}, or @option{--radix=8}); or hexadecimal (@option{-x}, or
2526@option{--radix=16}). In @option{--radix=@var{number}}, only the three
252b5132 2527values (8, 10, 16) are supported. The total size is always given in two
c7c55b78
NC
2528radices; decimal and hexadecimal for @option{-d} or @option{-x} output, or
2529octal and hexadecimal if you're using @option{-o}.
252b5132 2530
29422971
AM
2531@item --common
2532Print total size of common symbols in each file. When using Berkeley
2533format these are included in the bss size.
2534
15c82623
NC
2535@item -t
2536@itemx --totals
2537Show totals of all objects listed (Berkeley format listing mode only).
2538
252b5132
RH
2539@item --target=@var{bfdname}
2540@cindex object code format
2541Specify that the object-code format for @var{objfile} is
c7c55b78 2542@var{bfdname}. This option may not be necessary; @command{size} can
252b5132
RH
2543automatically recognize many formats.
2544@xref{Target Selection}, for more information.
2545
2546@item -V
2547@itemx --version
c7c55b78 2548Display the version number of @command{size}.
252b5132
RH
2549@end table
2550
0285c67d
NC
2551@c man end
2552
2553@ignore
2554@c man begin SEEALSO size
2555ar(1), objdump(1), readelf(1), and the Info entries for @file{binutils}.
2556@c man end
2557@end ignore
2558
252b5132
RH
2559@node strings
2560@chapter strings
2561@kindex strings
2562@cindex listings strings
2563@cindex printing strings
2564@cindex strings, printing
2565
0285c67d
NC
2566@c man title strings print the strings of printable characters in files.
2567
252b5132 2568@smallexample
0285c67d 2569@c man begin SYNOPSIS strings
ffbe5983 2570strings [@option{-afovV}] [@option{-}@var{min-len}]
d132876a
NC
2571 [@option{-n} @var{min-len}] [@option{--bytes=}@var{min-len}]
2572 [@option{-t} @var{radix}] [@option{--radix=}@var{radix}]
2573 [@option{-e} @var{encoding}] [@option{--encoding=}@var{encoding}]
2574 [@option{-}] [@option{--all}] [@option{--print-file-name}]
3bf31ec9 2575 [@option{-T} @var{bfdname}] [@option{--target=}@var{bfdname}]
c7c55b78 2576 [@option{--help}] [@option{--version}] @var{file}@dots{}
0285c67d 2577@c man end
252b5132
RH
2578@end smallexample
2579
0285c67d
NC
2580@c man begin DESCRIPTION strings
2581
c7c55b78 2582For each @var{file} given, @sc{gnu} @command{strings} prints the printable
252b5132
RH
2583character sequences that are at least 4 characters long (or the number
2584given with the options below) and are followed by an unprintable
2585character. By default, it only prints the strings from the initialized
2586and loaded sections of object files; for other types of files, it prints
2587the strings from the whole file.
2588
c7c55b78 2589@command{strings} is mainly useful for determining the contents of non-text
252b5132
RH
2590files.
2591
0285c67d
NC
2592@c man end
2593
2594@c man begin OPTIONS strings
2595
c7c55b78 2596@table @env
252b5132
RH
2597@item -a
2598@itemx --all
2599@itemx -
2600Do not scan only the initialized and loaded sections of object files;
2601scan the whole files.
2602
2603@item -f
2604@itemx --print-file-name
2605Print the name of the file before each string.
2606
2607@item --help
2608Print a summary of the program usage on the standard output and exit.
2609
2610@item -@var{min-len}
2611@itemx -n @var{min-len}
2612@itemx --bytes=@var{min-len}
2613Print sequences of characters that are at least @var{min-len} characters
2614long, instead of the default 4.
2615
2616@item -o
c7c55b78 2617Like @samp{-t o}. Some other versions of @command{strings} have @option{-o}
252b5132
RH
2618act like @samp{-t d} instead. Since we can not be compatible with both
2619ways, we simply chose one.
2620
2621@item -t @var{radix}
2622@itemx --radix=@var{radix}
2623Print the offset within the file before each string. The single
2624character argument specifies the radix of the offset---@samp{o} for
2625octal, @samp{x} for hexadecimal, or @samp{d} for decimal.
2626
d132876a
NC
2627@item -e @var{encoding}
2628@itemx --encoding=@var{encoding}
2629Select the character encoding of the strings that are to be found.
8745eafa
NC
2630Possible values for @var{encoding} are: @samp{s} = single-7-bit-byte
2631characters (ASCII, ISO 8859, etc., default), @samp{S} =
2632single-8-bit-byte characters, @samp{b} = 16-bit bigendian, @samp{l} =
263316-bit littleendian, @samp{B} = 32-bit bigendian, @samp{L} = 32-bit
830bf75c
NC
2634littleendian. Useful for finding wide character strings. (@samp{l}
2635and @samp{b} apply to, for example, Unicode UTF-16/UCS-2 encodings).
d132876a 2636
3bf31ec9
NC
2637@item -T @var{bfdname}
2638@itemx --target=@var{bfdname}
252b5132
RH
2639@cindex object code format
2640Specify an object code format other than your system's default format.
2641@xref{Target Selection}, for more information.
2642
2643@item -v
ffbe5983 2644@itemx -V
252b5132
RH
2645@itemx --version
2646Print the program version number on the standard output and exit.
2647@end table
2648
0285c67d
NC
2649@c man end
2650
2651@ignore
2652@c man begin SEEALSO strings
2653ar(1), nm(1), objdump(1), ranlib(1), readelf(1)
2654and the Info entries for @file{binutils}.
2655@c man end
2656@end ignore
2657
252b5132
RH
2658@node strip
2659@chapter strip
2660
2661@kindex strip
2662@cindex removing symbols
2663@cindex discarding symbols
2664@cindex symbols, discarding
2665
0285c67d
NC
2666@c man title strip Discard symbols from object files.
2667
252b5132 2668@smallexample
0285c67d 2669@c man begin SYNOPSIS strip
2593f09a
NC
2670strip [@option{-F} @var{bfdname} |@option{--target=}@var{bfdname}]
2671 [@option{-I} @var{bfdname} |@option{--input-target=}@var{bfdname}]
2672 [@option{-O} @var{bfdname} |@option{--output-target=}@var{bfdname}]
2673 [@option{-s}|@option{--strip-all}]
2674 [@option{-S}|@option{-g}|@option{-d}|@option{--strip-debug}]
2675 [@option{-K} @var{symbolname} |@option{--keep-symbol=}@var{symbolname}]
2676 [@option{-N} @var{symbolname} |@option{--strip-symbol=}@var{symbolname}]
5fe11841 2677 [@option{-w}|@option{--wildcard}]
2593f09a
NC
2678 [@option{-x}|@option{--discard-all}] [@option{-X} |@option{--discard-locals}]
2679 [@option{-R} @var{sectionname} |@option{--remove-section=}@var{sectionname}]
2680 [@option{-o} @var{file}] [@option{-p}|@option{--preserve-dates}]
1637cd90 2681 [@option{--keep-file-symbols}]
ed1653a7 2682 [@option{--only-keep-debug}]
7c29036b
NC
2683 [@option{-v} |@option{--verbose}] [@option{-V}|@option{--version}]
2684 [@option{--help}] [@option{--info}]
252b5132 2685 @var{objfile}@dots{}
0285c67d 2686@c man end
252b5132
RH
2687@end smallexample
2688
0285c67d
NC
2689@c man begin DESCRIPTION strip
2690
c7c55b78 2691@sc{gnu} @command{strip} discards all symbols from object files
252b5132
RH
2692@var{objfile}. The list of object files may include archives.
2693At least one object file must be given.
2694
c7c55b78 2695@command{strip} modifies the files named in its argument,
252b5132
RH
2696rather than writing modified copies under different names.
2697
0285c67d
NC
2698@c man end
2699
2700@c man begin OPTIONS strip
2701
c7c55b78 2702@table @env
252b5132
RH
2703@item -F @var{bfdname}
2704@itemx --target=@var{bfdname}
2705Treat the original @var{objfile} as a file with the object
2706code format @var{bfdname}, and rewrite it in the same format.
2707@xref{Target Selection}, for more information.
2708
2709@item --help
c7c55b78 2710Show a summary of the options to @command{strip} and exit.
252b5132 2711
7c29036b
NC
2712@item --info
2713Display a list showing all architectures and object formats available.
2714
947ed062 2715@item -I @var{bfdname}
252b5132
RH
2716@itemx --input-target=@var{bfdname}
2717Treat the original @var{objfile} as a file with the object
2718code format @var{bfdname}.
2719@xref{Target Selection}, for more information.
2720
2721@item -O @var{bfdname}
2722@itemx --output-target=@var{bfdname}
2723Replace @var{objfile} with a file in the output format @var{bfdname}.
2724@xref{Target Selection}, for more information.
2725
2726@item -R @var{sectionname}
2727@itemx --remove-section=@var{sectionname}
2728Remove any section named @var{sectionname} from the output file. This
2729option may be given more than once. Note that using this option
2730inappropriately may make the output file unusable.
2731
2732@item -s
2733@itemx --strip-all
2734Remove all symbols.
2735
2736@item -g
2737@itemx -S
15c82623 2738@itemx -d
252b5132
RH
2739@itemx --strip-debug
2740Remove debugging symbols only.
2741
2742@item --strip-unneeded
2743Remove all symbols that are not needed for relocation processing.
2744
2745@item -K @var{symbolname}
2746@itemx --keep-symbol=@var{symbolname}
e7f918ad
NC
2747When stripping symbols, keep symbol @var{symbolname} even if it would
2748normally be stripped. This option may be given more than once.
252b5132
RH
2749
2750@item -N @var{symbolname}
2751@itemx --strip-symbol=@var{symbolname}
2752Remove symbol @var{symbolname} from the source file. This option may be
2753given more than once, and may be combined with strip options other than
c7c55b78 2754@option{-K}.
252b5132
RH
2755
2756@item -o @var{file}
2757Put the stripped output in @var{file}, rather than replacing the
2758existing file. When this argument is used, only one @var{objfile}
2759argument may be specified.
2760
2761@item -p
2762@itemx --preserve-dates
2763Preserve the access and modification dates of the file.
2764
5fe11841
NC
2765@item -w
2766@itemx --wildcard
2767Permit regular expressions in @var{symbolname}s used in other command
2768line options. The question mark (?), asterisk (*), backslash (\) and
2769square brackets ([]) operators can be used anywhere in the symbol
2770name. If the first character of the symbol name is the exclamation
2771point (!) then the sense of the switch is reversed for that symbol.
2772For example:
2773
2774@smallexample
2775 -w -K !foo -K fo*
2776@end smallexample
2777
2778would cause strip to only keep symbols that start with the letters
2779``fo'', but to discard the symbol ``foo''.
2780
252b5132
RH
2781@item -x
2782@itemx --discard-all
2783Remove non-global symbols.
2784
2785@item -X
2786@itemx --discard-locals
2787Remove compiler-generated local symbols.
2788(These usually start with @samp{L} or @samp{.}.)
2789
1637cd90
JB
2790@item --keep-file-symbols
2791When stripping a file, perhaps with @option{--strip-debug} or
2792@option{--strip-unneeded}, retain any symbols specifying source file names,
2793which would otherwise get stripped.
2794
ed1653a7 2795@item --only-keep-debug
c1c0eb9e
RM
2796Strip a file, removing contents of any sections that would not be
2797stripped by @option{--strip-debug} and leaving the debugging sections
2798intact. In ELF files, this preserves all note sections in the output.
ed1653a7
NC
2799
2800The intention is that this option will be used in conjunction with
2801@option{--add-gnu-debuglink} to create a two part executable. One a
2802stripped binary which will occupy less space in RAM and in a
2803distribution and the second a debugging information file which is only
2804needed if debugging abilities are required. The suggested procedure
2805to create these files is as follows:
2806
2807@enumerate
2808@item Link the executable as normal. Assuming that is is called
2809@code{foo} then...
2810@item Run @code{objcopy --only-keep-debug foo foo.dbg} to
2811create a file containing the debugging info.
2812@item Run @code{objcopy --strip-debug foo} to create a
2813stripped executable.
2814@item Run @code{objcopy --add-gnu-debuglink=foo.dbg foo}
2815to add a link to the debugging info into the stripped executable.
2816@end enumerate
2817
928a4139 2818Note---the choice of @code{.dbg} as an extension for the debug info
ed1653a7
NC
2819file is arbitrary. Also the @code{--only-keep-debug} step is
2820optional. You could instead do this:
2821
2822@enumerate
2823@item Link the executable as normal.
928a4139 2824@item Copy @code{foo} to @code{foo.full}
ed1653a7
NC
2825@item Run @code{strip --strip-debug foo}
2826@item Run @code{objcopy --add-gnu-debuglink=foo.full foo}
2827@end enumerate
2828
928a4139 2829i.e., the file pointed to by the @option{--add-gnu-debuglink} can be the
ed1653a7
NC
2830full executable. It does not have to be a file created by the
2831@option{--only-keep-debug} switch.
2832
928a4139 2833Note---this switch is only intended for use on fully linked files. It
91bb255c
NC
2834does not make sense to use it on object files where the debugging
2835information may be incomplete. Besides the gnu_debuglink feature
2836currently only supports the presence of one filename containing
2837debugging information, not multiple filenames on a one-per-object-file
2838basis.
2839
252b5132
RH
2840@item -V
2841@itemx --version
c7c55b78 2842Show the version number for @command{strip}.
252b5132
RH
2843
2844@item -v
2845@itemx --verbose
2846Verbose output: list all object files modified. In the case of
2847archives, @samp{strip -v} lists all members of the archive.
2848@end table
2849
0285c67d
NC
2850@c man end
2851
2852@ignore
2853@c man begin SEEALSO strip
2854the Info entries for @file{binutils}.
2855@c man end
2856@end ignore
2857
30fd33bb 2858@node c++filt, addr2line, elfedit, Top
252b5132
RH
2859@chapter c++filt
2860
2861@kindex c++filt
2862@cindex demangling C++ symbols
2863
0285c67d
NC
2864@c man title cxxfilt Demangle C++ and Java symbols.
2865
252b5132 2866@smallexample
0285c67d 2867@c man begin SYNOPSIS cxxfilt
c7c55b78 2868c++filt [@option{-_}|@option{--strip-underscores}]
c7c55b78 2869 [@option{-n}|@option{--no-strip-underscores}]
4e48c9dd 2870 [@option{-p}|@option{--no-params}]
ec948987 2871 [@option{-t}|@option{--types}]
cbf1f5df 2872 [@option{-i}|@option{--no-verbose}]
c7c55b78
NC
2873 [@option{-s} @var{format}|@option{--format=}@var{format}]
2874 [@option{--help}] [@option{--version}] [@var{symbol}@dots{}]
0285c67d 2875@c man end
252b5132
RH
2876@end smallexample
2877
0285c67d
NC
2878@c man begin DESCRIPTION cxxfilt
2879
9d51cc66 2880@kindex cxxfilt
ec948987
NC
2881The C++ and Java languages provide function overloading, which means
2882that you can write many functions with the same name, providing that
2883each function takes parameters of different types. In order to be
2884able to distinguish these similarly named functions C++ and Java
2885encode them into a low-level assembler name which uniquely identifies
2886each different version. This process is known as @dfn{mangling}. The
2887@command{c++filt}
c1c0eb9e 2888@footnote{MS-DOS does not allow @kbd{+} characters in file names, so on
195a97ce 2889MS-DOS this program is named @command{CXXFILT}.}
9d51cc66 2890program does the inverse mapping: it decodes (@dfn{demangles}) low-level
ec948987 2891names into user-level names so that they can be read.
252b5132
RH
2892
2893Every alphanumeric word (consisting of letters, digits, underscores,
cbf1f5df
NC
2894dollars, or periods) seen in the input is a potential mangled name.
2895If the name decodes into a C++ name, the C++ name replaces the
ec948987
NC
2896low-level name in the output, otherwise the original word is output.
2897In this way you can pass an entire assembler source file, containing
2898mangled names, through @command{c++filt} and see the same source file
2899containing demangled names.
252b5132 2900
ec948987
NC
2901You can also use @command{c++filt} to decipher individual symbols by
2902passing them on the command line:
252b5132
RH
2903
2904@example
2905c++filt @var{symbol}
2906@end example
2907
c7c55b78 2908If no @var{symbol} arguments are given, @command{c++filt} reads symbol
ec948987
NC
2909names from the standard input instead. All the results are printed on
2910the standard output. The difference between reading names from the
2911command line versus reading names from the standard input is that
2912command line arguments are expected to be just mangled names and no
b45619c0 2913checking is performed to separate them from surrounding text. Thus
ec948987
NC
2914for example:
2915
2916@smallexample
2917c++filt -n _Z1fv
2918@end smallexample
2919
2920will work and demangle the name to ``f()'' whereas:
2921
2922@smallexample
2923c++filt -n _Z1fv,
2924@end smallexample
2925
2926will not work. (Note the extra comma at the end of the mangled
2927name which makes it invalid). This command however will work:
2928
2929@smallexample
2930echo _Z1fv, | c++filt -n
2931@end smallexample
2932
928a4139 2933and will display ``f(),'', i.e., the demangled name followed by a
ec948987
NC
2934trailing comma. This behaviour is because when the names are read
2935from the standard input it is expected that they might be part of an
2936assembler source file where there might be extra, extraneous
928a4139 2937characters trailing after a mangled name. For example:
ec948987
NC
2938
2939@smallexample
2940 .type _Z1fv, @@function
2941@end smallexample
252b5132 2942
0285c67d
NC
2943@c man end
2944
2945@c man begin OPTIONS cxxfilt
2946
c7c55b78 2947@table @env
252b5132
RH
2948@item -_
2949@itemx --strip-underscores
2950On some systems, both the C and C++ compilers put an underscore in front
2951of every name. For example, the C name @code{foo} gets the low-level
2952name @code{_foo}. This option removes the initial underscore. Whether
c7c55b78 2953@command{c++filt} removes the underscore by default is target dependent.
252b5132 2954
252b5132
RH
2955@item -n
2956@itemx --no-strip-underscores
2957Do not remove the initial underscore.
2958
4e48c9dd
ILT
2959@item -p
2960@itemx --no-params
2961When demangling the name of a function, do not display the types of
2962the function's parameters.
2963
cbf1f5df 2964@item -t
ec948987
NC
2965@itemx --types
2966Attempt to demangle types as well as function names. This is disabled
2967by default since mangled types are normally only used internally in
928a4139 2968the compiler, and they can be confused with non-mangled names. For example,
ec948987
NC
2969a function called ``a'' treated as a mangled type name would be
2970demangled to ``signed char''.
cbf1f5df
NC
2971
2972@item -i
2973@itemx --no-verbose
2974Do not include implementation details (if any) in the demangled
2975output.
2976
252b5132
RH
2977@item -s @var{format}
2978@itemx --format=@var{format}
947ed062
NC
2979@command{c++filt} can decode various methods of mangling, used by
2980different compilers. The argument to this option selects which
252b5132
RH
2981method it uses:
2982
2983@table @code
947ed062
NC
2984@item auto
2985Automatic selection based on executable (the default method)
252b5132 2986@item gnu
947ed062 2987the one used by the @sc{gnu} C++ compiler (g++)
252b5132 2988@item lucid
947ed062 2989the one used by the Lucid compiler (lcc)
252b5132
RH
2990@item arm
2991the one specified by the C++ Annotated Reference Manual
2992@item hp
947ed062 2993the one used by the HP compiler (aCC)
252b5132
RH
2994@item edg
2995the one used by the EDG compiler
b5e2a4f3 2996@item gnu-v3
947ed062
NC
2997the one used by the @sc{gnu} C++ compiler (g++) with the V3 ABI.
2998@item java
2999the one used by the @sc{gnu} Java compiler (gcj)
3000@item gnat
3001the one used by the @sc{gnu} Ada compiler (GNAT).
252b5132
RH
3002@end table
3003
3004@item --help
c7c55b78 3005Print a summary of the options to @command{c++filt} and exit.
252b5132
RH
3006
3007@item --version
c7c55b78 3008Print the version number of @command{c++filt} and exit.
252b5132
RH
3009@end table
3010
0285c67d
NC
3011@c man end
3012
3013@ignore
3014@c man begin SEEALSO cxxfilt
3015the Info entries for @file{binutils}.
3016@c man end
3017@end ignore
3018
252b5132 3019@quotation
c7c55b78 3020@emph{Warning:} @command{c++filt} is a new utility, and the details of its
252b5132 3021user interface are subject to change in future releases. In particular,
b45619c0 3022a command-line option may be required in the future to decode a name
c1c0eb9e 3023passed as an argument on the command line; in other words,
252b5132
RH
3024
3025@example
3026c++filt @var{symbol}
3027@end example
3028
3029@noindent
3030may in a future release become
3031
3032@example
3033c++filt @var{option} @var{symbol}
3034@end example
3035@end quotation
3036
3037@node addr2line
3038@chapter addr2line
3039
3040@kindex addr2line
3041@cindex address to file name and line number
3042
0285c67d
NC
3043@c man title addr2line convert addresses into file names and line numbers.
3044
252b5132 3045@smallexample
0285c67d 3046@c man begin SYNOPSIS addr2line
be6f6493
TG
3047addr2line [@option{-a}|@option{--addresses}]
3048 [@option{-b} @var{bfdname}|@option{--target=}@var{bfdname}]
bf44dd74 3049 [@option{-C}|@option{--demangle}[=@var{style}]]
c7c55b78
NC
3050 [@option{-e} @var{filename}|@option{--exe=}@var{filename}]
3051 [@option{-f}|@option{--functions}] [@option{-s}|@option{--basename}]
0c552dc1 3052 [@option{-i}|@option{--inlines}]
68cdf72f 3053 [@option{-p}|@option{--pretty-print}]
c5f8c388 3054 [@option{-j}|@option{--section=}@var{name}]
c7c55b78
NC
3055 [@option{-H}|@option{--help}] [@option{-V}|@option{--version}]
3056 [addr addr @dots{}]
0285c67d 3057@c man end
252b5132
RH
3058@end smallexample
3059
0285c67d
NC
3060@c man begin DESCRIPTION addr2line
3061
c5f8c388
EB
3062@command{addr2line} translates addresses into file names and line numbers.
3063Given an address in an executable or an offset in a section of a relocatable
3064object, it uses the debugging information to figure out which file name and
3065line number are associated with it.
252b5132 3066
c5f8c388
EB
3067The executable or relocatable object to use is specified with the @option{-e}
3068option. The default is the file @file{a.out}. The section in the relocatable
3069object to use is specified with the @option{-j} option.
252b5132 3070
c7c55b78 3071@command{addr2line} has two modes of operation.
252b5132
RH
3072
3073In the first, hexadecimal addresses are specified on the command line,
c7c55b78 3074and @command{addr2line} displays the file name and line number for each
252b5132
RH
3075address.
3076
c7c55b78 3077In the second, @command{addr2line} reads hexadecimal addresses from
252b5132 3078standard input, and prints the file name and line number for each
c7c55b78 3079address on standard output. In this mode, @command{addr2line} may be used
252b5132
RH
3080in a pipe to convert dynamically chosen addresses.
3081
3082The format of the output is @samp{FILENAME:LINENO}. The file name and
9cf03b7e
NC
3083line number for each input address is printed on separate lines.
3084
3085If the @option{-f} option is used, then each @samp{FILENAME:LINENO}
3086line is preceded by @samp{FUNCTIONNAME} which is the name of the
3087function containing the address.
3088
3089If the @option{-i} option is used and the code at the given address is
3090present there because of inlining by the compiler then the
3091@samp{@{FUNCTIONNAME@} FILENAME:LINENO} information for the inlining
3092function will be displayed afterwards. This continues recursively
3093until there is no more inlining to report.
3094
3095If the @option{-a} option is used then the output is prefixed by the
3096input address.
3097
3098If the @option{-p} option is used then the output for each input
3099address is displayed on one, possibly quite long, line. If
3100@option{-p} is not used then the output is broken up into multiple
3101lines, based on the paragraphs above.
252b5132
RH
3102
3103If the file name or function name can not be determined,
c7c55b78
NC
3104@command{addr2line} will print two question marks in their place. If the
3105line number can not be determined, @command{addr2line} will print 0.
252b5132 3106
0285c67d
NC
3107@c man end
3108
3109@c man begin OPTIONS addr2line
3110
252b5132
RH
3111The long and short forms of options, shown here as alternatives, are
3112equivalent.
3113
c7c55b78 3114@table @env
be6f6493
TG
3115@item -a
3116@itemx --addresses
9cf03b7e 3117Display the address before the function name, file and line number
be6f6493
TG
3118information. The address is printed with a @samp{0x} prefix to easily
3119identify it.
3120
252b5132
RH
3121@item -b @var{bfdname}
3122@itemx --target=@var{bfdname}
3123@cindex object code format
3124Specify that the object-code format for the object files is
3125@var{bfdname}.
3126
3127@item -C
28c309a2 3128@itemx --demangle[=@var{style}]
252b5132
RH
3129@cindex demangling in objdump
3130Decode (@dfn{demangle}) low-level symbol names into user-level names.
3131Besides removing any initial underscore prepended by the system, this
28c309a2 3132makes C++ function names readable. Different compilers have different
c1c0eb9e
RM
3133mangling styles. The optional demangling style argument can be used to
3134choose an appropriate demangling style for your compiler. @xref{c++filt},
28c309a2 3135for more information on demangling.
252b5132
RH
3136
3137@item -e @var{filename}
3138@itemx --exe=@var{filename}
3139Specify the name of the executable for which addresses should be
3140translated. The default file is @file{a.out}.
3141
3142@item -f
3143@itemx --functions
3144Display function names as well as file and line number information.
3145
3146@item -s
3147@itemx --basenames
3148Display only the base of each file name.
0c552dc1
FF
3149
3150@item -i
3151@itemx --inlines
3152If the address belongs to a function that was inlined, the source
3153information for all enclosing scopes back to the first non-inlined
3154function will also be printed. For example, if @code{main} inlines
3155@code{callee1} which inlines @code{callee2}, and address is from
3156@code{callee2}, the source information for @code{callee1} and @code{main}
3157will also be printed.
c5f8c388
EB
3158
3159@item -j
3160@itemx --section
3161Read offsets relative to the specified section instead of absolute addresses.
68cdf72f
TG
3162
3163@item -p
3164@itemx --pretty-print
3165Make the output more human friendly: each location are printed on one line.
3166If option @option{-i} is specified, lines for all enclosing scopes are
3167prefixed with @samp{(inlined by)}.
e107c42f 3168@end table
252b5132 3169
0285c67d
NC
3170@c man end
3171
3172@ignore
3173@c man begin SEEALSO addr2line
3174Info entries for @file{binutils}.
3175@c man end
3176@end ignore
3177
252b5132
RH
3178@node nlmconv
3179@chapter nlmconv
3180
c7c55b78 3181@command{nlmconv} converts a relocatable object file into a NetWare
252b5132
RH
3182Loadable Module.
3183
3184@ignore
c7c55b78 3185@command{nlmconv} currently works with @samp{i386} object
252b5132
RH
3186files in @code{coff}, @sc{elf}, or @code{a.out} format, and @sc{SPARC}
3187object files in @sc{elf}, or @code{a.out} format@footnote{
c7c55b78 3188@command{nlmconv} should work with any @samp{i386} or @sc{sparc} object
252b5132
RH
3189format in the Binary File Descriptor library. It has only been tested
3190with the above formats.}.
3191@end ignore
3192
3193@quotation
c7c55b78 3194@emph{Warning:} @command{nlmconv} is not always built as part of the binary
252b5132
RH
3195utilities, since it is only useful for NLM targets.
3196@end quotation
3197
0285c67d
NC
3198@c man title nlmconv converts object code into an NLM.
3199
252b5132 3200@smallexample
0285c67d 3201@c man begin SYNOPSIS nlmconv
c7c55b78
NC
3202nlmconv [@option{-I} @var{bfdname}|@option{--input-target=}@var{bfdname}]
3203 [@option{-O} @var{bfdname}|@option{--output-target=}@var{bfdname}]
3204 [@option{-T} @var{headerfile}|@option{--header-file=}@var{headerfile}]
3205 [@option{-d}|@option{--debug}] [@option{-l} @var{linker}|@option{--linker=}@var{linker}]
3206 [@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
252b5132 3207 @var{infile} @var{outfile}
0285c67d 3208@c man end
252b5132
RH
3209@end smallexample
3210
0285c67d
NC
3211@c man begin DESCRIPTION nlmconv
3212
c7c55b78 3213@command{nlmconv} converts the relocatable @samp{i386} object file
252b5132
RH
3214@var{infile} into the NetWare Loadable Module @var{outfile}, optionally
3215reading @var{headerfile} for NLM header information. For instructions
3216on writing the NLM command file language used in header files, see the
3217@samp{linkers} section, @samp{NLMLINK} in particular, of the @cite{NLM
3218Development and Tools Overview}, which is part of the NLM Software
3219Developer's Kit (``NLM SDK''), available from Novell, Inc.
c7c55b78 3220@command{nlmconv} uses the @sc{gnu} Binary File Descriptor library to read
0285c67d
NC
3221@var{infile};
3222@ifclear man
3223see @ref{BFD,,BFD,ld.info,Using LD}, for more information.
3224@end ifclear
252b5132 3225
c7c55b78 3226@command{nlmconv} can perform a link step. In other words, you can list
252b5132
RH
3227more than one object file for input if you list them in the definitions
3228file (rather than simply specifying one input file on the command line).
c7c55b78 3229In this case, @command{nlmconv} calls the linker for you.
252b5132 3230
0285c67d
NC
3231@c man end
3232
3233@c man begin OPTIONS nlmconv
3234
c7c55b78 3235@table @env
252b5132
RH
3236@item -I @var{bfdname}
3237@itemx --input-target=@var{bfdname}
c7c55b78 3238Object format of the input file. @command{nlmconv} can usually determine
252b5132
RH
3239the format of a given file (so no default is necessary).
3240@xref{Target Selection}, for more information.
3241
3242@item -O @var{bfdname}
3243@itemx --output-target=@var{bfdname}
c7c55b78 3244Object format of the output file. @command{nlmconv} infers the output
252b5132
RH
3245format based on the input format, e.g. for a @samp{i386} input file the
3246output format is @samp{nlm32-i386}.
3247@xref{Target Selection}, for more information.
3248
3249@item -T @var{headerfile}
3250@itemx --header-file=@var{headerfile}
3251Reads @var{headerfile} for NLM header information. For instructions on
3252writing the NLM command file language used in header files, see@ see the
3253@samp{linkers} section, of the @cite{NLM Development and Tools
3254Overview}, which is part of the NLM Software Developer's Kit, available
3255from Novell, Inc.
3256
3257@item -d
3258@itemx --debug
c7c55b78 3259Displays (on standard error) the linker command line used by @command{nlmconv}.
252b5132
RH
3260
3261@item -l @var{linker}
3262@itemx --linker=@var{linker}
3263Use @var{linker} for any linking. @var{linker} can be an absolute or a
3264relative pathname.
3265
3266@item -h
3267@itemx --help
3268Prints a usage summary.
3269
3270@item -V
3271@itemx --version
c7c55b78 3272Prints the version number for @command{nlmconv}.
252b5132
RH
3273@end table
3274
0285c67d
NC
3275@c man end
3276
3277@ignore
3278@c man begin SEEALSO nlmconv
3279the Info entries for @file{binutils}.
692ed3e7
NC
3280@c man end
3281@end ignore
3282
3283@node windmc
3284@chapter windmc
3285
3286@command{windmc} may be used to generator Windows message resources.
3287
3288@quotation
3289@emph{Warning:} @command{windmc} is not always built as part of the binary
3290utilities, since it is only useful for Windows targets.
3291@end quotation
3292
3293@c man title windmc generates Windows message resources.
3294
3295@smallexample
826fec2f 3296@c man begin SYNOPSIS windmc
692ed3e7
NC
3297windmc [options] input-file
3298@c man end
3299@end smallexample
3300
3301@c man begin DESCRIPTION windmc
3302
3303@command{windmc} reads message definitions from an input file (.mc) and
3304translate them into a set of output files. The output files may be of
3305four kinds:
3306
3307@table @code
3308@item h
3309A C header file containing the message definitions.
3310
3311@item rc
3312A resource file compilable by the @command{windres} tool.
3313
3314@item bin
3315One or more binary files containing the resource data for a specific
3316message language.
3317
3318@item dbg
3319A C include file that maps message id's to their symbolic name.
3320@end table
3321
3322The exact description of these different formats is available in
3323documentation from Microsoft.
3324
3325When @command{windmc} converts from the @code{mc} format to the @code{bin}
3326format, @code{rc}, @code{h}, and optional @code{dbg} it is acting like the
3327Windows Message Compiler.
3328
3329@c man end
3330
3331@c man begin OPTIONS windmc
3332
3333@table @env
3334@item -a
3335@itemx --ascii_in
826fec2f 3336Specifies that the input file specified is ASCII. This is the default
692ed3e7
NC
3337behaviour.
3338
3339@item -A
3340@itemx --ascii_out
826fec2f 3341Specifies that messages in the output @code{bin} files should be in ASCII
692ed3e7
NC
3342format.
3343
3344@item -b
3345@itemx --binprefix
3346Specifies that @code{bin} filenames should have to be prefixed by the
3347basename of the source file.
3348
3349@item -c
3350@itemx --customflag
3351Sets the customer bit in all message id's.
3352
3353@item -C @var{codepage}
3354@itemx --codepage_in @var{codepage}
3355Sets the default codepage to be used to convert input file to UTF16. The
3356default is ocdepage 1252.
3357
3358@item -d
3359@itemx --decimal_values
3360Outputs the constants in the header file in decimal. Default is using
3361hexadecimal output.
3362
3363@item -e @var{ext}
3364@itemx --extension @var{ext}
3365The extension for the header file. The default is .h extension.
3366
3367@item -F @var{target}
3368@itemx --target @var{target}
3369Specify the BFD format to use for a bin file as output. This
3370is a BFD target name; you can use the @option{--help} option to see a list
3371of supported targets. Normally @command{windmc} will use the default
3372format, which is the first one listed by the @option{--help} option.
3373@ifclear man
3374@ref{Target Selection}.
3375@end ifclear
3376
3377@item -h @var{path}
3378@itemx --headerdir @var{path}
3379The target directory of the generated header file. The default is the
3380current directory.
3381
3382@item -H
3383@itemx --help
3384Displays a list of command line options and then exits.
3385
3386@item -m @var{characters}
3387@itemx --maxlength @var{characters}
3388Instructs @command{windmc} to generate a warning if the length
3389of any message exceeds the number specified.
3390
3391@item -n
3392@itemx --nullterminate
3393Terminate message text in @code{bin} files by zero. By default they are
3394terminated by CR/LF.
3395
3396@item -o
3397@itemx --hresult_use
3398Not yet implemented. Instructs @code{windmc} to generate an OLE2 header
3399file, using HRESULT definitions. Status codes are used if the flag is not
3400specified.
3401
3402@item -O @var{codepage}
3403@itemx --codepage_out @var{codepage}
3404Sets the default codepage to be used to output text files. The default
3405is ocdepage 1252.
3406
3407@item -r @var{path}
3408@itemx --rcdir @var{path}
3409The target directory for the generated @code{rc} script and the generated
3410@code{bin} files that the resource compiler script includes. The default
3411is the current directory.
3412
3413@item -u
3414@itemx --unicode_in
3415Specifies that the input file is UTF16.
3416
3417@item -U
3418@itemx --unicode_out
3419Specifies that messages in the output @code{bin} file should be in UTF16
3420format. This is the default behaviour.
3421
3422@item -v
3423@item --verbose
bd37ed49 3424Enable verbose mode.
692ed3e7
NC
3425
3426@item -V
3427@item --version
bd37ed49 3428Prints the version number for @command{windmc}.
692ed3e7
NC
3429
3430@item -x @var{path}
3431@itemx --xdgb @var{path}
3432The path of the @code{dbg} C include file that maps message id's to the
3433symbolic name. No such file is generated without specifying the switch.
3434@end table
3435
3436@c man end
3437
3438@ignore
3439@c man begin SEEALSO windmc
3440the Info entries for @file{binutils}.
0285c67d
NC
3441@c man end
3442@end ignore
3443
252b5132
RH
3444@node windres
3445@chapter windres
3446
c7c55b78 3447@command{windres} may be used to manipulate Windows resources.
252b5132
RH
3448
3449@quotation
c7c55b78 3450@emph{Warning:} @command{windres} is not always built as part of the binary
252b5132
RH
3451utilities, since it is only useful for Windows targets.
3452@end quotation
3453
0285c67d
NC
3454@c man title windres manipulate Windows resources.
3455
252b5132 3456@smallexample
0285c67d 3457@c man begin SYNOPSIS windres
252b5132 3458windres [options] [input-file] [output-file]
0285c67d 3459@c man end
252b5132
RH
3460@end smallexample
3461
0285c67d
NC
3462@c man begin DESCRIPTION windres
3463
c7c55b78 3464@command{windres} reads resources from an input file and copies them into
252b5132
RH
3465an output file. Either file may be in one of three formats:
3466
3467@table @code
3468@item rc
3469A text format read by the Resource Compiler.
3470
3471@item res
3472A binary format generated by the Resource Compiler.
3473
3474@item coff
3475A COFF object or executable.
3476@end table
3477
3478The exact description of these different formats is available in
3479documentation from Microsoft.
3480
c7c55b78 3481When @command{windres} converts from the @code{rc} format to the @code{res}
252b5132 3482format, it is acting like the Windows Resource Compiler. When
c7c55b78 3483@command{windres} converts from the @code{res} format to the @code{coff}
252b5132
RH
3484format, it is acting like the Windows @code{CVTRES} program.
3485
c7c55b78 3486When @command{windres} generates an @code{rc} file, the output is similar
252b5132
RH
3487but not identical to the format expected for the input. When an input
3488@code{rc} file refers to an external filename, an output @code{rc} file
3489will instead include the file contents.
3490
c7c55b78 3491If the input or output format is not specified, @command{windres} will
252b5132
RH
3492guess based on the file name, or, for the input file, the file contents.
3493A file with an extension of @file{.rc} will be treated as an @code{rc}
3494file, a file with an extension of @file{.res} will be treated as a
3495@code{res} file, and a file with an extension of @file{.o} or
3496@file{.exe} will be treated as a @code{coff} file.
3497
c7c55b78 3498If no output file is specified, @command{windres} will print the resources
252b5132
RH
3499in @code{rc} format to standard output.
3500
c7c55b78 3501The normal use is for you to write an @code{rc} file, use @command{windres}
252b5132
RH
3502to convert it to a COFF object file, and then link the COFF file into
3503your application. This will make the resources described in the
3504@code{rc} file available to Windows.
3505
0285c67d
NC
3506@c man end
3507
3508@c man begin OPTIONS windres
3509
c7c55b78 3510@table @env
252b5132
RH
3511@item -i @var{filename}
3512@itemx --input @var{filename}
3513The name of the input file. If this option is not used, then
c7c55b78
NC
3514@command{windres} will use the first non-option argument as the input file
3515name. If there are no non-option arguments, then @command{windres} will
3516read from standard input. @command{windres} can not read a COFF file from
edbedb71 3517standard input.
252b5132
RH
3518
3519@item -o @var{filename}
3520@itemx --output @var{filename}
3521The name of the output file. If this option is not used, then
c7c55b78 3522@command{windres} will use the first non-option argument, after any used
252b5132 3523for the input file name, as the output file name. If there is no
c7c55b78 3524non-option argument, then @command{windres} will write to standard output.
edbedb71 3525@command{windres} can not write a COFF file to standard output. Note,
b45619c0 3526for compatibility with @command{rc} the option @option{-fo} is also
edbedb71 3527accepted, but its use is not recommended.
252b5132 3528
85eb5110 3529@item -J @var{format}
252b5132
RH
3530@itemx --input-format @var{format}
3531The input format to read. @var{format} may be @samp{res}, @samp{rc}, or
c7c55b78 3532@samp{coff}. If no input format is specified, @command{windres} will
252b5132
RH
3533guess, as described above.
3534
3535@item -O @var{format}
3536@itemx --output-format @var{format}
3537The output format to generate. @var{format} may be @samp{res},
3538@samp{rc}, or @samp{coff}. If no output format is specified,
c7c55b78 3539@command{windres} will guess, as described above.
252b5132
RH
3540
3541@item -F @var{target}
3542@itemx --target @var{target}
3543Specify the BFD format to use for a COFF file as input or output. This
c7c55b78
NC
3544is a BFD target name; you can use the @option{--help} option to see a list
3545of supported targets. Normally @command{windres} will use the default
3546format, which is the first one listed by the @option{--help} option.
3547@ifclear man
252b5132 3548@ref{Target Selection}.
c7c55b78 3549@end ifclear
252b5132
RH
3550
3551@item --preprocessor @var{program}
c7c55b78 3552When @command{windres} reads an @code{rc} file, it runs it through the C
252b5132
RH
3553preprocessor first. This option may be used to specify the preprocessor
3554to use, including any leading arguments. The default preprocessor
3555argument is @code{gcc -E -xc-header -DRC_INVOKED}.
3556
ec25acb3
NC
3557@item --preprocessor-arg @var{option}
3558When @command{windres} reads an @code{rc} file, it runs it through
3559the C preprocessor first. This option may be used to specify additional
3560text to be passed to preprocessor on its command line.
3561This option can be used multiple times to add multiple options to the
3562preprocessor command line.
3563
85eb5110
NC
3564@item -I @var{directory}
3565@itemx --include-dir @var{directory}
252b5132 3566Specify an include directory to use when reading an @code{rc} file.
c7c55b78
NC
3567@command{windres} will pass this to the preprocessor as an @option{-I}
3568option. @command{windres} will also search this directory when looking for
85eb5110 3569files named in the @code{rc} file. If the argument passed to this command
c1c0eb9e 3570matches any of the supported @var{formats} (as described in the @option{-J}
85eb5110
NC
3571option), it will issue a deprecation warning, and behave just like the
3572@option{-J} option. New programs should not use this behaviour. If a
3573directory happens to match a @var{format}, simple prefix it with @samp{./}
3574to disable the backward compatibility.
252b5132 3575
751d21b5 3576@item -D @var{target}
ad0481cd 3577@itemx --define @var{sym}[=@var{val}]
c7c55b78 3578Specify a @option{-D} option to pass to the preprocessor when reading an
252b5132
RH
3579@code{rc} file.
3580
29b058f1
NC
3581@item -U @var{target}
3582@itemx --undefine @var{sym}
3583Specify a @option{-U} option to pass to the preprocessor when reading an
3584@code{rc} file.
3585
3126d709
CF
3586@item -r
3587Ignored for compatibility with rc.
3588
751d21b5
DD
3589@item -v
3590Enable verbose mode. This tells you what the preprocessor is if you
3591didn't specify one.
3592
30ff741f
NC
3593@item -c @var{val}
3594@item --codepage @var{val}
3595Specify the default codepage to use when reading an @code{rc} file.
3596@var{val} should be a hexadecimal prefixed by @samp{0x} or decimal
3597codepage code. The valid range is from zero up to 0xffff, but the
3598validity of the codepage is host and configuration dependent.
3599
3077f5d8 3600@item -l @var{val}
252b5132
RH
3601@item --language @var{val}
3602Specify the default language to use when reading an @code{rc} file.
3603@var{val} should be a hexadecimal language code. The low eight bits are
3604the language, and the high eight bits are the sublanguage.
3605
5a298d2d
NC
3606@item --use-temp-file
3607Use a temporary file to instead of using popen to read the output of
c1c0eb9e
RM
3608the preprocessor. Use this option if the popen implementation is buggy
3609on the host (eg., certain non-English language versions of Windows 95 and
5a298d2d
NC
3610Windows 98 are known to have buggy popen where the output will instead
3611go the console).
3612
3613@item --no-use-temp-file
3614Use popen, not a temporary file, to read the output of the preprocessor.
3615This is the default behaviour.
3616
3077f5d8 3617@item -h
252b5132
RH
3618@item --help
3619Prints a usage summary.
3620
3077f5d8 3621@item -V
252b5132 3622@item --version
c7c55b78 3623Prints the version number for @command{windres}.
252b5132
RH
3624
3625@item --yydebug
c7c55b78 3626If @command{windres} is compiled with @code{YYDEBUG} defined as @code{1},
252b5132
RH
3627this will turn on parser debugging.
3628@end table
3629
0285c67d
NC
3630@c man end
3631
3632@ignore
3633@c man begin SEEALSO windres
3634the Info entries for @file{binutils}.
3635@c man end
3636@end ignore
252b5132
RH
3637
3638@node dlltool
2aa9814e 3639@chapter dlltool
252b5132
RH
3640@cindex DLL
3641@kindex dlltool
3642
2aa9814e
BE
3643@command{dlltool} is used to create the files needed to create dynamic
3644link libraries (DLLs) on systems which understand PE format image
3645files such as Windows. A DLL contains an export table which contains
3646information that the runtime loader needs to resolve references from a
3647referencing program.
3648
3649The export table is generated by this program by reading in a
3650@file{.def} file or scanning the @file{.a} and @file{.o} files which
3651will be in the DLL. A @file{.o} file can contain information in
3652special @samp{.drectve} sections with export information.
252b5132
RH
3653
3654@quotation
2aa9814e
BE
3655@emph{Note:} @command{dlltool} is not always built as part of the
3656binary utilities, since it is only useful for those targets which
3657support DLLs.
252b5132
RH
3658@end quotation
3659
0285c67d
NC
3660@c man title dlltool Create files needed to build and use DLLs.
3661
252b5132 3662@smallexample
0285c67d 3663@c man begin SYNOPSIS dlltool
c7c55b78
NC
3664dlltool [@option{-d}|@option{--input-def} @var{def-file-name}]
3665 [@option{-b}|@option{--base-file} @var{base-file-name}]
3666 [@option{-e}|@option{--output-exp} @var{exports-file-name}]
3667 [@option{-z}|@option{--output-def} @var{def-file-name}]
c1c0eb9e 3668 [@option{-l}|@option{--output-lib} @var{library-file-name}]
10e636d2 3669 [@option{-y}|@option{--output-delaylib} @var{library-file-name}]
c7c55b78
NC
3670 [@option{--export-all-symbols}] [@option{--no-export-all-symbols}]
3671 [@option{--exclude-symbols} @var{list}]
3672 [@option{--no-default-excludes}]
3673 [@option{-S}|@option{--as} @var{path-to-assembler}] [@option{-f}|@option{--as-flags} @var{options}]
3674 [@option{-D}|@option{--dllname} @var{name}] [@option{-m}|@option{--machine} @var{machine}]
14288fdc
DS
3675 [@option{-a}|@option{--add-indirect}]
3676 [@option{-U}|@option{--add-underscore}] [@option{--add-stdcall-underscore}]
3677 [@option{-k}|@option{--kill-at}] [@option{-A}|@option{--add-stdcall-alias}]
607dea97 3678 [@option{-p}|@option{--ext-prefix-alias} @var{prefix}]
d4732f7c 3679 [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}]
e77b97d4 3680 [@option{--use-nul-prefixed-import-tables}]
71c57c16
NC
3681 [@option{-I}|@option{--identify} @var{library-file-name}] [@option{--identify-strict}]
3682 [@option{-i}|@option{--interwork}]
f9346411 3683 [@option{-n}|@option{--nodelete}] [@option{-t}|@option{--temp-prefix} @var{prefix}]
c1c0eb9e 3684 [@option{-v}|@option{--verbose}]
c7c55b78 3685 [@option{-h}|@option{--help}] [@option{-V}|@option{--version}]
36d21de5 3686 [@option{--no-leading-underscore}] [@option{--leading-underscore}]
252b5132 3687 [object-file @dots{}]
0285c67d 3688@c man end
252b5132
RH
3689@end smallexample
3690
0285c67d
NC
3691@c man begin DESCRIPTION dlltool
3692
c7c55b78
NC
3693@command{dlltool} reads its inputs, which can come from the @option{-d} and
3694@option{-b} options as well as object files specified on the command
3695line. It then processes these inputs and if the @option{-e} option has
3696been specified it creates a exports file. If the @option{-l} option
3697has been specified it creates a library file and if the @option{-z} option
c1c0eb9e
RM
3698has been specified it creates a def file. Any or all of the @option{-e},
3699@option{-l} and @option{-z} options can be present in one invocation of
c7c55b78 3700dlltool.
252b5132
RH
3701
3702When creating a DLL, along with the source for the DLL, it is necessary
c7c55b78 3703to have three other files. @command{dlltool} can help with the creation of
252b5132
RH
3704these files.
3705
2aa9814e 3706The first file is a @file{.def} file which specifies which functions are
252b5132 3707exported from the DLL, which functions the DLL imports, and so on. This
c7c55b78
NC
3708is a text file and can be created by hand, or @command{dlltool} can be used
3709to create it using the @option{-z} option. In this case @command{dlltool}
252b5132
RH
3710will scan the object files specified on its command line looking for
3711those functions which have been specially marked as being exported and
2aa9814e 3712put entries for them in the @file{.def} file it creates.
252b5132
RH
3713
3714In order to mark a function as being exported from a DLL, it needs to
c7c55b78 3715have an @option{-export:<name_of_function>} entry in the @samp{.drectve}
252b5132
RH
3716section of the object file. This can be done in C by using the
3717asm() operator:
3718
3719@smallexample
c1c0eb9e 3720 asm (".section .drectve");
252b5132
RH
3721 asm (".ascii \"-export:my_func\"");
3722
3723 int my_func (void) @{ @dots{} @}
3724@end smallexample
3725
3726The second file needed for DLL creation is an exports file. This file
3727is linked with the object files that make up the body of the DLL and it
3728handles the interface between the DLL and the outside world. This is a
c7c55b78 3729binary file and it can be created by giving the @option{-e} option to
c1c0eb9e 3730@command{dlltool} when it is creating or reading in a @file{.def} file.
252b5132
RH
3731
3732The third file needed for DLL creation is the library file that programs
d4732f7c
CW
3733will link with in order to access the functions in the DLL (an `import
3734library'). This file can be created by giving the @option{-l} option to
3735dlltool when it is creating or reading in a @file{.def} file.
252b5132 3736
10e636d2
DK
3737If the @option{-y} option is specified, dlltool generates a delay-import
3738library that can be used instead of the normal import library to allow
3739a program to link to the dll only as soon as an imported function is
3740called for the first time. The resulting executable will need to be
3741linked to the static delayimp library containing __delayLoadHelper2(),
3742which in turn will import LoadLibraryA and GetProcAddress from kernel32.
3743
c7c55b78 3744@command{dlltool} builds the library file by hand, but it builds the
252b5132 3745exports file by creating temporary files containing assembler statements
c7c55b78 3746and then assembling these. The @option{-S} command line option can be
252b5132 3747used to specify the path to the assembler that dlltool will use,
c7c55b78
NC
3748and the @option{-f} option can be used to pass specific flags to that
3749assembler. The @option{-n} can be used to prevent dlltool from deleting
3750these temporary assembler files when it is done, and if @option{-n} is
252b5132
RH
3751specified twice then this will prevent dlltool from deleting the
3752temporary object files it used to build the library.
3753
3754Here is an example of creating a DLL from a source file @samp{dll.c} and
3755also creating a program (from an object file called @samp{program.o})
3756that uses that DLL:
3757
3758@smallexample
3759 gcc -c dll.c
3760 dlltool -e exports.o -l dll.lib dll.o
3761 gcc dll.o exports.o -o dll.dll
3762 gcc program.o dll.lib -o program
3763@end smallexample
3764
d4732f7c
CW
3765
3766@command{dlltool} may also be used to query an existing import library
b3364cb9 3767to determine the name of the DLL to which it is associated. See the
d4732f7c 3768description of the @option{-I} or @option{--identify} option.
b3364cb9 3769
0285c67d
NC
3770@c man end
3771
3772@c man begin OPTIONS dlltool
3773
252b5132
RH
3774The command line options have the following meanings:
3775
c7c55b78 3776@table @env
252b5132
RH
3777
3778@item -d @var{filename}
3779@itemx --input-def @var{filename}
3780@cindex input .def file
2aa9814e 3781Specifies the name of a @file{.def} file to be read in and processed.
252b5132
RH
3782
3783@item -b @var{filename}
3784@itemx --base-file @var{filename}
3785@cindex base files
3786Specifies the name of a base file to be read in and processed. The
3787contents of this file will be added to the relocation section in the
3788exports file generated by dlltool.
3789
3790@item -e @var{filename}
3791@itemx --output-exp @var{filename}
3792Specifies the name of the export file to be created by dlltool.
3793
3794@item -z @var{filename}
3795@itemx --output-def @var{filename}
2aa9814e 3796Specifies the name of the @file{.def} file to be created by dlltool.
252b5132
RH
3797
3798@item -l @var{filename}
3799@itemx --output-lib @var{filename}
3800Specifies the name of the library file to be created by dlltool.
3801
10e636d2
DK
3802@item -y @var{filename}
3803@itemx --output-delaylib @var{filename}
3804Specifies the name of the delay-import library file to be created by dlltool.
3805
252b5132
RH
3806@item --export-all-symbols
3807Treat all global and weak defined symbols found in the input object
3808files as symbols to be exported. There is a small list of symbols which
c7c55b78 3809are not exported by default; see the @option{--no-default-excludes}
252b5132 3810option. You may add to the list of symbols to not export by using the
c7c55b78 3811@option{--exclude-symbols} option.
252b5132
RH
3812
3813@item --no-export-all-symbols
2aa9814e 3814Only export symbols explicitly listed in an input @file{.def} file or in
252b5132
RH
3815@samp{.drectve} sections in the input object files. This is the default
3816behaviour. The @samp{.drectve} sections are created by @samp{dllexport}
3817attributes in the source code.
3818
3819@item --exclude-symbols @var{list}
3820Do not export the symbols in @var{list}. This is a list of symbol names
3821separated by comma or colon characters. The symbol names should not
3822contain a leading underscore. This is only meaningful when
c7c55b78 3823@option{--export-all-symbols} is used.
252b5132
RH
3824
3825@item --no-default-excludes
c7c55b78 3826When @option{--export-all-symbols} is used, it will by default avoid
252b5132
RH
3827exporting certain special symbols. The current list of symbols to avoid
3828exporting is @samp{DllMain@@12}, @samp{DllEntryPoint@@0},
c7c55b78 3829@samp{impure_ptr}. You may use the @option{--no-default-excludes} option
252b5132 3830to go ahead and export these special symbols. This is only meaningful
c7c55b78 3831when @option{--export-all-symbols} is used.
252b5132
RH
3832
3833@item -S @var{path}
3834@itemx --as @var{path}
3835Specifies the path, including the filename, of the assembler to be used
3836to create the exports file.
3837
6364e0b4
NC
3838@item -f @var{options}
3839@itemx --as-flags @var{options}
3840Specifies any specific command line options to be passed to the
252b5132 3841assembler when building the exports file. This option will work even if
c7c55b78 3842the @option{-S} option is not used. This option only takes one argument,
252b5132
RH
3843and if it occurs more than once on the command line, then later
3844occurrences will override earlier occurrences. So if it is necessary to
6364e0b4 3845pass multiple options to the assembler they should be enclosed in
252b5132
RH
3846double quotes.
3847
3848@item -D @var{name}
3849@itemx --dll-name @var{name}
2aa9814e
BE
3850Specifies the name to be stored in the @file{.def} file as the name of
3851the DLL when the @option{-e} option is used. If this option is not
3852present, then the filename given to the @option{-e} option will be
3853used as the name of the DLL.
252b5132
RH
3854
3855@item -m @var{machine}
3856@itemx -machine @var{machine}
3857Specifies the type of machine for which the library file should be
c7c55b78 3858built. @command{dlltool} has a built in default type, depending upon how
252b5132
RH
3859it was created, but this option can be used to override that. This is
3860normally only useful when creating DLLs for an ARM processor, when the
c36774d6 3861contents of the DLL are actually encode using Thumb instructions.
252b5132
RH
3862
3863@item -a
3864@itemx --add-indirect
c7c55b78 3865Specifies that when @command{dlltool} is creating the exports file it
252b5132
RH
3866should add a section which allows the exported functions to be
3867referenced without using the import library. Whatever the hell that
c1c0eb9e 3868means!
252b5132
RH
3869
3870@item -U
3871@itemx --add-underscore
c7c55b78 3872Specifies that when @command{dlltool} is creating the exports file it
c1c0eb9e 3873should prepend an underscore to the names of @emph{all} exported symbols.
14288fdc 3874
36d21de5
KT
3875@item --no-leading-underscore
3876@item --leading-underscore
3877Specifies whether standard symbol should be forced to be prefixed, or
3878not.
3879
14288fdc
DS
3880@item --add-stdcall-underscore
3881Specifies that when @command{dlltool} is creating the exports file it
3882should prepend an underscore to the names of exported @emph{stdcall}
3883functions. Variable names and non-stdcall function names are not modified.
3884This option is useful when creating GNU-compatible import libs for third
3885party DLLs that were built with MS-Windows tools.
252b5132
RH
3886
3887@item -k
3888@itemx --kill-at
c7c55b78 3889Specifies that when @command{dlltool} is creating the exports file it
d67a454c
NC
3890should not append the string @samp{@@ <number>}. These numbers are
3891called ordinal numbers and they represent another way of accessing the
3892function in a DLL, other than by name.
252b5132
RH
3893
3894@item -A
3895@itemx --add-stdcall-alias
c7c55b78 3896Specifies that when @command{dlltool} is creating the exports file it
252b5132
RH
3897should add aliases for stdcall symbols without @samp{@@ <number>}
3898in addition to the symbols with @samp{@@ <number>}.
3899
607dea97
NC
3900@item -p
3901@itemx --ext-prefix-alias @var{prefix}
3902Causes @command{dlltool} to create external aliases for all DLL
3903imports with the specified prefix. The aliases are created for both
3904external and import symbols with no leading underscore.
3905
252b5132
RH
3906@item -x
3907@itemx --no-idata4
c7c55b78
NC
3908Specifies that when @command{dlltool} is creating the exports and library
3909files it should omit the @code{.idata4} section. This is for compatibility
252b5132
RH
3910with certain operating systems.
3911
e77b97d4
KT
3912@item --use-nul-prefixed-import-tables
3913Specifies that when @command{dlltool} is creating the exports and library
3914files it should prefix the @code{.idata4} and @code{.idata5} by zero an
3915element. This emulates old gnu import library generation of
3916@code{dlltool}. By default this option is turned off.
3917
252b5132
RH
3918@item -c
3919@itemx --no-idata5
c7c55b78
NC
3920Specifies that when @command{dlltool} is creating the exports and library
3921files it should omit the @code{.idata5} section. This is for compatibility
252b5132
RH
3922with certain operating systems.
3923
d4732f7c
CW
3924@item -I @var{filename}
3925@itemx --identify @var{filename}
3926Specifies that @command{dlltool} should inspect the import library
71c57c16
NC
3927indicated by @var{filename} and report, on @code{stdout}, the name(s)
3928of the associated DLL(s). This can be performed in addition to any
3929other operations indicated by the other options and arguments.
3930@command{dlltool} fails if the import library does not exist or is not
3931actually an import library. See also @option{--identify-strict}.
3932
3933@item --identify-strict
3934Modifies the behavior of the @option{--identify} option, such
3935that an error is reported if @var{filename} is associated with
3936more than one DLL.
d4732f7c 3937
252b5132
RH
3938@item -i
3939@itemx --interwork
c7c55b78 3940Specifies that @command{dlltool} should mark the objects in the library
252b5132 3941file and exports file that it produces as supporting interworking
c36774d6 3942between ARM and Thumb code.
252b5132
RH
3943
3944@item -n
3945@itemx --nodelete
c7c55b78 3946Makes @command{dlltool} preserve the temporary assembler files it used to
252b5132
RH
3947create the exports file. If this option is repeated then dlltool will
3948also preserve the temporary object files it uses to create the library
f9346411
DS
3949file.
3950
3951@item -t @var{prefix}
3952@itemx --temp-prefix @var{prefix}
3953Makes @command{dlltool} use @var{prefix} when constructing the names of
3954temporary assembler and object files. By default, the temp file prefix
c1c0eb9e 3955is generated from the pid.
252b5132
RH
3956
3957@item -v
3958@itemx --verbose
3959Make dlltool describe what it is doing.
3960
3961@item -h
3962@itemx --help
3963Displays a list of command line options and then exits.
3964
3965@item -V
3966@itemx --version
3967Displays dlltool's version number and then exits.
3968
3969@end table
3970
0285c67d
NC
3971@c man end
3972
2aa9814e
BE
3973@menu
3974* def file format:: The format of the dlltool @file{.def} file
3975@end menu
3976
3977@node def file format
3978@section The format of the @command{dlltool} @file{.def} file
3979
3980A @file{.def} file contains any number of the following commands:
3981
3982@table @asis
3983
3984@item @code{NAME} @var{name} @code{[ ,} @var{base} @code{]}
3985The result is going to be named @var{name}@code{.exe}.
3986
3987@item @code{LIBRARY} @var{name} @code{[ ,} @var{base} @code{]}
3988The result is going to be named @var{name}@code{.dll}.
3989
bf201fdd 3990@item @code{EXPORTS ( ( (} @var{name1} @code{[ = } @var{name2} @code{] ) | ( } @var{name1} @code{=} @var{module-name} @code{.} @var{external-name} @code{) ) [ == } @var{its_name} @code{]}
2aa9814e
BE
3991@item @code{[} @var{integer} @code{] [ NONAME ] [ CONSTANT ] [ DATA ] [ PRIVATE ] ) *}
3992Declares @var{name1} as an exported symbol from the DLL, with optional
3993ordinal number @var{integer}, or declares @var{name1} as an alias
bf201fdd
KT
3994(forward) of the function @var{external-name} in the DLL.
3995If @var{its_name} is specified, this name is used as string in export table.
2aa9814e
BE
3996@var{module-name}.
3997
bf201fdd 3998@item @code{IMPORTS ( (} @var{internal-name} @code{=} @var{module-name} @code{.} @var{integer} @code{) | [} @var{internal-name} @code{= ]} @var{module-name} @code{.} @var{external-name} @code{) [ == ) @var{its_name} @code{]} *}
2aa9814e
BE
3999Declares that @var{external-name} or the exported function whose
4000ordinal number is @var{integer} is to be imported from the file
4001@var{module-name}. If @var{internal-name} is specified then this is
4002the name that the imported function will be referred to in the body of
4003the DLL.
bf201fdd 4004If @var{its_name} is specified, this name is used as string in import table.
2aa9814e
BE
4005
4006@item @code{DESCRIPTION} @var{string}
4007Puts @var{string} into the output @file{.exp} file in the
4008@code{.rdata} section.
4009
4010@item @code{STACKSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]}
4011@item @code{HEAPSIZE} @var{number-reserve} @code{[, } @var{number-commit} @code{]}
4012Generates @code{--stack} or @code{--heap}
4013@var{number-reserve},@var{number-commit} in the output @code{.drectve}
4014section. The linker will see this and act upon it.
4015
4016@item @code{CODE} @var{attr} @code{+}
4017@item @code{DATA} @var{attr} @code{+}
4018@item @code{SECTIONS (} @var{section-name} @var{attr}@code{ + ) *}
4019Generates @code{--attr} @var{section-name} @var{attr} in the output
4020@code{.drectve} section, where @var{attr} is one of @code{READ},
4021@code{WRITE}, @code{EXECUTE} or @code{SHARED}. The linker will see
4022this and act upon it.
4023
4024@end table
4025
0285c67d
NC
4026@ignore
4027@c man begin SEEALSO dlltool
2aa9814e 4028The Info pages for @file{binutils}.
0285c67d
NC
4029@c man end
4030@end ignore
4031
252b5132
RH
4032@node readelf
4033@chapter readelf
4034
4035@cindex ELF file information
4036@kindex readelf
4037
0285c67d
NC
4038@c man title readelf Displays information about ELF files.
4039
252b5132 4040@smallexample
0285c67d 4041@c man begin SYNOPSIS readelf
c1c0eb9e 4042readelf [@option{-a}|@option{--all}]
c7c55b78
NC
4043 [@option{-h}|@option{--file-header}]
4044 [@option{-l}|@option{--program-headers}|@option{--segments}]
4045 [@option{-S}|@option{--section-headers}|@option{--sections}]
81fc812e 4046 [@option{-g}|@option{--section-groups}]
5477e8a0 4047 [@option{-t}|@option{--section-details}]
c7c55b78
NC
4048 [@option{-e}|@option{--headers}]
4049 [@option{-s}|@option{--syms}|@option{--symbols}]
2c610e4b 4050 [@option{--dyn-syms}]
c7c55b78
NC
4051 [@option{-n}|@option{--notes}]
4052 [@option{-r}|@option{--relocs}]
4053 [@option{-u}|@option{--unwind}]
4054 [@option{-d}|@option{--dynamic}]
4055 [@option{-V}|@option{--version-info}]
947ed062 4056 [@option{-A}|@option{--arch-specific}]
c7c55b78 4057 [@option{-D}|@option{--use-dynamic}]
aef1f6d0 4058 [@option{-x} <number or name>|@option{--hex-dump=}<number or name>]
09c11c86 4059 [@option{-p} <number or name>|@option{--string-dump=}<number or name>]
cf13d699 4060 [@option{-R} <number or name>|@option{--relocated-dump=}<number or name>]
4145f1d5 4061 [@option{-c}|@option{--archive-index}]
f9f0e732 4062 [@option{-w[lLiaprmfFsoRt]}|
5bbdf3d5 4063 @option{--debug-dump}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]]
fd2f0033
TT
4064 [@option{--dwarf-depth=@var{n}}]
4065 [@option{--dwarf-start=@var{n}}]
ed22650e 4066 [@option{-I}|@option{--histogram}]
c7c55b78 4067 [@option{-v}|@option{--version}]
d974e256 4068 [@option{-W}|@option{--wide}]
c7c55b78 4069 [@option{-H}|@option{--help}]
252b5132 4070 @var{elffile}@dots{}
0285c67d 4071@c man end
252b5132
RH
4072@end smallexample
4073
0285c67d
NC
4074@c man begin DESCRIPTION readelf
4075
c7c55b78 4076@command{readelf} displays information about one or more ELF format object
252b5132
RH
4077files. The options control what particular information to display.
4078
fb52b2f4
NC
4079@var{elffile}@dots{} are the object files to be examined. 32-bit and
408064-bit ELF files are supported, as are archives containing ELF files.
252b5132 4081
9eb20dd8
NC
4082This program performs a similar function to @command{objdump} but it
4083goes into more detail and it exists independently of the @sc{bfd}
4084library, so if there is a bug in @sc{bfd} then readelf will not be
4085affected.
4086
0285c67d
NC
4087@c man end
4088
4089@c man begin OPTIONS readelf
4090
252b5132
RH
4091The long and short forms of options, shown here as alternatives, are
4092equivalent. At least one option besides @samp{-v} or @samp{-H} must be
c1c0eb9e 4093given.
252b5132 4094
c7c55b78 4095@table @env
252b5132
RH
4096@item -a
4097@itemx --all
d95ef3ab 4098Equivalent to specifying @option{--file-header},
c7c55b78
NC
4099@option{--program-headers}, @option{--sections}, @option{--symbols},
4100@option{--relocs}, @option{--dynamic}, @option{--notes} and
c1c0eb9e 4101@option{--version-info}.
252b5132
RH
4102
4103@item -h
4104@itemx --file-header
4105@cindex ELF file header information
4106Displays the information contained in the ELF header at the start of the
4107file.
4108
4109@item -l
4110@itemx --program-headers
4111@itemx --segments
4112@cindex ELF program header information
4113@cindex ELF segment information
4114Displays the information contained in the file's segment headers, if it
4115has any.
4116
4117@item -S
4118@itemx --sections
4119@itemx --section-headers
4120@cindex ELF section information
4121Displays the information contained in the file's section headers, if it
4122has any.
4123
81fc812e
L
4124@item -g
4125@itemx --section-groups
4126@cindex ELF section group information
4127Displays the information contained in the file's section groups, if it
4128has any.
4129
5477e8a0
L
4130@item -t
4131@itemx --section-details
4132@cindex ELF section information
4133Displays the detailed section information. Implies @option{-S}.
81fc812e 4134
252b5132
RH
4135@item -s
4136@itemx --symbols
4137@itemx --syms
4138@cindex ELF symbol table information
4139Displays the entries in symbol table section of the file, if it has one.
4140
2c610e4b
L
4141@item --dyn-syms
4142@cindex ELF dynamic symbol table information
4143Displays the entries in dynamic symbol table section of the file, if it
4144has one.
4145
252b5132
RH
4146@item -e
4147@itemx --headers
c7c55b78 4148Display all the headers in the file. Equivalent to @option{-h -l -S}.
252b5132 4149
779fe533
NC
4150@item -n
4151@itemx --notes
1ec5cd37
NC
4152@cindex ELF notes
4153Displays the contents of the NOTE segments and/or sections, if any.
779fe533 4154
252b5132
RH
4155@item -r
4156@itemx --relocs
4157@cindex ELF reloc information
f5e21966
NC
4158Displays the contents of the file's relocation section, if it has one.
4159
4160@item -u
4161@itemx --unwind
4162@cindex unwind information
4163Displays the contents of the file's unwind section, if it has one. Only
ba7f2642
TS
4164the unwind sections for IA64 ELF files, as well as ARM unwind tables
4165(@code{.ARM.exidx} / @code{.ARM.extab}) are currently supported.
252b5132
RH
4166
4167@item -d
4168@itemx --dynamic
4169@cindex ELF dynamic section information
4170Displays the contents of the file's dynamic section, if it has one.
4171
4172@item -V
4173@itemx --version-info
4174@cindex ELF version sections informations
4175Displays the contents of the version sections in the file, it they
4176exist.
4177
947ed062
NC
4178@item -A
4179@itemx --arch-specific
4180Displays architecture-specific information in the file, if there
4181is any.
4182
252b5132
RH
4183@item -D
4184@itemx --use-dynamic
c7c55b78 4185When displaying symbols, this option makes @command{readelf} use the
2c610e4b
L
4186symbol hash tables in the file's dynamic section, rather than the
4187symbol table sections.
252b5132 4188
aef1f6d0
DJ
4189@item -x <number or name>
4190@itemx --hex-dump=<number or name>
cf13d699 4191Displays the contents of the indicated section as a hexadecimal bytes.
aef1f6d0
DJ
4192A number identifies a particular section by index in the section table;
4193any other string identifies all sections with that name in the object file.
252b5132 4194
cf13d699
NC
4195@item -R <number or name>
4196@itemx --relocated-dump=<number or name>
4197Displays the contents of the indicated section as a hexadecimal
4198bytes. A number identifies a particular section by index in the
4199section table; any other string identifies all sections with that name
4200in the object file. The contents of the section will be relocated
4201before they are displayed.
4202
09c11c86
NC
4203@item -p <number or name>
4204@itemx --string-dump=<number or name>
4205Displays the contents of the indicated section as printable strings.
4206A number identifies a particular section by index in the section table;
4207any other string identifies all sections with that name in the object file.
4208
4145f1d5
NC
4209@item -c
4210@itemx --archive-index
4211@cindex Archive file symbol index information
4212Displays the file symbol index infomation contained in the header part
4213of binary archives. Performs the same function as the @option{t}
4214command to @command{ar}, but without using the BFD library. @xref{ar}.
4215
f9f0e732 4216@item -w[lLiaprmfFsoRt]
5bbdf3d5 4217@itemx --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]
252b5132
RH
4218Displays the contents of the debug sections in the file, if any are
4219present. If one of the optional letters or words follows the switch
4220then only data found in those specific sections will be dumped.
4221
6f875884 4222Note that there is no single letter option to display the content of
5bbdf3d5 4223trace sections or .gdb_index.
6f875884 4224
a262ae96
NC
4225Note: the @option{=decodedline} option will display the interpreted
4226contents of a .debug_line section whereas the @option{=rawline} option
4227dumps the contents in a raw format.
4228
1ed06042
NC
4229Note: the @option{=frames-interp} option will display the interpreted
4230contents of a .debug_frame section whereas the @option{=frames} option
4231dumps the contents in a raw format.
4232
fd2f0033
TT
4233Note: the output from the @option{=info} option can also be affected
4234by the options @option{--dwarf-depth} and @option{--dwarf-start}.
4235
4236@item --dwarf-depth=@var{n}
4237Limit the dump of the @code{.debug_info} section to @var{n} children.
4238This is only useful with @option{--debug-dump=info}. The default is
4239to print all DIEs; the special value 0 for @var{n} will also have this
4240effect.
4241
4242With a non-zero value for @var{n}, DIEs at or deeper than @var{n}
4243levels will not be printed. The range for @var{n} is zero-based.
4244
4245@item --dwarf-start=@var{n}
4246Print only DIEs beginning with the DIE numbered @var{n}. This is only
4247useful with @option{--debug-dump=info}.
4248
4249If specified, this option will suppress printing of any header
4250information and all DIEs before the DIE numbered @var{n}. Only
4251siblings and children of the specified DIE will be printed.
4252
4253This can be used in conjunction with @option{--dwarf-depth}.
4254
947ed062
NC
4255@item -I
4256@itemx --histogram
252b5132
RH
4257Display a histogram of bucket list lengths when displaying the contents
4258of the symbol tables.
4259
4260@item -v
4261@itemx --version
4262Display the version number of readelf.
4263
d974e256
JJ
4264@item -W
4265@itemx --wide
4266Don't break output lines to fit into 80 columns. By default
4267@command{readelf} breaks section header and segment listing lines for
426864-bit ELF files, so that they fit into 80 columns. This option causes
4269@command{readelf} to print each section header resp. each segment one a
4270single line, which is far more readable on terminals wider than 80 columns.
4271
252b5132
RH
4272@item -H
4273@itemx --help
c7c55b78 4274Display the command line options understood by @command{readelf}.
252b5132
RH
4275
4276@end table
4277
0285c67d
NC
4278@c man end
4279
4280@ignore
4281@c man begin SEEALSO readelf
4282objdump(1), and the Info entries for @file{binutils}.
4283@c man end
4284@end ignore
252b5132 4285
30fd33bb
L
4286@node elfedit
4287@chapter elfedit
4288
4289@cindex Update ELF header
4290@kindex elfedit
4291
4292@c man title elfedit Update the ELF header of ELF files.
4293
4294@smallexample
4295@c man begin SYNOPSIS elfedit
4296elfedit [@option{--input-mach=}@var{machine}]
dd35de74 4297 [@option{--input-type=}@var{type}]
08ebfb8c 4298 [@option{--input-osabi=}@var{osabi}]
c7a795f8 4299 @option{--output-mach=}@var{machine}
dd35de74 4300 @option{--output-type=}@var{type}
08ebfb8c 4301 @option{--output-osabi=}@var{osabi}
30fd33bb
L
4302 [@option{-v}|@option{--version}]
4303 [@option{-h}|@option{--help}]
4304 @var{elffile}@dots{}
4305@c man end
4306@end smallexample
4307
4308@c man begin DESCRIPTION elfedit
4309
dd35de74
L
4310@command{elfedit} updates the ELF header of ELF files which have
4311the matching ELF machine and file types. The options control how and
4312which fields in the ELF header should be updated.
30fd33bb
L
4313
4314@var{elffile}@dots{} are the ELF files to be updated. 32-bit and
431564-bit ELF files are supported, as are archives containing ELF files.
4316@c man end
4317
4318@c man begin OPTIONS elfedit
4319
4320The long and short forms of options, shown here as alternatives, are
d0514c49
L
4321equivalent. At least one of the @option{--output-mach},
4322@option{--output-type} and @option{--output-osabi} options must be given.
30fd33bb
L
4323
4324@table @env
4325
4326@itemx --input-mach=@var{machine}
dd35de74
L
4327Set the matching input ELF machine type to @var{machine}. If
4328@option{--input-mach} isn't specified, it will match any ELF
4329machine types.
30fd33bb 4330
7a9068fe
L
4331The supported ELF machine types are, @var{L1OM}, @var{K1OM} and
4332@var{x86-64}.
30fd33bb
L
4333
4334@itemx --output-mach=@var{machine}
4335Change the ELF machine type in the ELF header to @var{machine}. The
4336supported ELF machine types are the same as @option{--input-mach}.
4337
dd35de74
L
4338@itemx --input-type=@var{type}
4339Set the matching input ELF file type to @var{type}. If
4340@option{--input-type} isn't specified, it will match any ELF file types.
4341
4342The supported ELF file types are, @var{rel}, @var{exec} and @var{dyn}.
4343
4344@itemx --output-type=@var{type}
4345Change the ELF file type in the ELF header to @var{type}. The
4346supported ELF types are the same as @option{--input-type}.
4347
d0514c49 4348@itemx --input-osabi=@var{osabi}
08ebfb8c 4349Set the matching input ELF file OSABI to @var{osabi}. If
d0514c49
L
4350@option{--input-osabi} isn't specified, it will match any ELF OSABIs.
4351
4352The supported ELF OSABIs are, @var{none}, @var{HPUX}, @var{NetBSD},
9c55345c
TS
4353@var{GNU}, @var{Linux} (alias for @var{GNU}),
4354@var{Solaris}, @var{AIX}, @var{Irix},
d0514c49
L
4355@var{FreeBSD}, @var{TRU64}, @var{Modesto}, @var{OpenBSD}, @var{OpenVMS},
4356@var{NSK}, @var{AROS} and @var{FenixOS}.
4357
4358@itemx --output-osabi=@var{osabi}
08ebfb8c 4359Change the ELF OSABI in the ELF header to @var{osabi}. The
d0514c49
L
4360supported ELF OSABI are the same as @option{--input-osabi}.
4361
30fd33bb
L
4362@item -v
4363@itemx --version
4364Display the version number of @command{elfedit}.
4365
4366@item -h
4367@itemx --help
4368Display the command line options understood by @command{elfedit}.
4369
4370@end table
4371
4372@c man end
4373
4374@ignore
4375@c man begin SEEALSO elfedit
4376readelf(1), and the Info entries for @file{binutils}.
4377@c man end
4378@end ignore
4379
07012eee
MM
4380@node Common Options
4381@chapter Common Options
4382
4383The following command-line options are supported by all of the
4384programs described in this manual.
4385
dff70155 4386@c man begin OPTIONS
07012eee 4387@table @env
38fc1cb1 4388@include at-file.texi
dff70155 4389@c man end
07012eee
MM
4390
4391@item --help
4392Display the command-line options supported by the program.
4393
4394@item --version
4395Display the version number of the program.
4396
dff70155 4397@c man begin OPTIONS
07012eee 4398@end table
dff70155 4399@c man end
07012eee 4400
fff279a7 4401@node Selecting the Target System
947ed062 4402@chapter Selecting the Target System
252b5132 4403
947ed062 4404You can specify two aspects of the target system to the @sc{gnu}
252b5132
RH
4405binary file utilities, each in several ways:
4406
4407@itemize @bullet
4408@item
4409the target
4410
4411@item
4412the architecture
252b5132
RH
4413@end itemize
4414
4415In the following summaries, the lists of ways to specify values are in
4416order of decreasing precedence. The ways listed first override those
4417listed later.
4418
4419The commands to list valid values only list the values for which the
4420programs you are running were configured. If they were configured with
c7c55b78 4421@option{--enable-targets=all}, the commands list most of the available
252b5132
RH
4422values, but a few are left out; not all targets can be configured in at
4423once because some of them can only be configured @dfn{native} (on hosts
4424with the same type as the target system).
4425
4426@menu
c1c0eb9e
RM
4427* Target Selection::
4428* Architecture Selection::
252b5132
RH
4429@end menu
4430
4431@node Target Selection
4432@section Target Selection
4433
4434A @dfn{target} is an object file format. A given target may be
4435supported for multiple architectures (@pxref{Architecture Selection}).
4436A target selection may also have variations for different operating
4437systems or architectures.
4438
4439The command to list valid target values is @samp{objdump -i}
4440(the first column of output contains the relevant information).
4441
4442Some sample values are: @samp{a.out-hp300bsd}, @samp{ecoff-littlemips},
4443@samp{a.out-sunos-big}.
4444
4445You can also specify a target using a configuration triplet. This is
f20a759a
ILT
4446the same sort of name that is passed to @file{configure} to specify a
4447target. When you use a configuration triplet as an argument, it must be
4448fully canonicalized. You can see the canonical version of a triplet by
252b5132
RH
4449running the shell script @file{config.sub} which is included with the
4450sources.
4451
4452Some sample configuration triplets are: @samp{m68k-hp-bsd},
4453@samp{mips-dec-ultrix}, @samp{sparc-sun-sunos}.
4454
c7c55b78 4455@subheading @command{objdump} Target
252b5132
RH
4456
4457Ways to specify:
4458
4459@enumerate
4460@item
c7c55b78 4461command line option: @option{-b} or @option{--target}
252b5132
RH
4462
4463@item
4464environment variable @code{GNUTARGET}
4465
4466@item
4467deduced from the input file
4468@end enumerate
4469
c7c55b78 4470@subheading @command{objcopy} and @command{strip} Input Target
252b5132
RH
4471
4472Ways to specify:
4473
4474@enumerate
4475@item
c7c55b78 4476command line options: @option{-I} or @option{--input-target}, or @option{-F} or @option{--target}
252b5132
RH
4477
4478@item
4479environment variable @code{GNUTARGET}
4480
4481@item
4482deduced from the input file
4483@end enumerate
4484
c7c55b78 4485@subheading @command{objcopy} and @command{strip} Output Target
252b5132
RH
4486
4487Ways to specify:
4488
4489@enumerate
4490@item
c7c55b78 4491command line options: @option{-O} or @option{--output-target}, or @option{-F} or @option{--target}
252b5132
RH
4492
4493@item
c7c55b78 4494the input target (see ``@command{objcopy} and @command{strip} Input Target'' above)
252b5132
RH
4495
4496@item
4497environment variable @code{GNUTARGET}
4498
4499@item
4500deduced from the input file
4501@end enumerate
4502
c7c55b78 4503@subheading @command{nm}, @command{size}, and @command{strings} Target
252b5132
RH
4504
4505Ways to specify:
4506
4507@enumerate
4508@item
c7c55b78 4509command line option: @option{--target}
252b5132
RH
4510
4511@item
4512environment variable @code{GNUTARGET}
4513
4514@item
4515deduced from the input file
4516@end enumerate
4517
252b5132 4518@node Architecture Selection
947ed062 4519@section Architecture Selection
252b5132
RH
4520
4521An @dfn{architecture} is a type of @sc{cpu} on which an object file is
4522to run. Its name may contain a colon, separating the name of the
4523processor family from the name of the particular @sc{cpu}.
4524
4525The command to list valid architecture values is @samp{objdump -i} (the
4526second column contains the relevant information).
4527
4528Sample values: @samp{m68k:68020}, @samp{mips:3000}, @samp{sparc}.
4529
c7c55b78 4530@subheading @command{objdump} Architecture
252b5132
RH
4531
4532Ways to specify:
4533
4534@enumerate
4535@item
c7c55b78 4536command line option: @option{-m} or @option{--architecture}
252b5132
RH
4537
4538@item
4539deduced from the input file
4540@end enumerate
4541
c7c55b78 4542@subheading @command{objcopy}, @command{nm}, @command{size}, @command{strings} Architecture
252b5132
RH
4543
4544Ways to specify:
4545
4546@enumerate
4547@item
4548deduced from the input file
4549@end enumerate
4550
252b5132
RH
4551@node Reporting Bugs
4552@chapter Reporting Bugs
4553@cindex bugs
4554@cindex reporting bugs
4555
4556Your bug reports play an essential role in making the binary utilities
4557reliable.
4558
4559Reporting a bug may help you by bringing a solution to your problem, or
4560it may not. But in any case the principal function of a bug report is
4561to help the entire community by making the next version of the binary
4562utilities work better. Bug reports are your contribution to their
4563maintenance.
4564
4565In order for a bug report to serve its purpose, you must include the
4566information that enables us to fix the bug.
4567
4568@menu
4569* Bug Criteria:: Have you found a bug?
4570* Bug Reporting:: How to report bugs
4571@end menu
4572
4573@node Bug Criteria
947ed062 4574@section Have You Found a Bug?
252b5132
RH
4575@cindex bug criteria
4576
4577If you are not sure whether you have found a bug, here are some guidelines:
4578
4579@itemize @bullet
4580@cindex fatal signal
4581@cindex crash
4582@item
4583If a binary utility gets a fatal signal, for any input whatever, that is
4584a bug. Reliable utilities never crash.
4585
4586@cindex error on valid input
4587@item
4588If a binary utility produces an error message for valid input, that is a
4589bug.
4590
4591@item
4592If you are an experienced user of binary utilities, your suggestions for
4593improvement are welcome in any case.
4594@end itemize
4595
4596@node Bug Reporting
947ed062 4597@section How to Report Bugs
252b5132
RH
4598@cindex bug reports
4599@cindex bugs, reporting
4600
4601A number of companies and individuals offer support for @sc{gnu}
4602products. If you obtained the binary utilities from a support
4603organization, we recommend you contact that organization first.
4604
4605You can find contact information for many support companies and
4606individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
4607distribution.
4608
ad22bfe8 4609@ifset BUGURL
252b5132 4610In any event, we also recommend that you send bug reports for the binary
ad22bfe8
JM
4611utilities to @value{BUGURL}.
4612@end ifset
252b5132
RH
4613
4614The fundamental principle of reporting bugs usefully is this:
4615@strong{report all the facts}. If you are not sure whether to state a
4616fact or leave it out, state it!
4617
4618Often people omit facts because they think they know what causes the
4619problem and assume that some details do not matter. Thus, you might
4620assume that the name of a file you use in an example does not matter.
4621Well, probably it does not, but one cannot be sure. Perhaps the bug is
4622a stray memory reference which happens to fetch from the location where
4623that pathname is stored in memory; perhaps, if the pathname were
4624different, the contents of that location would fool the utility into
4625doing the right thing despite the bug. Play it safe and give a
4626specific, complete example. That is the easiest thing for you to do,
4627and the most helpful.
4628
4629Keep in mind that the purpose of a bug report is to enable us to fix the bug if
4630it is new to us. Therefore, always write your bug reports on the assumption
4631that the bug has not been reported previously.
4632
4633Sometimes people give a few sketchy facts and ask, ``Does this ring a
947ed062
NC
4634bell?'' This cannot help us fix a bug, so it is basically useless. We
4635respond by asking for enough details to enable us to investigate.
4636You might as well expedite matters by sending them to begin with.
252b5132
RH
4637
4638To enable us to fix the bug, you should include all these things:
4639
4640@itemize @bullet
4641@item
4642The version of the utility. Each utility announces it if you start it
c7c55b78 4643with the @option{--version} argument.
252b5132
RH
4644
4645Without this, we will not know whether there is any point in looking for
4646the bug in the current version of the binary utilities.
4647
4648@item
4649Any patches you may have applied to the source, including any patches
4650made to the @code{BFD} library.
4651
4652@item
4653The type of machine you are using, and the operating system name and
4654version number.
4655
4656@item
4657What compiler (and its version) was used to compile the utilities---e.g.
4658``@code{gcc-2.7}''.
4659
4660@item
4661The command arguments you gave the utility to observe the bug. To
4662guarantee you will not omit something important, list them all. A copy
4663of the Makefile (or the output from make) is sufficient.
4664
4665If we were to try to guess the arguments, we would probably guess wrong
4666and then we might not encounter the bug.
4667
4668@item
4669A complete input file, or set of input files, that will reproduce the
4670bug. If the utility is reading an object file or files, then it is
ad22bfe8 4671generally most helpful to send the actual object files.
252b5132
RH
4672
4673If the source files were produced exclusively using @sc{gnu} programs
c7c55b78 4674(e.g., @command{gcc}, @command{gas}, and/or the @sc{gnu} @command{ld}), then it
252b5132 4675may be OK to send the source files rather than the object files. In
c7c55b78 4676this case, be sure to say exactly what version of @command{gcc}, or
252b5132 4677whatever, was used to produce the object files. Also say how
c7c55b78 4678@command{gcc}, or whatever, was configured.
252b5132
RH
4679
4680@item
4681A description of what behavior you observe that you believe is
4682incorrect. For example, ``It gets a fatal signal.''
4683
4684Of course, if the bug is that the utility gets a fatal signal, then we
4685will certainly notice it. But if the bug is incorrect output, we might
4686not notice unless it is glaringly wrong. You might as well not give us
4687a chance to make a mistake.
4688
4689Even if the problem you experience is a fatal signal, you should still
f20a759a 4690say so explicitly. Suppose something strange is going on, such as your
b45619c0 4691copy of the utility is out of sync, or you have encountered a bug in
252b5132
RH
4692the C library on your system. (This has happened!) Your copy might
4693crash and ours would not. If you told us to expect a crash, then when
4694ours fails to crash, we would know that the bug was not happening for
4695us. If you had not told us to expect a crash, then we would not be able
4696to draw any conclusion from our observations.
4697
4698@item
4699If you wish to suggest changes to the source, send us context diffs, as
c7c55b78 4700generated by @command{diff} with the @option{-u}, @option{-c}, or @option{-p}
252b5132 4701option. Always send diffs from the old file to the new file. If you
c7c55b78 4702wish to discuss something in the @command{ld} source, refer to it by
f20a759a 4703context, not by line number.
252b5132
RH
4704
4705The line numbers in our development sources will not match those in your
4706sources. Your line numbers would convey no useful information to us.
4707@end itemize
4708
4709Here are some things that are not necessary:
4710
4711@itemize @bullet
4712@item
4713A description of the envelope of the bug.
4714
4715Often people who encounter a bug spend a lot of time investigating
4716which changes to the input file will make the bug go away and which
4717changes will not affect it.
4718
4719This is often time consuming and not very useful, because the way we
4720will find the bug is by running a single example under the debugger
4721with breakpoints, not by pure deduction from a series of examples.
4722We recommend that you save your time for something else.
4723
4724Of course, if you can find a simpler example to report @emph{instead}
4725of the original one, that is a convenience for us. Errors in the
4726output will be easier to spot, running under the debugger will take
4727less time, and so on.
4728
4729However, simplification is not vital; if you do not want to do this,
4730report the bug anyway and send us the entire test case you used.
4731
4732@item
4733A patch for the bug.
4734
4735A patch for the bug does help us if it is a good one. But do not omit
4736the necessary information, such as the test case, on the assumption that
4737a patch is all we need. We might see problems with your patch and decide
4738to fix the problem another way, or we might not understand it at all.
4739
4740Sometimes with programs as complicated as the binary utilities it is
4741very hard to construct an example that will make the program follow a
4742certain path through the code. If you do not send us the example, we
4743will not be able to construct one, so we will not be able to verify that
4744the bug is fixed.
4745
4746And if we cannot understand what bug you are trying to fix, or why your
4747patch should be an improvement, we will not install it. A test case will
4748help us to understand.
4749
4750@item
4751A guess about what the bug is or what it depends on.
4752
4753Such guesses are usually wrong. Even we cannot guess right about such
4754things without first using the debugger to find the facts.
4755@end itemize
4756
fff279a7
NC
4757@node GNU Free Documentation License
4758@appendix GNU Free Documentation License
b3364cb9 4759
947ed062 4760@include fdl.texi
cf055d54 4761
fa0d8a3e
NC
4762@node Binutils Index
4763@unnumbered Binutils Index
252b5132
RH
4764
4765@printindex cp
4766
252b5132 4767@bye
This page took 0.801968 seconds and 4 git commands to generate.