[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libunwind-devel] libunwind on x86-64 w/ C++ exceptions

From: Mark Rabkin
Subject: Re: [Libunwind-devel] libunwind on x86-64 w/ C++ exceptions
Date: Tue, 19 Feb 2008 12:23:09 -0800
User-agent: Microsoft-Entourage/

I've done a lot more investigation over the weekend.

The difference between the regular static linking and whole-archive seems explainable by the different symbols incorporated -- in the regular static linking, it only seems to call _Unwind_Resume(), but in shared and whole-archive linking the exception is thrown by _Unwind_RaiseException() instead of the GCC version.

I've tracked down the problems with shared/whole-archive crash on my system which you can't reproduce:  the reason is that _get_context() (the internal function used by _Unwind_Initialize()) does NOT fill out the 'fpregs' field of the uc_context.uc_mcontext member -- it stays unchanged, pointing to garbage, and the "fldenv" in the assembly x86_64_setcontext obviously crashes due to SEGV.

I have a patch that fixes this by using a large hammer:  I first zero out the whole uc_context stuct using memset(), and then I modified the assembly to only load the FPU state if it's been filled out (non-zero).

I can send the patch diff -- do you think this kind of solution is acceptable?

I will test my crashes in chroot with the provided libs and let you know how it goes -- maybe we're on a bad libc.

I've had a lot of trouble diagnosing the other crash in regular link mode, however, as I don't know very much about the low-level gcc and libc internals and I didn't have their source handy (like I did for libunwind).  Do you have any ideas on that?

- Mark

On 2/19/08 10:25 AM, "Arun Sharma" <address@hidden> wrote:

On Feb 15, 2008 6:29 PM, Mark Rabkin <address@hidden> wrote:
Can you reproduce with the -Wl,--whole-archive or does it then run fine for you like the shared version?

It runs fine like the shared version. I was testing in this chroot:



reply via email to

[Prev in Thread] Current Thread [Next in Thread]