summaryrefslogtreecommitdiff
path: root/gdb/i386-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2011-03-31 16:16:57 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2011-03-31 16:16:57 +0000
commitfdf29c2fe62b1f842b39afafb0094674bc8c9232 (patch)
tree1e1a08823fe2cbaa4880934999e5760646fdd970 /gdb/i386-tdep.c
parent6be74f3b359a6ef32f2793cbb5ff8f508e76c3f9 (diff)
downloadgdb-fdf29c2fe62b1f842b39afafb0094674bc8c9232.tar.gz
* i386-tdep.c (i386_frame_prev_register): Unwind SP from memory
if neither saved value nor register available (e.g. signal frame).
Diffstat (limited to 'gdb/i386-tdep.c')
-rw-r--r--gdb/i386-tdep.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index c7ad3a66074..5f4089ba5b4 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -1798,12 +1798,13 @@ i386_frame_prev_register (struct frame_info *this_frame, void **this_cache,
if (regnum == I386_EIP_REGNUM && cache->pc_in_eax)
return frame_unwind_got_register (this_frame, regnum, I386_EAX_REGNUM);
- if (regnum == I386_ESP_REGNUM)
+ if (regnum == I386_ESP_REGNUM
+ && (cache->saved_sp != 0 || cache->saved_sp_reg != -1))
{
/* If the SP has been saved, but we don't know where, then this
means that SAVED_SP_REG register was found unavailable back
when we built the cache. */
- if (cache->saved_sp == 0 && cache->saved_sp_reg != -1)
+ if (cache->saved_sp == 0)
return frame_unwind_got_register (this_frame, regnum,
cache->saved_sp_reg);
else