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