svn commit: r279937 - in head/sys/powerpc: include powerpc

Konstantin Belousov kostikbel at gmail.com
Fri Mar 13 17:23:52 UTC 2015


On Fri, Mar 13, 2015 at 10:06:05AM -0700, Nathan Whitehorn wrote:
> One more thing I'd appreciate advice on: we have a much worse ABI issue 
> with setjmp(). On 32-bit systems, _JBLEN is too small to hold all the 
> nonvolatile vector registers. Do you have any ideas how to handle that?

There is no solution there.  On x86, both 32 and 64 bit, setjmp only
saves fpu control word (and mxcsr on amd64, where SSE2 is guaranteed to
be presented).  So only limited bits of the whole arch state is saved
and restored.  I suggest to just leave setjmp as it is.

In fact, FreeBSD cannot work on 486SX due to this.  Shell uses setjmp,
and despite kernel carefully handling FPU-less CPU, shell fails from the
beginning.

Please note that ucontext_t API was designed by System V group to handle
this deficiency in the setjmp/longjmp API, to cover the whole machine
context and provide almost-portable interface for non-local control flow
:/. As usual, SysV produced something which failed. In particular, the
size and layout of ucontext_t is user-visible and cannot be changed.


More information about the svn-src-all mailing list