| This is a combination of two commits: |
| |
| From 2d718ff7745d89dcc2a630fe72783acf109cadc0 Mon Sep 17 00:00:00 2001 |
| From: "Ryan S. Arnold" <rsa@linux.vnet.ibm.com> |
| Date: Tue, 11 Jun 2013 09:32:41 -0500 |
| Subject: [PATCH 33/42] PowerPC: Merge ports/ dl-procinfo.[ch] with base. |
| (cherry picked from commit |
| fac0c5f2b1dc0e1806cd95f2d6a4619929119f01) |
| |
| From e0c595c971d958da58533a2b9b59f46a71a1e4cf Mon Sep 17 00:00:00 2001 |
| From: "Ryan S. Arnold" <rsa@linux.vnet.ibm.com> |
| Date: Tue, 11 Jun 2013 09:33:33 -0500 |
| Subject: [PATCH 34/42] PowerPC: Remove redundant |
| ports/sysdeps/powerpc/dl-procinfo.[ch]. (cherry |
| picked from commit |
| d04310f210734448a5b950988d49dcea145df9c1) |
| |
| diff -pruN glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.c glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.c |
| |
| |
| @@ -1,96 +0,0 @@ |
| -/* Data for processor capability information. PowerPC version. |
| - Copyright (C) 2005-2012 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 -pruN glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.h glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.h |
| |
| |
| @@ -1,172 +0,0 @@ |
| -/* Processor capability information handling macros. PowerPC version. |
| - Copyright (C) 2005-2012 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 <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 (int word) |
| -{ |
| - _dl_printf ("AT_HWCAP: "); |
| - |
| - for (int i = _DL_HWCAP_FIRST; i < _DL_HWCAP_COUNT; ++i) |
| - if (word & (1 << i)) |
| - _dl_printf (" %s", _dl_hwcap_string (i)); |
| - |
| - _dl_printf ("\n"); |
| - |
| - return 0; |
| -} |
| -#endif |
| - |
| -#endif /* dl-procinfo.h */ |
| diff -pruN glibc-2.17-c758a686/sysdeps/powerpc/dl-procinfo.c glibc-2.17-c758a686/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 |
| @@ -67,7 +67,7 @@ PROCINFO_CLASS const char _dl_powerpc_ca |
| #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_pl |
| [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 -pruN glibc-2.17-c758a686/sysdeps/powerpc/dl-procinfo.h glibc-2.17-c758a686/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, but they are bits 7..31. */ |
| #define _DL_HWCAP_FIRST 7 |
| @@ -30,12 +30,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 |
| @@ -47,6 +47,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)) |
| @@ -111,7 +115,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) |
| @@ -127,6 +131,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; |