Fix vDSO synthetic hwcap handling so they are not masked out from ld.so.cache matching.
authorRoland McGrath <roland@redhat.com>
Wed, 21 Jul 2010 02:09:50 +0000 (19:09 -0700)
committerRoland McGrath <roland@redhat.com>
Wed, 21 Jul 2010 02:09:50 +0000 (19:09 -0700)
ChangeLog
elf/dl-sysdep.c

index 3d0f979690fda8fd3c10a5f6a4e5d17d7584a904..de7f38f8aacd8cd9784bfc4736c045cac167f125 100644 (file)
--- 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
index 160503dac5d9433da76c9ea9de12cae4d791bc4e..e6c8660cfc75e6271137e74b560004fa6f24315d 100644 (file)
@@ -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)
        {