Message ID | AM5PR0802MB26104A1AFCFBAFCBE886BBD1833F0@AM5PR0802MB2610.eurprd08.prod.outlook.com |
---|---|
State | New |
Headers | show |
Some comments below. On 23/03/2017 08:17, Wilco Dijkstra wrote: > > ping > > > 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) Since you are touching it, I would prefer to just get rid of __bzero altogether (there is no need to keep using an outdated api within glibc). > > /* 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 <bits/string.h> > -#include <bits/string2.h> > > #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)) I am almost sure this won't work, as indicated by the warnings: In file included from ../string/string.h:513:0, from ../include/string.h:54, from tester.c:32, from inl-tester.c:6: ../sysdeps/s390/bits/string.h:225:32: error: expected declaration specifiers or ‘...’ before ‘(’ token #define strcmp(s1, s2) strcmp ((s1), (s2)) ^ ../sysdeps/s390/bits/string.h:227:1: note: in expansion of macro ‘strcmp’ strcmp (const char *__s1, const char *__s2) ^~~~~~ ../sysdeps/s390/bits/string.h:225:38: error: expected declaration specifiers or ‘...’ before ‘(’ token #define strcmp(s1, s2) strcmp ((s1), (s2)) ^ ../sysdeps/s390/bits/string.h:227:1: note: in expansion of macro ‘strcmp’ strcmp (const char *__s1, const char *__s2) ^~~~~~ I think it better to just remove the define. > __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; \ > >
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 <bits/string.h> -#include <bits/string2.h> #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; \
ping From: Wilco Dijkstra Sent: 10 February 2017 19:09 To: Joseph Myers Cc: Florian Weimer; libc-alpha@sourceware.org; nd Subject: Re: [PATCH v5] Remove defines to builtins in string2.h 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 <wdijkstr@arm.com> * 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. ---