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.chestnykh(a)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(a)uclibc-ng.org
To unsubscribe send an email to devel-leave(a)uclibc-ng.org