setjmp() shares a single jmp_buf across all threads

Adam Megacz gcj@lists.megacz.com
Mon Jan 14 13:14:00 GMT 2002


Andrew Haley <aph@cambridge.redhat.com> writes:
> Looks like gcc doesn't know about your threads package.

Hrm, I configured with --enable-threads=win32...
> Look in gcc/unwind-sjlj.c. See:
> void _Unwind_SjLj_Register (struct SjLj_Function_Context *fc)

This is completely bizarre; I put an infinite loop at the top of this
function, yet when I recompile/link/run programs that throw
exceptions, they don't hang.
After grepping through the source, I found that the symbol
_Unwind_SjLj_Register doesn't appear anywhere outside of
unwind-sjlj.c... where is this function called from?
> You need to provide some local way of getting/setting thread-specific
> data. I reckon if you fix this, everything will "just work". :-)

Yeah, gthr-win32.c defines an implementation (TlsSet/TlsGet) which
ought to work, I just don't think it's getting called.
Another question: what is the difference between the "builtin setjmp"
and the non-builtin setjmp? Does "builtin" mean that the compiler just
dumps out code to do setjmp's work instead of emitting a call to a
library function?
 - a


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /