gdb: record block end addresses while parsing DIEs

Continuing to work towards the goal of improving GDB's ability to
debug optimised code,  this commit stores a map from the end address
of a block (or a block's sub-range) to the block pointer.  This
information is collected while parsing the DIEs.

This new map is required as a consequence of the previous commit.  The
optimised code fix ups require that we can map from an address back to
a block, something that the address map was perfect for, but the
previous commit deferred building the address map until later on.

The problem is that the optimised code fixes in the next commit
require the address to block map, but also adjust block ranges, which
invalidates the address to block map.  We could try to build the full
address to block early on, and then update it as the optimised code
fixes are performed, but this is expensive.

The solution I propose is to build a light weight, partial map, that
only holds the interesting (inline) blocks.  This partial map is only
needed between reading the DIE and applying the optimised code fixes,
after which it is done with, and as a consequence we don't need to
update this map as the optimised code fixes adjust block ranges, this
makes the partial map cheaper.

This commit is all about building the new partial map.  Currently,
nothing is done with this information; the information is recorded as
the block ranges are parsed, and then discarded after the line table
has been built.  But in the next commit, this will be used to help
adjust the ranges of some inline blocks, and this will improve GDB's
ability to debug optimised code.

There should be no user visible changes after this commit.

Approved-By: Tom Tromey <tom@tromey.com>
2 files changed