Ping ^ 2 On Tuesday 04 February 2014 10:02 AM, Vineet Gupta wrote: > Ping ! > > On Thursday 09 January 2014 03:05 PM, Vineet Gupta wrote: >> commit 00571b43df2e "libc: posix_fadvise: restore implementation for xtensa" >> enabled posix_fadvise() for all arches (it was just not generated >> before). >> >> However this also unearthed an issue introduced by ee84b8b400 >> "linux: posix_fadvise: use new SYSCALL_ALIGN_64BIT" which is to >> referencing LFS'ish code (off64_t) w/o proper checks which causes build >> to break for !LFS. >> >> Fix this by calling posix_fadvise64() only for LFS case and open-code >> it's equivalent for !LFS. >> >> Signed-off-by: Vineet Gupta <vgu...@synopsys.com> >> Cc: Mike Frysinger <vap...@gentoo.org> >> Cc: Baruch Siach <bar...@tkos.co.il> >> Cc: Khem Raj <raj.k...@gmail.com> >> Cc: markos Chandras <markos.chand...@gmail.com> >> Cc: Bernhard Reutner-Fischer <rep.dot....@gmail.com> >> --- >> libc/sysdeps/linux/common/posix_fadvise.c | 30 >> ++++++++++++++++++++++++------ >> 1 file changed, 24 insertions(+), 6 deletions(-) >> >> diff --git a/libc/sysdeps/linux/common/posix_fadvise.c >> b/libc/sysdeps/linux/common/posix_fadvise.c >> index 25c294178e5e..14bbeeea13bc 100644 >> --- a/libc/sysdeps/linux/common/posix_fadvise.c >> +++ b/libc/sysdeps/linux/common/posix_fadvise.c >> @@ -22,17 +22,34 @@ >> # include <endian.h> >> # include <bits/wordsize.h> >> >> -# ifdef __NR_fadvise64_64 >> -int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice); >> -# endif >> +# if defined(__NR_fadvise64_64) && defined(__UCLIBC_HAS_LFS__) >> +#include <_lfs_64.h> >> >> +int posix_fadvise64(int fd, off64_t offset, off64_t len, int advice); >> int posix_fadvise(int fd, off_t offset, off_t len, int advice) >> { >> -# ifdef __NR_fadvise64_64 >> return posix_fadvise64(fd, offset, len, advice); >> -# else >> +} >> +#else >> + >> +int posix_fadvise(int fd, off_t offset, off_t len, int advice) >> +{ >> int ret; >> INTERNAL_SYSCALL_DECL(err); >> + >> +# ifdef __NR_fadvise64_64 >> +# if __WORDSIZE == 64 >> + ret = INTERNAL_SYSCALL(fadvise64_64, err, 4, fd, offset, len, advice); >> +# else >> +# if defined(__UCLIBC_SYSCALL_ALIGN_64BIT__) || defined(__arm__) >> + ret = INTERNAL_SYSCALL(fadvise64_64, err, 6, fd, advice, >> + OFF_HI_LO (offset), OFF_HI_LO (len)); >> +# else >> + ret = INTERNAL_SYSCALL(fadvise64_64, err, 6, fd, >> + OFF_HI_LO (offset), OFF_HI_LO (len), advice); >> +# endif >> +# endif >> +# else /* __NR_fadvise64 */ >> # if __WORDSIZE == 64 >> ret = INTERNAL_SYSCALL(fadvise64, err, 4, fd, offset, len, advice); >> # else >> @@ -43,12 +60,13 @@ int posix_fadvise(int fd, off_t offset, off_t len, int >> advice) >> # endif >> OFF_HI_LO (offset), len, advice); >> # endif >> +# endif >> if (INTERNAL_SYSCALL_ERROR_P (ret, err)) >> return INTERNAL_SYSCALL_ERRNO (ret, err); >> return 0; >> -# endif >> } >> # if defined __UCLIBC_HAS_LFS__ && (!defined __NR_fadvise64_64 || >> __WORDSIZE == 64) >> strong_alias(posix_fadvise,posix_fadvise64) >> # endif >> #endif >> +#endif >>
_______________________________________________ uClibc mailing list uClibc@uclibc.org http://lists.busybox.net/mailman/listinfo/uclibc