Date: Fri, 13 Mar 2015 10:06:05 -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: <550318FD.1070906@freebsd.org> In-Reply-To: <20150313084702.GV2379@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>
next in thread | previous in thread | raw e-mail | index | archive | help
On 03/13/15 01:47, Konstantin Belousov wrote: > On Thu, Mar 12, 2015 at 02:46:53PM -0700, Nathan Whitehorn wrote: >> On 03/12/15 14:35, Konstantin Belousov wrote: >>> On Thu, Mar 12, 2015 at 02:29:43PM -0700, Nathan Whitehorn wrote: >>>> On 03/12/15 14:22, Konstantin Belousov wrote: >>>>> On Thu, Mar 12, 2015 at 09:15:39PM +0000, Nathan Whitehorn wrote: >>>>>> Author: nwhitehorn >>>>>> Date: Thu Mar 12 21:15:38 2015 >>>>>> New Revision: 279937 >>>>>> URL: https://svnweb.freebsd.org/changeset/base/279937 >>>>>> >>>>>> Log: >>>>>> Provide VSX context in ucontext(3) API. >>>>>> >>>>>> Modified: >>>>>> head/sys/powerpc/include/ucontext.h >>>>>> head/sys/powerpc/powerpc/exec_machdep.c >>>>>> >>>>>> Modified: head/sys/powerpc/include/ucontext.h >>>>>> ============================================================================== >>>>>> --- head/sys/powerpc/include/ucontext.h Thu Mar 12 20:14:48 2015 (r279936) >>>>>> +++ head/sys/powerpc/include/ucontext.h Thu Mar 12 21:15:38 2015 (r279937) >>>>>> @@ -46,6 +46,7 @@ typedef struct __mcontext { >>>>>> uint32_t mc_av[2]; >>>>>> register_t mc_frame[42]; >>>>>> uint64_t mc_fpreg[33]; >>>>>> + uint64_t mc_vsxfpreg[32]; /* low-order half of VSR0-31 */ >>>>>> } mcontext_t __aligned(16); >>>>>> >>>>>> #if defined(_KERNEL) && defined(__powerpc64__) >>>>>> @@ -60,6 +61,7 @@ typedef struct __mcontext32 { >>>>>> uint32_t mc_av[2]; >>>>>> uint32_t mc_frame[42]; >>>>>> uint64_t mc_fpreg[33]; >>>>>> + uint64_t mc_vsxfpreg[32]; /* low-order half of VSR0-31 */ >>>>>> } mcontext32_t __aligned(16); >>>>>> #endif >>>>> It looks as if you broken the ABI compatibility by the change. Am I wrong ? >>>>> >>>> That is correct. It's a tier-2 platform and -CURRENT, so I'm not sure >>>> it's worth the compatibility shims. I'm happy to add them if you think >>>> otherwise. >>> You are main maintainer of PowerPC port, IMO, so it is your decision. >>> >>> Note that 'this is current' argument is not applicable, since the change >>> also breaks stable/* binaries. >>> >>> I do understand the argument of PowerPC being tier 2 architecture, but this >>> makes me sad. Anyway, it is yours. For x86, I have to introduce >>> getcontextx(3) mechanism. >>> >> This is a good point. I'll try to fix it. Is my understanding of how >> this works correct? >> >> 1. Provide a sysarch() for the extended FPU state. >> 2. Implement getcontextx() in the C library to fill extra properties if >> required. >> 3. Store state for signal trampoline in variable-sized stack area > 4. Implement __getcontextx_size() and __fillcontextx2() for use > in the deferred signal delivery while libthr is in critical section, > see lib/libthr/thread/thr_sig.c:check_deferred_signal(). > >> Implementation of (2) seems to rely on having spare members in ucontext, >> which PowerPC unfortunately does not have. Is there a way around that? > Indeed, this is very unfortunate. 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? -Nathan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?550318FD.1070906>