@@ -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 <stdlib.h>
-# endif
-
-# ifndef _HAVE_STRING_ARCH_strdup
+# define __need_malloc_and_calloc
+# include <stdlib.h>
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. */
@@ -31,7 +31,6 @@
#undef __NO_INLINE__
#include <bits/string.h>
-#include <bits/string2.h>
#include "shlib-compat.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)
{
@@ -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
@@ -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: 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 <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. --