diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2011-03-31 16:16:57 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2011-03-31 16:16:57 +0000 |
commit | fdf29c2fe62b1f842b39afafb0094674bc8c9232 (patch) | |
tree | 1e1a08823fe2cbaa4880934999e5760646fdd970 /gdb | |
parent | 6be74f3b359a6ef32f2793cbb5ff8f508e76c3f9 (diff) | |
download | gdb-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')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/i386-tdep.c | 5 |
2 files changed, 8 insertions, 2 deletions
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 <ulrich.weigand@linaro.org> + + * 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 <bauerman@br.ibm.com> * 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 |