[LLVMdev] x86 unwind support[MESSAGE NOT SCANNED]
Andrew Haley
aph at redhat.com
Mon Jul 20 05:40:14 PDT 2009
Mark Shannon wrote:
> Andrew Haley wrote:
>> Mark Shannon wrote:
>>> Nick Johnson wrote:
>>>>> probably there should be a switch to choose whether codegen should turn
>>>>> unwind/invoke into dwarf or setjmp/longjmp style code.
>>> It seems to me that there is an implicit, and undocumented, assumption
>>> that unwinding needs to handle stack-allocated objects.
>>>
>>> In languages without stack-allocated objects (ie. most languages that
>>> support exceptions) there is no need to unwind frame-by-frame, the
>>> unwind simply needs to make a single jump to the invoke instruction and
>>> restore the context (which in x86 is just 6 registers).
>> Not quite. It's also necessary to execute all the pending POSIX
>> pthread_cleanup_pop() actions.
>
> POSIX pthread_cleanup_pop() can only be called directly from C++/C.
> C doesn't haven't exceptions.
But it does have pthread_exit().
> So yet again, this is a C++ issue.
No, it isn't:
The effect of calling longjmp() or siglongjmp() is undefined if there
have been any calls to pthread_cleanup_push() or pthread_cleanup_pop()
made without the matching call since the jump buffer was filled.
Andrew.
More information about the llvm-dev
mailing list