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