Using addrmaps for blocks
Jim Blandy
jimb@codesourcery.com
Mon Dec 17 18:59:00 GMT 2007
Back in October, when I first posted the patch to support
discontiguous lexical blocks in GDB, Joel asked:
Why do we keep the two parallel approaches to blocks? Could we
simply only use your map and get rid of the old structure?
I'd forgotten why, but I looked into it again this weekend, and it's
actually pretty obvious: there are many, many uses of BLOCK_START and
BLOCK_END throughout GDB, for a number of different purposes.
- We check a symtab's global block's limits to see if an address falls
in that symtab.
- There is (was?) a bug where block_for_pc / find_pc_function would
return the wrong function. For reasons unclear to me, this gets
checked and corrected separately in alpha-mdebug-tdep.c, stack.c,
f-valprint.c, and possibly other places, instead of just making the
fundamental lookup functions do the checks themselves.
- When we ask for the 'value' of a LOC_BLOCK symbol, that has always
been the block's start. I think we always use this for functions.
... and there are other cases I didn't get to.
Now, each of these cases is suspicious, because the fact is that
lexical blocks, compilation units, and everything else are not
contiguous, and just about anything that relies on BLOCK_START /
BLOCK_END is probably assuming that they are. So there's substantial
cleanup needed here before we can get rid of them. (I haven't gotten
to Jan's discontiguous partial symbol table changes yet, but I imagine
that's something along these lines.)
More information about the Gdb
mailing list