mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
Update.
1999-05-17 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/i386/i486/Versions: New file with inline functions from sysdeps/i386/i486/bits/string.h for now. * sysdeps/i386/Versions: Add inline functions from sysdeps/i386/bits/string.h. * string/Versions: Add inline functions from <bits/string2.h>. * string/Makefile (routines): Add string-inlines. * string/string-inlines.c: New file, used for implementation of extern inline functions. * sysdeps/i386/i486/bits/string.h: Use _FORCE_INLINES to generate non inlined versions of functions. * string/bits/string2.h: Likewise. * sysdeps/i386/bits/string.h: Likewise. 1999-05-17 Ulrich Drepper <drepper@cygnus.com> * inet/arpa/tftp.h: Add second packed attribute.
This commit is contained in:
parent
431c33c0bc
commit
9bbd7837b6
23
ChangeLog
23
ChangeLog
@ -1,3 +1,26 @@
|
||||
1999-05-17 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||
|
||||
* sysdeps/i386/i486/Versions: New file with inline functions from
|
||||
sysdeps/i386/i486/bits/string.h for now.
|
||||
|
||||
* sysdeps/i386/Versions: Add inline functions from
|
||||
sysdeps/i386/bits/string.h.
|
||||
|
||||
* string/Versions: Add inline functions from <bits/string2.h>.
|
||||
|
||||
* string/Makefile (routines): Add string-inlines.
|
||||
* string/string-inlines.c: New file, used for implementation of
|
||||
extern inline functions.
|
||||
|
||||
* sysdeps/i386/i486/bits/string.h: Use _FORCE_INLINES to generate
|
||||
non inlined versions of functions.
|
||||
* string/bits/string2.h: Likewise.
|
||||
* sysdeps/i386/bits/string.h: Likewise.
|
||||
|
||||
1999-05-17 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* inet/arpa/tftp.h: Add second packed attribute.
|
||||
|
||||
1999-05-16 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de>
|
||||
|
||||
* malloc/malloc.c: Cleanup to bring in line with released
|
||||
|
@ -56,7 +56,7 @@ struct tftphdr {
|
||||
unsigned short tu_block; /* block # */
|
||||
short tu_code; /* error code */
|
||||
char tu_stuff[1]; /* request packet stuff */
|
||||
} th_u;
|
||||
} th_u __attribute__ ((__packed__));
|
||||
char th_data[1]; /* data or error string */
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
|
@ -39,7 +39,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \
|
||||
delete extract insert stringify \
|
||||
addsep replace) \
|
||||
envz basename \
|
||||
strcoll_l strxfrm_l
|
||||
strcoll_l strxfrm_l string-inlines
|
||||
|
||||
tests := tester inl-tester noinl-tester testcopy test-ffs \
|
||||
tst-strlen stratcliff tst-svc tst-inlcall
|
||||
|
@ -57,6 +57,12 @@ libc {
|
||||
strcasestr; strverscmp;
|
||||
}
|
||||
GLIBC_2.1.1 {
|
||||
# extern inline functions used by <bits/string2.h>
|
||||
__mempcpy_small; __stpcpy_small; __strcspn_c1; __strcspn_c2; __strcspn_c3;
|
||||
__strcpy_small; __strspn_c1; __strspn_c2; __strspn_c3; __strpbrk_c2;
|
||||
__strpbrk_c3; __strsep_1c; __strsep_2c; __strsep_3c; __strsep_g;
|
||||
__strtok_r_1c;
|
||||
|
||||
# s*
|
||||
strchrnul; __strverscmp;
|
||||
}
|
||||
|
@ -39,10 +39,12 @@
|
||||
We must use here macros instead of inline functions since the
|
||||
trick won't work with the later. */
|
||||
|
||||
#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
|
||||
|
||||
#if _STRING_ARCH_unaligned
|
||||
@ -939,7 +941,7 @@ __strpbrk_c3 (__const char *__s, char __accept1, char __accept2,
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
#if defined __USE_GNU && !defined _FORCE_INLINES
|
||||
# ifndef _HAVE_STRING_ARCH_strnlen
|
||||
__STRING_INLINE size_t strnlen (__const char *__string, size_t __maxlen);
|
||||
__STRING_INLINE size_t
|
||||
@ -1151,6 +1153,8 @@ __strsep_g (char **__s, __const char *__reject)
|
||||
|
||||
#endif /* Use misc. or use GNU. */
|
||||
|
||||
#undef __STRING_INLINE
|
||||
#ifndef _FORCE_INLINES
|
||||
# undef __STRING_INLINE
|
||||
#endif
|
||||
|
||||
#endif /* No string inlines. */
|
||||
|
28
string/string-inlines.c
Normal file
28
string/string-inlines.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* <bits/string.h> and <bits/string2.h> declare some extern inline
|
||||
functions. These functions are declared additionally here if
|
||||
inlining is not possible. */
|
||||
|
||||
#define __USE_STRING_INLINES
|
||||
#define _FORCE_INLINES
|
||||
#define __STRING_INLINE /* empty */
|
||||
|
||||
#include <string.h>
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 */
|
||||
|
13
sysdeps/i386/i486/Versions
Normal file
13
sysdeps/i386/i486/Versions
Normal file
@ -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;
|
||||
}
|
||||
}
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user