This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] powerpc: Fix dl-procinfo HWCAP
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Mon, 25 Jan 2016 16:04:46 -0200
- Subject: Re: [PATCH] powerpc: Fix dl-procinfo HWCAP
- Authentication-results: sourceware.org; auth=none
- References: <569D2D7B dot 30101 at linux dot vnet dot ibm dot com>
On 18-01-2016 16:22, Carlos Eduardo Seo wrote:
> Hi
>
> This is a bug fix. There are 4 unused bits in HWCAP and space must be reserved for them in _dl_powerpc_cap_flags so the code iterates through all the 32 capabilities, otherwise you may get a wrong AT_HWCAP displayed when LD_SHOW_AUXV=1.
>
> If possible, I'd like this in 2.23.
I think you should not it might be wrong for hwcap2, since the logic
is correct for hwcap1 (I assume this hitting the new fields for
POWER9).
LGTM.
>
> Regards,
>
> --
> Carlos Eduardo Seo
> Software Engineer - Linux on Power Toolchain
> cseo@linux.vnet.ibm.com
>
> 0001-powerpc-Fix-dl-procinfo-HWCAP.patch
>
>
> From c90f857f571e222ac60478e3ed26f978042947b8 Mon Sep 17 00:00:00 2001
> From: Carlos Eduardo Seo <cseo@linux.vnet.ibm.com>
> Date: Mon, 28 Dec 2015 16:36:46 -0200
> Subject: [PATCH] powerpc: Fix dl-procinfo HWCAP.
>
> HWCAP-related code should had been updated when the 32 bits of HWCAP were
> used. This patch updates the code in dl-procinfo.h to loop through all the 32
> bits in HWCAP and updates _dl_powerpc_cap_flags accordignly.
>
> 2016-01-18 Carlos Eduardo Seo <cseo@linux.vnet.ibm.com>
>
> * sysdeps/powerpc/dl-procinfo.c:
> (_dl_powerpc_cap_flags): Updated to reflect the entire 32-bit HWCAP.
> * sysdeps/powerpc/dl-procinfo.h: Code cleanup.
> (_DL_HWCAP_FIRST): Removed. Replaced by 0 accordignly.
> ---
> sysdeps/powerpc/dl-procinfo.c | 5 +++--
> sysdeps/powerpc/dl-procinfo.h | 9 +++------
> 2 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/sysdeps/powerpc/dl-procinfo.c b/sysdeps/powerpc/dl-procinfo.c
> index a8df5b8..5604366 100644
> --- a/sysdeps/powerpc/dl-procinfo.c
> +++ b/sysdeps/powerpc/dl-procinfo.c
> @@ -45,11 +45,12 @@
> #if !defined PROCINFO_DECL && defined SHARED
> ._dl_powerpc_cap_flags
> #else
> -PROCINFO_CLASS const char _dl_powerpc_cap_flags[60][10]
> +PROCINFO_CLASS const char _dl_powerpc_cap_flags[64][10]
> #endif
> #ifndef PROCINFO_DECL
> = {
> - "ppcle", "true_le", "archpmu", "vsx",
> + "ppcle", "true_le", "", "",
> + "", "", "archpmu", "vsx",
> "arch_2_06", "power6x", "dfp", "pa6t",
> "arch_2_05", "ic_snoop", "smt", "booke",
> "cellbe", "power5+", "power5", "power4",
> diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
> index 407149b..80e70e5 100644
> --- a/sysdeps/powerpc/dl-procinfo.h
> +++ b/sysdeps/powerpc/dl-procinfo.h
> @@ -22,9 +22,6 @@
> #include <ldsodefs.h>
> #include <sysdep.h> /* This defines the PPC_FEATURE[2]_* macros. */
>
> -/* There are 28 bits used, but they are bits 4..31. */
> -#define _DL_HWCAP_FIRST 4
> -
> /* The total number of available bits (including those prior to
> _DL_HWCAP_FIRST). Some of these bits might not be used. */
> #define _DL_HWCAP_COUNT 64
> @@ -68,7 +65,7 @@ static inline const char *
> __attribute__ ((unused))
> _dl_hwcap_string (int idx)
> {
> - return GLRO(dl_powerpc_cap_flags)[idx - _DL_HWCAP_FIRST];
> + return GLRO(dl_powerpc_cap_flags)[idx];
> }
>
> static inline const char *
> @@ -82,7 +79,7 @@ static inline int
> __attribute__ ((unused))
> _dl_string_hwcap (const char *str)
> {
> - for (int i = _DL_HWCAP_FIRST; i < _DL_HWCAP_COUNT; ++i)
> + for (int i = 0; i < _DL_HWCAP_COUNT; ++i)
> if (strcmp (str, _dl_hwcap_string (i)) == 0)
> return i;
> return -1;
> @@ -180,7 +177,7 @@ _dl_procinfo (unsigned int type, unsigned long int word)
> case AT_HWCAP:
> _dl_printf ("AT_HWCAP: ");
>
> - for (int i = _DL_HWCAP_FIRST; i <= _DL_HWCAP_LAST; ++i)
> + for (int i = 0; i <= _DL_HWCAP_LAST; ++i)
> if (word & (1 << i))
> _dl_printf (" %s", _dl_hwcap_string (i));
> break;
> -- 2.5.4 (Apple Git-61)