aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-hwcaps.h
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2020-12-04 09:13:43 +0100
committerFlorian Weimer <fweimer@redhat.com>2020-12-04 09:35:43 +0100
commit600d9e0c87940da9b0fdeff492bf888df852d40c (patch)
tree747a7d39be81da06ecab9311e3f9e8a4a2726e3c /elf/dl-hwcaps.h
parentb44ac4f4c7a8bbe5eaa2701aa9452eaf2c96e1dd (diff)
downloadglibc-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.h19
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 */