diff options
author | Andrew Cagney <cagney@redhat.com> | 2004-04-02 23:01:14 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2004-04-02 23:01:14 +0000 |
commit | ee87784b2ceb7e15e0cf7b349d452f3707cab2af (patch) | |
tree | 4210c65c2f4089b52dc3dd99eb3531d5244ffd1b /gdb | |
parent | 60143e1a1bf53f87d25683757ebd8e64980f3b8d (diff) | |
download | gdb-ee87784b2ceb7e15e0cf7b349d452f3707cab2af.tar.gz |
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/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/alpha-tdep.c | 10 |
2 files changed, 17 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0972e99c192..3e3b7597feb 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 8777afc4176..0f4eaa7611d 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; |