* i386-tdep.c (i386_frame_prev_register): Unwind SP from memory
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 31 Mar 2011 16:16:57 +0000 (16:16 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Thu, 31 Mar 2011 16:16:57 +0000 (16:16 +0000)
if neither saved value nor register available (e.g. signal frame).

gdb/ChangeLog
gdb/i386-tdep.c

index f04ed015155fb96eb2df2b53a1edecf3dbdf5994..69c44a7561c91eae90fbecd8c8c16a389085e65c 100644 (file)
@@ -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
index c7ad3a66074577099f8cd78d6918960c2f5ac625..5f4089ba5b4cef2eaca74d84e37c7bf806faec3c 100644 (file)
@@ -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