You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
408 lines
14 KiB
408 lines
14 KiB
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 |
|
--- glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.c 2012-12-25 08:32:13.000000000 +0530 |
|
+++ glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.c 1970-01-01 05:30:00.000000000 +0530 |
|
@@ -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 |
|
--- glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.h 2012-12-25 08:32:13.000000000 +0530 |
|
+++ glibc-2.17-c758a686/ports/sysdeps/powerpc/dl-procinfo.h 1970-01-01 05:30:00.000000000 +0530 |
|
@@ -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 |
|
--- glibc-2.17-c758a686/sysdeps/powerpc/dl-procinfo.c 2012-12-25 08:32:13.000000000 +0530 |
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/dl-procinfo.c 2013-08-05 19:10:28.980541623 +0530 |
|
@@ -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 |
|
--- glibc-2.17-c758a686/sysdeps/powerpc/dl-procinfo.h 2012-12-25 08:32:13.000000000 +0530 |
|
+++ glibc-2.17-c758a686/sysdeps/powerpc/dl-procinfo.h 2013-08-05 19:10:28.990541622 +0530 |
|
@@ -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;
|
|
|