|
From: | Mathias Bauer |
Subject: | Re: Another unwinding problem on ARM |
Date: | Fri, 14 Mar 2014 16:58:55 +0100 |
User-agent: | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 |
Am 14.03.14 13:56, schrieb Mathias Bauer:
Hi, once you find it, the solution quite often is easy. :-) The culprit was that unwind-arm.h in libobjc2 can't cope with unwind states that have been "or-ed" with _US_FORCE_UNWIND. Defining it in this file and replacing switch(state) with switch(state & ~_US_FORCE_UNWIND) helps. Without that, the PR wrapper in this header file always returns _URC_FAILURE. I overlooked that in the first place because I only looked whether internal_objc_personality was called. Now the test case works - at least when run inside gdb. I still have to find out why it core dumps without gdb.
And this turns out to be a problem of interpreting the LSDA. The stack frame in question belongs to [NSOperation start].When the PR __gnu_objc_personality_v0 is called for it, the internal_objc_personality function calls check_action. The resolve_indirect_value function returns something that - when interpreted as a char* - leads to a crash.
I wonder whether the internal_objc_personality needs some adjustments for _US_FORCE_UNWIND here.
I will continue investigating this, but I would appreciate any hints that could help me speed this up. My wife probably will get angry if it takes the whole weekend. ;-)
Regards, Mathias
[Prev in Thread] | Current Thread | [Next in Thread] |