Re: [PATCH] work around duff ABIs

Matthew Wilcox
2002-10-22T12:58:21Z

On Mon, Oct 21, 2002 at 10:43:10PM -0600, Erik Andersen wrote:
> I understand the problem very well. Passing 64 bit stuff via
> syscalls is a major pain in the butt. But your patch is not just
> changing hppa and mips -- you are breaking the ABI on x86, arm,
> powerpc, etc, etc. etc where it is currently working. Look very
> closely at your patch. See those endianness ifdefs? You are
> adding endianness specific ifdefs into pread, truncate, and
> ftruncate to switch the argument order. User space is already
> doing that too. At no time on any architecture is the low stuff
> passed into arg3. Ergo, your patch is going to break userspace
> where pread and pread64 are now working correctly....

Nope. Some architectures _do not_ pad 64-bit arguments, others _do_.
On ARM/x86, we currently do use arg3 for the low part of the argument,
but on PPC we use it for the high part because of this sexswapping
crap being done in userspace.

> If you want to change the kernel to passing eliminate 64 bit
> stuff via syscalls, and instead pass pairs of 32bit entities --
> I'm all for that as that would make explicit what user space is
> doing anyways. But don't break binary compatibility for no
> reason. Why make both user-space _and_ kernel space add ifdefs
> for endianness? Make arg3 _always_ contain the hi-bits.

I'd love to move to that model. But I suspect we need a consensus to
_never_ pass 64-bit quantities across the syscall boundary, and we
aren't going to get it. So we're going to add more crap every time
someone adds a loff_t ;-(

--
Revolutions do not require corporate support.