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