]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
unwind.h (_UA_END_OF_STACK): New flag.
authorRichard Henderson <rth@redhat.com>
Tue, 4 Sep 2001 18:20:21 +0000 (11:20 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 4 Sep 2001 18:20:21 +0000 (11:20 -0700)
        * unwind.h (_UA_END_OF_STACK): New flag.
        * unwind.inc (_Unwind_ForcedUnwind_Phase2): Set it.

From-SVN: r45384

gcc/ChangeLog
gcc/unwind.h
gcc/unwind.inc

index 22c8efe7cbcc99775b3c07244af79f18c6281107..1de0a42fb775d0c2c563b8dfee60a9189a5cbe05 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-04  Richard Henderson  <rth@redhat.com>
+
+       * unwind.h (_UA_END_OF_STACK): New flag.
+       * unwind.inc (_Unwind_ForcedUnwind_Phase2): Set it.
+
 Tue Sep  4 11:16:35 2001  Jeffrey A Law  (law@cygnus.com)
 
        * h8300/elf.h (LINK_SPEC): Redefine appropriately for the H8.
index 0ad58144896cd989f59352fffa582bf508c34762..fc36913d9790ae9a58efea0ceedac1febb5f0367 100644 (file)
@@ -87,6 +87,7 @@ typedef int _Unwind_Action;
 #define _UA_CLEANUP_PHASE      2
 #define _UA_HANDLER_FRAME      4
 #define _UA_FORCE_UNWIND       8
+#define _UA_END_OF_STACK       16
 
 /* This is an opaque type used to refer to a system-specific data
    structure used by the system unwinder. This context is created and
index 2b51ab7964b9646d05140e74c547f204385b0bb1..bd867e60892c23774ccd0eeccea135687291b493 100644 (file)
@@ -142,14 +142,18 @@ _Unwind_ForcedUnwind_Phase2(struct _Unwind_Exception *exc,
   while (1)
     {
       _Unwind_FrameState fs;
+      int action;
 
       code = uw_frame_state_for (context, &fs);
       if (code != _URC_NO_REASON && code != _URC_END_OF_STACK)
        return _URC_FATAL_PHASE2_ERROR;
 
       /* Unwind successful.  */
-      stop_code = (*stop) (1, _UA_FORCE_UNWIND | _UA_CLEANUP_PHASE,
-                          exc->exception_class, exc, context, stop_argument);
+      action = _UA_FORCE_UNWIND | _UA_CLEANUP_PHASE;
+      if (code == _URC_END_OF_STACK)
+       action |= _UA_END_OF_STACK;
+      stop_code = (*stop) (1, action, exc->exception_class, exc,
+                          context, stop_argument);
       if (stop_code != _URC_NO_REASON)
        return _URC_FATAL_PHASE2_ERROR;