This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] nptl: Remove vfork IFUNC-based forwarder from libpthread [BZ #20188]
* Zack Weinberg:
> On Fri, Jun 28, 2019 at 4:15 PM Florian Weimer <fweimer@redhat.com> wrote:
>
>> The dynamic linker performs a version coverage check for all Verneed
>> records at load time. This allows detection of potentially missing
>> symbols even when lazy binding is used. If we drop the GLIBC_2.1.2
>> symbol when it was there before, old binaries will fail to load.
>>
>> Our Versions file processing logic drops empty version clauses from the
>> generated version script (but the preprocessor macros are still
>> generated).
>>
>> If BFD ld sees a version script which has empty versions, very strange
>> things happen. It generates a shared object with Verdef records with
>> VER_FLG_WEAK. Linking against such objects causing BFD ld to produce
>> objects with Vernaux records with VER_FLG_WEAK flag. This I recall from
>> investigating this bug:
>>
>> <https://sourceware.org/bugzilla/show_bug.cgi?id=24718>
>>
>> I didn't fully explore the consequences of that.
>
> All right, then I'm going to say that this patch is OK provided you
> explain in the commit message that dropping the GLIBC_2.1.2 symbol
> will make old binaries fail to load. That seems like the most
> important reason.
Oh. I honestly didn't realize that it wasn't obvious. Thanks for the
feedback. Our users get this error (“/path/to/program:
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by
/path/to/program)”) all the time when they try to run current binaries
on glibc 2.12 or glibc 2.17.
Florian