diff options
author | Stefan Liebler <stli@linux.ibm.com> | 2024-06-07 13:42:37 +0200 |
---|---|---|
committer | Stefan Liebler <stli@linux.ibm.com> | 2024-06-18 10:45:36 +0200 |
commit | c5aa5fd40adc81c4f0b18e01f329aeaf86518c7b (patch) | |
tree | 55d543ca2eed3ce52d351b099e3e382000c50e01 | |
parent | f14b6dfc87bc237bb9a673f1b74d52d434f75b7c (diff) | |
download | glibc-c5aa5fd40adc81c4f0b18e01f329aeaf86518c7b.zip glibc-c5aa5fd40adc81c4f0b18e01f329aeaf86518c7b.tar.gz glibc-c5aa5fd40adc81c4f0b18e01f329aeaf86518c7b.tar.bz2 |
elf: Remove loading legacy hwcaps/platform entries in dynamic loader
The legacy hwcaps mechanism was removed with glibc 2.37:
See this commit series:
- d178c67535f0d159df73843e7c18cbdb39b4d25d
x86_64: Remove platform directory library loading test
- 6099908fb84debee4c3bcb05d88769410c2aecd1
elf: Remove legacy hwcaps support from the dynamic loader
- b78ff5a25dc8ba9d8c6df10bb0a533254bdd193f
elf: Remove legacy hwcaps support from ldconfig
- 4a7094119ce05cadf927f52cc5d723e2195e65f9
elf: Remove hwcap parameter from add_to_cache signature
- cfbf883db36727a84ef7929af49ef68c195b5972
elf: Remove hwcap and bits_hwcap fields from struct cache_entry
- 78d9a1620b840deb0880686e4159eaf70708866a
Add NEWS entry for legacy hwcaps removal
- ab40f20364f4a417a63dd51fdd943742070bfe96
elf: Remove _dl_string_hwcap
- e76369ed6371734f77f468eab097ef4e5b5db1c5
elf: Simplify output of hwcap subdirectories in ld.so help
According to Florian Weimer, this was an oversight and should also
have been removed.
As ldconfig does not generate ld.so.cache entries with hwcap/platform
bits in the hwcap-field anymore, this patch now skips those entries.
Thus currently only named-hwcap-entries and the default entries are
allowed.
For named-hwcap entries bit 62 is set and also the isa-level bits can
be set.
For the default entries the hwcap-field is 0.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-rw-r--r-- | elf/dl-cache.c | 22 |
1 files changed, 3 insertions, 19 deletions
diff --git a/elf/dl-cache.c b/elf/dl-cache.c index 85f3f17..7c7dc58 100644 --- a/elf/dl-cache.c +++ b/elf/dl-cache.c @@ -27,10 +27,6 @@ #include <dl-hwcaps.h> #include <dl-isa-level.h> -#ifndef _DL_PLATFORMS_COUNT -# define _DL_PLATFORMS_COUNT 0 -#endif - /* This is the starting address and the size of the mmap()ed file. */ static struct cache_file *cache; static struct cache_file_new *cache_new; @@ -201,15 +197,6 @@ search_cache (const char *string_table, uint32_t string_table_size, struct file_entry *libs, uint32_t nlibs, uint32_t entry_size, const char *name) { - /* Used by the HWCAP check in the struct file_entry_new case. */ - uint64_t platform = _dl_string_platform (GLRO (dl_platform)); - if (platform != (uint64_t) -1) - platform = 1ULL << platform; - uint64_t hwcap_mask = TUNABLE_GET (glibc, cpu, hwcap_mask, uint64_t, NULL); -#define _DL_HWCAP_TLS_MASK (1LL << 63) - uint64_t hwcap_exclude = ~((GLRO (dl_hwcap) & hwcap_mask) - | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK); - int left = 0; int right = nlibs - 1; const char *best = NULL; @@ -295,12 +282,9 @@ search_cache (const char *string_table, uint32_t string_table_size, if (!named_hwcap && best != NULL) break; - if ((libnew->hwcap & hwcap_exclude) && !named_hwcap) - continue; - if (_DL_PLATFORMS_COUNT - && (libnew->hwcap & _DL_HWCAP_PLATFORM) != 0 - && ((libnew->hwcap & _DL_HWCAP_PLATFORM) - != platform)) + /* Skip entries with the legacy hwcap/platform mechanism + which was removed with glibc 2.37. */ + if (!named_hwcap && libnew->hwcap != 0) continue; #ifdef SHARED |