Improved DWARFv4 support.
authorSeth LaForge <seth@ridemission.com>
Thu, 3 Dec 2015 04:43:36 +0000 (20:43 -0800)
committerSeth LaForge <sethml@google.com>
Thu, 10 Dec 2015 18:52:25 +0000 (10:52 -0800)
commit5db298d75abbd76d1f3bd0101660af6d8960fa6e
treee8cb1f83ac68a35e2ca65c0217d1add942c0d9b2
parent66ddce49d92ddaab94dba269ca5661367dc9f925
Improved DWARFv4 support.

Handle DW_AT_data_member_location attributes with type DW_FORM_data*, which
store a simple integer offset rather than dwarf expression. This seems to come
up with struct members, at least on ARM.

Handle DW_AT_location attributes with type DW_FORM_sec_offset as not having
dwarf expressions, as allowed by the DWARFv4 standard. This seems to come up
with some local variables, at least on ARM.

Test DW_FORM_sec_offset support in location lists and DW_AT_data_member_location formatting support.
Test code, compiled with gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 on x86-64:

struct Foo {
  char bim : 8;
  char bar : 3;
  char baz : 5;
};

int get_bar(struct Foo foo) {
  return foo.bar;
}

int f1(int a, char b) {
  return a+b;
}
elftools/dwarf/descriptions.py
test/testfiles_for_readelf/improved-dwarfv4.o.elf [new file with mode: 0644]