V5 [PATCH 2/2] ldconfig/x86: Add ISA level check to glibc-hwcaps

H.J. Lu hjl.tools@gmail.com
Tue Dec 8 14:10:38 GMT 2020


On Tue, Dec 8, 2020 at 5:32 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * H. J. Lu:
>
> > On Mon, Dec 7, 2020 at 2:00 AM Florian Weimer <fweimer@redhat.com> wrote:
> >>
> >> * H. J. Lu via Libc-alpha:
> >>
> >> > Add ISA level check to detect misplaced shared objects with incompatible
> >> > ISA level requirement in glibc-hwcaps subdirectories:
> >> >
> >> > /sbin/ldconfig: /usr/lib64/glibc-hwcaps/x86-64-v2/libx86-64-isa-level.so: skipped, ISA level mismatch (x86-64-v4 > x86-64-v2)
> >>
> >> I think this is conceptually the wrong approach.  ldconfig should copy
> >> the notes into the cache (and aux cache), and ld.so should skip cache
> >> contents that doesn't match the run-time requirements during load.  Then
> >> directory place does not matter that much anymore.
> >
> > Do we have space in cache for it?
>
> We have an extension mechanism.  The relevant struct looks like this:
>
> struct file_entry_new
> {
>   int32_t flags;                /* This is 1 for an ELF library.  */
>   uint32_t key, value;  /* String table indices.  */
>   uint32_t osversion;           /* Required OS version.  */
>   uint64_t hwcap;               /* Hwcap entry.  */
> };
>
> We can set a previously-unused bit hwcap to hide entries from current
> ld.so.  This way, we can repurpose other hwcap bits, osversion, even
> flags.  We could put an index there into a array of (property) notes,
> and use deduplication to share identical notes from different shared
> objects.
>
> In essence, this is how the glibc-hwcaps subdirectory mechanism achieves
> backwards-compatibility.
>

For each file entry for a shared object, the hwcap field has been used by
DL_CACHE_HWCAP_EXTENSION for glibc-hwcaps.  Are you suggesting
to add another file entry for the same shared object to store ISA level
requirement?

-- 
H.J.


More information about the Libc-alpha mailing list