This is the mail archive of the glibc-cvs@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]

GNU C Library master sources branch rsa/power8 created. glibc-2.17-697-g7ec34a5


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, rsa/power8 has been created
        at  7ec34a51099d54a38517d6856e32282d2f1187ae (commit)

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7ec34a51099d54a38517d6856e32282d2f1187ae

commit 7ec34a51099d54a38517d6856e32282d2f1187ae
Author: Ryan S. Arnold <rsa@linux.vnet.ibm.com>
Date:   Thu May 16 12:12:16 2013 -0500

    PowerPC: Add support for POWER8.

diff --git a/ChangeLog b/ChangeLog
index aa526f8..b08cd20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,38 @@
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
+	* sysdeps/powerpc/bits/hwcap.h: Add new AT_HWCAP2 features.
+	[PPC_FEATURE2_ARCH_2_07]: New feature bit for Power ISA 2.07.
+	[PPC_FEATURE2_HAS_HTM]: New feature bit for Hardware Transactional
+	Memory.
+	[PPC_FEATURE2_HAS_DSCR]: New feature bit for Data Stream Control
+	Register.
+	[PPC_FEATURE2_HAS_EBB]: New feature bit for Event Based Branching
+	facility.
+	[PPC_FEATURE2_HAS_ISEL]: New feature bit for Integer Select.
+	[PPC_FEATURE2_HAS_TAR]: New feature bit for Target Address Register
+	facility.
+	* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platforms): Add power8 as
+	PPC_PLATFORM_POWER8.
+	(_dl_powerpc_cap_flags): Add arch_2_07, htm, dscr, ebb, isel, and tar
+	as hwcap strings for power8.
+	* sysdeps/powerpc/dl-procinfo.h (_dl_procinfo): Eliminate confusing
+	conditional variable definitions used to re-use a single loop
+	definition.  Replace with simpler redundant loops.  Account for
+	AT_HWCAP2 feature bits starting at bit 31 and decrementing.
+	[_DL_HWCAP_LAST]: New definition.
+	[_DL_HWCAP2_LAST]: New definition.
+	[_DL_HWCAP_COUNT]: Update to 64 to account for available bits, not
+	number of actual hwcap bits that are defined.
+	[_DL_PLATFORMS_COUNT]: Increment for power8.
+	[PPC_PLATFORM_POWER8]: New definition.
+	(_dl_string_platform): Add return value for power8 platform string.
+	* sysdeps/powerpc/powerpc32/power8/Implies: New file.
+	* sysdeps/powerpc/powerpc64/power8/Implies: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies: Likewise.
+
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
 	* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platforms): Add ppc405,
 	ppc440, ppc464, and ppc476, merging from ports/ dl-procinfo.c.
 	* sysdeps/powerpc/dl-procinfo.h: Fix whitespace by correcting spaces
diff --git a/sysdeps/powerpc/bits/hwcap.h b/sysdeps/powerpc/bits/hwcap.h
index 783138a..c1d1def 100644
--- a/sysdeps/powerpc/bits/hwcap.h
+++ b/sysdeps/powerpc/bits/hwcap.h
@@ -20,9 +20,9 @@
 # error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead."
 #endif
 
-/*
- * The following must match the kernels asm/cputable.h.
- */
+/* The bit numbers must match those in the kernel's asm/cputable.h.  */
+
+/* Feature definitions in AT_HWCAP.  */
 #define PPC_FEATURE_32		    0x80000000 /* 32-bit mode. */
 #define PPC_FEATURE_64		    0x40000000 /* 64-bit mode. */
 #define PPC_FEATURE_601_INSTR	    0x20000000 /* 601 chip, Old POWER ISA.  */
@@ -39,7 +39,7 @@
 #define PPC_FEATURE_POWER5	    0x00040000 /* POWER5 ISA 2.02 */
 #define PPC_FEATURE_POWER5_PLUS	    0x00020000 /* POWER5+ ISA 2.03 */
 #define PPC_FEATURE_CELL_BE	    0x00010000 /* CELL Broadband Engine */
-#define PPC_FEATURE_BOOKE	    0x00008000
+#define PPC_FEATURE_BOOKE	    0x00008000 /* ISA Category Embedded */
 #define PPC_FEATURE_SMT		    0x00004000 /* Simultaneous Multi-Threading */
 #define PPC_FEATURE_ICACHE_SNOOP    0x00002000
 #define PPC_FEATURE_ARCH_2_05	    0x00001000 /* ISA 2.05 */
@@ -51,3 +51,11 @@
 #define PPC_FEATURE_PSERIES_PERFMON_COMPAT  0x00000040
 #define PPC_FEATURE_TRUE_LE	    0x00000002
 #define PPC_FEATURE_PPC_LE	    0x00000001
+
+/* Feature definitions in AT_HWCAP2.  */
+#define PPC_FEATURE2_ARCH_2_07     0x80000000 /* ISA 2.07 */
+#define PPC_FEATURE2_HAS_HTM       0x40000000 /* Hardware Transactional Memory */
+#define PPC_FEATURE2_HAS_DSCR      0x20000000 /* Data Stream Control Register */
+#define PPC_FEATURE2_HAS_EBB       0x10000000 /* Event Base Branching */
+#define PPC_FEATURE2_HAS_ISEL      0x08000000 /* Integer Select */
+#define PPC_FEATURE2_HAS_TAR       0x04000000 /* Target Address Register */
diff --git a/sysdeps/powerpc/dl-procinfo.c b/sysdeps/powerpc/dl-procinfo.c
index 0f5c2b3..1c87fb0 100644
--- a/sysdeps/powerpc/dl-procinfo.c
+++ b/sysdeps/powerpc/dl-procinfo.c
@@ -45,7 +45,7 @@
 #if !defined PROCINFO_DECL && defined SHARED
   ._dl_powerpc_cap_flags
 #else
-PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
+PROCINFO_CLASS const char _dl_powerpc_cap_flags[57][10]
 #endif
 #ifndef PROCINFO_DECL
 = {
@@ -56,6 +56,14 @@ PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
     "notb", "efpdouble", "efpsingle", "spe",
     "ucache", "4xxmac", "mmu", "fpu",
     "altivec", "ppc601", "ppc64", "ppc32",
+    "", "", "", "",
+    "", "", "", "",
+    "", "", "", "",
+    "", "", "", "",
+    "", "", "", "",
+    "", "", "", "",
+    "", "", "tar", "isel",
+    "ebb", "dscr", "htm", "arch_2_07",
   }
 #endif
 #if !defined SHARED || defined PROCINFO_DECL
@@ -67,7 +75,7 @@ PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
 #if !defined PROCINFO_DECL && defined SHARED
   ._dl_powerpc_platforms
 #else
-PROCINFO_CLASS const char _dl_powerpc_platforms[13][12]
+PROCINFO_CLASS const char _dl_powerpc_platforms[14][12]
 #endif
 #ifndef PROCINFO_DECL
 = {
@@ -83,7 +91,8 @@ PROCINFO_CLASS const char _dl_powerpc_platforms[13][12]
     [PPC_PLATFORM_PPC405] = "ppc405",
     [PPC_PLATFORM_PPC440] = "ppc440",
     [PPC_PLATFORM_PPC464] = "ppc464",
-    [PPC_PLATFORM_PPC476] = "ppc476"
+    [PPC_PLATFORM_PPC476] = "ppc476",
+    [PPC_PLATFORM_POWER8] = "power8"
   }
 #endif
 #if !defined SHARED || defined PROCINFO_DECL
diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
index f24a0c6..d9cd126 100644
--- a/sysdeps/powerpc/dl-procinfo.h
+++ b/sysdeps/powerpc/dl-procinfo.h
@@ -20,18 +20,26 @@
 #define _DL_PROCINFO_H 1
 
 #include <ldsodefs.h>
-#include <sysdep.h>	/* This defines the PPC_FEATURE_* macros.  */
+#include <sysdep.h>	/* This defines the PPC_FEATURE[2]_* macros.  */
 
-/* There are 25 bits used in AT_HWCAP, but they are bits 7..31.  */
+/* There are 25 bits used in AT_HWCAP, but they are bits 7..31.  The feature
+ * definitions started at bit 31 and decremented as new features were added.
+ */
+#define _DL_HWCAP_LAST		31
 #define _DL_HWCAP_FIRST		7
-#define _DL_HWCAP2_FIRST	32
-#define _DL_HWCAP_COUNT		32
+
+/* AT_HWCAP2 feature bits similarily started at bit 31 and decremented as new
+ * features were added.  */
+#define _DL_HWCAP2_LAST		31
+
+/* The total number of available bits relative to (minus) _DL_HWCAP_FIRST.  */
+#define _DL_HWCAP_COUNT		64
 
 /* These bits influence library search.  */
 #define HWCAP_IMPORTANT		(PPC_FEATURE_HAS_ALTIVEC \
 				+ PPC_FEATURE_HAS_DFP)
 
-#define _DL_PLATFORMS_COUNT	13
+#define _DL_PLATFORMS_COUNT	14
 
 #define _DL_FIRST_PLATFORM	32
 /* Mask to filter out platforms.  */
@@ -52,6 +60,7 @@
 #define PPC_PLATFORM_PPC440		10
 #define PPC_PLATFORM_PPC464		11
 #define PPC_PLATFORM_PPC476		12
+#define PPC_PLATFORM_POWER8		13
 
 static inline const char *
 __attribute__ ((unused))
@@ -112,6 +121,9 @@ _dl_string_platform (const char *str)
 	case '7':
 	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER7;
 	  break;
+	case '8':
+	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER8;
+	  break;
 	default:
 	  return -1;
 	}
@@ -159,31 +171,31 @@ static inline int
 __attribute__ ((unused))
 _dl_procinfo (unsigned int type, int word)
 {
-  unsigned int first, count, str_offset;
-
   switch(type)
     {
     case AT_HWCAP:
       _dl_printf ("AT_HWCAP:       ");
-      first = _DL_HWCAP_FIRST;
-      count = MIN(_DL_HWCAP_COUNT,_DL_HWCAP2_FIRST);
-      str_offset = 0;
+
+      for (int i = _DL_HWCAP_FIRST; i <= _DL_HWCAP_LAST; ++i)
+	if (word & (1 << i))
+	  _dl_printf (" %s", _dl_hwcap_string (i));
       break;
     case AT_HWCAP2:
-      _dl_printf ("AT_HWCAP2:      ");
-      first = 0;
-      count = _DL_HWCAP_COUNT - _DL_HWCAP2_FIRST;
-      str_offset = _DL_HWCAP2_FIRST;
-      break;
+      {
+	unsigned int offset = _DL_HWCAP_LAST + 1;
+
+	_dl_printf ("AT_HWCAP2:      ");
+
+	for (int i = 0; i <= _DL_HWCAP2_LAST; ++i)
+	  if (word & (1 << i))
+	    _dl_printf (" %s", _dl_hwcap_string (offset + i));
+	break;
+      }
     default:
       /* This should not happen.  */
       return -1;
     }
 
-  for (int i = first; i < count; ++i)
-    if (word & (1 << i))
-      _dl_printf (" %s", _dl_hwcap_string (str_offset + i));
-
   _dl_printf ("\n");
 
   return 0;
diff --git a/sysdeps/powerpc/powerpc32/power8/Implies b/sysdeps/powerpc/powerpc32/power8/Implies
new file mode 100644
index 0000000..083f3e9
--- /dev/null
+++ b/sysdeps/powerpc/powerpc32/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc32/power7/fpu
+powerpc/powerpc32/power7
diff --git a/sysdeps/powerpc/powerpc64/power8/Implies b/sysdeps/powerpc/powerpc64/power8/Implies
new file mode 100644
index 0000000..9a5e3c7
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc64/power7/fpu
+powerpc/powerpc64/power7
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies
new file mode 100644
index 0000000..066dea2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc32/power8/fpu
+powerpc/powerpc32/power8
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies b/sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies
new file mode 100644
index 0000000..fad2505
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/power8/Implies
@@ -0,0 +1,2 @@
+powerpc/powerpc64/power8/fpu
+powerpc/powerpc64/power8

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b90832c35a08a29ecfbe3a35331771ac1a448c2b

commit b90832c35a08a29ecfbe3a35331771ac1a448c2b
Author: Ryan S. Arnold <rsa@linux.vnet.ibm.com>
Date:   Mon May 13 15:38:13 2013 -0500

    PowerPC: Remove redundant ports/sysdeps/powerpc/dl-procinfo.[hc].

diff --git a/ports/ChangeLog.powerpc b/ports/ChangeLog.powerpc
index 2857b27..d84feef 100644
--- a/ports/ChangeLog.powerpc
+++ b/ports/ChangeLog.powerpc
@@ -1,5 +1,13 @@
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
+	* sysdeps/powerpc/dl-procinfo.c: Remove as this is now redundant with
+	glibc/sysdeps/powerpc/dl-procinfo.c.
+	dl-procinfo.c.
+	* sysdeps/powerpc/dl-procinfo.h: Remove as this is now redundant with
+	glibc/sysdeps/powerpc/dl-procinfo.h
+
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
 	 * sysdeps/powerpc/dl-procinfo.h: Fix whitespace by correcting
 	 spaces with tabs where appropriate.
 
diff --git a/ports/sysdeps/powerpc/dl-procinfo.c b/ports/sysdeps/powerpc/dl-procinfo.c
deleted file mode 100644
index 0f5c2b3..0000000
--- a/ports/sysdeps/powerpc/dl-procinfo.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Data for processor capability information.  PowerPC version.
-   Copyright (C) 2005-2013 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* This information must be kept in sync with the _DL_HWCAP_COUNT and
-   _DL_PLATFORM_COUNT definitions in procinfo.h.
-
-   If anything should be added here check whether the size of each string
-   is still ok with the given array size.
-
-   All the #ifdefs in the definitions are quite irritating but
-   necessary if we want to avoid duplicating the information.  There
-   are three different modes:
-
-   - PROCINFO_DECL is defined.  This means we are only interested in
-     declarations.
-
-   - PROCINFO_DECL is not defined:
-
-     + if SHARED is defined the file is included in an array
-       initializer.  The .element = { ... } syntax is needed.
-
-     + if SHARED is not defined a normal array initialization is
-       needed.
-  */
-
-#ifndef PROCINFO_CLASS
-# define PROCINFO_CLASS
-#endif
-
-#if !defined PROCINFO_DECL && defined SHARED
-  ._dl_powerpc_cap_flags
-#else
-PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
-#endif
-#ifndef PROCINFO_DECL
-= {
-    "vsx",
-    "arch_2_06", "power6x", "dfp", "pa6t",
-    "arch_2_05", "ic_snoop", "smt", "booke",
-    "cellbe", "power5+", "power5", "power4",
-    "notb", "efpdouble", "efpsingle", "spe",
-    "ucache", "4xxmac", "mmu", "fpu",
-    "altivec", "ppc601", "ppc64", "ppc32",
-  }
-#endif
-#if !defined SHARED || defined PROCINFO_DECL
-;
-#else
-,
-#endif
-
-#if !defined PROCINFO_DECL && defined SHARED
-  ._dl_powerpc_platforms
-#else
-PROCINFO_CLASS const char _dl_powerpc_platforms[13][12]
-#endif
-#ifndef PROCINFO_DECL
-= {
-    [PPC_PLATFORM_POWER4] = "power4",
-    [PPC_PLATFORM_PPC970] = "ppc970",
-    [PPC_PLATFORM_POWER5] = "power5",
-    [PPC_PLATFORM_POWER5_PLUS] = "power5+",
-    [PPC_PLATFORM_POWER6] = "power6",
-    [PPC_PLATFORM_CELL_BE] = "ppc-cell-be",
-    [PPC_PLATFORM_POWER6X] = "power6x",
-    [PPC_PLATFORM_POWER7] = "power7",
-    [PPC_PLATFORM_PPCA2] = "ppca2",
-    [PPC_PLATFORM_PPC405] = "ppc405",
-    [PPC_PLATFORM_PPC440] = "ppc440",
-    [PPC_PLATFORM_PPC464] = "ppc464",
-    [PPC_PLATFORM_PPC476] = "ppc476"
-  }
-#endif
-#if !defined SHARED || defined PROCINFO_DECL
-;
-#else
-,
-#endif
-
-#undef PROCINFO_DECL
-#undef PROCINFO_CLASS
diff --git a/ports/sysdeps/powerpc/dl-procinfo.h b/ports/sysdeps/powerpc/dl-procinfo.h
deleted file mode 100644
index d499cf1..0000000
--- a/ports/sysdeps/powerpc/dl-procinfo.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Processor capability information handling macros.  PowerPC version.
-   Copyright (C) 2005-2013 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _DL_PROCINFO_H
-#define _DL_PROCINFO_H 1
-
-#include <stdint.h>
-#include <ldsodefs.h>
-#include <sysdep.h>	/* This defines the PPC_FEATURE_* macros.  */
-
-/* There are 25 bits used, but they are bits 7..31.  */
-#define _DL_HWCAP_FIRST		7
-#define _DL_HWCAP_COUNT		32
-
-/* These bits influence library search.  */
-#define HWCAP_IMPORTANT		(PPC_FEATURE_HAS_ALTIVEC \
-				+ PPC_FEATURE_HAS_DFP)
-
-#define _DL_PLATFORMS_COUNT	13
-
-#define _DL_FIRST_PLATFORM	32
-/* Mask to filter out platforms.  */
-#define _DL_HWCAP_PLATFORM	(((1ULL << _DL_PLATFORMS_COUNT) - 1) \
-				<< _DL_FIRST_PLATFORM)
-
-/* Platform bits (relative to _DL_FIRST_PLATFORM).  */
-#define PPC_PLATFORM_POWER4		0
-#define PPC_PLATFORM_PPC970		1
-#define PPC_PLATFORM_POWER5		2
-#define PPC_PLATFORM_POWER5_PLUS	3
-#define PPC_PLATFORM_POWER6		4
-#define PPC_PLATFORM_CELL_BE		5
-#define PPC_PLATFORM_POWER6X		6
-#define PPC_PLATFORM_POWER7		7
-#define PPC_PLATFORM_PPCA2		8
-#define PPC_PLATFORM_PPC405		9
-#define PPC_PLATFORM_PPC440		10
-#define PPC_PLATFORM_PPC464		11
-#define PPC_PLATFORM_PPC476		12
-
-static inline const char *
-__attribute__ ((unused))
-_dl_hwcap_string (int idx)
-{
-  return GLRO(dl_powerpc_cap_flags)[idx - _DL_HWCAP_FIRST];
-}
-
-static inline const char *
-__attribute__ ((unused))
-_dl_platform_string (int idx)
-{
-  return GLRO(dl_powerpc_platforms)[idx - _DL_FIRST_PLATFORM];
-}
-
-static inline int
-__attribute__ ((unused))
-_dl_string_hwcap (const char *str)
-{
-  for (int i = _DL_HWCAP_FIRST; i < _DL_HWCAP_COUNT; ++i)
-    if (strcmp (str, _dl_hwcap_string (i)) == 0)
-      return i;
-  return -1;
-}
-
-static inline int
-__attribute__ ((unused, always_inline))
-_dl_string_platform (const char *str)
-{
-  if (str == NULL)
-    return -1;
-
-  if (strncmp (str, GLRO(dl_powerpc_platforms)[PPC_PLATFORM_POWER4], 5) == 0)
-    {
-      int ret;
-      str += 5;
-      switch (*str)
-	{
-	case '4':
-	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER4;
-	  break;
-	case '5':
-	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5;
-	  if (str[1] == '+')
-	    {
-	      ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5_PLUS;
-	      ++str;
-	    }
-	  break;
-	case '6':
-	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6;
-	  if (str[1] == 'x')
-	    {
-	      ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6X;
-	      ++str;
-	    }
-	  break;
-	case '7':
-	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER7;
-	  break;
-	default:
-	  return -1;
-	}
-      if (str[1] == '\0')
-       return ret;
-    }
-  else if (strncmp (str, GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC970],
-		    3) == 0)
-    {
-      if (strcmp (str + 3, GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC970]
-			   + 3) == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC970;
-      else if (strcmp (str + 3,
-		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_CELL_BE] + 3)
-	       == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_CELL_BE;
-      else if (strcmp (str + 3,
-		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPCA2] + 3)
-	       == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPCA2;
-      else if (strcmp (str + 3,
-		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC405] + 3)
-	       == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC405;
-      else if (strcmp (str + 3,
-		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC440] + 3)
-	       == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC440;
-      else if (strcmp (str + 3,
-		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC464] + 3)
-	       == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC464;
-      else if (strcmp (str + 3,
-		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC476] + 3)
-	       == 0)
-	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC476;
-    }
-
-  return -1;
-}
-
-#ifdef IS_IN_rtld
-
-static inline int
-__attribute__ ((unused))
-_dl_procinfo (unsigned int type, int word)
-{
-  unsigned int first, count, str_offset;
-
-  switch(type)
-    {
-    case AT_HWCAP:
-      _dl_printf ("AT_HWCAP:       ");
-      first = _DL_HWCAP_FIRST;
-      count = MIN(_DL_HWCAP_COUNT,_DL_HWCAP2_FIRST);
-      str_offset = 0;
-      break;
-    case AT_HWCAP2:
-      _dl_printf ("AT_HWCAP2:      ");
-      first = 0;
-      count = _DL_HWCAP_COUNT - _DL_HWCAP2_FIRST;
-      str_offset = _DL_HWCAP2_FIRST;
-      break;
-    default:
-      /* This should not happen.  */
-      return -1;
-    }
-
-  for (int i = first; i < count; ++i)
-    if (word & (1 << i))
-      _dl_printf (" %s", _dl_hwcap_string (str_offset + i));
-
-  _dl_printf ("\n");
-
-  return 0;
-
-}
-#endif
-
-#endif /* dl-procinfo.h */

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=c796dcbe0df1184991f332f2eb955becff7e5770

commit c796dcbe0df1184991f332f2eb955becff7e5770
Author: Ryan S. Arnold <rsa@linux.vnet.ibm.com>
Date:   Mon May 13 15:31:55 2013 -0500

    PowerPC: Merge ports/ dl-procinfo.[hc] with base.

diff --git a/ChangeLog b/ChangeLog
index 56f8d11..aa526f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
+	* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platforms): Add ppc405,
+	ppc440, ppc464, and ppc476, merging from ports/ dl-procinfo.c.
+	* sysdeps/powerpc/dl-procinfo.h: Fix whitespace by correcting spaces
+	with tabs where appropriate.
+	[PPC_PLATFORM_PPC405]: Define new platform merging from ports/
+	dl-procinfo.h.
+	[PPC_PLATFORM_PPC440]: Likewise.
+	[PPC_PLATFORM_PPC464]: Likewise.
+	[PPC_PLATFORM_PPC476]: Likewise.
+	(_dl_string_platform): Add support for detecting ppc405, ppc440,
+	ppc464, and ppc476 platform strings merging from ports/
+	dl-procinfo.h.
+
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
 	* elf/dl-support.c (_dl_aux_init): Add support for AT_HWCAP2.
 	* elf/dl-sysdep.c (_dl_sysdep_start, _dl_show_auxv): Likewise.
 	* misc/getauxval.c (__getauxval): Likewise.
diff --git a/ports/ChangeLog.powerpc b/ports/ChangeLog.powerpc
index 345df7b..2857b27 100644
--- a/ports/ChangeLog.powerpc
+++ b/ports/ChangeLog.powerpc
@@ -1,5 +1,10 @@
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
+	 * sysdeps/powerpc/dl-procinfo.h: Fix whitespace by correcting
+	 spaces with tabs where appropriate.
+
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
 	* sysdeps/powerpc/dl-procinfo.h (_dl_procinfo): Add support for
 	displaying AT_HWCAP2 strings.
 
diff --git a/ports/sysdeps/powerpc/dl-procinfo.h b/ports/sysdeps/powerpc/dl-procinfo.h
index a9d98d3..d499cf1 100644
--- a/ports/sysdeps/powerpc/dl-procinfo.h
+++ b/ports/sysdeps/powerpc/dl-procinfo.h
@@ -21,37 +21,37 @@
 
 #include <stdint.h>
 #include <ldsodefs.h>
-#include <sysdep.h>            /* This defines the PPC_FEATURE_* macros.  */
+#include <sysdep.h>	/* This defines the PPC_FEATURE_* macros.  */
 
 /* There are 25 bits used, but they are bits 7..31.  */
-#define _DL_HWCAP_FIRST                7
-#define _DL_HWCAP_COUNT                32
+#define _DL_HWCAP_FIRST		7
+#define _DL_HWCAP_COUNT		32
 
 /* These bits influence library search.  */
-#define HWCAP_IMPORTANT                (PPC_FEATURE_HAS_ALTIVEC \
-                               + PPC_FEATURE_HAS_DFP)
+#define HWCAP_IMPORTANT		(PPC_FEATURE_HAS_ALTIVEC \
+				+ PPC_FEATURE_HAS_DFP)
 
-#define _DL_PLATFORMS_COUNT    13
+#define _DL_PLATFORMS_COUNT	13
 
-#define _DL_FIRST_PLATFORM     32
+#define _DL_FIRST_PLATFORM	32
 /* Mask to filter out platforms.  */
-#define _DL_HWCAP_PLATFORM      (((1ULL << _DL_PLATFORMS_COUNT) - 1) \
-                               << _DL_FIRST_PLATFORM)
+#define _DL_HWCAP_PLATFORM	(((1ULL << _DL_PLATFORMS_COUNT) - 1) \
+				<< _DL_FIRST_PLATFORM)
 
 /* Platform bits (relative to _DL_FIRST_PLATFORM).  */
-#define PPC_PLATFORM_POWER4          0
-#define PPC_PLATFORM_PPC970          1
-#define PPC_PLATFORM_POWER5          2
-#define PPC_PLATFORM_POWER5_PLUS      3
-#define PPC_PLATFORM_POWER6          4
-#define PPC_PLATFORM_CELL_BE         5
-#define PPC_PLATFORM_POWER6X         6
-#define PPC_PLATFORM_POWER7          7
-#define PPC_PLATFORM_PPCA2           8
-#define PPC_PLATFORM_PPC405          9
-#define PPC_PLATFORM_PPC440          10
-#define PPC_PLATFORM_PPC464          11
-#define PPC_PLATFORM_PPC476          12
+#define PPC_PLATFORM_POWER4		0
+#define PPC_PLATFORM_PPC970		1
+#define PPC_PLATFORM_POWER5		2
+#define PPC_PLATFORM_POWER5_PLUS	3
+#define PPC_PLATFORM_POWER6		4
+#define PPC_PLATFORM_CELL_BE		5
+#define PPC_PLATFORM_POWER6X		6
+#define PPC_PLATFORM_POWER7		7
+#define PPC_PLATFORM_PPCA2		8
+#define PPC_PLATFORM_PPC405		9
+#define PPC_PLATFORM_PPC440		10
+#define PPC_PLATFORM_PPC464		11
+#define PPC_PLATFORM_PPC476		12
 
 static inline const char *
 __attribute__ ((unused))
@@ -89,65 +89,65 @@ _dl_string_platform (const char *str)
       int ret;
       str += 5;
       switch (*str)
-       {
-       case '4':
-         ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER4;
-         break;
-       case '5':
-         ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5;
-         if (str[1] == '+')
-           {
-             ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5_PLUS;
-             ++str;
-           }
-         break;
-       case '6':
-         ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6;
-         if (str[1] == 'x')
-           {
-             ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6X;
-             ++str;
-           }
-         break;
-       case '7':
-         ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER7;
-         break;
-       default:
-         return -1;
-       }
+	{
+	case '4':
+	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER4;
+	  break;
+	case '5':
+	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5;
+	  if (str[1] == '+')
+	    {
+	      ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER5_PLUS;
+	      ++str;
+	    }
+	  break;
+	case '6':
+	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6;
+	  if (str[1] == 'x')
+	    {
+	      ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER6X;
+	      ++str;
+	    }
+	  break;
+	case '7':
+	  ret = _DL_FIRST_PLATFORM + PPC_PLATFORM_POWER7;
+	  break;
+	default:
+	  return -1;
+	}
       if (str[1] == '\0')
        return ret;
     }
   else if (strncmp (str, GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC970],
-                   3) == 0)
+		    3) == 0)
     {
       if (strcmp (str + 3, GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC970]
-                          + 3) == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC970;
+			   + 3) == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC970;
       else if (strcmp (str + 3,
-                      GLRO(dl_powerpc_platforms)[PPC_PLATFORM_CELL_BE] + 3)
-              == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_CELL_BE;
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_CELL_BE] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_CELL_BE;
       else if (strcmp (str + 3,
-                      GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPCA2] + 3)
-              == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPCA2;
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPCA2] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPCA2;
       else if (strcmp (str + 3,
-                      GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC405] + 3)
-              == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC405;
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC405] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC405;
       else if (strcmp (str + 3,
-                      GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC440] + 3)
-              == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC440;
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC440] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC440;
       else if (strcmp (str + 3,
-                      GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC464] + 3)
-              == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC464;
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC464] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC464;
       else if (strcmp (str + 3,
-                      GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC476] + 3)
-              == 0)
-       return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC476;
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC476] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC476;
     }
 
   return -1;
diff --git a/sysdeps/powerpc/dl-procinfo.c b/sysdeps/powerpc/dl-procinfo.c
index fb5051f..0f5c2b3 100644
--- a/sysdeps/powerpc/dl-procinfo.c
+++ b/sysdeps/powerpc/dl-procinfo.c
@@ -13,7 +13,7 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
+   License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 /* This information must be kept in sync with the _DL_HWCAP_COUNT and
@@ -49,7 +49,7 @@ PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
 #endif
 #ifndef PROCINFO_DECL
 = {
-    "vsx", 
+    "vsx",
     "arch_2_06", "power6x", "dfp", "pa6t",
     "arch_2_05", "ic_snoop", "smt", "booke",
     "cellbe", "power5+", "power5", "power4",
@@ -67,7 +67,7 @@ PROCINFO_CLASS const char _dl_powerpc_cap_flags[25][10]
 #if !defined PROCINFO_DECL && defined SHARED
   ._dl_powerpc_platforms
 #else
-PROCINFO_CLASS const char _dl_powerpc_platforms[9][12]
+PROCINFO_CLASS const char _dl_powerpc_platforms[13][12]
 #endif
 #ifndef PROCINFO_DECL
 = {
@@ -79,7 +79,11 @@ PROCINFO_CLASS const char _dl_powerpc_platforms[9][12]
     [PPC_PLATFORM_CELL_BE] = "ppc-cell-be",
     [PPC_PLATFORM_POWER6X] = "power6x",
     [PPC_PLATFORM_POWER7] = "power7",
-    [PPC_PLATFORM_PPCA2] = "ppca2"
+    [PPC_PLATFORM_PPCA2] = "ppca2",
+    [PPC_PLATFORM_PPC405] = "ppc405",
+    [PPC_PLATFORM_PPC440] = "ppc440",
+    [PPC_PLATFORM_PPC464] = "ppc464",
+    [PPC_PLATFORM_PPC476] = "ppc476"
   }
 #endif
 #if !defined SHARED || defined PROCINFO_DECL
diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
index ca20732..f24a0c6 100644
--- a/sysdeps/powerpc/dl-procinfo.h
+++ b/sysdeps/powerpc/dl-procinfo.h
@@ -13,14 +13,14 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
+   License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef _DL_PROCINFO_H
-#define _DL_PROCINFO_H	1
+#define _DL_PROCINFO_H 1
 
 #include <ldsodefs.h>
-#include <sysdep.h>		/* This defines the PPC_FEATURE_* macros.  */
+#include <sysdep.h>	/* This defines the PPC_FEATURE_* macros.  */
 
 /* There are 25 bits used in AT_HWCAP, but they are bits 7..31.  */
 #define _DL_HWCAP_FIRST		7
@@ -31,12 +31,12 @@
 #define HWCAP_IMPORTANT		(PPC_FEATURE_HAS_ALTIVEC \
 				+ PPC_FEATURE_HAS_DFP)
 
-#define _DL_PLATFORMS_COUNT	9
+#define _DL_PLATFORMS_COUNT	13
 
-#define _DL_FIRST_PLATFORM      32
+#define _DL_FIRST_PLATFORM	32
 /* Mask to filter out platforms.  */
-#define _DL_HWCAP_PLATFORM      (((1ULL << _DL_PLATFORMS_COUNT) - 1) \
-                                 << _DL_FIRST_PLATFORM)
+#define _DL_HWCAP_PLATFORM	(((1ULL << _DL_PLATFORMS_COUNT) - 1) \
+				<< _DL_FIRST_PLATFORM)
 
 /* Platform bits (relative to _DL_FIRST_PLATFORM).  */
 #define PPC_PLATFORM_POWER4		0
@@ -48,6 +48,10 @@
 #define PPC_PLATFORM_POWER6X		6
 #define PPC_PLATFORM_POWER7		7
 #define PPC_PLATFORM_PPCA2		8
+#define PPC_PLATFORM_PPC405		9
+#define PPC_PLATFORM_PPC440		10
+#define PPC_PLATFORM_PPC464		11
+#define PPC_PLATFORM_PPC476		12
 
 static inline const char *
 __attribute__ ((unused))
@@ -112,7 +116,7 @@ _dl_string_platform (const char *str)
 	  return -1;
 	}
       if (str[1] == '\0')
-	return ret;
+       return ret;
     }
   else if (strncmp (str, GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC970],
 		    3) == 0)
@@ -128,6 +132,22 @@ _dl_string_platform (const char *str)
 		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPCA2] + 3)
 	       == 0)
 	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPCA2;
+      else if (strcmp (str + 3,
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC405] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC405;
+      else if (strcmp (str + 3,
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC440] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC440;
+      else if (strcmp (str + 3,
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC464] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC464;
+      else if (strcmp (str + 3,
+		       GLRO(dl_powerpc_platforms)[PPC_PLATFORM_PPC476] + 3)
+	       == 0)
+	return _DL_FIRST_PLATFORM + PPC_PLATFORM_PPC476;
     }
 
   return -1;

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f58f65cd7d3318d3af0073c782844d1a6008b111

commit f58f65cd7d3318d3af0073c782844d1a6008b111
Author: Ryan S. Arnold <rsa@linux.vnet.ibm.com>
Date:   Fri May 3 14:14:40 2013 -0500

    Add support for AT_HWCAP2.

diff --git a/ChangeLog b/ChangeLog
index 1fe59a3..56f8d11 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
+	* elf/dl-support.c (_dl_aux_init): Add support for AT_HWCAP2.
+	* elf/dl-sysdep.c (_dl_sysdep_start, _dl_show_auxv): Likewise.
+	* misc/getauxval.c (__getauxval): Likewise.
+	* sysdeps/powerpc/dl-procinfo.h (_dl_procinfo): Add support for
+	displaying AT_HWCAP2 strings.
+	* elf/elf.h [AT_HWCAP2]: Add a new a_type entry.
+	* sysdeps/s390/dl-procinfo.h (_dl_procinfo): Add 'type' parameter for
+	AT_HWCAP2 support.
+	* sysdeps/i386/dl-procinfo.h: Likewise.
+	* sysdeps/generic/dl-procinfo.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/dl-procinfo.h: (_dl_procinfo): Add
+	nop support for AT_HWCAP2.
+	* sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Likewise.
+	* sysdeps/sparc/dl-procinfo.h: Likewise.
+
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
 	* crypt/sha512-block.c: Add missing #include <stdint.h> due to
 	uint64_t or uint32_t usage.
 	* crypt/sha256-block.c: Likewise.
diff --git a/elf/dl-support.c b/elf/dl-support.c
index b3ab956..ed80000 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -194,6 +194,10 @@ _dl_aux_init (ElfW(auxv_t) *av)
   uid_t uid = 0;
   gid_t gid = 0;
 
+  /* Don't rely on a specific order of AT_HWCAP and AT_HWCAP2.  Collate into a
+     zeroed temp and assign to _dl_hwcap after the auxv has been parsed.  */
+  uint64_t hwcap = 0;
+
   _dl_auxv = av;
   for (; av->a_type != AT_NULL; ++av)
     switch (av->a_type)
@@ -212,8 +216,12 @@ _dl_aux_init (ElfW(auxv_t) *av)
 	GL(dl_phnum) = av->a_un.a_val;
 	break;
       case AT_HWCAP:
-	GLRO(dl_hwcap) = (unsigned long int) av->a_un.a_val;
+	hwcap |= (unsigned long int) av->a_un.a_val;
+	break;
+      case AT_HWCAP2:
+	hwcap |= ((uint64_t) av->a_un.a_val) << 32;
 	break;
+
 #ifdef NEED_DL_SYSINFO
       case AT_SYSINFO:
 	GL(dl_sysinfo) = av->a_un.a_val;
@@ -252,6 +260,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
       DL_PLATFORM_AUXV
 # endif
       }
+
+  GLRO(dl_hwcap) = hwcap;
+
   if (seen == 0xf)
     {
       __libc_enable_secure = uid != 0 || gid != 0;
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
index 52de23f..6fdcb13 100644
--- a/elf/dl-sysdep.c
+++ b/elf/dl-sysdep.c
@@ -107,6 +107,10 @@ _dl_sysdep_start (void **start_argptr,
   uintptr_t new_sysinfo = 0;
 #endif
 
+  /* Don't rely on a specific order of AT_HWCAP and AT_HWCAP2.  Collate into a
+     zeroed temp and assign to _dl_hwcap after the auxv has been parsed.  */
+  uint64_t hwcap = 0;
+
   __libc_stack_end = DL_STACK_END (start_argptr);
   DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, INTUSE(_dl_argv), _environ,
 			  GLRO(dl_auxv));
@@ -154,7 +158,10 @@ _dl_sysdep_start (void **start_argptr,
 	GLRO(dl_platform) = (void *) av->a_un.a_val;
 	break;
       case AT_HWCAP:
-	GLRO(dl_hwcap) = (unsigned long int) av->a_un.a_val;
+	hwcap |= (unsigned long int) av->a_un.a_val;
+	break;
+      case AT_HWCAP2:
+	hwcap |= ((uint64_t) av->a_un.a_val) << 32;
 	break;
       case AT_CLKTCK:
 	GLRO(dl_clktck) = av->a_un.a_val;
@@ -180,6 +187,8 @@ _dl_sysdep_start (void **start_argptr,
 #endif
       }
 
+  GLRO(dl_hwcap) = hwcap;
+
 #ifndef HAVE_AUX_SECURE
   if (seen != -1)
     {
@@ -303,6 +312,7 @@ _dl_show_auxv (void)
 	  [AT_SYSINFO - 2] =		{ "SYSINFO:      0x", hex },
 	  [AT_SYSINFO_EHDR - 2] =	{ "SYSINFO_EHDR: 0x", hex },
 	  [AT_RANDOM - 2] =		{ "RANDOM:       0x", hex },
+	  [AT_HWCAP2 - 2] =		{ "HWCAP2:       ", hex },
 	};
       unsigned int idx = (unsigned int) (av->a_type - 2);
 
@@ -314,10 +324,12 @@ _dl_show_auxv (void)
       assert (AT_NULL == 0);
       assert (AT_IGNORE == 1);
 
-      if (av->a_type == AT_HWCAP)
+      if (av->a_type == AT_HWCAP || av->a_type == AT_HWCAP2)
 	{
-	  /* This is handled special.  */
-	  if (_dl_procinfo (av->a_un.a_val) == 0)
+	  /* HWCAP bits are translated into representative strings, per
+	     platform.  */
+	  if (_dl_procinfo (av->a_type, av->a_un.a_val) == 0)
+
 	    continue;
 	}
 
diff --git a/elf/elf.h b/elf/elf.h
index 4ad4f39..b473a0e 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -1015,6 +1015,9 @@ typedef struct
 
 #define AT_RANDOM	25		/* Address of 16 random bytes.  */
 
+#define AT_HWCAP2	26		/* Extended machine dependent hints
+					   about processor capabilities.  */
+
 #define AT_EXECFN	31		/* Filename of executable.  */
 
 /* Pointer to the global system page used for system calls and other
diff --git a/misc/getauxval.c b/misc/getauxval.c
index 4321e37..0d69922 100644
--- a/misc/getauxval.c
+++ b/misc/getauxval.c
@@ -26,6 +26,8 @@ __getauxval (unsigned long int type)
 
   if (type == AT_HWCAP)
     return GLRO(dl_hwcap);
+  else if (type == AT_HWCAP2)
+    return GLRO(dl_hwcap) >> 32;
 
   for (p = GLRO(dl_auxv); p->a_type != AT_NULL; p++)
     if (p->a_type == type)
diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha
index 9a77d27..70f9df0 100644
--- a/ports/ChangeLog.alpha
+++ b/ports/ChangeLog.alpha
@@ -1,3 +1,8 @@
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
+	* sysdeps/alpha/dl-procinfo.h (_dl_procinfo): Add 'type' parameter for
+	AT_HWCAP2 support.
+
 2013-03-06  Andreas Jaeger  <aj@suse.de>
 
 	* sysdeps/unix/sysv/linux/alpha/bits/mman.h (MAP_HUGE_MASK)
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index 81b2a56..c7437c9 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,5 +1,10 @@
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
+	* sysdeps/unix/sysv/linux/arm/dl-procinfo.h (_dl_procinfo): Add
+	nop support for AT_HWCAP2.
+
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
 	* sysdeps/unix/sysv/linux/arm/bits/atomic.h: Add missing #include
 	<stdint.h> due to uint64_t or uint32_t usage.
 
diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips
index 472ae21..158f823 100644
--- a/ports/ChangeLog.mips
+++ b/ports/ChangeLog.mips
@@ -1,3 +1,8 @@
+2013-05-03  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
+	* sysdeps/mips/dl-procinfo.h (_dl_procinfo): Add 'type' parameter for
+	AT_HWCAP2 support.
+
 2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
 
 	* sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h: Add missing
diff --git a/ports/ChangeLog.powerpc b/ports/ChangeLog.powerpc
index 2ba8e37..345df7b 100644
--- a/ports/ChangeLog.powerpc
+++ b/ports/ChangeLog.powerpc
@@ -1,3 +1,8 @@
+2013-05-16  Ryan S. Arnold  <rsa@linux.vnet.ibm.com>
+
+	* sysdeps/powerpc/dl-procinfo.h (_dl_procinfo): Add support for
+	displaying AT_HWCAP2 strings.
+
 2013-02-28  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #13550]
diff --git a/ports/sysdeps/alpha/dl-procinfo.h b/ports/sysdeps/alpha/dl-procinfo.h
index 523d966..0344dbc 100644
--- a/ports/sysdeps/alpha/dl-procinfo.h
+++ b/ports/sysdeps/alpha/dl-procinfo.h
@@ -51,7 +51,7 @@ _dl_string_platform (const char *str)
 };
 
 /* We cannot provide a general printing function.  */
-#define _dl_procinfo(word) -1
+#define _dl_procinfo(type, word) -1
 
 /* There are no hardware capabilities defined.  */
 #define _dl_hwcap_string(idx) ""
diff --git a/ports/sysdeps/mips/dl-procinfo.h b/ports/sysdeps/mips/dl-procinfo.h
index 5cc9a44..e96550c 100644
--- a/ports/sysdeps/mips/dl-procinfo.h
+++ b/ports/sysdeps/mips/dl-procinfo.h
@@ -51,7 +51,7 @@ _dl_string_platform (const char *str)
 };
 
 /* We cannot provide a general printing function.  */
-#define _dl_procinfo(word) -1
+#define _dl_procinfo(type, word) -1
 
 /* There are no hardware capabilities defined.  */
 #define _dl_hwcap_string(idx) ""
diff --git a/ports/sysdeps/powerpc/dl-procinfo.h b/ports/sysdeps/powerpc/dl-procinfo.h
index b45465c..a9d98d3 100644
--- a/ports/sysdeps/powerpc/dl-procinfo.h
+++ b/ports/sysdeps/powerpc/dl-procinfo.h
@@ -19,6 +19,7 @@
 #ifndef _DL_PROCINFO_H
 #define _DL_PROCINFO_H 1
 
+#include <stdint.h>
 #include <ldsodefs.h>
 #include <sysdep.h>            /* This defines the PPC_FEATURE_* macros.  */
 
@@ -153,19 +154,40 @@ _dl_string_platform (const char *str)
 }
 
 #ifdef IS_IN_rtld
+
 static inline int
 __attribute__ ((unused))
-_dl_procinfo (int word)
+_dl_procinfo (unsigned int type, int word)
 {
-  _dl_printf ("AT_HWCAP:       ");
+  unsigned int first, count, str_offset;
 
-  for (int i = _DL_HWCAP_FIRST; i < _DL_HWCAP_COUNT; ++i)
+  switch(type)
+    {
+    case AT_HWCAP:
+      _dl_printf ("AT_HWCAP:       ");
+      first = _DL_HWCAP_FIRST;
+      count = MIN(_DL_HWCAP_COUNT,_DL_HWCAP2_FIRST);
+      str_offset = 0;
+      break;
+    case AT_HWCAP2:
+      _dl_printf ("AT_HWCAP2:      ");
+      first = 0;
+      count = _DL_HWCAP_COUNT - _DL_HWCAP2_FIRST;
+      str_offset = _DL_HWCAP2_FIRST;
+      break;
+    default:
+      /* This should not happen.  */
+      return -1;
+    }
+
+  for (int i = first; i < count; ++i)
     if (word & (1 << i))
-      _dl_printf (" %s", _dl_hwcap_string (i));
+      _dl_printf (" %s", _dl_hwcap_string (str_offset + i));
 
   _dl_printf ("\n");
 
   return 0;
+
 }
 #endif
 
diff --git a/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h b/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h
index 161e86c..1f3a8ce 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h
+++ b/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h
@@ -31,10 +31,14 @@
 
 static inline int
 __attribute__ ((unused))
-_dl_procinfo (int word)
+_dl_procinfo (unsigned int type, int word)
 {
   int i;
 
+  /* Unused for now.  */
+  if (type == AT_HWCAP2)
+    return 0;
+
   _dl_printf ("AT_HWCAP:   ");
 
   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
diff --git a/sysdeps/generic/dl-procinfo.h b/sysdeps/generic/dl-procinfo.h
index 90c87d9..a184a59 100644
--- a/sysdeps/generic/dl-procinfo.h
+++ b/sysdeps/generic/dl-procinfo.h
@@ -21,7 +21,7 @@
 #define _DL_PROCINFO_H	1
 
 /* We cannot provide a general printing function.  */
-#define _dl_procinfo(word) -1
+#define _dl_procinfo(type, word) -1
 
 /* There are no hardware capabilities defined.  */
 #define _dl_hwcap_string(idx) ""
diff --git a/sysdeps/i386/dl-procinfo.h b/sysdeps/i386/dl-procinfo.h
index 883fa7f..233a325 100644
--- a/sysdeps/i386/dl-procinfo.h
+++ b/sysdeps/i386/dl-procinfo.h
@@ -61,7 +61,7 @@ enum
 };
 
 /* We cannot provide a general printing function.  */
-#define _dl_procinfo(word) -1
+#define _dl_procinfo(type, word) -1
 
 static inline const char *
 __attribute__ ((unused))
diff --git a/sysdeps/powerpc/dl-procinfo.h b/sysdeps/powerpc/dl-procinfo.h
index 19aa93b..ca20732 100644
--- a/sysdeps/powerpc/dl-procinfo.h
+++ b/sysdeps/powerpc/dl-procinfo.h
@@ -22,8 +22,9 @@
 #include <ldsodefs.h>
 #include <sysdep.h>		/* This defines the PPC_FEATURE_* macros.  */
 
-/* There are 25 bits used, but they are bits 7..31.  */
+/* There are 25 bits used in AT_HWCAP, but they are bits 7..31.  */
 #define _DL_HWCAP_FIRST		7
+#define _DL_HWCAP2_FIRST	32
 #define _DL_HWCAP_COUNT		32
 
 /* These bits influence library search.  */
@@ -133,15 +134,35 @@ _dl_string_platform (const char *str)
 }
 
 #ifdef IS_IN_rtld
+
 static inline int
 __attribute__ ((unused))
-_dl_procinfo (int word)
+_dl_procinfo (unsigned int type, int word)
 {
-  _dl_printf ("AT_HWCAP:       ");
+  unsigned int first, count, str_offset;
 
-  for (int i = _DL_HWCAP_FIRST; i < _DL_HWCAP_COUNT; ++i)
+  switch(type)
+    {
+    case AT_HWCAP:
+      _dl_printf ("AT_HWCAP:       ");
+      first = _DL_HWCAP_FIRST;
+      count = MIN(_DL_HWCAP_COUNT,_DL_HWCAP2_FIRST);
+      str_offset = 0;
+      break;
+    case AT_HWCAP2:
+      _dl_printf ("AT_HWCAP2:      ");
+      first = 0;
+      count = _DL_HWCAP_COUNT - _DL_HWCAP2_FIRST;
+      str_offset = _DL_HWCAP2_FIRST;
+      break;
+    default:
+      /* This should not happen.  */
+      return -1;
+    }
+
+  for (int i = first; i < count; ++i)
     if (word & (1 << i))
-      _dl_printf (" %s", _dl_hwcap_string (i));
+      _dl_printf (" %s", _dl_hwcap_string (str_offset + i));
 
   _dl_printf ("\n");
 
diff --git a/sysdeps/s390/dl-procinfo.h b/sysdeps/s390/dl-procinfo.h
index 717f6f9..45e27f1 100644
--- a/sysdeps/s390/dl-procinfo.h
+++ b/sysdeps/s390/dl-procinfo.h
@@ -56,7 +56,7 @@ enum
 			  | HWCAP_S390_EIMM | HWCAP_S390_DFP)
 
 /* We cannot provide a general printing function.  */
-#define _dl_procinfo(word) -1
+#define _dl_procinfo(type, word) -1
 
 static inline const char *
 __attribute__ ((unused))
diff --git a/sysdeps/sparc/dl-procinfo.h b/sysdeps/sparc/dl-procinfo.h
index a18b099..57a250f 100644
--- a/sysdeps/sparc/dl-procinfo.h
+++ b/sysdeps/sparc/dl-procinfo.h
@@ -27,10 +27,14 @@
 
 static inline int
 __attribute__ ((unused))
-_dl_procinfo (int word)
+_dl_procinfo (unsigned int type, int word)
 {
   int i;
 
+  /* Unused for now.  */
+  if (type == AT_HWCAP2)
+    return 0;
+
   _dl_printf ("AT_HWCAP:   ");
 
   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
diff --git a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h
index a82f8f5..745b556 100644
--- a/sysdeps/unix/sysv/linux/i386/dl-procinfo.h
+++ b/sysdeps/unix/sysv/linux/i386/dl-procinfo.h
@@ -24,12 +24,16 @@
 #undef _dl_procinfo
 static inline int
 __attribute__ ((unused))
-_dl_procinfo (int word)
+_dl_procinfo (unsigned int type, int word)
 {
   /* This table should match the information from arch/i386/kernel/setup.c
      in the kernel sources.  */
   int i;
 
+  /* Unused for now.  */
+  if (type == AT_HWCAP2)
+    return 0;
+
   _dl_printf ("AT_HWCAP:   ");
 
   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
diff --git a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
index 5ca4b76..9e9e3dc 100644
--- a/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
+++ b/sysdeps/unix/sysv/linux/s390/dl-procinfo.h
@@ -24,12 +24,16 @@
 #undef _dl_procinfo
 static inline int
 __attribute__ ((unused))
-_dl_procinfo (int word)
+_dl_procinfo (unsigned int type, int word)
 {
   /* This table should match the information from arch/s390/kernel/setup.c
      in the kernel sources.  */
   int i;
 
+  /* Unused for now.  */
+  if (type == AT_HWCAP2)
+    return 0;
+
   _dl_printf ("AT_HWCAP:   ");
 
   for (i = 0; i < _DL_HWCAP_COUNT; ++i)

-----------------------------------------------------------------------


hooks/post-receive
-- 
GNU C Library master sources


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