Hi Dmitry, thanks for the patch. But is it really sh4 specific or will it happen on all 32Bit architectures with time64 enabled and Linux 4.x?
Thanks for clarifying. best regards Waldemar Dmitry Chestnykh wrote, > - Fallback to __NR_stat syscall in ld.so if we use 4.x kernel headers. > 4.x kernel doesn't support 64-bit time so we can use old syscall > - Add fallback fstat64 implementation. With 4.x kernel headers > we don't reach previous ifdef-elif blocks. > > Signed-off-by: Dmitry Chestnykh <dm.chestn...@gmail.com> > --- > ldso/include/dl-syscall.h | 4 +++- > libc/sysdeps/linux/common/fstat64.c | 8 ++++++++ > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h > index 4f41034ad..9ec0eac60 100644 > --- a/ldso/include/dl-syscall.h > +++ b/ldso/include/dl-syscall.h > @@ -17,6 +17,8 @@ extern int _dl_errno; > #define __set_errno(X) {(_dl_errno) = (X);} > #endif > > +#include <linux/version.h> > + > /* Pull in the arch specific syscall implementation */ > #include <dl-syscalls.h> > /* For MAP_ANONYMOUS -- differs between platforms */ > @@ -139,7 +141,7 @@ static __always_inline int _dl_stat(const char *file_name, > { > return _dl_newfstatat(AT_FDCWD, file_name, buf, 0); > } > -#elif defined __NR_stat && (!defined(__UCLIBC_USE_TIME64__) || > defined(__sparc__)) > +#elif defined __NR_stat && (!defined(__UCLIBC_USE_TIME64__) || > defined(__sparc__)) || (LINUX_VERSION_CODE <= KERNEL_VERSION(5,1,0)) > # define __NR__dl_stat __NR_stat > static __always_inline _syscall2(int, _dl_stat, const char *, file_name, > struct stat *, buf) > diff --git a/libc/sysdeps/linux/common/fstat64.c > b/libc/sysdeps/linux/common/fstat64.c > index 359c22af6..60948bdfc 100644 > --- a/libc/sysdeps/linux/common/fstat64.c > +++ b/libc/sysdeps/linux/common/fstat64.c > @@ -50,4 +50,12 @@ int fstat64(int fd, struct stat64 *buf) > return rc; > } > libc_hidden_def(fstat64) > +#else > +# include <sys/stat.h> > +# define __NR___syscall_fstat64 __NR_fstat64 > +static __always_inline _syscall2(int, __syscall_fstat64, > + int, filedes, struct kernel_stat64 *, buf) > +int fstat64(int fd, struct stat64 *buf) { > + return __syscall_fstat64(fd, buf); > +} > #endif > -- > 2.45.2 > > _______________________________________________ > devel mailing list -- devel@uclibc-ng.org > To unsubscribe send an email to devel-le...@uclibc-ng.org > _______________________________________________ devel mailing list -- devel@uclibc-ng.org To unsubscribe send an email to devel-le...@uclibc-ng.org