Date: Mon, 20 Nov 1995 11:08:52 +1100 (EST) From: John Birrell <cimaxp1!jb@werple.net.au> To: bde@zeta.org.au Cc: hackers@FreeBSD.org, jb@cimlogic.com.au Subject: Re: int type in jmpbuf Message-ID: <199511200005.LAA25969@werple.net.au>
next in thread | raw e-mail | index | archive | help
> >>typedef struct { >> char _jb0[_THE_FULL_SIZEOF_JMP_BUF]; >>} jmp_buf[1]; > >The latter is only guaranteed to be aligned on 1-byte boundaries. And it needs to be aligned so that the asm code can access it? >It's supposed to be opaque to stop that :-). Or was it opaque 'cause the only thing that accessed it was asm code which couldn't use a structure anyway? Would it be evil if it were _not_ opaque under FreeBSD? >You should copy setjmp.S >and adapt it. Note that it isn't possible to do preemptive context >switching for threads using only setjmp() - setjmp() doesn't preserve >all of the floating point state in FreeBSD. I don't agree with this. gcc under FreeBSD appears to re-load floating point "registers" after a function call (like setjmp). This means that setjmp/longjmp don't need to save the floating point state. When a signal occurs, though, the floating point state is not saved. [We think it should be saved. Is there anything that says that floating point calculations in a signal handler can ruin your whole day?! 8-)]. This is true of FreeBSD and NetBSD/i386, but it is _not_ true of NetBSD/Alpha which saves floating point registers routinely. Preemptive context switching in user-space threads under FreeBSD needs to save the floating point state when entering the scheduler from the signal handler. Before calling sigreturn to re-start an interrupted thread (as opposed to one that was simply context switched using setjmp), the floating point state is restored. This means that the behavio[u]r of a signal handler under a threaded program will not corrupt the floating point state of a program as it will with a non-threaded program. > >Bruce -- John Birrell CIMlogic Pty Ltd jb@cimlogic.com.au 119 Cecil Street Ph +61 3 9690 9600 South Melbourne Vic 3205 Fax +61 3 9690 6650 Australia Mob +61 18 353 137
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199511200005.LAA25969>