Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Mar 2015 10:45:46 -0700
From:      Nathan Whitehorn <nwhitehorn@freebsd.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r279937 - in head/sys/powerpc: include powerpc
Message-ID:  <5503224A.3010100@freebsd.org>
In-Reply-To: <20150313172345.GY2379@kib.kiev.ua>
References:  <201503122115.t2CLFdmi026986@svn.freebsd.org> <20150312212234.GS2379@kib.kiev.ua> <55020547.7050102@freebsd.org> <20150312213530.GT2379@kib.kiev.ua> <5502094D.5090001@freebsd.org> <20150313084702.GV2379@kib.kiev.ua> <550318FD.1070906@freebsd.org> <20150313172345.GY2379@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5503224A.3010100>