OSDN Git Service

* config/ia64/unwind-ia64.c (uw_advance_context): New. Call
authordrow <drow@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Nov 2005 22:10:39 +0000 (22:10 +0000)
committerdrow <drow@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Nov 2005 22:10:39 +0000 (22:10 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@107103 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 9f35e98..d0ef8fc 100644 (file)
@@ -1,5 +1,14 @@
 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.
 
 2005-11-16  Eric Botcazou  <ebotcazou@adacore.com>
index 7608507..c1be313 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 5a4375f..4626ec6 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 9ea6d06..4c06aa1 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 63fba96..b533eb5 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;