Skip to content

Commit

Permalink
powerpc: Fix dl-procinfo HWCAP
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Carlos Eduardo Seo authored and Tulio Magno Quites Machado Filho committed Mar 8, 2016
1 parent 87da630 commit 911569d
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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]
Expand Down
5 changes: 3 additions & 2 deletions sysdeps/powerpc/dl-procinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
9 changes: 3 additions & 6 deletions sysdeps/powerpc/dl-procinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 *
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 911569d

Please sign in to comment.