Author: theraven
Date: Wed Mar 19 08:09:52 2014
New Revision: 37752

URL: http://svn.gna.org/viewcvs/gnustep?rev=37752&view=rev
Log:
Make sure we continue unwinding correctly on ARM.

Patch by Logan Chien!


Modified:
    libs/libobjc2/trunk/eh_personality.c

Modified: libs/libobjc2/trunk/eh_personality.c
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/libobjc2/trunk/eh_personality.c?rev=37752&r1=37751&r2=37752&view=diff
==============================================================================
--- libs/libobjc2/trunk/eh_personality.c        (original)
+++ libs/libobjc2/trunk/eh_personality.c        Wed Mar 19 08:09:52 2014
@@ -369,7 +369,10 @@
        DEBUG_LOG("LSDA: %p\n", lsda_addr);
 
        // No LSDA implies no landing pads - try the next frame
-       if (0 == lsda_addr) { return _URC_CONTINUE_UNWIND; }
+       if (0 == lsda_addr)
+       {
+               return continueUnwinding(exceptionObject, context);
+       }
 
        // These two variables define how the exception will be handled.
        struct dwarf_eh_action action = {0};
@@ -393,7 +396,7 @@
                        DEBUG_LOG("Found handler! %d\n", handler);
                        return _URC_HANDLER_FOUND;
                }
-               return _URC_CONTINUE_UNWIND;
+               return continueUnwinding(exceptionObject, context);
        }
        DEBUG_LOG("Phase 2: Fight!\n");
 
@@ -407,7 +410,7 @@
                // If there's no cleanup here, continue unwinding.
                if (0 == action.landing_pad)
                {
-                       return _URC_CONTINUE_UNWIND;
+                       return continueUnwinding(exceptionObject, context);
                }
                handler_type handler = check_action_record(context, 
foreignException,
                                &lsda, action.action_record, thrown_class, 
&selector);
@@ -418,7 +421,7 @@
                if (handler != handler_cleanup)
                {
                        DEBUG_LOG("Ignoring handler! %d\n",handler);
-                       return _URC_CONTINUE_UNWIND;
+                       return continueUnwinding(exceptionObject, context);
                }
                DEBUG_LOG("Installing cleanup...\n");
                // If there is a cleanup, we need to return the exception 
structure


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to