On Sat, 2014-02-15 at 11:14 +0100, Bernhard Reutner-Fischer wrote: > On Fri, Feb 14, 2014 at 03:21:32PM +0100, Waldemar Brodkorb wrote: > > Hi Steve, > > Steve Ellcey wrote, > > > > > Uclibc is not building for MIPS N64 because pread is trying to use the > > > pread/pwrite system calls instead of pread64/pwrite64. This patch fixes > > > the problem and was tested with LFS enabled and disabled. > > > > I think you mean MIPS64 N32. > > > > > Signed-off-by: Steve Ellcey <sell...@mips.com> > > > --- > > > libc/sysdeps/linux/mips/pread_write.c | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > diff --git a/libc/sysdeps/linux/mips/pread_write.c > > > b/libc/sysdeps/linux/mips/pread_write.c > > > index 3dc97c9..1220fec 100644 > > > --- a/libc/sysdeps/linux/mips/pread_write.c > > > +++ b/libc/sysdeps/linux/mips/pread_write.c > > > @@ -13,14 +13,14 @@ > > > /* We should generalize this for 32bit userlands w/64bit regs. This > > > applies > > > * to the x86_64 x32 and the mips n32 ABIs. */ > > > #if _MIPS_SIM == _MIPS_SIM_NABI32 > > > -# define __NR___syscall_pread __NR_pread > > > +# define __NR___syscall_pread __NR_pread64 > > > static _syscall4(ssize_t, __syscall_pread, int, fd, void *, buf, size_t, > > > count, off_t, offset) > > > # define MY_PREAD(fd, buf, count, offset) \ > > > __syscall_pread(fd, buf, count, offset) > > > # define MY_PREAD64(fd, buf, count, offset) \ > > > __syscall_pread(fd, buf, count, offset) > > > > > > -# define __NR___syscall_pwrite __NR_pwrite > > > +# define __NR___syscall_pwrite __NR_pwrite64 > > > static _syscall4(ssize_t, __syscall_pwrite, int, fd, const void *, buf, > > > size_t, count, off_t, offset) > > > # define MY_PWRITE(fd, buf, count, offset) \ > > > __syscall_pwrite(fd, buf, count, offset) > > > -- > > > > Works for me, too. > > Did you start any real machine or emulator with this? I get bus > > errors after executing any application. > > I suspect this needs a different register passing handling > (__LONG_LONG_PAIR) then.
Bernhard, I looked into __LONG_LONG_PAIR but that is used to pass a 64 bit value in two 32 bit registers. In this case (MIPS N32 mode) we are passing a 32 bit value (offset) in a 64 bit register and the system interface already takes care of any extension from 32 bits to 64 bits that is needed. I did some more testing of pread and pwrite and it seems to be working fine. Waldemar's comment about bus errors was not about this pread/pwrite patch but issues with booting an N32 MIPS linux kernel. Can this patch go ahead and be checked in to uclibc? Steve Ellcey sell...@mips.com _______________________________________________ uClibc mailing list uClibc@uclibc.org http://lists.busybox.net/mailman/listinfo/uclibc