From fcf250e2bae3e6053af11b2e42bd59dcd3762ab3 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Thu, 31 Mar 2011 16:16:57 +0000 Subject: [PATCH] * i386-tdep.c (i386_frame_prev_register): Unwind SP from memory if neither saved value nor register available (e.g. signal frame). --- gdb/ChangeLog | 5 +++++ gdb/i386-tdep.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f04ed01515..69c44a7561 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2011-03-31 Ulrich Weigand + + * i386-tdep.c (i386_frame_prev_register): Unwind SP from memory + if neither saved value nor register available (e.g. signal frame). + 2011-03-31 Thiago Jung Bauermann * macroexp.c (expand): Avoid uninitialized variable diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index c7ad3a6607..5f4089ba5b 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