On Fri, May 10, 2019 at 6:32 AM Yann Sionneau <ysionneau(a)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/1…
However this bugs reproduces for mips32r6 :
https://uclibc-ng-ci.sionneau.net:8443/job/uclibc-ng-multiarch/19/arch=mips…
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.
--
Thanks.
-- Max