From f3e0f90b5ddd9d2391a465142ca9f274cff8bc19 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sun, 1 Jun 2003 16:04:50 +0000 Subject: [PATCH] * dwarf2-frame.c (dwarf2_frame_cache): Handle retaddr_column not overlapping PC_REGNUM. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2-frame.c | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index db2244b..121ba17 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2003-06-01 Richard Henderson + * dwarf2-frame.c (dwarf2_frame_cache): Handle retaddr_column + not overlapping PC_REGNUM. + +2003-06-01 Richard Henderson + * alpha-tdep.c (alpha_push_dummy_call): Transmography from alpha_push_arguments. Don't dump argument register data to the target stack. Fix float and 128-bit long double semantics. diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index 7694218..f406e64 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -550,9 +550,21 @@ dwarf2_frame_cache (struct frame_info *next_frame, void **this_cache) cache->reg[regnum] = fs->regs.reg[reg]; } - /* Stored the location of the return addess. */ - if (fs->retaddr_column < fs->regs.num_regs) + /* Store the location of the return addess. If the return address + column (adjusted) is not the same as gdb's PC_REGNUM, then this + implies a copy from the ra column register. */ + if (fs->retaddr_column < fs->regs.num_regs + && fs->regs.reg[fs->retaddr_column].how != REG_UNSAVED) cache->reg[PC_REGNUM] = fs->regs.reg[fs->retaddr_column]; + else + { + reg = DWARF2_REG_TO_REGNUM (fs->retaddr_column); + if (reg != PC_REGNUM) + { + cache->reg[PC_REGNUM].loc.reg = reg; + cache->reg[PC_REGNUM].how = REG_SAVED_REG; + } + } do_cleanups (old_chain); -- 2.7.4