* dwarf2-frame.c (dwarf2_frame_cache): Deal with a return address

column that's "empty" or "same value" when eliminating REG_RA
rules.
This commit is contained in:
Mark Kettenis 2004-02-02 22:00:14 +00:00
parent 1b8021965a
commit d4f10bf20b
2 changed files with 16 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2004-02-02 Mark Kettenis <kettenis@gnu.org>
* dwarf2-frame.c (dwarf2_frame_cache): Deal with a return address
column that's "empty" or "same value" when eliminating REG_RA
rules.
2004-02-02 Jeff Johnston <jjohnstn@redhat.com>
* breakpoint.h (struct breakpoint): Add new flag, from_tty,

View File

@ -661,14 +661,19 @@ dwarf2_frame_cache (struct frame_info *next_frame, void **this_cache)
{
if (cache->reg[regnum].how == REG_RA)
{
if (fs->retaddr_column < fs->regs.num_regs)
/* It seems rather bizarre to specify an "empty" column as
the return adress column. However, this is exactly
what GCC does on some targets. It turns out that GCC
assumes that the return address can be found in the
register corresponding to the return address column.
Incidentally, that's how should treat a return address
column specifying "same value" too. */
if (fs->retaddr_column < fs->regs.num_regs
&& fs->regs.reg[fs->retaddr_column].how != REG_UNSPECIFIED
&& fs->regs.reg[fs->retaddr_column].how != REG_SAME_VALUE)
cache->reg[regnum] = fs->regs.reg[fs->retaddr_column];
else
{
/* It turns out that GCC assumes that if the return
address column is "empty" the return address can be
found in the register corresponding to the return
address column. */
cache->reg[regnum].loc.reg = fs->retaddr_column;
cache->reg[regnum].how = REG_SAVED_REG;
}