[PATCH] libio: Properly link in libio functions in static binaries
Florian Weimer
fweimer@redhat.com
Mon Aug 25 09:12:56 GMT 2025
* H. J. Lu:
> On Thu, Aug 21, 2025 at 11:49 AM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> * H. J. Lu:
>>
>> > commit 3020f72618e4f1d7338cd42b8bc7b2813e961b5a
>> > Author: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
>> > Date: Tue Dec 27 18:11:43 2022 -0300
>> >
>> > libio: Remove the usage of __libc_IO_vtables
>> >
>> > added
>> >
>> > #define libio_static_fn_required(name) __asm (".globl " #name);
>> >
>> > to link in libio functions in static binaries. But there is no relocation
>> > in
>> > .globl _IO_file_open
>> >
>> > and "strip --strip-unneeded" will remove such unreferenced symbols which
>> > breaks static binaries. Redefine libio_static_fn_required to create a
>> > reference to the required function with
>> >
>> > .pushsection ".data.rel.ro.local","aw"
>> > .L_IO_file_open:
>> > .dc.a _IO_file_open
>> > .popsection
>> >
>> > This fixes BZ #33300.
>>
>> Is it possible to use SHF_RETAIN instead?
>
> SHF_GNU_RETAIN is used to keep an unused section for --gc-sections while
> this one is to include an object from libc.a. Even if the section with
> _IO_file_doallocate is marked with SHF_GNU_RETAIN, it won't be linked in
> without a reference to _IO_file_doallocate.
Hmm. The --strip-unneeded option says this:
--strip-unneeded
Remove all symbols that are not needed for relocation processing in
addition to debugging symbols and sections stripped by
--strip-debug.
I think it's a user error to use this on libc.a. What's the benefit of
using this option?
Thanks,
Florian
More information about the Libc-alpha
mailing list