From 79c4cb80ee21c7de2b2245d17a99f4295d9e0c40 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Mon, 22 Dec 2003 20:32:51 +0000 Subject: [PATCH] * dwarf2-frame.c (dwarf2_frame_cache): Don't skip the return address column. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2-frame.c | 23 +++++++---------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 985ec69a42a..a4e5aaf62ea 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2003-12-22 Mark Kettenis + + * dwarf2-frame.c (dwarf2_frame_cache): Don't skip the return + address column. + 2003-12-21 Jim Blandy * breakpoint.c (bpstat_do_actions): To ensure that diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index 59f4481bef3..aed3f3a10d6 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -557,28 +557,19 @@ dwarf2_frame_cache (struct frame_info *next_frame, void **this_cache) } /* Go through the DWARF2 CFI generated table and save its register - location information in the cache. */ + location information in the cache. Note that we don't skip the + return address column; it's perfectly all right for it to + correspond to a real register. If it doesn't correspond to a + real register, or if we shouldn't treat it as such, + DWARF2_REG_TO_REGNUM should be defined to return a number outside + the range [0, NUM_REGS). */ { int column; /* CFI speak for "register number". */ for (column = 0; column < fs->regs.num_regs; column++) { - int regnum; - - /* Skip the return address column. */ - if (column == fs->retaddr_column) - /* NOTE: cagney/2003-06-07: Is this right? What if - RETADDR_COLUMN corresponds to a real register (and, - worse, that isn't the PC_REGNUM)? I'm guessing that the - PC_REGNUM further down is trying to handle this. That - can't be right though; PC_REGNUM may not be valid (it can - be negative). I think, instead when RETADDR_COLUM isn't - a real register, it should map itself onto - frame_pc_unwind. */ - continue; - /* Use the GDB register number as the destination index. */ - regnum = DWARF2_REG_TO_REGNUM (column); + int regnum = DWARF2_REG_TO_REGNUM (column); /* If there's no corresponding GDB register, ignore it. */ if (regnum < 0 || regnum >= num_regs)