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>