Dwarf 5: Handle debug_str_offsets and indexed attributes that have base offsets.
authorAli Tamur <tamur@google.com>
Tue, 24 Dec 2019 03:31:24 +0000 (19:31 -0800)
committerAli Tamur <tamur@google.com>
Mon, 13 Jan 2020 23:35:35 +0000 (15:35 -0800)
commit18a8505e38fc2de4b0730b6e13cbd23db5984de9
treef122269b54afe1509c4e855301a489108ddb2d2c
parent0cac9354bfb07a5cf53d70dbefaa35c6afa7da0a
Dwarf 5: Handle debug_str_offsets and indexed attributes that have base offsets.

* Process debug_str_offsets section. Handle DW_AT_str_offsets_base attribute and
keep the value in dwarf2_cu.

* Make addr_base field in dwarf2_cu optional to disambiguate 0 value
(absent or present and 0).

* During parsing, there is no guarantee that DW_AT_str_offsets_base and
DW_AT_rnglists_base fields will be processed before the attributes that need
those values for correct computation. So make two passes, on the first one mark
the attributes that depend on *_base attributes and process only the others.
On the second pass, only process the attributes that are marked on the first
pass.

* For string attributes, differentiate between addresses that directly point to
a string and those that point to an offset in debug_str_offsets section.

* There are now two attributes, DW_AT_addr_base and DW_AT_GNU_addr_base to read
address offset base. Likewise, there are two attributes, DW_AT_rnglists_base
and DW_AT_GNU_ranges_base to read ranges base. Since there is no guarantee which
ones the compiler will generate, create helper functions to handle all cases.

Tested with CC=/usr/bin/gcc (version 8.3.0) against master branch (also with
-gsplit-dwarf and -gdwarf-4 flags) and there was no increase in the set of
tests that fails. (gdb still cannot debug a 'hello world' program with DWARF 5,
so for the time being, this is all we care about).

This is part of an effort to support DWARF-5 in gdb.
gdb/ChangeLog
gdb/dwarf2read.c
gdb/dwarf2read.h
gdb/symfile.h
gdb/xcoffread.c