diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-12-04 09:13:43 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-12-04 09:35:43 +0100 |
commit | 600d9e0c87940da9b0fdeff492bf888df852d40c (patch) | |
tree | 747a7d39be81da06ecab9311e3f9e8a4a2726e3c /elf/dl-hwcaps.h | |
parent | b44ac4f4c7a8bbe5eaa2701aa9452eaf2c96e1dd (diff) | |
download | glibc-600d9e0c87940da9b0fdeff492bf888df852d40c.tar glibc-600d9e0c87940da9b0fdeff492bf888df852d40c.tar.gz glibc-600d9e0c87940da9b0fdeff492bf888df852d40c.tar.bz2 glibc-600d9e0c87940da9b0fdeff492bf888df852d40c.zip |
elf: Add glibc-hwcaps subdirectory support to ld.so cache processing
This recognizes the DL_CACHE_HWCAP_EXTENSION flag in cache entries,
and picks the supported cache entry with the highest priority.
The elf/tst-glibc-hwcaps-prepend-cache test documents a non-desired
aspect of the current cache implementation: If the cache selects a DSO
that does not exist on disk, _dl_map_object falls back to open_path,
which may or may not find an alternative implementation. This is an
existing limitation that also applies to the legacy hwcaps processing
for ld.so.cache.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'elf/dl-hwcaps.h')
-rw-r--r-- | elf/dl-hwcaps.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/elf/dl-hwcaps.h b/elf/dl-hwcaps.h index ab39d8a46d..e6fcac6edc 100644 --- a/elf/dl-hwcaps.h +++ b/elf/dl-hwcaps.h @@ -132,4 +132,23 @@ _dl_hwcaps_subdirs_build_bitmask (int subdirs, int active) return mask ^ ((1U << inactive) - 1); } +/* Pre-computed glibc-hwcaps subdirectory priorities. Used in + dl-cache.c to quickly find the proprieties for the stored HWCAP + names. */ +struct dl_hwcaps_priority +{ + /* The name consists of name_length bytes at name (not necessarily + null-terminated). */ + const char *name; + uint32_t name_length; + + /* Priority of this name. A positive number. */ + uint32_t priority; +}; + +/* Pre-computed hwcaps priorities. Set up by + _dl_important_hwcaps. */ +extern struct dl_hwcaps_priority *_dl_hwcaps_priorities attribute_hidden; +extern uint32_t _dl_hwcaps_priorities_length attribute_hidden; + #endif /* _DL_HWCAPS_H */ |