From patchwork Wed Nov 23 18:59:50 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 17740 Received: (qmail 117379 invoked by alias); 23 Nov 2016 19:00:18 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 117083 invoked by uid 89); 23 Nov 2016 19:00:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=AWL, BAYES_50, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=no version=3.3.2 spammy=strncmp, 13237, 1323, 7, strrchr X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com From: Wilco Dijkstra To: Joseph Myers CC: Florian Weimer , "libc-alpha@sourceware.org" , nd Subject: [PATCH v4] Remove defines to builtins in string2.h Date: Wed, 23 Nov 2016 18:59:50 +0000 Message-ID: References: <4c9be96f-5cbf-483b-89d8-b5c1f11e1e78@redhat.com> <87h96z6xu2.fsf@mid.deneb.enyo.de> , , In-Reply-To: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Wilco.Dijkstra@arm.com; x-ms-office365-filtering-correlation-id: 43e225da-2565-4fdc-c020-08d413d2e701 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:AM5PR0802MB2610; x-microsoft-exchange-diagnostics: 1; AM5PR0802MB2610; 7:bD7PFVhXmxGIGgSBVsknCkp5zZXGlR2hpsWUc1mCMhz4oUy4DlxxSdVEYWD6WgASfrLU0tP5A3wvHruU2InQgBNyOItOVkztHirhtW21GLAbQLwZ/uRDr8L43T+viehFzpc9+pO1t5fNZJRIcgHmatdxi71SXCr/cMhJ7LZE5W7tlvaU9V7WsNpQ9E22thKraLQxtV7cAAAHbEjDyp5Yw08giWfNe+5TxpQlWfDPxKkucVYT/tr3uBRBFhRkWkuq403UdK1avsEhsXolQTwSDNE6ESzAKmm40ZrD8o3pX4HK6LiRxZMzXJ+uymdtYSGeBQiXwCWPSZNmD6qiXoCj6HsXp5tFsE4EN8u1X8LQp479IV4bKuQHyE/1VK28aD+GgeY/S36HsFuVBNaTHNXEoGLDustFdjCqMO1Z/72zm6Pxh5qsKzL0mIZYrfnGwuFnVCPgjKkmTFJb19HBb8egfg== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6060326)(6040307)(6045199)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6061324)(6041248)(6072148); SRVR:AM5PR0802MB2610; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0802MB2610; x-forefront-prvs: 013568035E x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(7916002)(377424004)(189002)(54534003)(199003)(2950100002)(4001150100001)(122556002)(86362001)(575784001)(189998001)(6506003)(68736007)(9686002)(106116001)(102836003)(4326007)(3846002)(33656002)(66066001)(6116002)(106356001)(105586002)(5660300001)(38730400001)(74316002)(2906002)(3660700001)(3280700002)(97736004)(8936002)(2900100001)(110136003)(6916009)(77096005)(81156014)(7846002)(76576001)(305945005)(7736002)(101416001)(93886004)(81166006)(92566002)(54356999)(76176999)(8676002)(7696004)(50986999); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2610; H:AM5PR0802MB2610.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2016 18:59:50.5103 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2610 Here is v4 of the patch rebased so it applies cleanly after the strchr patch. It now removes the _HAVE_STRING_ARCH_str(n)cmp defines too. As discussed in https://sourceware.org/ml/libc-alpha/2016-11/msg00625.html, there is no need to use a define to redirect to the GCC builtin as an optimization (other headers already ensure symbols are redirected if necessary to avoid name space clashes, for example when using non-C90 symbols). Remove all redundant redirects from string/bits/string2.h. The strncat define is redundant since _USE_STRING_ARCH_strchr is not defined for any target, except for x86 where it may be defined, but if it is, this redirect is then unused. Redirects are kept for __bzero and __stpcpy as these are used in a few places in GLIBC (and so using GCC builtins is a useful optimization) - when those uses have been changed, the redirects can be removed too. All unused _HAVE_STRING_ARCH_* defines are removed - this has no effect as they are defined but not used or used in a #ifndef but not defined. This patch depends on https://sourceware.org/ml/libc-alpha/2016-11/msg00843.html being applied first. Verified no differences on AArch64 in all .so files in the install. ChangeLog: 2015-11-23 Wilco Dijkstra * string/string-inlines.c: Remove include of bits/string2.h. * string/bits/string2.h (__bzero): Always redirect to memset. (strchr) Remove define. (__stpcpy): Keep redirection for internal use. (stpcpy): Remove define. (strncpy): Likewise. (strncat): Likewise. (_HAVE_STRING_ARCH_strcmp): Likewise. (_HAVE_STRING_ARCH_strncmp): Likewise. (strcspn): Likewise. (strspn): Likewise. (strpbrk): Likewise. (_HAVE_STRING_ARCH_strdup): Likewise. (_HAVE_STRING_ARCH_strndup): Likewise. * sysdeps/s390/bits/string.h (_HAVE_STRING_ARCH_strlen): Remove. (_HAVE_STRING_ARCH_strcpy): Likewise. (_HAVE_STRING_ARCH_strncpy): Likewise. (_HAVE_STRING_ARCH_strcat): Likewise. (_HAVE_STRING_ARCH_strncat): Likewise. (_HAVE_STRING_ARCH_memchr): Likewise. (_HAVE_STRING_ARCH_strcmp): Remove, define strcmp. * sysdeps/sparc/bits/string.h (_HAVE_STRING_ARCH_strchr): Remove. * sysdeps/x86/bits/string.h (_HAVE_STRING_ARCH_memcpy): Remove. (_HAVE_STRING_ARCH_memmove): Likewise. (_HAVE_STRING_ARCH_memcmp): Likewise. (_HAVE_STRING_ARCH_memset): Likewise. (_USE_STRING_ARCH_memset): Likewise. (_HAVE_STRING_ARCH_memchr): Likewise. (_HAVE_STRING_ARCH_memrchr): Likewise. (_HAVE_STRING_ARCH_rawmemchr): Likewise. (_HAVE_STRING_ARCH_strlen): Likewise. (_HAVE_STRING_ARCH_strcpy): Likewise. (_HAVE_STRING_ARCH_strpcpy): Likewise. (_HAVE_STRING_ARCH_strncpy): Likewise. (_HAVE_STRING_ARCH_strncat): Likewise. (_HAVE_STRING_ARCH_strcmp): Likewise. (_HAVE_STRING_ARCH_strncmp): Likewise. (_HAVE_STRING_ARCH_strchr): Likewise. (_USE_STRING_ARCH_strchr): Likewise. (_HAVE_STRING_ARCH_strnchr): Likewise. (_HAVE_STRING_ARCH_strchrnul): Likewise. (_HAVE_STRING_ARCH_strrchr): Likewise. (_HAVE_STRING_ARCH_index): Likewise. (_HAVE_STRING_ARCH_rindex): Likewise. (_HAVE_STRING_ARCH_strcspn): Likewise. (_HAVE_STRING_ARCH_strspn): Likewise. (_HAVE_STRING_ARCH_strpbrk): Likewise. (_HAVE_STRING_ARCH_strstr): Likewise. (_HAVE_STRING_ARCH_ffs): Likewise. diff --git a/string/bits/string2.h b/string/bits/string2.h index de426b47cae09933b2dc53e0956d63b4c93aebc0..5acdb7866e4e70a6c3aa050b0427b31aed8943ec 100644 --- a/string/bits/string2.h +++ b/string/bits/string2.h @@ -53,47 +53,15 @@ ((size_t)(const void *)((__x) + 1) - (size_t)(const void *)(__x) == 1) /* Set N bytes of S to 0. */ -#if !defined _HAVE_STRING_ARCH_memset -# define __bzero(s, n) __builtin_memset (s, '\0', n) -#endif - +#define __bzero(s, n) __builtin_memset (s, '\0', n) /* Copy SRC to DEST, returning pointer to final NUL byte. */ -#ifdef __USE_GNU -# ifndef _HAVE_STRING_ARCH_stpcpy -# define __stpcpy(dest, src) __builtin_stpcpy (dest, src) -/* In glibc we use this function frequently but for namespace reasons - we have to use the name `__stpcpy'. */ -# define stpcpy(dest, src) __stpcpy (dest, src) -# endif -#endif - - -/* Copy no more than N characters of SRC to DEST. */ -#ifndef _HAVE_STRING_ARCH_strncpy -# define strncpy(dest, src, n) __builtin_strncpy (dest, src, n) +#ifndef __stpcpy +# define __stpcpy(dest, src) __builtin_stpcpy (dest, src) #endif - -/* Append no more than N characters from SRC onto DEST. */ -#ifndef _HAVE_STRING_ARCH_strncat -# ifdef _USE_STRING_ARCH_strchr -# define strncat(dest, src, n) \ - (__extension__ ({ char *__dest = (dest); \ - __builtin_constant_p (src) && __builtin_constant_p (n) \ - ? (strlen (src) < ((size_t) (n)) \ - ? strcat (__dest, src) \ - : (*((char *) __mempcpy (strchr (__dest, '\0'), \ - src, n)) = '\0', __dest)) \ - : strncat (dest, src, n); })) -# else -# define strncat(dest, src, n) __builtin_strncat (dest, src, n) -# endif -#endif - - /* Compare characters of S1 and S2. */ -#ifndef _HAVE_STRING_ARCH_strcmp +#ifndef strcmp # define strcmp(s1, s2) \ __extension__ \ ({ size_t __s1_len, __s2_len; \ @@ -139,7 +107,7 @@ /* Compare N characters of S1 and S2. */ -#ifndef _HAVE_STRING_ARCH_strncmp +#ifndef strncmp # define strncmp(s1, s2, n) \ (__extension__ (__builtin_constant_p (n) \ && ((__builtin_constant_p (s1) \ @@ -150,26 +118,6 @@ #endif -/* Return the length of the initial segment of S which - consists entirely of characters not in REJECT. */ -#ifndef _HAVE_STRING_ARCH_strcspn -# define strcspn(s, reject) __builtin_strcspn (s, reject) -#endif - - -/* Return the length of the initial segment of S which - consists entirely of characters in ACCEPT. */ -#ifndef _HAVE_STRING_ARCH_strspn -# define strspn(s, accept) __builtin_strspn (s, accept) -#endif - - -/* Find the first occurrence in S of any character in ACCEPT. */ -#ifndef _HAVE_STRING_ARCH_strpbrk -# define strpbrk(s, accept) __builtin_strpbrk (s, accept) -#endif - - #if !defined _HAVE_STRING_ARCH_strsep || defined _FORCE_INLINES # ifndef _HAVE_STRING_ARCH_strsep @@ -265,15 +213,11 @@ __strsep_3c (char **__s, char __reject1, char __reject2, char __reject3) in any of the tight standards compliant modes. */ #ifdef __USE_MISC -# if !defined _HAVE_STRING_ARCH_strdup || !defined _HAVE_STRING_ARCH_strndup -# define __need_malloc_and_calloc -# include -# endif - -# ifndef _HAVE_STRING_ARCH_strdup +# define __need_malloc_and_calloc +# include extern char *__strdup (const char *__string) __THROW __attribute_malloc__; -# define __strdup(s) \ +# define __strdup(s) \ (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \ ? (((const char *) (s))[0] == '\0' \ ? (char *) calloc ((size_t) 1, (size_t) 1) \ @@ -284,16 +228,14 @@ extern char *__strdup (const char *__string) __THROW __attribute_malloc__; __retval; })) \ : __strdup (s))) -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -# define strdup(s) __strdup (s) -# endif +# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +# define strdup(s) __strdup (s) # endif -# ifndef _HAVE_STRING_ARCH_strndup extern char *__strndup (const char *__string, size_t __n) __THROW __attribute_malloc__; -# define __strndup(s, n) \ +# define __strndup(s, n) \ (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \ ? (((const char *) (s))[0] == '\0' \ ? (char *) calloc ((size_t) 1, (size_t) 1) \ @@ -312,9 +254,8 @@ extern char *__strndup (const char *__string, size_t __n) __retval; })) \ : __strndup (s, n))) -# ifdef __USE_XOPEN2K8 -# define strndup(s, n) __strndup (s, n) -# endif +# ifdef __USE_XOPEN2K8 +# define strndup(s, n) __strndup (s, n) # endif #endif /* Use misc. or use GNU. */ diff --git a/string/string-inlines.c b/string/string-inlines.c index d43e5897c37430e5f97940469d65e7ddbdcbd09c..f6f56c56f875a89fbc05dec61a7603c2a869607c 100644 --- a/string/string-inlines.c +++ b/string/string-inlines.c @@ -31,7 +31,6 @@ #undef __NO_INLINE__ #include -#include #include "shlib-compat.h" diff --git a/sysdeps/s390/bits/string.h b/sysdeps/s390/bits/string.h index 39e0b7fe7c7a100c7f4e2a3c13f815951815e854..4e80bd03835b38cadf1b3a60f632bc5c64720837 100644 --- a/sysdeps/s390/bits/string.h +++ b/sysdeps/s390/bits/string.h @@ -37,7 +37,6 @@ # endif #endif -#define _HAVE_STRING_ARCH_strlen 1 #ifndef _FORCE_INLINES #define strlen(str) __strlen_g ((str)) @@ -60,7 +59,6 @@ __strlen_g (const char *__str) #endif /* Copy SRC to DEST. */ -#define _HAVE_STRING_ARCH_strcpy 1 #ifndef _FORCE_INLINES #define strcpy(dest, src) __strcpy_g ((dest), (src)) @@ -80,7 +78,6 @@ __strcpy_g (char *__dest, const char *__src) } #endif -#define _HAVE_STRING_ARCH_strncpy 1 #ifndef _FORCE_INLINES #define strncpy(dest, src, n) __strncpy_g ((dest), (src), (n)) @@ -124,7 +121,6 @@ __strncpy_g (char *__dest, const char *__src, size_t __n) #endif /* Append SRC onto DEST. */ -#define _HAVE_STRING_ARCH_strcat 1 #ifndef _FORCE_INLINES #define strcat(dest, src) __strcat_g ((dest), (src)) @@ -156,7 +152,6 @@ __strcat_g (char *__dest, const char *__src) #endif /* Append no more than N characters from SRC onto DEST. */ -#define _HAVE_STRING_ARCH_strncat 1 #ifndef _FORCE_INLINES #define strncat(dest, src, n) __strncat_g ((dest), (src), (n)) @@ -204,7 +199,6 @@ __strncat_g (char *__dest, const char *__src, size_t __n) #endif /* Search N bytes of S for C. */ -#define _HAVE_STRING_ARCH_memchr 1 #ifndef _FORCE_INLINES __STRING_INLINE void * memchr (const void *__str, int __c, size_t __n) @@ -227,8 +221,8 @@ memchr (const void *__str, int __c, size_t __n) #endif /* Compare S1 and S2. */ -#define _HAVE_STRING_ARCH_strcmp 1 #ifndef _FORCE_INLINES +#define strcmp(s1, s2) strcmp ((s1), (s2)) __STRING_INLINE int strcmp (const char *__s1, const char *__s2) { diff --git a/sysdeps/sparc/bits/string.h b/sysdeps/sparc/bits/string.h index 10beca6a5a98cc126e39227cae5ff25a1ac09857..75a3eb31f3edc7109c360550c95d3d00402204a7 100644 --- a/sysdeps/sparc/bits/string.h +++ b/sysdeps/sparc/bits/string.h @@ -23,9 +23,5 @@ /* sparc uses the aligned string inline ABI. */ #define _STRING_INLINE_unaligned 0 -/* sparc32 and sparc64 strchr(x, '\0') perform better than - __rawmemchr(x, '\0'). */ -#define _HAVE_STRING_ARCH_strchr 1 - /* Don't inline mempcpy into memcpy as sparc has an optimized mempcpy. */ #define _HAVE_STRING_ARCH_mempcpy 1 diff --git a/sysdeps/x86/bits/string.h b/sysdeps/x86/bits/string.h index 805d33f0a2d13743e763e18c5c474c9507186a15..e3c9048971f249984e394a19444f6402d4521861 100644 --- a/sysdeps/x86/bits/string.h +++ b/sysdeps/x86/bits/string.h @@ -66,7 +66,6 @@ /* Copy N bytes of SRC to DEST. */ -# define _HAVE_STRING_ARCH_memcpy 1 # define memcpy(dest, src, n) \ (__extension__ (__builtin_constant_p (n) \ ? __memcpy_c ((dest), (src), (n)) \ @@ -155,7 +154,6 @@ __memcpy_g (void *__dest, const void *__src, size_t __n) return __dest; } -# define _HAVE_STRING_ARCH_memmove 1 # ifndef _FORCE_INLINES /* Copy N bytes of SRC to DEST, guaranteeing correct behavior for overlapping strings. */ @@ -194,7 +192,6 @@ __memmove_g (void *__dest, const void *__src, size_t __n) # endif /* Compare N bytes of S1 and S2. */ -# define _HAVE_STRING_ARCH_memcmp 1 # ifndef _FORCE_INLINES # ifndef __PIC__ /* gcc has problems to spill registers when using PIC. */ @@ -222,8 +219,6 @@ memcmp (const void *__s1, const void *__s2, size_t __n) # endif /* Set N bytes of S to C. */ -# define _HAVE_STRING_ARCH_memset 1 -# define _USE_STRING_ARCH_memset 1 # define memset(s, c, n) \ (__extension__ (__builtin_constant_p (n) && (n) <= 16 \ ? ((n) == 1 \ @@ -449,7 +444,6 @@ __memset_gcn_by2 (void *__s, int __c, size_t __n) /* Search N bytes of S for C. */ -# define _HAVE_STRING_ARCH_memchr 1 # ifndef _FORCE_INLINES __STRING_INLINE void * memchr (const void *__s, int __c, size_t __n) @@ -486,7 +480,6 @@ memchr (const void *__s, int __c, size_t __n) } # endif -# define _HAVE_STRING_ARCH_memrchr 1 # ifndef _FORCE_INLINES __STRING_INLINE void *__memrchr (const void *__s, int __c, size_t __n); @@ -532,7 +525,6 @@ __memrchr (const void *__s, int __c, size_t __n) # endif /* Return pointer to C in S. */ -# define _HAVE_STRING_ARCH_rawmemchr 1 __STRING_INLINE void *__rawmemchr (const void *__s, int __c); # ifndef _FORCE_INLINES @@ -561,7 +553,6 @@ rawmemchr (const void *__s, int __c) /* Return the length of S. */ -# define _HAVE_STRING_ARCH_strlen 1 # define strlen(str) \ (__extension__ (__builtin_constant_p (str) \ ? __builtin_strlen (str) \ @@ -588,7 +579,6 @@ __strlen_g (const char *__str) /* Copy SRC to DEST. */ -# define _HAVE_STRING_ARCH_strcpy 1 # define strcpy(dest, src) \ (__extension__ (__builtin_constant_p (src) \ ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8 \ @@ -673,7 +663,6 @@ __strcpy_g (char *__dest, const char *__src) # ifdef __USE_GNU -# define _HAVE_STRING_ARCH_stpcpy 1 /* Copy SRC to DEST. */ # define __stpcpy(dest, src) \ (__extension__ (__builtin_constant_p (src) \ @@ -848,7 +837,6 @@ __stpcpy_g (char *__dest, const char *__src) /* Copy no more than N characters of SRC to DEST. */ -# define _HAVE_STRING_ARCH_strncpy 1 # define strncpy(dest, src, n) \ (__extension__ (__builtin_constant_p (src) \ ? ((strlen (src) + 1 >= ((size_t) (n)) \ @@ -980,7 +968,6 @@ __strncpy_gg (char *__dest, const char *__src, size_t __n) /* Append SRC onto DEST. */ -# define _HAVE_STRING_ARCH_strcat 1 # define strcat(dest, src) \ (__extension__ (__builtin_constant_p (src) \ ? __strcat_c ((dest), (src), strlen (src) + 1) \ @@ -1051,7 +1038,6 @@ __strcat_g (char *__dest, const char *__src) /* Append no more than N characters from SRC onto DEST. */ -# define _HAVE_STRING_ARCH_strncat 1 # define strncat(dest, src, n) \ (__extension__ ({ char *__dest = (dest); \ __builtin_constant_p (src) && __builtin_constant_p (n) \ @@ -1115,7 +1101,6 @@ __strncat_g (char *__dest, const char __src[], size_t __n) /* Compare S1 and S2. */ -# define _HAVE_STRING_ARCH_strcmp 1 # define strcmp(s1, s2) \ (__extension__ (__builtin_constant_p (s1) && __builtin_constant_p (s2) \ && (sizeof ((s1)[0]) != 1 || strlen (s1) >= 4) \ @@ -1219,7 +1204,6 @@ __strcmp_gg (const char *__s1, const char *__s2) /* Compare N characters of S1 and S2. */ -# define _HAVE_STRING_ARCH_strncmp 1 # define strncmp(s1, s2, n) \ (__extension__ (__builtin_constant_p (s1) && strlen (s1) < ((size_t) (n)) \ ? strcmp ((s1), (s2)) \ @@ -1263,8 +1247,6 @@ __strncmp_g (const char *__s1, const char *__s2, size_t __n) /* Find the first occurrence of C in S. */ -# define _HAVE_STRING_ARCH_strchr 1 -# define _USE_STRING_ARCH_strchr 1 # define strchr(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? ((c) == '\0' \ @@ -1323,7 +1305,6 @@ __strchr_g (const char *__s, int __c) /* Find the first occurrence of C in S or the final NUL byte. */ -# define _HAVE_STRING_ARCH_strchrnul 1 # define __strchrnul(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? ((c) == '\0' \ @@ -1386,7 +1367,6 @@ __strchrnul_g (const char *__s, int __c) # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED /* Find the first occurrence of C in S. This is the BSD name. */ -# define _HAVE_STRING_ARCH_index 1 # define index(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? __strchr_c ((s), ((c) & 0xff) << 8) \ @@ -1395,7 +1375,6 @@ __strchrnul_g (const char *__s, int __c) /* Find the last occurrence of C in S. */ -# define _HAVE_STRING_ARCH_strrchr 1 # define strrchr(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? __strrchr_c ((s), ((c) & 0xff) << 8) \ @@ -1500,7 +1479,6 @@ __strrchr_g (const char *__s, int __c) # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED /* Find the last occurrence of C in S. This is the BSD name. */ -# define _HAVE_STRING_ARCH_rindex 1 # define rindex(s, c) \ (__extension__ (__builtin_constant_p (c) \ ? __strrchr_c ((s), ((c) & 0xff) << 8) \ @@ -1510,7 +1488,6 @@ __strrchr_g (const char *__s, int __c) /* Return the length of the initial segment of S which consists entirely of characters not in REJECT. */ -# define _HAVE_STRING_ARCH_strcspn 1 # define strcspn(s, reject) \ (__extension__ (__builtin_constant_p (reject) && sizeof ((reject)[0]) == 1 \ ? ((reject)[0] == '\0' \ @@ -1631,7 +1608,6 @@ __strcspn_g (const char *__s, const char *__reject) /* Return the length of the initial segment of S which consists entirely of characters in ACCEPT. */ -# define _HAVE_STRING_ARCH_strspn 1 # define strspn(s, accept) \ (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1 \ ? ((accept)[0] == '\0' \ @@ -1751,7 +1727,6 @@ __strspn_g (const char *__s, const char *__accept) /* Find the first occurrence in S of any character in ACCEPT. */ -# define _HAVE_STRING_ARCH_strpbrk 1 # define strpbrk(s, accept) \ (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1 \ ? ((accept)[0] == '\0' \ @@ -1858,7 +1833,6 @@ __strpbrk_g (const char *__s, const char *__accept) /* Find the first occurrence of NEEDLE in HAYSTACK. */ -# define _HAVE_STRING_ARCH_strstr 1 # define strstr(haystack, needle) \ (__extension__ (__builtin_constant_p (needle) && sizeof ((needle)[0]) == 1 \ ? ((needle)[0] == '\0' \ @@ -1970,7 +1944,6 @@ __strstr_g (const char *__haystack, const char *__needle) processors gcc generates good code. */ # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED # ifdef __i686__ -# define _HAVE_STRING_ARCH_ffs 1 # define ffs(word) (__builtin_constant_p (word) \ ? __builtin_ffs (word) \ : ({ int __cnt, __tmp; \