Hi,
Am 21.02.14 11:06, schrieb Mathias Bauer:
The program does not continue if an exception is thrown and caught in
a function and then another exception is thrown in that same function
and shall be caught in a function above on the call stack (the
typical "rethrow" scenario).
>
From debugging the code I could see that in this case the function
"internal_objc_personality" in eh_personality.c only finds a handler
that is a cleanup, and so the function is called again and again, always
with the same result.
In case that helps:
For the first throw internal_objc_personality is called once in the
"search phase". This is true for X86 and for ARM as well.
On an X86 system internal_objc_personality is called twice in the
"search phase" after the second throw. In the first call the
action_record passed to check_action_record is NULL, in the second call
it isn't. Thus a handler_type is returned then and the program continues.
On ARM the action_record passed in to check_action_record is NULL in
*every* call from internal_objc_personality, so check_action_record
always returns NULL and internal_objc_personality always returns
_URC_CONTINUE_UNWIND. This process never stops.
Regards,
Mathias
_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep