This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Jakub Jelinek wrote: >Hi! > >For LD_LIBRARY_PATH, ld.so uses AT_PLATFORM whenever it is set by the >kernel, even if it is not listed in dl-procinfo.[ch] (that only matters >for ldconfig). So, currently e.g. on G5 we look a huge number of dirs: >... >The following patch limits important hwcaps to just altivec (as it is >present on multiple different platforms, ppc970 (aka G5), ppc74{0,5}0, >ppc-cell-be (and arch_2_05?)) and adds booke which is also set on 4 >different platforms. The power4/power5/power5+ bits seem to be completely >redundant with the platform name. > Correct the these bits should be removed from important mask in favor of AT_PLATFORM. These bits do designate ISA levels and as such are still (potentially) useful for runtime test to use specific instructions. >I haven't included all platforms in dl-procinfo*, as I don't think we need >to list there prehistoric CPUs (for which non-optimized libs are good enough >anyway) and embedded stuff (as for embedded use you rarely want to choose >different libcs based on which chip you are on, you pretty much know >which chip it is), listing there all 24 platforms kernel now lists would >be a waste, especially for the scarce bit space in ldconfig's mask (we have >at most 31 bits there for platform and any other future uses, so if we now >take 6 bits out of this for the common contemporary CPUs, we still have >a big reserve for the future). > > This is similar to a patch I submited in January but seems to have been ignored. So this patch is ok with only one quible, I was told that I should not use "cell" as the Official name is "Cell Broadband Engine". So the HWCAP name should be "cellbe". >2006-09-14 Jakub Jelinek <jakub@redhat.com> > > * sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add "booke" > to the beginning. > (_dl_powerpc_platforms): New. > * sysdeps/powerpc/dl-procinfo.h (_DL_HWCAP_FIRST): Decrease. > (HWCAP_IMPORTANT): Remove power{4,5,5+} and cell, add booke. > (_DL_PLATFORMS_COUNT, _DL_FIRST_PLATFORM): Define. > (_DL_HWCAP_PLATFORM): Define to new mask. > (_dl_platform_string, _dl_string_platform): New functions. > * sysdeps/powerpc/sysdep.h (PPC_FEATURE_BOOKE): Define. > >--- libc/sysdeps/powerpc/dl-procinfo.c.jj 2006-09-14 13:55:06.000000000 +0200 >+++ libc/sysdeps/powerpc/dl-procinfo.c 2006-09-14 16:41:23.000000000 +0200 >@@ -1,5 +1,5 @@ > /* Data for processor capability information. PowerPC version. >- Copyright (C) 2005 Free Software Foundation, Inc. >+ Copyright (C) 2005, 2006 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 >@@ -46,10 +46,11 @@ > #if !defined PROCINFO_DECL && defined SHARED > ._dl_powerpc_cap_flags > #else >-PROCINFO_CLASS const char _dl_powerpc_cap_flags[16][10] >+PROCINFO_CLASS const char _dl_powerpc_cap_flags[17][10] > #endif > #ifndef PROCINFO_DECL > = { >+ "booke", > "cell", "power5+", "power5", "power4", > "notb", "efpdouble", "efpsingle", "spe", > "ucache", "4xxmac", "mmu", "fpu", >@@ -62,5 +63,21 @@ PROCINFO_CLASS const char _dl_powerpc_ca > , > #endif > >+#if !defined PROCINFO_DECL && defined SHARED >+ ._dl_powerpc_platforms >+#else >+PROCINFO_CLASS const char _dl_powerpc_platforms[6][12] >+#endif >+#ifndef PROCINFO_DECL >+= { >+ "power4", "ppc970", "power5", "power5+", "power6", "ppc-cell-be" >+ } >+#endif >+#if !defined SHARED || defined PROCINFO_DECL >+; >+#else >+, >+#endif >+ > #undef PROCINFO_DECL > #undef PROCINFO_CLASS >--- libc/sysdeps/powerpc/dl-procinfo.h.jj 2006-09-14 13:55:06.000000000 +0200 >+++ libc/sysdeps/powerpc/dl-procinfo.h 2006-09-14 16:12:47.000000000 +0200 >@@ -1,5 +1,5 @@ > /* Processor capability information handling macros. PowerPC version. >- Copyright (C) 2005 Free Software Foundation, Inc. >+ Copyright (C) 2005, 2006 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 >@@ -23,27 +23,34 @@ > #include <ldsodefs.h> > #include <sysdep.h> /* This defines the PPC_FEATURE_* macros. */ > >-/* There are 16 bits used, but they are bits 16..31. */ >-#define _DL_HWCAP_FIRST 16 >+/* There are 17 bits used, but they are bits 15..31. */ >+#define _DL_HWCAP_FIRST 15 > #define _DL_HWCAP_COUNT 32 > > /* These bits influence library search. */ >-#define HWCAP_IMPORTANT (PPC_FEATURE_HAS_ALTIVEC \ >- | PPC_FEATURE_POWER4 \ >- | PPC_FEATURE_POWER5 \ >- | PPC_FEATURE_POWER5_PLUS \ >- | PPC_FEATURE_CELL) >- >-/* We don't use AT_PLATFORM. */ >-#define _DL_HWCAP_PLATFORM 0 >-#define _dl_string_platform(str) (-1) >+#define HWCAP_IMPORTANT (PPC_FEATURE_HAS_ALTIVEC \ >+ | PPC_FEATURE_BOOKE) >+ >+#define _DL_PLATFORMS_COUNT 6 >+ >+#define _DL_FIRST_PLATFORM 32 >+/* Mask to filter out platforms. */ >+#define _DL_HWCAP_PLATFORM (((1ULL << _DL_PLATFORMS_COUNT) - 1) \ >+ << _DL_FIRST_PLATFORM) > > 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)) >@@ -53,7 +60,48 @@ _dl_string_hwcap (const char *str) > 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)[0], 5) == 0) >+ { >+ int ret; >+ str += 5; >+ switch (*str) >+ { >+ case '4': >+ ret = _DL_FIRST_PLATFORM + 0; >+ break; >+ case '5': >+ ret = _DL_FIRST_PLATFORM + 2; >+ if (str[1] == '+') >+ ++ret, ++str; >+ break; >+ case '6': >+ ret = _DL_FIRST_PLATFORM + 4; >+ break; >+ default: >+ return -1; >+ } >+ if (str[1] == '\0') >+ return ret; >+ } >+ else if (strncmp (str, GLRO(dl_powerpc_platforms)[1], 3) == 0) >+ { >+ if (strcmp (str + 3, GLRO(dl_powerpc_platforms)[1] + 3) == 0) >+ return _DL_FIRST_PLATFORM + 1; >+ else if (strcmp (str + 3, GLRO(dl_powerpc_platforms)[5] + 3) == 0) >+ return _DL_FIRST_PLATFORM + 5; >+ } >+ >+ return -1; >+} > > #ifdef IS_IN_rtld > static inline int >--- libc/sysdeps/powerpc/sysdep.h.jj 2005-11-21 12:07:50.000000000 +0100 >+++ libc/sysdeps/powerpc/sysdep.h 2006-09-14 16:11:34.000000000 +0200 >@@ -37,6 +37,7 @@ > #define PPC_FEATURE_POWER5 0x00040000 /* POWER5 microarch level */ > #define PPC_FEATURE_POWER5_PLUS 0x00020000 /* POWER5+ microarch level */ > #define PPC_FEATURE_CELL 0x00010000 /* CELL PU microarch level */ >+#define PPC_FEATURE_BOOKE 0x00008000 > #define PPC_FEATURE_970 (PPC_FEATURE_POWER4 + PPC_FEATURE_HAS_ALTIVEC) > > #ifdef __ASSEMBLER__ > > Jakub >
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |