Re: 64-syscall args on 32-bit vs syscall()

From: Steven Munroe
Date: Thu Mar 18 2010 - 12:54:38 EST


On Thu, 2010-03-18 at 17:21 +0100, Andreas Schwab wrote:
> Steven Munroe <munroesj@xxxxxxxxxxxxxxxxxx> writes:
>
> > extern long int syscall (long int __sysno, ...) __THROW;
> >
> > #endif /* Use misc. */
> >
> > Changing this would be an ABI change and would have to be versioned. It
> > would effect any one using syscall not just SYS_fallocate.
> >
> > the question is do programmers in practice include unistd.h when they
> > use syscall.
> >
> > If the changed prototype is not in scope then the 1st parm (__sysno)
> > defaults to int and is passed in on r3 which gets moved to r0.
>
> int is incompatible with long, so you already get undefined behaviour
> anyway.
>
Sorry in and long are compatible in 32-bit but not long long.

int and long are not compatible in 64-bit

It is hard the keep all the nodes and arguments straight.

But the concern about changing the prototype and are people actually
using the prototype are still valid.

> Andreas.
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/