This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] powerpc: Fix dl-procinfo HWCAP



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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]