[PATCH] Fix MIPS N64 build.

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Sat Feb 15 10:14:37 UTC 2014


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 <sellcey at 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.


More information about the uClibc mailing list