Work around old buggy program which cannot cope with memcpy semantics.
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 1 Apr 2011 23:38:21 +0000 (1 19:38 -0400)
committerUlrich Drepper <drepper@gmail.com>
Fri, 1 Apr 2011 23:38:21 +0000 (1 19:38 -0400)
ChangeLog
NEWS
sysdeps/x86_64/Versions
sysdeps/x86_64/memcpy.S
sysdeps/x86_64/memmove.c [copied from sysdeps/x86_64/multiarch/memmove.c with 55% similarity]
sysdeps/x86_64/multiarch/memcpy.S
sysdeps/x86_64/multiarch/memmove.c

index f093d9a..ff87466 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2011-03-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+       [BZ #12518]
+       * sysdeps/x86_64/Versions: Add memcpy to GLIBC_2.14.
+       * sysdeps/x86_64/memcpy.S: Provide GLIBC_2_14 memcpy.
+       * sysdeps/x86_64/memmove.c: New file.
+       * sysdeps/x86_64/multiarch/memcpy.S: Include <shlib-compat.h>.
+       (memcpy): Renamed to ...
+       (__new_memcpy): This.
+       (memcpy): Provide GLIBC_2_14 memcpy.
+       * sysdeps/x86_64/multiarch/memmove.c: Include <shlib-compat.h>.
+       (memcpy): Provide GLIBC_2_2_5 memcpy.
+
 2011-04-01  Ulrich Drepper  <drepper@gmail.com>
 
        [BZ #12631]
diff --git a/NEWS b/NEWS
index 711e11f..23be0b3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,8 +11,8 @@ Version 2.14
 
 * The following bugs are resolved with this release:
 
-  11724, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12583, 12587, 12597,
-  12631
+  11724, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12518, 12583, 12587,
+  12597, 12631
 \f
 Version 2.13
 
index 253a65f..a437f85 100644 (file)
@@ -1,3 +1,8 @@
+libc {
+  GLIBC_2.14 {
+    memcpy;
+  }
+}
 libm {
   GLIBC_2.1 {
     # A generic bug got this omitted from other configurations' version
index b4545ac..724d44e 100644 (file)
 #  define RETVAL       (0)
 #else
 #  define RETVAL       (-8)
+#  if defined SHARED && !defined USE_MULTIARCH && !defined NOT_IN_libc
+#    define memcpy     __memcpy
+#    undef libc_hidden_builtin_def
+#    define libc_hidden_builtin_def(name) \
+       .globl __GI_memcpy; __GI_memcpy = __memcpy
+#  endif
 #endif
 #define SAVE0  (RETVAL - 8)
 #define SAVE1  (SAVE0  - 8)
@@ -571,4 +577,9 @@ END(memcpy)
 
 #ifndef USE_AS_MEMPCPY
 libc_hidden_builtin_def (memcpy)
+# if defined SHARED && !defined USE_MULTIARCH && !defined NOT_IN_libc
+#  undef memcpy
+#  include <shlib-compat.h>
+versioned_symbol (libc, __memcpy, memcpy, GLIBC_2_14);
+# endif
 #endif
similarity index 55%
copy from sysdeps/x86_64/multiarch/memmove.c
copy to sysdeps/x86_64/memmove.c
index 3798627..1a6f87d 100644 (file)
@@ -1,5 +1,4 @@
-/* Multiple versions of memmove.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2011 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
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <string.h>
+#include "string/memmove.c"
 
-#ifndef NOT_IN_libc
-#include "init-arch.h"
+#if !defined memmove && !defined NOT_IN_libc
+#include <shlib-compat.h>
 
-#define MEMMOVE __memmove_sse2
-#ifdef SHARED
-# undef libc_hidden_builtin_def
-# define libc_hidden_builtin_def(name) \
-  __hidden_ver1 (__memmove_sse2, __GI_memmove, __memmove_sse2);
-#endif
+#if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14)
+compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5);
 #endif
-
-extern __typeof (memmove) __memmove_sse2 attribute_hidden;
-extern __typeof (memmove) __memmove_ssse3 attribute_hidden;
-extern __typeof (memmove) __memmove_ssse3_back attribute_hidden;
-
-#include "string/memmove.c"
-
-#ifndef NOT_IN_libc
-libc_ifunc (memmove,
-           HAS_SSSE3
-           ? (HAS_FAST_COPY_BACKWARD
-              ? __memmove_ssse3_back : __memmove_ssse3)
-           : __memmove_sse2);
 #endif
index 8e9fb19..9863014 100644 (file)
@@ -1,5 +1,6 @@
 /* Multiple versions of memcpy
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011
+   Free Software Foundation, Inc.
    Contributed by Intel Corporation.
    This file is part of the GNU C Library.
 
@@ -19,6 +20,7 @@
    02111-1307 USA.  */
 
 #include <sysdep.h>
+#include <shlib-compat.h>
 #include <init-arch.h>
 
 /* Define multiple versions only for the definition in lib and for
@@ -26,8 +28,8 @@
    happened.  */
 #if defined SHARED && !defined NOT_IN_libc
        .text
-ENTRY(memcpy)
-       .type   memcpy, @gnu_indirect_function
+ENTRY(__new_memcpy)
+       .type   __new_memcpy, @gnu_indirect_function
        cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
        jne     1f
        call    __init_cpu_features
@@ -39,7 +41,7 @@ ENTRY(memcpy)
        jz      2f
        leaq    __memcpy_ssse3_back(%rip), %rax
 2:     ret
-END(memcpy)
+END(__new_memcpy)
 
 # undef ENTRY
 # define ENTRY(name) \
@@ -68,6 +70,8 @@ END(memcpy)
    by the indirect call in the PLT.  */
 # define libc_hidden_builtin_def(name) \
        .globl __GI_memcpy; __GI_memcpy = __memcpy_sse2
+
+versioned_symbol (libc, __new_memcpy, memcpy, GLIBC_2_14);
 #endif
 
 #include "../memcpy.S"
index 3798627..04de891 100644 (file)
@@ -1,5 +1,6 @@
 /* Multiple versions of memmove.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011
+   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
@@ -20,6 +21,7 @@
 #include <string.h>
 
 #ifndef NOT_IN_libc
+#include <shlib-compat.h>
 #include "init-arch.h"
 
 #define MEMMOVE __memmove_sse2
@@ -42,4 +44,8 @@ libc_ifunc (memmove,
            ? (HAS_FAST_COPY_BACKWARD
               ? __memmove_ssse3_back : __memmove_ssse3)
            : __memmove_sse2);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14)
+compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5);
+#endif
 #endif