Re: Add private syscalls to support NPTL

Brad Boyer
2009-08-18T23:40:28Z

On Tue, Aug 18, 2009 at 11:07:26AM +0400, Maxim Kuvyrkov wrote:
> Brad Boyer wrote:
> >On Tue, Aug 18, 2009 at 01:48:39AM +0400, Maxim Kuvyrkov wrote:
> >>+/* This syscall gets its arguments in A0 (mem), A1 (oldval) and
> >>+ D1 (newval). */
> >>+asmlinkage int
> >>+m68k_sys_atomic_cmpxchg_32(unsigned long newval, int d2, int d3, int d4,
> >>int d5,
> >>+ unsigned long __user *mem, unsigned long oldval)
> >>+{
> >
> >Any particular reason for this calling convention? The real CAS instruction
> >specifically takes two data registers for the two values. It seems more
> >logical to me to have oldval and newval in data registers and just have
> >the mem argument in an address register.
>
> The reason for this calling convention is to minimize difference in
> invokation of the vDSO helper and the syscall. The helper gets its
> arguments in a0 (mem), d0 (oldval) and d1 (newval); in a stub, which is
> used when vDSO is not available, one then can do:
>
> movel %d0,%a1
> movel #NR,%d0
> trap #0

Then wouldn't it make sense to use %d2 instead of %a1?

Brad Boyer
flar@allandria.com