diff --git a/ChangeLog b/ChangeLog index f0b25e31cc..99b23b9ef3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2017-06-07 Siddhesh Poyarekar + * elf/dl-hwcaps.h [HAVE_TUNABLES]: Always read hwcap_mask. + * sysdeps/sparc/sparc32/dl-machine.h [HAVE_TUNABLES]: + Likewise. + * sysdeps/x86/cpu-features.c (init_cpu_features): Always set + up hwcap and hwcap_mask. + * sysdeps/unix/sysv/linux/aarch64/cpu-features.c (init_cpu_features): Use glibc.tune.hwcap_mask. * sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h: New file. diff --git a/elf/dl-hwcaps.h b/elf/dl-hwcaps.h index 9ce33173f1..2c4fa3db02 100644 --- a/elf/dl-hwcaps.h +++ b/elf/dl-hwcaps.h @@ -18,14 +18,13 @@ #include -#ifdef SHARED -# if HAVE_TUNABLES -# define GET_HWCAP_MASK() \ - TUNABLE_GET (glibc, tune, hwcap_mask, uint64_t, NULL) -# else -# define GET_HWCAP_MASK() GLRO(dl_hwcap_mask) -# endif +#if HAVE_TUNABLES +# define GET_HWCAP_MASK() TUNABLE_GET (glibc, tune, hwcap_mask, uint64_t, NULL) #else -/* HWCAP_MASK is ignored in static binaries. */ -# define GET_HWCAP_MASK() (0) +# ifdef SHARED +# define GET_HWCAP_MASK() GLRO(dl_hwcap_mask) +# else +/* HWCAP_MASK is ignored in static binaries when built without tunables. */ +# define GET_HWCAP_MASK() (0) +# endif #endif diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index f9ae13300d..95f673270e 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -37,7 +37,7 @@ elf_machine_matches_host (const Elf32_Ehdr *ehdr) return 1; else if (ehdr->e_machine == EM_SPARC32PLUS) { -#ifdef SHARED +#if HAVE_TUNABLES || defined SHARED uint64_t hwcap_mask = GET_HWCAP_MASK(); return GLRO(dl_hwcap) & hwcap_mask & HWCAP_SPARC_V9; #else diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c index 4fe58bfd51..4288001cdd 100644 --- a/sysdeps/x86/cpu-features.c +++ b/sysdeps/x86/cpu-features.c @@ -312,17 +312,16 @@ no_cpuid: cpu_features->model = model; cpu_features->kind = kind; -#if IS_IN (rtld) /* Reuse dl_platform, dl_hwcap and dl_hwcap_mask for x86. */ GLRO(dl_platform) = NULL; GLRO(dl_hwcap) = 0; -#if !HAVE_TUNABLES +#if !HAVE_TUNABLES && defined SHARED /* The glibc.tune.hwcap_mask tunable is initialized already, so no need to do this. */ GLRO(dl_hwcap_mask) = HWCAP_IMPORTANT; #endif -# ifdef __x86_64__ +#ifdef __x86_64__ if (cpu_features->kind == arch_kind_intel) { if (CPU_FEATURES_ARCH_P (cpu_features, AVX512F_Usable) @@ -352,7 +351,7 @@ no_cpuid: && CPU_FEATURES_CPU_P (cpu_features, POPCNT)) GLRO(dl_platform) = "haswell"; } -# else +#else if (CPU_FEATURES_CPU_P (cpu_features, SSE2)) GLRO(dl_hwcap) |= HWCAP_X86_SSE2; @@ -360,6 +359,5 @@ no_cpuid: GLRO(dl_platform) = "i686"; else if (CPU_FEATURES_ARCH_P (cpu_features, I586)) GLRO(dl_platform) = "i586"; -# endif #endif }