NAME
dwarfdump - dumps DWARF debug information of an ELF object
SYNOPSIS
dwarfdump [-abcdefilmoprsvy] [-ka] [-t{afv}] [-ucuname] objectfilename
DESCRIPTION
The dwarfdump command prints DWARF sections as requested by specific
options. With no options (but with the required objectfilename ) all
sections print.
The format is intended to be human readable. If a script is to parse
the output, the -d option is useful.
Not all sections actually exist in any given object file.
The format may change from release to release, so it is unwise to
depend too heavily on the format.
Frame information (.debug_frame and .eh_frame) is heavily dependent on
the ABI/ISA of the object file. By default we use a generic set of
register names handling up to 100 registers named r0-100. The ’-R’
option uses a built-in generic register name set handling up to 1200
registers named r0-r1199. The ’-x abi=<abi>’ description below shows
how to name an abi and use that to guide the -f or -F processing.
Unless the cpu for the object file being dumped has many registers, do
not use -R or -x abi=generic as those can be needlessly slow dumping
frame sections. Instead, use the correct abi (if it exists in
dwarfdump.conf) or a generic such as -x abi=generic100 or -x
abi=generic500. To get MIPS/IRIX register names names and call the old
version 2 libdwarf frame interface use the option ’-x abi=mips’.
Without ’-R’ or ’-x abi=<abi>’ dwarfdump ignores the dwarfdump.conf
file and uses compiled-in generic set of register names. If no ’-x
name=<path>’ is given, dwarfdump looks for "./dwarfdump.conf",
"$HOME/.dwarfdump.conf", "<install-prefix>/lib/dwarfdump.conf" and
takes the first it finds. If one or more ’-x name=<path>’ is given the
last of these is used and all other such files are ignored.
The dwarfdump command accepts one or more of the following options:
-a Dumps most sections. Same as -bcfilmoprsy -tfv.
-b Dumps the .debug_abbrev section.
-c Dumps the .debug_loc section.
-C Activate warnings about some common extensions to DWARF
in the .debug_info section.
-d Dense mode. Each die information of the .debug_info
section is printed in one-line format. This option does
not imply -i.
-e Ellipsis mode. Short names for DW_TAG_* and DW_ATTR_*
are used in the output for the .debug_info section.
-f Dumps the .debug_frame section.
-i Dumps the .debug_info section.
-ka Adds all available error checks to whatever sections are
being read. At the end of the run prints the instances
inspected and the number of errors for each type of
check. If there are more than zero errors the compiler
has emitted invalid DWARF.
-l Dumps the .debug_line information.
-m Dumps the .debug_macinfo section.
-M Dumps the form name for each attribute in each die entry
printed, and if the form is the indirect form notes that
too. If combined with -v it also prints the form number.
-n Supress function name lookup for the .debug_frame and
.eh_frame sections. This can speed up printing of these
sections.
-N Dumps the .debug_ranges section. There is no guarantee
in the DWARF standard that just scanning the bytes like
this will print the section correctly, only the -i output
is really guaranteed by DWARF to find ranges correctly.
But it will normally work and the output may be of value
to compiler-writers. This section is not dumped by -a,
but -a and -i dump the ranges data applicable to each
DW_AT_ranges attribute.
-o Dumps the .reloc_debug_* sections.
-p Dumps the .debug_pubnames section.
-r Dumps the .debug_aranges section.
-s Dumps .debug_string section.
-S match=<string>
Examines the .debug_info section and for each die with an
attribute containing exactly that string (case matters)
it prints the die-owner-tree from the compilation unit to
the die containing the string. The string matching is
done on the printable form, so addresses are matched as
strings. So "dwarfdump -S match=main a.out" will
print the main program die and the compilation unit die
(assuming there is a "main" in a.out). Previously
printed dies are not reprinted.
-S any=<string>
Examines the .debug_info section and for each die with an
attribute containing that substring (case is ignored) it
prints the die-owner-tree from the compilation unit to
the die containing the string. The string matching is
done on the printable form, so addresses are matched as
strings. So "dwarfdump -S any=main a.out" will print
the each die with an attribute with the letters "main"
(and the die tree owning this die). Previously printed
dies are not reprinted. -S regex=<string> If POSIX
regular expressions are present at build time and
detected by the build, this examines the .debug_info
section and for each die with an attribute that matches
the regular expression presented it prints the die-
owner-tree from the compilation unit to the die
containing the string. The string matching is done on
the printable form, so addresses are matched as strings.
So "dwarfdump -S regex=ma.n a.out" will print the each
die with an attribute containing a string such as "main"
or "maxn" ( any string matching the regular expression)
(and the die tree owning this die). You may find it
necessary to quote the "regex=<string>" so that your
shell will not transform the expression. Previously
printed dies are not reprinted.
-ta Same as -tfv.
-tf Dumps the .debug_static_funcs section.
-tv Dumps the .debug_static_vars section.
-ucuname
Restricts the dumping of sections to dump only sections
of the named compilation unit. If the compilation unit
name in DWARF is a relative path (meaning it does not
start with a slash (/) but contains at least one slash)
any characters before (and including) the final slash in
the compilation unit name in DWARF are ignored in this
comparision. If the compilation unit name is a full
path(meaning it starts with a slash(/)) or has no
slashes, then the DWARF compilation unit name as a whole
is compared with the cuname in this option.
-v Verbose mode. Shows more detailed information. Prints
the abbreviation index for each DIE (on its DW_TAG line).
More detailed information about the .debug_frame section
prints if 2 or 3 -v options are given.
-w Dumps the .debug_weaknames section.
-x abi=<abiname>
where abi=names an abi in dwarfdump.conf (see the
abiname: command in dwarfdump.conf). The abinames
defined at this time in dwarfdump.conf are mips ia64 x86
x86_64 m68k ppc generic generic500 generic100 . If the
cpu has relatively few registers use of -x abi=generic
(or the -R option, see above) will needlessly slow down
printing of the frame sections, so use the correct abi or
generic100 (or for a machine with more than 100
registers but under 500 use generic500).
-x name=<conf>
where name=names the full pathname of a dwarfdump
configuration file. Default install location is
/usr/local/lib/dwarfdump.conf. dwarfdump looks first for
local ./dwarfdump.conf, then for $HOME/.dwarfdump.conf
then for /usr/local/lib/dwarfdump.conf.
-y Dumps the .debug_types section.
FILES
dwarfdump dwarfdump.conf $(HOME)/.dwarfdump.conf <install-
prefix>/lib/dwarfdump.conf
NOTES
In some cases compilers use DW_FORM_data1 (for example) and in such
cases the signedness of the value must be taken from context. Rather
than attempt to determine the context, dwarfdump prints the value with
both signednesses whenever there is ambiguity about the correct
interpretation. For example, "DW_AT_const_value 176(as
signed = -80)". For normal DWARF consumers that correctly and fully
evaluate all attributes there is no ambiguity of signedness: the
ambiguity for dwarfdump is due to dwarfdump evaluating DIEs in a simple
order and not keeping track of much context.
BUGS
Support for DWARF3 is being completed but may not be complete.
DWARFDUMP()