]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
powerpc: Fix dl-procinfo HWCAP
authorCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Mon, 28 Dec 2015 18:36:46 +0000 (16:36 -0200)
committerTulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Tue, 8 Mar 2016 18:30:06 +0000 (15:30 -0300)
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 accordingly.

ChangeLog
sysdeps/powerpc/dl-procinfo.c
sysdeps/powerpc/dl-procinfo.h

index 289d578c778ed6f8e1d2b28693061dff27a2d788..79a09044b7d7fcb4d03c72535df2113cd0da7d51 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2016-03-08  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 accordingly.
+
 2016-03-08  H.J. Lu  <hongjiu.lu@intel.com>
 
        [BZ #19783]
index 6e7850eebdea8650d3bf9b9eeb2fbfc7e2ac2c96..0b55906a65bd8b8d7a9306dfb76d04a2bea96435 100644 (file)
 #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",
index bce3a49ac08f71e959265a016cd8c127e151fdaa..2187c5e1907c4c79841e4f7d4873e66834769302 100644 (file)
@@ -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;