Support .debug_macro
authorPetr Machata <pmachata@redhat.com>
Fri, 17 Oct 2014 00:47:03 +0000 (02:47 +0200)
committerPetr Machata <pmachata@redhat.com>
Mon, 10 Nov 2014 14:45:00 +0000 (15:45 +0100)
commitfb90bf3f84b5683bbc1f234ee05008ff26250e5c
treeb29eb4c3b3ab559167fc8cacce36b99ef958c367
parentd8b9682b1a5ff2746f172487eaf19ebd088bb7f4
Support .debug_macro

- This code is based on the following proposal:
    http://www.dwarfstd.org/ShowIssue.php?issue=110722.1

- dwarf_getmacros serves either of .debug_macinfo or .debug_macro
  transparently, but if the latter uses opcode 0xff, it bails out with
  an error.  The reason is that in .debug_macro, 0xff is a custom code
  that can mean anything, while in .debug_macinfo there's fixed
  semantics associated with 0xff.

- dwarf_getmacros_off is a new interface used for requesting iteration
  through transparently included units.

- dwarf_macro_getparamcnt and dwarf_macro_param are new interfaces
  used for requesting number of parameters of an opcode and individual
  parameters.  dwarf_macro_getsrcfiles is a new interface used for
  requesting a file part of .debug_line unit associated with macro
  unit that the opcode comes from.

- The existing interfaces dwarf_macro_opcode, dwarf_macro_param1 and
  dwarf_macro_param2 remain operational for old- as well as new-style
  Dwarf macro sections, if applicable.

- dwarf_getsrclines was made into a light wrapper around a worker
  function that loads line unit given its offset.  The worker also
  caches loaded units in an offset-keyed search tree, so that we don't
  end up re-reading units even though they were read in a different
  domain (e.g. a macro unit request can prime cache for later CU
  lookup).  dwarf_macro_getsrcfiles calls the worker function under
  covers.

Signed-off-by: Petr Machata <pmachata@redhat.com>
15 files changed:
NEWS
libdw/ChangeLog
libdw/Makefile.am
libdw/dwarf_end.c
libdw/dwarf_error.c
libdw/dwarf_getmacros.c
libdw/dwarf_getsrclines.c
libdw/dwarf_macro_getparamcnt.c [new file with mode: 0644]
libdw/dwarf_macro_getsrcfiles.c [new file with mode: 0644]
libdw/dwarf_macro_param.c [new file with mode: 0644]
libdw/dwarf_macro_param1.c
libdw/dwarf_macro_param2.c
libdw/libdw.h
libdw/libdw.map
libdw/libdwP.h