unwind-ia64.c (uw_advance_context): New.
authorDaniel Jacobowitz <dan@codesourcery.com>
Wed, 16 Nov 2005 22:10:39 +0000 (22:10 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Wed, 16 Nov 2005 22:10:39 +0000 (22:10 +0000)
* config/ia64/unwind-ia64.c (uw_advance_context): New.  Call
uw_update_context.
* unwind-dw2.c (uw_advance_context): Likewise.
* unwind-sjlj.c (uw_advance_context): Likewise.  Also call
_Unwind_SjLj_Unregister.
* unwind.inc (_Unwind_ForcedUnwind_Phase2): Call uw_advance_context.

From-SVN: r107103

gcc/ChangeLog
gcc/config/ia64/unwind-ia64.c
gcc/unwind-dw2.c
gcc/unwind-sjlj.c
gcc/unwind.inc

index 9f35e986e385b8b4d681b0c7651a40f16280b117..d0ef8fc110f19896b1ba30a5eb2b7de11bc33013 100644 (file)
@@ -1,3 +1,12 @@
+2005-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * config/ia64/unwind-ia64.c (uw_advance_context): New.  Call
+       uw_update_context.
+       * unwind-dw2.c (uw_advance_context): Likewise.
+       * unwind-sjlj.c (uw_advance_context): Likewise.  Also call
+       _Unwind_SjLj_Unregister.
+       * unwind.inc (_Unwind_ForcedUnwind_Phase2): Call uw_advance_context.
+
 2005-11-16  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * unwind-sjlj.c (_Unwind_GetCFA): Handle the builtin_setjmp case.
index 7608507e9e2a76e144bc5ea908fae82bc784b852..c1be3133fbe83950a783276b2f8b26e1b57b539e 100644 (file)
@@ -2060,6 +2060,12 @@ uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
     }
 }
 
+static void
+uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+  uw_update_context (context, fs);
+}
+
 /* Fill in CONTEXT for top-of-stack.  The only valid registers at this
    level will be the return address and the CFA.  Note that CFA = SP+16.  */
    
index 5a4375fa92779a08163d30364ad9b749326d724f..4626ec6d84cbe364441dcf54041ab6918110541a 100644 (file)
@@ -1210,6 +1210,12 @@ uw_update_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
   context->ra = __builtin_extract_return_addr
     (_Unwind_GetPtr (context, fs->retaddr_column));
 }
+
+static void
+uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+  uw_update_context (context, fs);
+}
 \f
 /* Fill in CONTEXT for top-of-stack.  The only valid registers at this
    level will be the return address and the CFA.  */
index 9ea6d06c9a75c17bcb3d43ec3f4508d2d2213005..4c06aa1f894a2bebc53f9ec155c3c0231a91cba0 100644 (file)
@@ -276,6 +276,13 @@ uw_update_context (struct _Unwind_Context *context,
   context->fc = context->fc->prev;
 }
 
+static void
+uw_advance_context (struct _Unwind_Context *context, _Unwind_FrameState *fs)
+{
+  _Unwind_SjLj_Unregister (context->fc);
+  uw_update_context (context, fs);
+}
+
 static inline void
 uw_init_context (struct _Unwind_Context *context)
 {
index 63fba968fa1ac4fa46d161c5ea6b9afe62c6878d..b533eb58873286ac22d238450324591492eb4013 100644 (file)
@@ -184,8 +184,9 @@ _Unwind_ForcedUnwind_Phase2 (struct _Unwind_Exception *exc,
            return _URC_FATAL_PHASE2_ERROR;
        }
 
-      /* Update cur_context to describe the same frame as fs.  */
-      uw_update_context (context, &fs);
+      /* Update cur_context to describe the same frame as fs, and discard
+        the previous context if necessary.  */
+      uw_advance_context (context, &fs);
     }
 
   return code;