Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Mar 2015 14:46:53 -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:  <5502094D.5090001@freebsd.org>
In-Reply-To: <20150312213530.GT2379@kib.kiev.ua>
References:  <201503122115.t2CLFdmi026986@svn.freebsd.org> <20150312212234.GS2379@kib.kiev.ua> <55020547.7050102@freebsd.org> <20150312213530.GT2379@kib.kiev.ua>

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

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

Implementation of (2) seems to rely on having spare members in ucontext, 
which PowerPC unfortunately does not have. Is there a way around that?
-Nathan



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5502094D.5090001>