Provided by: dwarfdump_20200114-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).

       All options are available in the traditional  (single-letter)  form  and  in  a  long-options  form  with
       meaningful names.

       With no options dwarfdump prints a basic set of DWARF section information.  If any option is given on the
       command  line the basic set is ignored and one must tell dwarfdump what to print or check (for example by
       adding the -a option).

       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 --format-dense (-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-r99.

       The --format-registers (-R) option uses a  built-in  generic  register  name  set  handling  up  to  1200
       registers named r0-r1199.

       The  -file-abi=<abi> (-x abi=<abi>)  description below shows how to name an abi and use that to guide the
       --print-frame (-f) or --print-eh-frame (-F) processing.

       Unless one of --print-frame (-f) or --print-eh-frame (-F) or --print-all (-a) is used any  abi  reference
       is ignored because no frame data will be printed.

       Unless  the  cpu  for  the  object file being dumped has many registers, do not use --format-registers or
       -file-abi=<abi> 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 --file-abi=abi=generic100 or --file-abi=abi=generic500
        .

       The most useful abi choices are likely mips or x86 or x86_64 or ppc or arm
        .    Without   --format-registers (-R)   or   -file-abi=<abi> (-x abi=<abi>)   dwarfdump   ignores   the
       dwarfdump.conf  file  and  uses  compiled-in  generic   set   of   register   names.    If   no   --file-
       name=<path> (-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   --file-
       name=<path> (-x name=<path>) is given the last of these is used and all other such files are ignored.

       Some  checking  (  -k)  options (See "Check DWARF Integrity" in the help output) 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 all the options taking name strings look for URIs and translate the URI  strings
       to  characters  by  default.  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  --format-producer=S&T (-cS&T)  the  &  character  might  cause  input  issues  so  --format-
       producer=S%26T  should be used instead.  To actually input a single % character (in a name, for example),
       double it to %% on the command line (or simply use %25).

       Options --format-suppress-uri (-U) (turning off URI  interpretation)  and  --format-suppress-uri-msg (-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

       --print-all (-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).

       --print-abbrev (-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.

       --print-loc (-c)
              Print locations lists.

       --elf (-E)
              prints, for Elf objects, object file details.  See the "Print ELF sections header" section of  the
              help  file  for  additional  choices  on  elf printing.  If libdwarf or dwarfdump is built without
              libelf this option is unavailable.

       --print-frame (-f)
              Print the .debug_frame section.

       --print-eh-frame (-F)
              Print the GNU .eh_frame section.

       --print-info (-i)
              Print the .debug_info section.

       --print-fission (-I)
              Print any .gdb_index, .debug_cu_index, and .debug_tu_index sections that exist in the object.

       --print-gnu-debuglinkIfthe.gnu_debuglinksection
              is present its content is printed.  If the .note.gnu.build-id section is present  its  content  is
              printed.  If a DWARF containing file named by the content of the .gnu_debuglink section exists the
              name will be printed.

       --print-lines (-l)
              Print the .debug_info section and the associated line section data.

       --print-lines-short (-ls)
              Print  the  .debug_info  section  and the associated line section data, but omit the <pc> address.
              Useful when a comparison of line sections from objects with slight differences is required.

       --print-macinfo (-m)
              Print the .debug_macinfo (DWARF 2,3,4) and .debug_macro (DWARF5) sections.

       --print-ranges (-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.

       --print-pubnames (-p)
              Print the .debug_pubnames section.

       --print-str-offsets
              Print the .debug_str_offsets section.

       --print-aranges (-r)
              Print the .debug_aranges section.

       --print-strings (-s)
              Print .debug_string section.

       --print-static (-ta)
              Print the IRIX only sections .debug_static_funcs and .debug_static_vars.

       --print-type (-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.  Other tools may be more useful than dwarfdump for printing object-file details.  See "Print
       Relocations Info" in the help output for additional relocation printing choices.

       --reloc (-o)
              Print  all  relocation  records  as  well  as  we can manage.  If libdwarf or dwarfdump were built
              without libelf this option is unavailable.

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

CHECKING OPTIONS

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

       --check-abbrev (-kb)
              Checks for certain abbreviations section errors when reading DIEs.

       --check-constants (-kc)
              Checks for errors in constants in debug_info.

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

       --check-silent-ks
              Turns off some verbose checking detection.

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

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

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

       --check-frame-info (-kf)
              Turns on checking for FDE errors (.debug_frame and .eh_frame).

       --check-files-lines (-kF)
              Turns on checking for line table errors.

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

       --check-unique (-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.

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

       --check-loc (-kl)
              Turns on locations list checking.

       --check-ranges (-km)
              Turns on checking of ranges.

       --check-aranges (-kM)
              Turns on checking of aranges.

       --check-tag-attr (-kr)
              Turns on DIE tag-attr combinations checking, looking for surprising attributes for DIE tags.

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

       --check-self-refs (-kS)
              Turns on checking DIE references for circular references.

       --check-tag-tag (-kt)
              Turns on tag-tag combinations checking, looking for surprising parent-child DIE relationships.

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

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

       --check-frame-basic (-kx)
              Turns on basic frames checking for .debug_frame and .eh_frame).

       --check-frame-extended (-kxe)
              Turns off basic check_frames and turns on extended frame checking for .debug_frame and  .eh_frame.
              This option can be slow.

       --check-type (-ky)
              Turns  on  type_offset  checking (ensuring local attribute  offsets refer to what they should) and
              that DW_AT_decl_file and some other offsets refer to appropriate locations.

OPTION MODIFIERS

       --format-extensions (-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.

       --format-dense (-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.

       --format-supress-offsets (-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.

       --format-ellipsis (-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.

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

       --format-limit=<num> (-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 '--format-limit=1'

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

       --format-suppress-lookup (-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.

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

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

       --format-registers (-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'

       --version (-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  --search  (-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 --search (-S) causes
       the .debug_info section to be inspected.  No checking options or printing options should be supplied with
       --search(-S) options.  The strings should use URI-style to avoid  any  conflicts  with  the  command-line
       parser applicable (bash, sh, ...)  or getopt().

       These are particularly useful when the amount of DWARF information is really large.

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

       --search-match=<string> (-Smatch=string)

       --search-match-count=<string> (-Svmatch=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.  The count (Sv) form reports the count of occurrences.

       --search-any=<string> (-Sany=string)

       --search-any-count=<string> (-Svany=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.  The count  (Sv)  form
              reports the count of occurrences.

       --search-regex=string (-Sregex=string)

       --search-regex-count=string (-Svregex=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 count (Sv) form reports the count of
              occurrences.

       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 --search-any (-Sany) and --regex-any (-Sregex) options are only usable if regular-expression  library
       functions required are found at configure time.

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

       --search-match-count=string1 (-S vmatch=string1)
              Prints information about the DIEs that -S matches and prints the count of occurrences.

       -S match=string1 -W

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

       -S match=string2 -Wp

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

       -S match=string3 -Wc

       --search-match=string3 --search-print-children
              Prints the children tree for the DIEs that -S matches.

       --format-gcc (-cg)
              Restricts  printing/checking  to  compilers  whose producer string starts with 'GNU' and turns off
              -cs.

       --format-snc (-cs)
              Restricts printing/checking to compilers whose producer string starts with 'SN' and turns off -cg.

       --format-producer=<name> (-c<name>)
              Restricts  printing/checking  to  compilers  whose  producer  string  contains  'name'  (not  case
              sensitive).  The 'name' is read as a URI string.

OTHER OPTIONS

       -x name=<path>

       --file-name=/p/a/t/h.conf (-xname=/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

       --file-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.

       --format-group=<n> (-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 --format-group=2 to
              print the dwo sections.  Adding --file-tied=<path> naming the same object file ties in the non-dwo
              sections.

       -x tied=/t/i/depath

       --file-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

       --file-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).

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

       -q

       --format-suppress-uri-msg
              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.

       -u cuname

       --format-file=<file>
              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 'file' is read as a URI string.

       -U

       --format-suppress-uri
              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.  Likely something no one  needs  to
              do.

       -h

       --help Show this man page.

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 DWARF5 is being completed but may not be complete.

                                                                                                     DWARFDUMP()