From patchwork Thu Feb 9 15:31:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 19192 Received: (qmail 108219 invoked by alias); 9 Feb 2017 15:31:16 -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 108202 invoked by uid 89); 9 Feb 2017 15:31:16 -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=misc, needle, 2196, 1996 X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com From: Wilco Dijkstra To: Joseph Myers CC: Florian Weimer , "libc-alpha@sourceware.org" , nd Subject: Re: [PATCH v4] Remove defines to builtins in string2.h Date: Thu, 9 Feb 2017 15:31:02 +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: d7452439-89e1-4f6d-16e0-08d45100a839 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081); SRVR:AM5PR0802MB2612; x-microsoft-exchange-diagnostics: 1; AM5PR0802MB2612; 7:Keo35eQJz61cBmsWPB/4v8iDTPL49dNZPY0NnKkbL+5ulR2Cx0J+aIPIzoiGU633sYbE5zVRmJgW6hXxnOmtF2RGgGRfyMAmphVDWH/eCG6ugxZFVSJTcz6U9+LQEzb4zgwYr0SV4jAWH/Ypeu0p53z+H5Av3LG17arUVVIMirxG+qK3Bsu6drYSrLQq4QCsV6SmRMkv3uY9CejF9AWD/QrwYqSp1/Y6ttFasKucSnRYX9FeKB1amPL58ouPiVAlzQEUX5OawxV4+7B6MD+mm4kuQNYLtXOh0dcwnu3XnOvOAXuUic7E2jzFqg50mbFOccpKC2dajnOl4SNU+v3w5uLANXgsi5bhrBgKjLZUU+eZr4MiZhAgk5AMxeixdmrw/I53W6j1Fh4XCwjcIDfsT1IEaeO/JPb7Ri1U41rzFqUTovECD0f7QDstfI7CzibnEkRFVObs63AlLTXx+HFs4OpRH2uEsU4ZNr/HI1uDj7LgGqrpXYAUjFU1GkHh1qshejHwHrjiBFt1K4OYx/+1CA== 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)(20161123560025)(20161123564025)(20161123558025)(20161123555025)(6072148); SRVR:AM5PR0802MB2612; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0802MB2612; x-forefront-prvs: 02135EB356 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39860400002)(39850400002)(39410400002)(39450400003)(39840400002)(199003)(189002)(377424004)(54534003)(93886004)(77096006)(229853002)(6306002)(55016002)(99286003)(6436002)(6506006)(25786008)(54906002)(9686003)(3846002)(4326007)(7736002)(33656002)(101416001)(81166006)(81156014)(102836003)(8936002)(105586002)(305945005)(106356001)(6116002)(106116001)(8676002)(74316002)(5660300001)(66066001)(92566002)(2900100001)(122556002)(4001150100001)(97736004)(189998001)(6916009)(2950100002)(6246003)(53546003)(575784001)(53946003)(110136004)(53936002)(7696004)(86362001)(76176999)(38730400002)(54356999)(2906002)(68736007)(3280700002)(3660700001)(50986999)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2612; H:AM5PR0802MB2610.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX: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: 09 Feb 2017 15:31:02.8164 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2612 ping From: Wilco Dijkstra Sent: 23 November 2016 18:59 To: Joseph Myers Cc: Florian Weimer; libc-alpha@sourceware.org; nd Subject: [PATCH v4] Remove defines to builtins in string2.h   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;                                   \