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