OSDN Git Service

Add new option for SuSv3 legacy functions and use it for bcopy/bzero/bcmp/index/rindex
authorPeter S. Mazinger <ps.m@gmx.net>
Thu, 23 Mar 2006 17:19:42 +0000 (17:19 -0000)
committerPeter S. Mazinger <ps.m@gmx.net>
Thu, 23 Mar 2006 17:19:42 +0000 (17:19 -0000)
29 files changed:
extra/Configs/Config.in
include/string.h
include/strings.h
libc/string/arm/bcopy.S
libc/string/arm/bzero.S
libc/string/arm/memcmp.S
libc/string/bcopy.c
libc/string/bzero.c
libc/string/generic/memcmp.c
libc/string/generic/strchr.c
libc/string/generic/strrchr.c
libc/string/i386/strchr.c
libc/string/i386/strrchr.c
libc/string/ia64/bcopy.S
libc/string/ia64/bzero.S
libc/string/ia64/memcmp.S
libc/string/ia64/strchr.S
libc/string/memcmp.c
libc/string/sparc/sparc32/memcpy.S
libc/string/sparc/sparc32/memset.S
libc/string/sparc/sparc32/strchr.S
libc/string/sparc/sparc64/memcpy.S
libc/string/sparc/sparc64/memset.S
libc/string/sparc/sparc64/sparcv9b/memcpy.S
libc/string/sparc/sparc64/strchr.S
libc/string/strchr.c
libc/string/strrchr.c
libc/string/x86_64/bzero.S
libc/string/x86_64/strchr.S

index 374f8da..4861b8d 100644 (file)
@@ -455,6 +455,15 @@ config COMPAT_ATEXIT
          Enable this option if you want to update from 0.9.28 to svn/0.9.29, else
          you will be missing atexit() until you rebuild all apps.
 
+config UCLIBC_SUSV3_LEGACY
+       bool "Enable SuSv3 LEGACY functions"
+       default n
+       help
+         Enable this option if you want to have SuSv3 LEGACY functions
+         in the library, else they are replaced by SuSv3 proposed macros.
+         Currently applies to bcopy/bzero/bcmp/index/rindex.
+         WARNING! ABI incompatibility.
+
 config HAS_SHADOW
        bool "Shadow Password Support"
        default y
index a98248c..dd5f23f 100644 (file)
@@ -301,6 +301,7 @@ extern void __bzero (void *__s, size_t __n) __THROW __nonnull ((1));
 #endif
 
 #ifdef __USE_BSD
+# ifdef __UCLIBC_SUSV3_LEGACY__
 /* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
 extern void bcopy (__const void *__src, void *__dest, size_t __n)
      __THROW __nonnull ((1, 2));
@@ -319,6 +320,17 @@ extern char *index (__const char *__s, int __c)
 /* Find the last occurrence of C in S (same as strrchr).  */
 extern char *rindex (__const char *__s, int __c)
      __THROW __attribute_pure__ __nonnull ((1));
+# else
+/* bcopy/bzero/bcmp/index/rindex are marked LEGACY in SuSv3.
+ * They are replaced as proposed by SuSv3. Don't sync this part 
+ * with glibc and keep it in sync with strings.h.  */
+
+#  define bcopy(src,dest,n) (memmove((dest), (src), (n)), (void) 0)
+#  define bzero(s,n) (memset((s), '\0', (n)), (void) 0)
+#  define bcmp(s1,s2,n) memcmp((s1), (s2), (size_t)(n))
+#  define index(s,c) strchr((s), (c))
+#  define rindex(s,c) strrchr((s), (c))
+# endif
 
 /* Return the position of the first bit set in I, or 0 if none are set.
    The least-significant bit is position 1, the most-significant 32.  */
index 0b310e1..fe089d9 100644 (file)
@@ -33,6 +33,7 @@
 
 __BEGIN_DECLS
 
+# ifdef __UCLIBC_SUSV3_LEGACY__
 /* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
 extern void bcopy (__const void *__src, void *__dest, size_t __n)
      __THROW __nonnull ((1, 2));
@@ -51,6 +52,17 @@ extern char *index (__const char *__s, int __c)
 /* Find the last occurrence of C in S (same as strrchr).  */
 extern char *rindex (__const char *__s, int __c)
      __THROW __attribute_pure__ __nonnull ((1));
+# else
+/* bcopy/bzero/bcmp/index/rindex are marked LEGACY in SuSv3.
+ * They are replaced as proposed by SuSv3. Don't sync this part 
+ * with glibc and keep it in sync with string.h.  */
+
+#  define bcopy(src,dest,n) (memmove((dest), (src), (n)), (void) 0)
+#  define bzero(s,n) (memset((s), '\0', (n)), (void) 0)
+#  define bcmp(s1,s2,n) memcmp((s1), (s2), (size_t)(n))
+#  define index(s,c) strchr((s), (c))
+#  define rindex(s,c) strrchr((s), (c))
+# endif
 
 /* Return the position of the first bit set in I, or 0 if none are set.
    The least-significant bit is position 1, the most-significant 32.  */
index 0e55922..db3c9e6 100644 (file)
@@ -41,6 +41,8 @@
 
 #include <features.h>
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
+
 .text
 .global bcopy
 .type bcopy,%function
@@ -54,3 +56,5 @@ bcopy:
        b       _memcpy /* (PLT) */
        
 .size bcopy,.-bcopy
+
+#endif
index c1eb933..ee49cf5 100644 (file)
@@ -39,6 +39,8 @@
 
 #include <features.h>
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
+
 .text
 .global bzero
 .type bzero,%function
@@ -50,3 +52,5 @@ bzero:
        b       HIDDEN_JUMPTARGET(memset)
 
 .size bzero,.-bzero
+
+#endif
index af1b876..4f78b51 100644 (file)
@@ -63,4 +63,6 @@ memcmp:
 .size memcmp,.-memcmp
 
 libc_hidden_def(memcmp)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(memcmp,bcmp)
+#endif
index 11c3e80..bd233cb 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "_string.h"
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
+
 libc_hidden_proto(memmove)
 
 void bcopy(const void *s2, void *s1, size_t n)
@@ -51,3 +53,4 @@ void bcopy(const void *s2, void *s1, size_t n)
 #endif
 #endif
 }
+#endif
index 30bdf56..519695c 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "_string.h"
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
+
 libc_hidden_proto(memset)
 
 void bzero(void *s, size_t n)
@@ -29,3 +31,4 @@ void bzero(void *s, size_t n)
 #endif
 }
 #undef np
+#endif
index 41f1536..b754a51 100644 (file)
@@ -331,4 +331,6 @@ memcmp (const __ptr_t s1, const __ptr_t s2, size_t len)
   return 0;
 }
 libc_hidden_def(memcmp)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(memcmp,bcmp)
+#endif
index b1ffc75..1663add 100644 (file)
@@ -182,4 +182,6 @@ char *strchr (const char *s, int c_in)
   return NULL;
 }
 libc_hidden_def(strchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strchr,index)
+#endif
index b67e369..97192da 100644 (file)
@@ -43,4 +43,6 @@ char *strrchr (const char *s, int c)
   return (char *) found;
 }
 libc_hidden_def(strrchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strrchr,rindex)
+#endif
index 5ed87e8..7568d48 100644 (file)
@@ -51,4 +51,6 @@ char *strchr(const char *s, int c)
     return __res;
 }
 libc_hidden_def(strchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strchr,index)
+#endif
index 7af990b..e3b2df6 100644 (file)
@@ -49,4 +49,6 @@ char *strrchr(const char *s, int c)
     return __res;
 }
 libc_hidden_def(strrchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strrchr,rindex)
+#endif
index c4eb22b..c5637c3 100644 (file)
@@ -1,5 +1,7 @@
 #include "sysdep.h"
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
+
 ENTRY(bcopy)
        .regstk 3, 0, 0, 0
        mov r8 = in0
@@ -8,3 +10,5 @@ ENTRY(bcopy)
        mov in1 = r8
        br.cond.sptk.many HIDDEN_JUMPTARGET(memmove)
 END(bcopy)
+
+#endif
index 0e2ff09..d390838 100644 (file)
@@ -33,6 +33,9 @@
    to get peak speed.  */
 
 #include "sysdep.h"
+
+#ifdef __UCLIBC_SUSV3_LEGACY__
+
 #undef ret
 
 #define dest           in0
@@ -313,3 +316,5 @@ ENTRY(bzero)
        br.ret.sptk.many rp
 ;; }
 END(bzero)
+
+#endif
index c6ea752..8b0c096 100644 (file)
@@ -160,6 +160,7 @@ ENTRY(memcmp)
        mov     ar.lc = saved_lc        // restore the loop counter
        br.ret.sptk.many b0
 END(memcmp)
-
-weak_alias (memcmp, bcmp)
 libc_hidden_def (memcmp)
+#ifdef __UCLIBC_SUSV3_LEGACY__
+strong_alias (memcmp, bcmp)
+#endif
index 7d1a083..401a079 100644 (file)
@@ -107,6 +107,7 @@ ENTRY(strchr)
        ld8     val2 = [ret0], 8        // bomb out here
        br.cond.sptk    .back
 END(strchr)
-
-weak_alias (strchr, index)
 libc_hidden_def (strchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
+strong_alias (strchr, index)
+#endif
index 9de28c2..377a8d6 100644 (file)
@@ -38,5 +38,7 @@ int Wmemcmp(const Wvoid *s1, const Wvoid *s2, size_t n)
 
 #ifndef WANT_WIDE
 libc_hidden_def(memcmp)
+# ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(memcmp,bcmp)
+# endif
 #endif
index fb79a60..25a4884 100644 (file)
@@ -21,6 +21,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
+
 /* Both these macros have to start with exactly the same insn */
 #define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7)                                \
        ldd     [%src + offset + 0x00], %t0;                                                            \
        b               3f
         sub            %o0, 2, %o0
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
 ENTRY(bcopy)
        mov             %o0, %o3
        mov             %o1, %o0
        mov             %o3, %o1
 END(bcopy)
+#endif
 
 ENTRY(memmove)
        cmp             %o0, %o1
index d5e1350..358fe49 100644 (file)
@@ -20,6 +20,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
+
        /* Store 64 bytes at (BASE + OFFSET) using value SOURCE. */
 #define ZERO_BIG_BLOCK(base, offset, source)           \
        std             source, [base + offset + 0x00]; \
@@ -43,6 +45,7 @@
 
        .text
        .align 4
+#ifdef __UCLIBC_SUSV3_LEGACY__
 ENTRY(bzero)
        b               1f
         mov            %g0, %g3
@@ -61,6 +64,7 @@ ENTRY(bzero)
        b               4f
         sub            %o0, %o2, %o0
 END(bzero)
+#endif
 
 ENTRY(memset)
        and             %o1, 0xff, %g3
index d06bbe3..16710d4 100644 (file)
@@ -35,6 +35,8 @@
           in these days for an average user.
         */
 
+#include <features.h>
+
        .text
        .align          4
 10:    ldub            [%o0], %g4
@@ -217,7 +219,9 @@ ENTRY(strchr)
         ld             [%o0], %g4
 END(strchr)
 libc_hidden_def(strchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strchr,index)
+#endif
 
 ENTRY(strrchr)
        andcc           %o1, 0xff, %o1
@@ -278,4 +282,6 @@ ENTRY(strrchr)
         mov            %o5, %o0
 END(strrchr)
 libc_hidden_def(strrchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strrchr,rindex)
+#endif
index 2fdff7b..db63d1d 100644 (file)
@@ -20,6 +20,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
 #include <asm/asi.h>
 #ifndef XCC
 #define USE_BPR
        .text
        .align          32
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
 ENTRY(bcopy)
        sub             %o1, %o0, %o4                   /* IEU0         Group           */
        mov             %o0, %g3                        /* IEU1                         */
@@ -206,6 +208,7 @@ ENTRY(bcopy)
        retl
         nop
 END(bcopy)
+#endif
 
        .align          32
 200:   be,pt           %xcc, 201f                      /* CTI                          */
index 2847135..79c1d74 100644 (file)
@@ -20,6 +20,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
 #include <asm/asi.h>
 #ifndef XCC
 #define XCC xcc
@@ -191,6 +192,7 @@ libc_hidden_def(memset)
 
        .text
        .align          32
+#ifdef __UCLIBC_SUSV3_LEGACY__
 ENTRY(bzero)
 #ifndef USE_BPR
        srl             %o1, 0, %o1
@@ -310,3 +312,4 @@ ENTRY(bzero)
 0:     retl
         mov            %o5, %o0
 END(bzero)
+#endif
index b49c9cd..64f6a92 100644 (file)
@@ -19,6 +19,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
+
 #define ASI_BLK_P 0xf0
 #define FPRS_FEF  0x04
 #define VISEntryHalf rd %fprs, %o5; wr %g0, FPRS_FEF, %fprs
@@ -36,6 +38,7 @@
        .text
        .align  32
 
+#ifdef __UCLIBC_SUSV3_LEGACY__
 ENTRY(bcopy)
        sub             %o1, %o0, %o4
        mov             %o0, %g4
@@ -51,6 +54,7 @@ ENTRY(bcopy)
        retl
         nop
 END(bcopy)
+#endif
 
        /* Special/non-trivial issues of this code:
         *
index 6a37135..da26d1f 100644 (file)
@@ -20,6 +20,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <features.h>
 #include <asm/asi.h>
 #ifndef XCC
 #define XCC xcc
@@ -329,7 +330,9 @@ ENTRY(strchr)
         add            %o0, -1, %o0                    /* IEU0                         */
 END(strchr)
 libc_hidden_def(strchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strchr,index)
+#endif
 
        .align          32
 ENTRY(strrchr)
@@ -478,4 +481,6 @@ ENTRY(strrchr)
         ldx            [%o0], %o3                      /* Load                         */
 END(strrchr)
 libc_hidden_def(strrchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strrchr,rindex)
+#endif
index 6bfd207..0ce5524 100644 (file)
@@ -27,6 +27,6 @@ Wchar *Wstrchr(register const Wchar *s, Wint c)
 }
 libc_hidden_def(Wstrchr)
 
-#ifndef WANT_WIDE
+#if !defined WANT_WIDE && defined __UCLIBC_SUSV3_LEGACY__
 strong_alias(strchr,index)
 #endif
index 8a9184f..67cafb7 100644 (file)
@@ -29,5 +29,7 @@ Wchar *Wstrrchr(register const  Wchar *s, Wint c)
 }
 #ifndef WANT_WIDE
 libc_hidden_def(strrchr)
+# ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias(strrchr,rindex)
+# endif
 #endif
index b6e41fb..4d179ec 100644 (file)
@@ -1,2 +1,5 @@
-#define memset bzero
-#include "memset.S"
+#include <features.h>
+#ifdef __UCLIBC_SUSV3_LEGACY__
+# define memset bzero
+# include "memset.S"
+#endif
index 6f6635a..8e59c4c 100644 (file)
@@ -285,4 +285,6 @@ ENTRY (BP_SYM (strchr))
 END (BP_SYM (strchr))
 
 libc_hidden_def(strchr)
+#ifdef __UCLIBC_SUSV3_LEGACY__
 strong_alias (BP_SYM (strchr), BP_SYM (index))
+#endif