Hi David,

Am 14.03.14 02:15, schrieb David Chisnall:
On 14 Mar 2014, at 07:50, Mathias Bauer <[email protected]> wrote:

This time again standard PRs in libgcc are used 4 times, but then a different 
PR is used. This PR does  return neither INSTALL_CONTEXT nor CONTINUE_UNWIND, 
thus the unwind function returns to pthread_exit, causing the app to abort.

Do you know what the personality routine that is being invoked is?

It's in the libgcc_s, at the end the call ends up in __gnu_unwind_pr_common.

The PR is taken from the EHT of that frame. The offset points into 
libgnustepbase, the PR of the Objective-C runtime is not called.
OTOH in the same test case on Linux X86_64 the PR in libobjc2 *is* called at 
this point. Is it possible that there is still something funky in the EHT 
entries of Objective-C code?

We should be using the C personality routine for frames that don't have any 
Objective-C @try blocks or C++ try blocks, but do have cleanups, so that's not 
necessarily wrong...

Yes, that's what I expect to see also. What makes me wonder is what PR actually is called in the case where something goes wrong. As long as the C personality routine is called, everything seems to be OK, but at the first time where an EHT entry points to another PR, there is a problem.

All EHT entries except this one used the compact format with an index pointing to a standard PR. The one where things go haywire does not use the compact format, and the UCB_PR_ADDR (ucbp) yields an address in libgnustepbase by using the offset stored in the EHT entry.

I think the function where it happens is the main method of NSThread that has an [NSException raise:...] statement. So whatever code in libgnustepbase is jumped to, shouldn't it call the PR in eh_personality.c in libobjc2?

Regards,
Mathias

_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to