On Fri, May 10, 2019 at 6:32 AM Yann Sionneau ysionneau@kalray.eu wrote:
If that can be of any help, this test seems to PASS on armv7 arch: https://uclibc-ng-ci.sionneau.net:8443/job/uclibc-ng-multiarch/arch=armv7/19...
However this bugs reproduces for mips32r6 : https://uclibc-ng-ci.sionneau.net:8443/job/uclibc-ng-multiarch/19/arch=mips3...
Also, I can confirm I am able to reproduce the issue with buildroot+uclibc-ng by building the qemu_xtensa_lx60_defconfig buildroot config
Thanks for the confirmation. I've spent some more time on this issue and I hope have got a better understanding of it. So: - uclibc-ng itself is not meant to be compiled differently with -D_FILE_OFFSET_BITS=64 and without it. It is meant to provide both LFS and non-LFS function versions, like ftruncate and ftruncate64. - the library user on the other hand gets different set of declarations depending on the presence of -D_FILE_OFFSET_BITS=64, that results in a call to different functions. - however this is not the case for preadv/pwritev: there's only one definition for each of these functions. When libc is built these functions assume 32-bit off_t, but when the user code is built, off_t size is selected by the _FILE_OFFSET_BITS resulting in declaration that does not match definition.
I guess the right way to fix it is using __off64_t in declarations and definitions of both preadv/pwritev. With this change the test passes on xtensa.