From 62724d5f1e48077992e1655c2dc4b5c47c08090e Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 20 Jul 2010 19:09:50 -0700 Subject: Fix vDSO synthetic hwcap handling so they are not masked out from ld.so.cache matching. (cherry picked from commit 5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef) --- ChangeLog | 7 +++++++ elf/dl-sysdep.c | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3de08e9b8e..867aae4556 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-07-20 Roland McGrath + + * 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-05 Roland McGrath * manual/arith.texi (Rounding Functions): Fix rint description diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c index 5700272f10..0f4970a786 100644 --- a/elf/dl-sysdep.c +++ b/elf/dl-sysdep.c @@ -424,6 +424,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) { -- cgit 1.4.1