aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2010-07-20 19:09:50 -0700
committerRoland McGrath <roland@redhat.com>2010-07-20 19:09:50 -0700
commit5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef (patch)
tree49d98447f2c543fc3e14dd5eac17df4d18df4361
parentd02dc4ba087255c30a899ab21bd8503efb52ddcf (diff)
downloadglibc-5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef.zip
glibc-5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef.tar.gz
glibc-5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef.tar.bz2
Fix vDSO synthetic hwcap handling so they are not masked out from ld.so.cache matching.
-rw-r--r--ChangeLog7
-rw-r--r--elf/dl-sysdep.c5
2 files changed, 12 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 3d0f979..de7f38f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-07-20 Roland McGrath <roland@redhat.com>
+
+ * elf/dl-sysdep.c (_dl_important_hwcaps): Add dsocaps mask to
+ dl_hwcap_mask as well as dl_hwcap. Without this, dsocaps matching in
+ ld.so.cache was broken. With it, there is no way to disable dsocaps
+ like LD_HWCAP_MASK can disable hwcaps.
+
2010-07-16 Ulrich Drepper <drepper@redhat.com>
* sysdeps/x86_64/multiarch/strstr.c: Rewrite to avoid indirect function
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
index 160503d..e6c8660 100644
--- a/elf/dl-sysdep.c
+++ b/elf/dl-sysdep.c
@@ -425,6 +425,11 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
{
const ElfW(Word) mask = ((const ElfW(Word) *) dsocaps)[-1];
GLRO(dl_hwcap) |= (uint64_t) mask << _DL_FIRST_EXTRA;
+ /* Note that we add the dsocaps to the set already chosen by the
+ LD_HWCAP_MASK environment variable (or default HWCAP_IMPORTANT).
+ So there is no way to request ignoring an OS-supplied dsocap
+ string and bit like you can ignore an OS-supplied HWCAP bit. */
+ GLRO(dl_hwcap_mask) |= (uint64_t) mask << _DL_FIRST_EXTRA;
size_t len;
for (const char *p = dsocaps; p < dsocaps + dsocapslen; p += len + 1)
{