Provided by: dwarfdump_20180129-1_amd64 bug

NAME

       dwarfdump - dumps DWARF debug information of an ELF object

SYNOPSIS

       dwarfdump [options] objectfilename

DESCRIPTION

       The  dwarfdump command prints or checks DWARF sections as requested by specific options.  With no options
       (but with the required objectfilename  )  all  sections  print  (but  some  sections  cannot  be  printed
       independently  safely, so those are only printed at offsets where the .debug_info section refers to those
       sections).

       As of June 2011 the printing options and the checking options are mutually exclusive (if checking options
       are selected the section details are not printed). When errors are encountered dwarfdump does attempt  to
       print sufficient context so that one can understand exactly where the error is in the DWARF.  This change
       makes checking really large object files much easier.

       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.

       If '-x nosanitizestrings' is given then unprintable characters are not translated to '%xx' (two digit hex
       preceded  by  the  '%'  character)   (with  this  option bogus characters in strings could cause terminal
       windows to behave oddly).

       Some -k (checking) options print so-called harmless errors.  These are compiler errors that do not  cause
       any  known  problem and are only detected inside libdwarf itself.  These are difficult to properly report
       in dwarfdump and any error strings may not appear close to the time the error was encountered.

       If zlib compression was used on the DWARF sections in the object file being read the real  section  names
       such as .zdebug_info etc will be reported by dwarfdump.  When dwarfdump says something is at offset 55 of
       .zdebug_info  (or the like) keep in mind that the offset applies to the uncompressed section (in memory),
       not the .zdebug_ compressed section in objectfilename.

URI STYLE INPUT STRINGS

       The <objectfilename> and the options taking name strings look for URIs and translate the URI  strings  to
       characters  by  default  (see -x, -c<compiler name>, -S, -u).  So any single % character is treated as if
       the following two characters  are  hex  digits  representing  the  underlying  true  character.   Various
       characters  are  meaningful to shells (such as bash or sh) and to getopt (such as the space character) If
       the URI translation does anything it prints the before and after  of  the  URI  translation  on  standard
       output,  so  inspection  of  the first lines of output will show if URI did anything.  The actual options
       themselves are assumed to be non-URI.  So in the option '-cS&T' the -c portion must be non-URI, but the &
       character might cause input issues so '-cS%26T' could be used instead.  To  actually  input  a  single  %
       character (in a name, for example), double it to %% on the command line.

       Options  -U  (turning  off  URI  interpretation)  and -q (making finding URI sequences silent) give finer
       control of URI interpretation.  PP As an example, to get a string'a b' make the string 'a%20b' (here  the
       quote  (')  is  for  exposition not part of the string, though quote is certainly problematic in a name).
       Instead of escaping " quotes in the string, type %25, as in
        'a "b' should be typed 'a%20%25b' Any characters can be typed in URI style, not  just  characters  which
       are problematic to the shell or getopt.  We strongly suggest you not type URI-style characters where such
       are not needed or use the % character itself in command line strings unless you must.

PRINTING OPTIONS

       -a     Print each section as independently as possible. Sections that can safely be printed independently
              (like .debug_abbrev) have relevant info printed in the report (sometimes dependent on -v).

       -b     Print  the  .debug_abbrev  section.  Because the DWARF specifications do not rule out garbage data
              areas in .debug_abbrev (if they are not referenced from .debug_info) any garbage bytes can  result
              in this print failing.

       -c     Print locations lists.

       -E     Print ELF header information and index, address and size for all sections.

       -Eh    Effectively does nothing (use another tool to print the Elf file header).

       -El    Print index, address and size for the .debug_line section.

       -Ei    Print index, address and size for the .debug_info section.

       -Ea    Print index, address and size for the .debug_abbrev section.

       -Ep    Print index, address and size for the .debug_pubnames section.

       -Er    Print index, address and size for the .debug_aranges section.

       -Ef    Print index, address and size for the .debug_frame section.

       -Eo    Print index, address and size for the .debug_loc section.

       -ER    Print index, address and size for the .debug_ranges section.

       -Es    Print index, address and size for the .debug_string section.

       -Et    Print index, address and size for the .debug_pubtypes section.

       -Ex    Print index, address and size for the .text section.

       -Ed    Print index, address and size for the .text and .debug_* sections.

       -f     Print the .debug_frame section.

       -F     Print the .eh_frame section.

       -h     Print IRIX exception tables (unsupported).

       -i     Print the .debug_info section.

       -I     Print the .gdb_index, .debug_cu_index, .debug_tu_index sections if any exist.

       -l     Print the .debug_info section and the associated line section data.

       -ls    Print  the  .debug_info  section and the associated line section data, but omits the <pc> address.
              Useful when a comparison is required.

       -m     Print the .debug_macinfo section.

       -N     Print .debug_ranges section. Because the DWARF specifications do not rule out garbage  data  areas
              in  .debug_ranges  (if  they  are not referenced from .debug_info) any garbage bytes can result in
              this print failing.

       -p     Print the .debug_pubnames section.

       -r     Print the .debug_aranges section.

       -s     Print .debug_string section.

       -ta    Print the IRIX only sections .debug_static_funcs and .debug_static_vars.

       -tf    Print the IRIX only section .debug_static_funcs.

       -tv    Print the IRIX only section .debug_static_vars.

       -w     Print the IRIX-only .debug_weaknames section.

       -y     Print the .debug_pubtypes section (and .debug_typenames, an SGI IRIX-only section).

       Having dwarfdump print relocations may help establish whether dwarfdump understands any relocations  that
       might exist.

       -o     Print all relocation records as well as we can manage.

       -oi    Print .rel*debug_info relocations.

       -ol    Print .rel*debug_line relocation.

       -op    Print .rel*debug_pubnames relocation.

       -oa    Has no effect.

       -or    Print .rel*debug_aranges relocations.

       -of    Print .rel*debug_frame relocations.

       -oo    Print .rel*debug_loc relocations.

       -oR    Print .rel*debug_ranges relocations.

       -g     Normally  used  only  for  testing  libdwarf, this tells dwarfdump to use an older dwarf_loclist()
              interface function (a function that cannot handle all DWARF4 or DWARF5  location  lists).   Before
              November 2015 it implied -i, now you should use -i -g to also get .debug_info printed.

       -V     Print a dwarfdump date/version string and stop.

CHECKING OPTIONS

       -cg    Restricts checking to compilers whose producer string starts with 'GNU' and turns off -cs.

       -cs    Restricts checking to compilers whose producer string starts with 'SN' and turns off -cg.

       -cname Restricts  checking  to compilers whose producer string contains 'name' (not case sensitive).  The
              'name' is read as a URI string.

       -ka    Turns on all checking options except -kxe (-kxe might be slow enough one mignt not want to use  it
              routinely.)

       -kb    Checks for certain abbreviations section errors when reading DIEs.

       -kc    Checks for errors in constants in debug_info.

       -kd    Turns on full reporting of error totals per producer.  (the default shows less detail).

       -kD    Turns  on  reporting  of  duplicated  attributes.   Duplicated  attributes  on a single DW_TAG are
              improper DWARF, but at least one compiler emitted such.

       -ke    Turns on reading pubnames and checking for fde errors.

       -kE    Checks the integer encoding representation in debug_info, computing whether these  integer  values
              could fit in fewer bytes if represented in LEB128.

       -kf    Turns on checking for FDE errors.

       -kF    Turns on checking for line table errors.

       -kg    Turns  on  checking  for  unused gaps in .debug_info (these gaps are not an error, just a waste of
              space).

       -kG    Print only unique errors. Error lines are simpified (hex numbers removed, for example) and when  a
              given message string would otherwise appear again it is suppressed.

       -ki    Causes a summary of checking results per compiler (producer) to be printed at the end.

       -kl    Turns on locations list checking.

       -km    Turns on checking of ranges.

       -kM    Turns on checking of aranges.

       -kr    Turns on DIE tag-attr combinations checking.

       -kR    Turns  on  reading  DIEs and checking for forward declarations rom DW_AT_specification attributes.
              (which are not an error but can be a source of inefficiency for debuggers).

       -ks    Turns on extra reporting for some DIE errors checking detects.

       -kS    Turns on checking DIE references for circular references.

       -kt    Turns on tag-tag combinations checking.

       -ku    Print tag-tree and tag-attribute usage (basic format).

       -kuf   Print tag-tree and tag-attribute usage (full format).   For  standard  TAGs  and  ATtributes  this
              presents an overview of how they were used.

       -kx    Turns on check_frames.

       -kxe   Turns off basic check_frames and turns on extended frame checking.

       -ky    Turns on type_offset, decl_file checking,

OPTION MODIFIERS

       -C     Normally  when  checking  for tag-tag or tag-attribute combinations both the standard combinations
              and some common extensions are allowed.  With -C the extensions are taken out of the allowed class
              of combinations.

       -d     When printing DIEs, put all the attributes for each DIE on the same (long) line as the  TAG.  This
              makes searching for DIE information (as with grep) much simpler as the entire DIE is on one line.

       -D     Turns  off  the  display  of  section  offsets  and  attribute  values  in printed output.  So the
              .debug_info output is just TAGs and Attributes.  For pubnames (and the like)  it  removes  offsets
              from  the  output.   For  locations  lists it removes offsets from the output, but that is useless
              since the attribute values don't show so neither does the location data.

       -e     Turns on truncation of attribute and tag names. For example DW_TAG_foo becomes foo. Not compatible
              with checking, only useful for printing DIEs.

       -G     When printing, add global offsets to the offsets printed.

       -H number
              When printing or checking .debug_info, this  terminates  the  search  after  'number'  compilation
              units.  When  printing frame information this terminates the FDE reporting after 'number' FDEs and
              the CIE reporting (which occurs if one adds -v) after 'number' CIEs. Example '-H 1'

       -M     When printing, this means one want to have the FORM show for each attribute.   If  a  -v  is  also
              added (or more than one) then details of any form indirection are also shown.

       -n     When  printing frames, this turns off the search for function names.  In a really large object the
              search can take more time than one wants to wait, so this avoids the search.

       -O file=<path>
              The <path> will be used as the file name for output instead of writing to stdout  (stdout  is  the
              default).

       -Q     Suppresses section data printing (set automatically with a checking option).

       -R     When printing frames for ABIs with lots of registers, this allows up to 1200 registers to be named
              (like R999) without choosing an ABI with, for example '-x abi=ppc'

       -v     Increases  the  detail shown when printing.  In some sections, using more -v options will increase
              the detail (one to three are useful) or may change the report to show,  for  example,  the  actual
              line-data-commands instead of the resultant line-table.

SELECTIVE ENTRY PRINTING

       These  -S  options  stand  alone and basic print information about the compilation unit and DIE where the
       string(s) appear.  At most one of each of the following is effective (so for example one  can  only  have
       one 'match', but one can have a 'match', an 'any', and a 'regex').  Any -S causes the .debug_info section
       to be inspected.  No checking options or printing options should be supplied with -S.

       If v is added to the -S option, the number of occurrences is printed.  (see below for an example).

       -S match=string
              When  printing  DIEs  for each tag value or attribute name that matches 'string' exactly print the
              compilation unit information and its section offset.  Any CU with no match is  not  printed.   The
              'string' is read as a URI string.

       -S any=string
              When  printing  DIEs  for each tag value or attribute name that contains 'string' somewhere in the
              tag or attribute (case insensitive) print the compilation unit information and its section offset.
              Any CU with no match is not printed.  The 'string' is read as a URI string.

       -S regex=string
              When printing DIEs for each tag value or attribute name  where  the  'string'  reqular  expression
              matches  print  the  compilation unit information and its section offset.  Any CU with no match is
              not printed.  The 'string' is read as a URI string.

       The string cannot have spaces or other characters which are meaningful to getopt(3) and  the  shell  will
       strip  off  quotes  and other characters.  So the string is assumed to be in URI style and is translated.
       In other words, to match 'a b' make the -S string 'a%20b' Instead of escaping "  quotes  in  the  string,
       type %25, as in
        'a  "b'  should  be  typed  'a%20%25b'  (the  '  are for exposition here, not part of the strings).  Any
       characters can be typed in URI style, not just characters which are problematic to the shell or getopt.

       The -S any= and -S regex= options are only  usable  if  the  library  functions  required  are  found  at
       configure time.

       The -W option is a modifier to the -S option, and increases the amount of output -W prints.  An example v
       modifier to the -S option is shown below.  And we show the -W in context with a -S option.

       -S vmatch=string1
              Prints information about the DIEs that -S matches and prints the count of occurrences

       -S match=string1 -W
              Prints the parent tree and the children tree for the DIEs that -S matches.

       -S match=string2 -Wp
              Prints the parent tree for the DIEs that -S matches.

       -S match=string3 -Wc
              Prints the parent tree for the DIEs that -S matches.

OTHER OPTIONS

       -# number
              This  option  controls  internal debugging output, higher numbers mean more debug actions. See the
              source code.

       -x name=/p/a/t/h.conf
              The file path given is the name of a file assumed to be a dwarfdump.conf-like file.  The file path
              is read as a URI string.

       -x abi=ppc
              Selects the abi (from a dwarfdump.conf file) to be used in printing frame information (here  using
              ppc as an example).  The abi is read as a URI string.

       -x groupnumber=<n>
              For  an object file with both DWARF5 split dwarf (.debug_info.dwo for example)  and ordinary DWARF
              sections (.debug_info for example) in the single object file one  must  use  -x  groupnumber=2  to
              print  the  dwo  sections.   Adding -x tied=<path> naming the same object file ties in the non-dwo
              sections.

       -x tied=/t/i/depath
              Used when opening a main object that is a .dwo or  .dwp  file.   The  tied  file  path  names  the
              executable  which  has  the  .debug_addr section that may be referred to from the main object. See
              Split Objects (aka Debug Fission).

       -x line5=s2l
              Normally used only to test libdwarf interfaces.  There are 4 different interface function sets and
              to ensure they all work this option lets us choose which to use.  The options are 's2l'  (default,
              Allows  standard  and  two-level  line tables using the latest interface functions), 'std' (Allows
              standard single level line tables using the latest interface functions), 'orig' (allows DWARF2,3,4
              original line tables using an older interface function set), 'orig2l' (allows original line tables
              and some two-level line tables using an older interface set).

       -P     When checking this adds the list of compilation-unit names seen for each producer-compiler to  the
              printed checking results.

       -q     When  a  URI  is  found  and  translated  while  reading  the command line, be quiet about the URI
              translation. That is, don't print the original and translated option strings.

       -E     Turns on printing object-internal header data for some systems (for Unix/Linux does nothing).

       -u cuname
              Turns on selective printing of DIEs (printing like -i).  Only the DIEs for a compilation unit that
              match the name provided are printed.  If the  compilation  unit  is  ./a/b/c.c  the  'cuname'  you
              provide  should  be  c.c  as  the  characters through the final path-separating / are ignored.  If
              'cuname' begins with a / then the entire name string of a compilation unit  must  match  'cuname'.
              The 'cuname' is read as a URI string.

       -U     Turn  off  the  URI interpretation of the command line strings entirely. Must be be on the command
              line before any URI strings encountered to be fully effective.

       -z     No longer supported.

FILES

       dwarfdump

        ./dwarfdump.conf

       $(HOME)/.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()