From: Ulrich Weigand Date: Thu, 31 Mar 2011 16:16:57 +0000 (+0000) Subject: * i386-tdep.c (i386_frame_prev_register): Unwind SP from memory X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fcf250e2bae3e6053af11b2e42bd59dcd3762ab3;p=binutils-gdb.git * i386-tdep.c (i386_frame_prev_register): Unwind SP from memory if neither saved value nor register available (e.g. signal frame). --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f04ed015155..69c44a7561c 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 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