gdb: handle invalid DWARF when compilation unit is missing
authorAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 17 Mar 2021 16:48:25 +0000 (16:48 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 22 Mar 2021 14:34:53 +0000 (14:34 +0000)
commit702cf3f5df18818eb62da7ffbd70544fa98da3c7
tree6bfe50fd3c8410defe99271d207617e94f727cff
parent46fec6428ef7504be486ebd57e2509bde4382918
gdb: handle invalid DWARF  when compilation unit is missing

Replace an abort call in process_psymtab_comp_unit with a real error,
and add a test to cover this case.  The case is question is when badly
formed DWARF is missing a DW_TAG_compile_unit, DW_TAG_partial_unit, or
DW_TAG_type_unit as its top level tag.

I then tested with --target_board=readnow and added additional code to
also validate the top-level tag in this case.

I added an assert that would trigger for the readnow case before I
added the fix.  I suspect there's lots of places where badly formed
DWARF could result in the builder being nullptr when it shouldn't be,
but I only added this one assert, as this is the one that would have
helped me in this case.

gdb/ChangeLog:

* dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an
error.
(process_full_comp_unit): Validate the top-level tag before
processing the first DIE.
(read_func_scope): Ensure we have a valid builder.

gdb/testsuite/ChangeLog:

* gdb.dwarf2/dw2-missing-cu-tag.c: New file.
* gdb.dwarf2/dw2-missing-cu-tag.exp: New file.
gdb/ChangeLog
gdb/dwarf2/read.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.c [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-missing-cu-tag.exp [new file with mode: 0644]