From patchwork Fri Feb 10 19:09:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 19219 Received: (qmail 2809 invoked by alias); 10 Feb 2017 19:09:44 -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 2800 invoked by uid 89); 10 Feb 2017 19:09:43 -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=needle, 2196, 1996, 1216 X-HELO: EUR03-AM5-obe.outbound.protection.outlook.com From: Wilco Dijkstra To: Joseph Myers CC: Florian Weimer , "libc-alpha@sourceware.org" , nd Subject: Re: [PATCH v5] Remove defines to builtins in string2.h Date: Fri, 10 Feb 2017 19:09:29 +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: 5b959694-ce24-4145-6bf7-08d451e856c8 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081); SRVR:VI1PR0802MB2623; x-microsoft-exchange-diagnostics: 1; VI1PR0802MB2623; 7:gawSc4p+ajZNiRKUrSKg9aaYCehyJbEBP33sAUgaKldMeWNCUSQJdjK6a8Nq/8yg0a3aMJM24IHD43jFPfqWgGI254+81Y1O0A7PIou76itrV3ykaEI9YNSjvTXbdBjp3HjvMJe1DSpQcpI8Is4zPuhn8bJ4hcNMCQ7Pufdl6ccO2dK3QiuJjKvsOzuoaji95COv+j1rlyVn65enJ5/QlJcPa4Fcm43+RLVC1jSXppEErgU1GBwXMPLbHQFbs3lF6vRDJkxD15J1l1FkYo1Fv75oorc+hYA9eIC4IRBXhHwqXCGxQlEr4vZiCQJn57LBEPm30q0VZItzrBh+yf6FpOH7ikpgw+0wBMPMnuPKBtzIZrCeh+kCbPcWVuHzoJmq1eiTcKh0cCxzndbv5SxxDbNJ7uqa7wnk2tO1U63qJiU8/KBoFr7pAC8yEj9lmuiqAlil+5ah5DwSioz/yWikCo0aIy7aIY4tRXKesk4dC2zM1QL8EH9A2ezleUO2ckcFxA5sUtdI1ZHMU4Vm5bHWhw== nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(20161123564025)(20161123560025)(20161123558025)(20161123555025)(6072148); SRVR:VI1PR0802MB2623; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2623; x-forefront-prvs: 0214EB3F68 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39450400003)(39850400002)(39410400002)(39840400002)(377424004)(54534003)(189002)(199003)(106116001)(81156014)(305945005)(2900100001)(81166006)(25786008)(74316002)(105586002)(106356001)(4326007)(6246003)(101416001)(9686003)(4001150100001)(6306002)(7736002)(76176999)(54356999)(53946003)(50986999)(6116002)(6436002)(99286003)(6512007)(102836003)(66066001)(6486002)(3846002)(53936002)(77096006)(6506006)(3660700001)(189998001)(97736004)(33656002)(8936002)(8676002)(93886004)(54906002)(38730400002)(5660300001)(2906002)(110136004)(3280700002)(575784001)(229853002)(86362001)(68736007)(92566002)(2950100002)(122556002)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2623; H:VI1PR0802MB2621.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: 10 Feb 2017 19:09:29.5029 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2623 Here is v5 of the patch rebased so it applies cleanly again on latest trunk with https://sourceware.org/ml/libc-alpha/2017-02/msg00220.html (they are independent but it seems to confuse patch somehow). 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. 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 d9acf8029d90b6eeb6db3b76bae4d419756a61e5..3987f616a241e814fe9636a54c321361c3ef78a4 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) -#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 +#ifndef __stpcpy +# define __stpcpy(dest, src) __builtin_stpcpy (dest, src) #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 - - #ifndef _FORCE_INLINES # undef __STRING_INLINE #endif diff --git a/string/string-inlines.c b/string/string-inlines.c index fa4a1594b2a1558f77a9c0de7263c94b6abee763..68aa7d072aca32367708e73a891772e332ddb18d 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 1e794f925d76182ddbf9e8d59f85aa4dbc3aee20..f99a72d4cf5a6985c58a913ac61dbe2451328354 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 4fd4e8d1de6afdf0a7e5a8b7fdb47a79894b5e71..63fa5a227f1959cb0ca04a4ce14882e1742c28d3 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 94cba8e76f2bcd4edafe17bde7243bbd0e965533..cdd45282e5e24b16e229047076d8692f96806841 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; \