This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v5] Remove defines to builtins in string2.h


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;                                   \
>             
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]