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

Nathan Whitehorn nwhitehorn at freebsd.org
Fri Mar 13 17:45:53 UTC 2015


On 03/13/15 10:23, Konstantin Belousov wrote:
> 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.
>
We'll need to hack the compiler in this case, since it assumes setjmp() 
saves and restores the vector registers. I'm really not sure which 
option is worse.
-Nathan


More information about the svn-src-head mailing list