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