diff options
Diffstat (limited to 'sysdeps/i386')
-rw-r--r-- | sysdeps/i386/Versions | 5 | ||||
-rw-r--r-- | sysdeps/i386/bits/string.h | 66 | ||||
-rw-r--r-- | sysdeps/i386/i486/Versions | 13 | ||||
-rw-r--r-- | sysdeps/i386/i486/bits/string.h | 35 |
4 files changed, 84 insertions, 35 deletions
diff --git a/sysdeps/i386/Versions b/sysdeps/i386/Versions index a45b00d1e0..57951ebdf6 100644 --- a/sysdeps/i386/Versions +++ b/sysdeps/i386/Versions @@ -7,4 +7,9 @@ libc { # global variable _fp_hw; } + GLIBC_2.1.1 { + # extern inline functions used by <bits/string.h> + __memcpy_c; __memset_cc; __memset_cg; __memset_gg; __strchr_c; __strchr_g; + __strchrnul_c; __strchrnul_g; + } } diff --git a/sysdeps/i386/bits/string.h b/sysdeps/i386/bits/string.h index 5a67c1b4e1..d67db630f5 100644 --- a/sysdeps/i386/bits/string.h +++ b/sysdeps/i386/bits/string.h @@ -30,10 +30,12 @@ #if !defined __NO_STRING_INLINES && defined __USE_STRING_INLINES \ && defined __GNUC__ && __GNUC__ >= 2 -#ifdef __cplusplus -# define __STRING_INLINE inline -#else -# define __STRING_INLINE extern __inline +#ifndef __STRING_INLINE +# ifdef __cplusplus +# define __STRING_INLINE inline +# else +# define __STRING_INLINE extern __inline +# endif #endif @@ -138,6 +140,7 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n) /* Copy N bytes of SRC to DEST, guaranteeing correct behavior for overlapping strings. */ #define _HAVE_STRING_ARCH_memmove 1 +#ifndef _FORCE_INLINES __STRING_INLINE void * memmove (void *__dest, __const void *__src, size_t __n) { @@ -162,7 +165,7 @@ memmove (void *__dest, __const void *__src, size_t __n) : "memory"); return __dest; } - +#endif /* Set N bytes of S to C. */ #define _HAVE_STRING_ARCH_memset 1 @@ -268,6 +271,7 @@ __memset_gg (void *__s, char __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) { @@ -285,10 +289,11 @@ memchr (__const void *__s, int __c, size_t __n) : "a" (__c), "0" (__s), "1" (__n)); return __res - 1; } - +#endif /* Return the length of S. */ #define _HAVE_STRING_ARCH_strlen 1 +#ifndef _FORCE_INLINES __STRING_INLINE size_t strlen (__const char *__str) { @@ -303,10 +308,11 @@ strlen (__const char *__str) : "cc"); return __res - 1; } - +#endif /* Copy SRC to DEST. */ #define _HAVE_STRING_ARCH_strcpy 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strcpy (char *__dest, __const char *__src) { @@ -323,10 +329,11 @@ strcpy (char *__dest, __const char *__src) : "ax", "memory", "cc"); return __dest; } - +#endif /* Copy no more than N characters of SRC to DEST. */ #define _HAVE_STRING_ARCH_strncpy 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strncpy (char *__dest, __const char *__src, size_t __n) { @@ -347,10 +354,11 @@ strncpy (char *__dest, __const char *__src, size_t __n) : "ax", "memory", "cc"); return __dest; } - +#endif /* Append SRC onto DEST. */ #define _HAVE_STRING_ARCH_strcat 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strcat (char *__dest, __const char *__src) { @@ -369,10 +377,11 @@ strcat (char *__dest, __const char *__src) : "memory", "cc"); return __dest; } - +#endif /* Append no more than N characters from SRC onto DEST. */ #define _HAVE_STRING_ARCH_strncat 1 +#ifndef _FORCE_INLINES __STRING_INLINE char * strncat (char *__dest, __const char *__src, size_t __n) { @@ -399,10 +408,11 @@ strncat (char *__dest, __const char *__src, size_t __n) : "memory", "cc"); return __dest; } - +#endif /* Compare S1 and S2. */ #define _HAVE_STRING_ARCH_strcmp 1 +#ifndef _FORCE_INLINES __STRING_INLINE int strcmp (__const char *__s1, __const char *__s2) { @@ -427,10 +437,11 @@ strcmp (__const char *__s1, __const char *__s2) : "cc"); return __res; } - +#endif /* Compare N characters of S1 and S2. */ #define _HAVE_STRING_ARCH_strncmp 1 +#ifndef _FORCE_INLINES __STRING_INLINE int strncmp (__const char *__s1, __const char *__s2, size_t __n) { @@ -458,7 +469,7 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n) : "cc"); return __res; } - +#endif /* Find the first occurrence of C in S. */ #define _HAVE_STRING_ARCH_strchr 1 @@ -580,7 +591,8 @@ __strchrnul_c (__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 -#ifdef __PIC__ +#ifndef _FORCE_INLINES +# ifdef __PIC__ __STRING_INLINE size_t strcspn (__const char *__s, __const char *__reject) { @@ -609,7 +621,7 @@ strcspn (__const char *__s, __const char *__reject) : "cc"); return (__res - 1) - __s; } -#else +# else __STRING_INLINE size_t strcspn (__const char *__s, __const char *__reject) { @@ -636,13 +648,15 @@ strcspn (__const char *__s, __const char *__reject) : "cc"); return (__res - 1) - __s; } +# endif #endif /* Return the length of the initial segment of S which consists entirely of characters in ACCEPT. */ #define _HAVE_STRING_ARCH_strspn 1 -#ifdef __PIC__ +#ifndef _FORCE_INLINES +# ifdef __PIC__ __STRING_INLINE size_t strspn (__const char *__s, __const char *__accept) { @@ -671,7 +685,7 @@ strspn (__const char *__s, __const char *__accept) : "cc"); return (__res - 1) - __s; } -#else +# else __STRING_INLINE size_t strspn (__const char *__s, __const char *__accept) { @@ -698,12 +712,14 @@ strspn (__const char *__s, __const char *__accept) : "cc"); return (__res - 1) - __s; } +# endif #endif /* Find the first occurrence in S of any character in ACCEPT. */ #define _HAVE_STRING_ARCH_strpbrk 1 -#ifdef __PIC__ +#ifndef _FORCE_INLINES +# ifdef __PIC__ __STRING_INLINE char * strpbrk (__const char *__s, __const char *__accept) { @@ -736,7 +752,7 @@ strpbrk (__const char *__s, __const char *__accept) : "cc"); return __res; } -#else +# else __STRING_INLINE char * strpbrk (__const char *__s, __const char *__accept) { @@ -767,12 +783,14 @@ strpbrk (__const char *__s, __const char *__accept) : "cc"); return __res; } +# endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #define _HAVE_STRING_ARCH_strstr 1 -#ifdef __PIC__ +#ifndef _FORCE_INLINES +# ifdef __PIC__ __STRING_INLINE char * strstr (__const char *__haystack, __const char *__needle) { @@ -804,7 +822,7 @@ strstr (__const char *__haystack, __const char *__needle) : "cc"); return __res; } -#else +# else __STRING_INLINE char * strstr (__const char *__haystack, __const char *__needle) { @@ -834,9 +852,11 @@ strstr (__const char *__haystack, __const char *__needle) : "cc"); return __res; } +# endif #endif - -#undef __STRING_INLINE +#ifndef _FORCE_INLINES +# undef __STRING_INLINE +#endif #endif /* use string inlines && GNU CC */ diff --git a/sysdeps/i386/i486/Versions b/sysdeps/i386/i486/Versions new file mode 100644 index 0000000000..b33fa127a4 --- /dev/null +++ b/sysdeps/i386/i486/Versions @@ -0,0 +1,13 @@ +libc { + GLIBC_2.1.1 { + # extern inline functions used by <bits/string.h> + __memcpy_by2; __memcpy_by4; __memcpy_g; __mempcpy_by2; __mempcpy_by4; + __mempcpy_byn; __memset_ccn_by2; __memset_ccn_by4; __memset_gcn_by2; + __memset_gcn_by4; __stpcpy_g; __strcat_c; __strcat_g; __strchr_c; + __strchr_g; __strchrnul_c; __strchrnul_g; __strcmp_gg; __strcpy_g; + __strcspn_c1; __strcspn_cg; __strcspn_g; __strlen_g; __strncat_g; + __strncmp_g; __strncpy_by2; __strncpy_by4; __strncpy_byn; __strncpy_gg; + __strpbrk_cg; __strpbrk_g; __strrchr_c; __strrchr_g; __strspn_c1; + __strspn_cg; __strspn_g; __strstr_cg; __strstr_g; + } +} diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h index e726a340a1..5bf80f0398 100644 --- a/sysdeps/i386/i486/bits/string.h +++ b/sysdeps/i386/i486/bits/string.h @@ -30,10 +30,12 @@ #if !defined __NO_STRING_INLINES && defined __USE_STRING_INLINES \ && defined __GNUC__ && __GNUC__ >= 2 -#ifdef __cplusplus -# define __STRING_INLINE inline -#else -# define __STRING_INLINE extern __inline +#ifndef __STRING_INLINE +# ifdef __cplusplus +# define __STRING_INLINE inline +# else +# define __STRING_INLINE extern __inline +# endif #endif /* The macros are used in some of the optimized implementations below. */ @@ -133,7 +135,8 @@ __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. */ __STRING_INLINE void * @@ -159,11 +162,12 @@ memmove (void *__dest, __const void *__src, size_t __n) : "memory"); return __dest; } - +#endif /* Compare N bytes of S1 and S2. */ #define _HAVE_STRING_ARCH_memcmp 1 -#ifndef __PIC__ +#ifndef _FORCE_INLINES +# ifndef __PIC__ /* gcc has problems to spill registers when using PIC. */ __STRING_INLINE int memcmp (__const void *__s1, __const void *__s2, size_t __n) @@ -183,9 +187,9 @@ memcmp (__const void *__s1, __const void *__s2, size_t __n) : "cc"); return __res; } +# endif #endif - /* Set N bytes of S to C. */ #define _HAVE_STRING_ARCH_memset 1 #define memset(s, c, n) \ @@ -390,6 +394,7 @@ __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) { @@ -421,10 +426,13 @@ memchr (__const void *__s, int __c, size_t __n) #endif return __res - 1; } - +#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 __STRING_INLINE void * __rawmemchr (const void *__s, int __c) { @@ -438,13 +446,14 @@ __rawmemchr (const void *__s, int __c) : "cc"); return __res - 1; } -#ifdef __USE_GNU +#if defined __USE_GNU && !defined _FORCE_INLINES __STRING_INLINE void * rawmemchr (const void *__s, int __c) { return __rawmemchr (__s, __c); } -#endif /* use GNU */ +# endif /* use GNU */ +#endif /* Return the length of S. */ @@ -1817,6 +1826,8 @@ __strstr_g (__const char *__haystack, __const char *__needle) # endif /* i686 */ #endif /* BSD || X/Open */ -#undef __STRING_INLINE +#ifndef _FORCE_INLINES +# undef __STRING_INLINE +#endif #endif /* use string inlines && GNU CC */ |