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