]> git.ipfire.org Git - thirdparty/elfutils.git/commit
readelf: Add some support for locviews.
authorMark Wielaard <mark@klomp.org>
Wed, 28 Feb 2018 23:14:52 +0000 (00:14 +0100)
committerMark Wielaard <mark@klomp.org>
Mon, 5 Mar 2018 14:30:22 +0000 (15:30 +0100)
commitfd0cee63fb02455a5021ca298da8dadb4df63a9a
treebc8c9b63a31cf1a8c4b9e96b9f8013e8ea3ef149
parent22e282071021fc5ada2b9294bfa7e25fbd62a9d6
readelf: Add some support for locviews.

This adds minimal support for locviews as output by GCC8.
It changes readelf to keep track of loclistptrs from DW_AT_GNU_locviews
and prints the locview pairs for those. Since there is no terminator
we have to keep track of where the next loclist entry starts.
The --debug-dump=loc output looks as follows:

 CU [   714] base: +0x0000000000003020 <elf_hash>
 [    b4] view pair 1, 2
 [    b6] range 4, 7f
          +0x0000000000003024 <elf_hash+0x4>..
          +0x000000000000309e <elf_hash+0x7e>
           [ 0] reg5
 [    d9] view pair 3, 1
          view pair 1, 2
 [    dd] range 4, 4c
          +0x0000000000003024 <elf_hash+0x4>..
          +0x000000000000306b <elf_hash+0x4b>
           [ 0] reg5
          range 4c, 7f
          +0x000000000000306c <elf_hash+0x4c>..
          +0x000000000000309e <elf_hash+0x7e>
           [ 0] reg2

Note that in the above output the view pairs correspond to the ranges
immediately following in the loc list. This is how GCC8 currently
outputs the locview pairs and ranges, but this is not guaranteed and
you'll need to look at the location and GNU_locviews attributes of the
DIE to know which really match up together. We might want to adjust the
output to make this more clear.

This does not yet add an locview accessor to libdw. It just recognizes
the DW_AT_GNU_locviews attribute as a loclistptr when encoded as a
sec_offset form.

Signed-off-by: Mark Wielaard <mark@klomp.org>
libdw/ChangeLog
libdw/dwarf.h
libdw/dwarf_formudata.c
src/ChangeLog
src/readelf.c