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/sysc…
[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=4bea9e9a77…
[4]
https://sourceware.org/git/?p=glibc.git;a=commit;h=a4ed0471d71739928a0d0fa3…
[5]
https://sourceware.org/git/?p=glibc.git;a=commit;h=47f24c21ee38701ae275aa9e…
_______________________________________________
devel mailing list -- devel(a)uclibc-ng.org
To unsubscribe send an email to devel-leave(a)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