[uclibc-ng-devel] uclibc-ng built with wrong _FILE_OFFSET_BITS

Max Filippov jcmvbkbc at gmail.com
Fri May 10 16:08:10 CEST 2019


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


More information about the devel mailing list