From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15677 invoked by alias); 14 Sep 2006 16:22:51 -0000 Received: (qmail 15660 invoked by uid 22791); 14 Sep 2006 16:22:51 -0000 X-Spam-Check-By: sourceware.org Received: from e1.ny.us.ibm.com (HELO e1.ny.us.ibm.com) (32.97.182.141) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 14 Sep 2006 16:22:45 +0000 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e1.ny.us.ibm.com (8.13.8/8.12.11) with ESMTP id k8EGMhhe026700 for ; Thu, 14 Sep 2006 12:22:43 -0400 Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.13.6/8.13.6/NCO v8.1.1) with ESMTP id k8EGMgfH287828 for ; Thu, 14 Sep 2006 12:22:43 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id k8EGMfbc004573 for ; Thu, 14 Sep 2006 12:22:41 -0400 Received: from [9.10.86.122] (spokane1.rchland.ibm.com [9.10.86.122]) by d01av02.pok.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id k8EGMf9f004557; Thu, 14 Sep 2006 12:22:41 -0400 Message-ID: <45098339.7020206@us.ibm.com> Date: Thu, 14 Sep 2006 16:22:00 -0000 From: Steven Munroe User-Agent: Mozilla/5.0 (X11; U; Linux ppc64; en-US; rv:1.7.8) Gecko/20060411 MIME-Version: 1.0 To: Jakub Jelinek CC: Ulrich Drepper , Glibc hackers Subject: Re: [PATCH] Use AT_PLATFORM and limit the number of important hwcap bits on PPC References: <20060914152316.GH4556@sunsite.mff.cuni.cz> In-Reply-To: <20060914152316.GH4556@sunsite.mff.cuni.cz> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Mailing-List: contact libc-hacker-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sourceware.org X-SW-Source: 2006-09/txt/msg00024.txt.bz2 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 > > * 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 > #include /* 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 >