[llvm-commits] [PATCH] basic reading reloc visitor for x86_64 ELF

Eric Christopher echristo at gmail.com
Tue Nov 6 08:47:00 PST 2012


On Tue, Nov 6, 2012 at 5:11 AM, Eli Bendersky <eliben at google.com> wrote:

> > 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.
> >
>
> A slightly expanded version of this will make for a great comment in
> the code :-) Seriously, please document the purpose of the new
> relocMap data structure you're adding.
>
>
Uh hey, good point. Done :)


> > 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.
> >
>
> I'm not sure I understood #2 - can you elaborate?
>

Yeah, it'll look like this:
  static DIContext *getDWARFContext(bool isLittleEndian,
                                    StringRef infoSection,
                                    StringRef abbrevSection,
                                    StringRef aRangeSection = StringRef(),
                                    StringRef lineSection = StringRef(),
                                    StringRef stringSection = StringRef(),
                                    StringRef rangeSection = StringRef(),
                                    const RelocAddrMap &infoSectionMap =
RelocAddrMap(),
                                    const RelocAddrMap &aRangeSectionMap =
RelocAddrMap(),
                                    const RelocAddrMap &lineSectionMap =
RelocAddrMap());

instead of:

  static DIContext *getDWARFContext(bool isLittleEndian,
                                    StringRef infoSection,
                                    StringRef abbrevSection,
                                    StringRef aRangeSection = StringRef(),
                                    StringRef lineSection = StringRef(),
                                    StringRef stringSection = StringRef(),
                                    StringRef rangeSection = StringRef(),
                                    const RelocAddrMap &Map =
RelocAddrMap());

where I add a section specific map. It's more variables to a constructor
and a bit more to look up, but more obvious what's going on. There's some
complexity in deciding which is the proper map to grab at the right time,
but that can be done as we go through the sections without needing to
change the form parser.


>
> > 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.
>
> Do you have any tests for this?
>

I mostly plan on using for writing tests for debug info, I can add a simple
one that shows the proper strings and addresses output for a simple
testcase though via the existing debug info tests that use dwarfdump and
just make one use x86_64-elf. That about what you were thinking about?

Thanks!

-eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121106/ec42e9a4/attachment.html>


More information about the llvm-commits mailing list