[PATCH] basic reading reloc visitor for x86_64 ELF

For llvm-dwarfdump we need to handle relocations inside the debug info sections in order to successfully dump the dwarf info including strings. Nick sent out a partial patch that did this not too long ago and I’ve taken it and gone in a bit of a different direction, but kept the same basic architecture.

In place of applying the relocations to the data we’ve read from disk I’m keeping a separate mapping table to the side and checking that at locations in the dwarf I’m expecting relocated values. This adds a bit of complexity to the dwarf parsing/extraction at the benefit of not allocating memory for the entire size of the debug info section.

Couple of areas that will need to be improved later:

a) Relocations in more than a single section: the .debug_info section is the primary one I cared about first, however, we’ll need either

  1. A better mapping that contains section + address (since the debug sections are mapped at address 0 I can’t just use total offset)
  2. More mappings per section we’re disassembling

I’m likely to go with #2 rather than #1, but I’m open to any rationale either direction.

b) Symbol relocations for function sections and/or functions as well as hooking it into, e.g. the aranges disassembly.

I’ve got plans to add these things as I go along, but since it was now pretty usable for testing/dumping I wanted to get it in and then incremental on top of it.

Thoughts?

-eric

dwarfdump-reloc.diff.txt (9.67 KB)

This seems to be missing RelocVisitor.h

- Michael Spencer

That’s what I get for moving the patch between machines. Attached here along with one of the comments that Eli wanted.

-eric

dwarfdump-reloc.diff.txt (14.5 KB)