libDebugInfoDWARF: Don't try to parse loclist[.dwo] headers when parsing debug_info...
authorDavid Blaikie <dblaikie@gmail.com>
Wed, 14 Oct 2020 05:00:34 +0000 (22:00 -0700)
committerDavid Blaikie <dblaikie@gmail.com>
Wed, 14 Oct 2020 05:28:59 +0000 (22:28 -0700)
commit9670a45c980c371c5ece8047a00b8b2abec73823
tree0faddd56d8fbd81380e116b32f98327f01be46ee
parentbd05afcb3f4093fe76dd64fe29255550bfd894ec
libDebugInfoDWARF: Don't try to parse loclist[.dwo] headers when parsing debug_info[.dwo]

There's no way to know whether there's a loclist contribution to parse
if there's no loclistx encoding - and if there is one, there's no need
to walk back from the loclist_base (or, uin the case of
info.dwo/loclist.dwo - starting at 0 in the contribution) to parse the
header, instead rely on the DWARF32/64 and address size in the CU
that's already available.

This would come up in split DWARF (non-split wouldn't try to read a
loclist header in the absence of a loclist_base) when one unit had
location lists and another does not (because the loclists.dwo section
would be non-empty in that case - in the case where it's empty the
parsing would silently skip).

Simplify the testing a bit, rather than needing a whole dwp, etc - by
creating a malformed loclists.dwo section (and use single file Split
DWARF) that would trip up any attempt to parse it - but no attempt
should be made.
llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h
llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
llvm/test/tools/llvm-dwarfdump/X86/debug_loclists_unused_invalid.s [new file with mode: 0644]