aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2004-04-02 23:01:14 +0000
committerAndrew Cagney <cagney@redhat.com>2004-04-02 23:01:14 +0000
commitd15bfd3a43117017e919e0b1fc2bb09a7dd535fd (patch)
tree64c94c507c569cae58293ecd7f0d766e21b90a09 /gdb
parent08be3abd6026bf04ed7226c2fea9c87e264928fd (diff)
downloadgdb-d15bfd3a43117017e919e0b1fc2bb09a7dd535fd.zip
gdb-d15bfd3a43117017e919e0b1fc2bb09a7dd535fd.tar.gz
gdb-d15bfd3a43117017e919e0b1fc2bb09a7dd535fd.tar.bz2
2004-04-02 Joel Brobecker <brobecker@gnat.com>
Committed by Andrew Cagney <cagney@redhat.com>. * alpha-tdep.c (alpha_heuristic_frame_unwind_cache): Do not take into account an instruction saving a register if we have already seen an earlier instruction saving that same register.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/alpha-tdep.c10
2 files changed, 17 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0972e99..3e3b759 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2004-04-02 Joel Brobecker <brobecker@gnat.com>
+
+ Committed by Andrew Cagney <cagney@redhat.com>.
+ * alpha-tdep.c (alpha_heuristic_frame_unwind_cache): Do not take
+ into account an instruction saving a register if we have already
+ seen an earlier instruction saving that same register.
+
2004-04-02 Andrew Cagney <cagney@redhat.com>
* gdbarch.sh (DEPRECATED_INIT_FRAME_PC_FIRST): Delete.
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index 8777afc..0f4eaa7 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -1029,6 +1029,16 @@ alpha_heuristic_frame_unwind_cache (struct frame_info *next_frame,
{
reg = (word & 0x03e00000) >> 21;
+ /* Ignore this instruction if we have already encountered
+ an instruction saving the same register earlier in the
+ function code. The current instruction does not tell
+ us where the original value upon function entry is saved.
+ All it says is that the function we are scanning reused
+ that register for some computation of its own, and is now
+ saving its result. */
+ if (info->saved_regs[reg])
+ continue;
+
if (reg == 31)
continue;