mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-10 19:30:10 +00:00
Obey LD_HWCAP_MASK in ld.so.cache lookups.
This commit is contained in:
parent
4dd019e3a1
commit
7bfa311ff5
@ -1,5 +1,9 @@
|
|||||||
2010-04-05 Roland McGrath <roland@redhat.com>
|
2010-04-05 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
|
* elf/dl-cache.c (_dl_load_cache_lookup): Obey dl_hwcap_mask.
|
||||||
|
|
||||||
|
* elf/dl-support.c (_dl_hwcap_mask): New variable.
|
||||||
|
|
||||||
* elf/rtld.c (dl_main) [HAVE_AUX_VECTOR]: Add a cast.
|
* elf/rtld.c (dl_main) [HAVE_AUX_VECTOR]: Add a cast.
|
||||||
|
|
||||||
2010-04-05 Ulrich Drepper <drepper@redhat.com>
|
2010-04-05 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
|
/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
|
||||||
Copyright (C) 1996-2002, 2003, 2004, 2006 Free Software Foundation, Inc.
|
Copyright (C) 1996-2002,2003,2004,2006,2010
|
||||||
|
Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -255,17 +256,19 @@ _dl_load_cache_lookup (const char *name)
|
|||||||
if (platform != (uint64_t) -1)
|
if (platform != (uint64_t) -1)
|
||||||
platform = 1ULL << platform;
|
platform = 1ULL << platform;
|
||||||
|
|
||||||
/* Only accept hwcap if it's for the right platform. */
|
|
||||||
#define _DL_HWCAP_TLS_MASK (1LL << 63)
|
#define _DL_HWCAP_TLS_MASK (1LL << 63)
|
||||||
|
uint64_t hwcap_exclude = ~((GLRO(dl_hwcap) & GLRO(dl_hwcap_mask))
|
||||||
|
| _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK);
|
||||||
|
|
||||||
|
/* Only accept hwcap if it's for the right platform. */
|
||||||
#define HWCAP_CHECK \
|
#define HWCAP_CHECK \
|
||||||
|
if (lib->hwcap & hwcap_exclude) \
|
||||||
|
continue; \
|
||||||
if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \
|
if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \
|
||||||
continue; \
|
continue; \
|
||||||
if (_DL_PLATFORMS_COUNT \
|
if (_DL_PLATFORMS_COUNT \
|
||||||
&& (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \
|
&& (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \
|
||||||
&& (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \
|
&& (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \
|
||||||
continue; \
|
|
||||||
if (lib->hwcap \
|
|
||||||
& ~(GLRO(dl_hwcap) | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK)) \
|
|
||||||
continue
|
continue
|
||||||
SEARCH_CACHE (cache_new);
|
SEARCH_CACHE (cache_new);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Support for dynamic linking code in static libc.
|
/* Support for dynamic linking code in static libc.
|
||||||
Copyright (C) 1996-2008, 2009 Free Software Foundation, Inc.
|
Copyright (C) 1996-2008,2009,2010 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -126,6 +126,14 @@ ElfW(Phdr) *_dl_phdr;
|
|||||||
size_t _dl_phnum;
|
size_t _dl_phnum;
|
||||||
uint64_t _dl_hwcap __attribute__ ((nocommon));
|
uint64_t _dl_hwcap __attribute__ ((nocommon));
|
||||||
|
|
||||||
|
/* This is not initialized to HWCAP_IMPORTANT, matching the definition
|
||||||
|
of _dl_important_hwcaps, below, where no hwcap strings are ever
|
||||||
|
used. This mask is still used to mediate the lookups in the cache
|
||||||
|
file. Since there is no way to set this nonzero (we don't grok the
|
||||||
|
LD_HWCAP_MASK environment variable here), there is no real point in
|
||||||
|
setting _dl_hwcap nonzero below, but we do anyway. */
|
||||||
|
uint64_t _dl_hwcap_mask __attribute__ ((nocommon));
|
||||||
|
|
||||||
/* Prevailing state of the stack, PF_X indicating it's executable. */
|
/* Prevailing state of the stack, PF_X indicating it's executable. */
|
||||||
ElfW(Word) _dl_stack_flags = PF_R|PF_W|PF_X;
|
ElfW(Word) _dl_stack_flags = PF_R|PF_W|PF_X;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user