Hi all,
LTP test fstatat01.c [1] FTBFS on Buildroot bootlin-sh4-uclibc toolchain (uclibc: 1.0.50, kernel headers: 4.19.255). It looks to me that other bootlin uclibc based toolchains are working, therefore it's probably sh4 problem.
Looking into include/sys/stat.h in uclibc-ng [2], extern int fstatat (int __fd, ...) definition is guarded only by: # ifdef __REDIRECT_NTH. But in glibc io/sys/stat.h [3] guardes it with # ifdef __USE_TIME64_REDIRECTS added glibc 2.40 a4ed0471d7 ("Always define __USE_TIME_BITS64 when 64 bit time_t is used") which replaced previous __USE_TIME_BITS64 added in in glibc 2.34 47f24c21ee [4] ("y2038: Add support for 64-bit time on legacy ABIs") [5]. Should similar change be added to uclibc-ng?
Kind regards, Petr
$ cd ~/br-test-pkg/bootlin-sh4-uclibc/build/ltp-testsuite-728759506cbe08612183275b3543007d1c47f7f4/testcases/kernel/syscalls/fstatat $ make V=1 fstatat01 br-test-pkg/bootlin-sh4-uclibc/host/bin/sh4-linux-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -I../../../../include -I../../../../include -I../../../../include/old/ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g0 -Ibr-test-pkg/bootlin-sh4-uclibc/host/bin/../sh4-buildroot-linux-uclibc/sysroot/usr/include/tirpc -g -O2 -fno-strict-aliasing -pipe -Wall -W -Wold-style-definition -std=gnu99 -L../../../../lib fstatat01.c -Lbr-test-pkg/bootlin-sh4-uclibc/host/bin/../sh4-buildroot-linux-uclibc/sysroot/usr/lib -ltirpc -lfts -lltp -o fstatat01 fstatat01.c:63:5: error: conflicting types for ‘fstatat’; have ‘int(int, const char *, struct stat64 *, int)’ 63 | int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int flags) | ^~~~~~~ In file included from br-test-pkg/bootlin-sh4-uclibc/host/sh4-buildroot-linux-uclibc/sysroot/usr/include/features.h:409, from br-test-pkg/bootlin-sh4-uclibc/host/sh4-buildroot-linux-uclibc/sysroot/usr/include/sys/types.h:26, from fstatat01.c:27: br-test-pkg/bootlin-sh4-uclibc/host/sh4-buildroot-linux-uclibc/sysroot/usr/include/sys/stat.h:243:12: note: previous declaration of ‘fstatat’ with type ‘int(int, const char * restrict, struct stat * restrict, int)’ 243 | extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file, | ^~~~~~~~~~~~~~
[1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/sysca... [2] https://cgit.openadk.org/cgi/cgit/uclibc-ng.git/tree/include/sys/stat.h#n247 [3] https://sourceware.org/git/?p=glibc.git;a=blob;f=io/sys/stat.h;h=4bea9e9a778... [4] https://sourceware.org/git/?p=glibc.git;a=commit;h=a4ed0471d71739928a0d0fa32... [5] https://sourceware.org/git/?p=glibc.git;a=commit;h=47f24c21ee38701ae275aa9e4...
On Wed, Jan 29, 2025 at 11:46:31PM +0100, Petr Vorel wrote:
Hi all,
LTP test fstatat01.c [1] FTBFS on Buildroot bootlin-sh4-uclibc toolchain (uclibc: 1.0.50, kernel headers: 4.19.255). It looks to me that other bootlin uclibc based toolchains are working, therefore it's probably sh4 problem.
Looking into include/sys/stat.h in uclibc-ng [2], extern int fstatat (int __fd, ...) definition is guarded only by: # ifdef __REDIRECT_NTH. But in glibc io/sys/stat.h [3] guardes it with # ifdef __USE_TIME64_REDIRECTS added glibc 2.40 a4ed0471d7 ("Always define __USE_TIME_BITS64 when 64 bit time_t is used") which replaced previous __USE_TIME_BITS64 added in in glibc 2.34 47f24c21ee [4] ("y2038: Add support for 64-bit time on legacy ABIs") [5]. Should similar change be added to uclibc-ng?
Kind regards, Petr
$ cd ~/br-test-pkg/bootlin-sh4-uclibc/build/ltp-testsuite-728759506cbe08612183275b3543007d1c47f7f4/testcases/kernel/syscalls/fstatat $ make V=1 fstatat01 br-test-pkg/bootlin-sh4-uclibc/host/bin/sh4-linux-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -I../../../../include -I../../../../include -I../../../../include/old/ -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g0 -Ibr-test-pkg/bootlin-sh4-uclibc/host/bin/../sh4-buildroot-linux-uclibc/sysroot/usr/include/tirpc -g -O2 -fno-strict-aliasing -pipe -Wall -W -Wold-style-definition -std=gnu99 -L../../../../lib fstatat01.c -Lbr-test-pkg/bootlin-sh4-uclibc/host/bin/../sh4-buildroot-linux-uclibc/sysroot/usr/lib -ltirpc -lfts -lltp -o fstatat01 fstatat01.c:63:5: error: conflicting types for ‘fstatat’; have ‘int(int, const char *, struct stat64 *, int)’ 63 | int fstatat(int dirfd, const char *filename, struct stat64 *statbuf, int flags) | ^~~~~~~ In file included from br-test-pkg/bootlin-sh4-uclibc/host/sh4-buildroot-linux-uclibc/sysroot/usr/include/features.h:409, from br-test-pkg/bootlin-sh4-uclibc/host/sh4-buildroot-linux-uclibc/sysroot/usr/include/sys/types.h:26, from fstatat01.c:27: br-test-pkg/bootlin-sh4-uclibc/host/sh4-buildroot-linux-uclibc/sysroot/usr/include/sys/stat.h:243:12: note: previous declaration of ‘fstatat’ with type ‘int(int, const char * restrict, struct stat * restrict, int)’ 243 | extern int __REDIRECT_NTH (fstatat, (int __fd, const char *__restrict __file, | ^~~~~~~~~~~~~~
[1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/sysca... [2] https://cgit.openadk.org/cgi/cgit/uclibc-ng.git/tree/include/sys/stat.h#n247 [3] https://sourceware.org/git/?p=glibc.git;a=blob;f=io/sys/stat.h;h=4bea9e9a778... [4] https://sourceware.org/git/?p=glibc.git;a=commit;h=a4ed0471d71739928a0d0fa32... [5] https://sourceware.org/git/?p=glibc.git;a=commit;h=47f24c21ee38701ae275aa9e4... _______________________________________________ devel mailing list -- devel@uclibc-ng.org To unsubscribe send an email to devel-leave@uclibc-ng.org
My guess is that this is somehow caused by the fact that time64 on 32-bit targets is not supported on Linux < 5.1.0.
Regards, Nadav