mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 13:09:48 +00:00
* 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:
parent
1b8021965a
commit
d4f10bf20b
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user