From: H.J. Lu Date: Fri, 1 Apr 2011 23:38:21 +0000 (-0400) Subject: Work around old buggy program which cannot cope with memcpy semantics. X-Git-Tag: glibc-2.14~191 X-Git-Url: https://repo.or.cz/w/glibc.git/commitdiff_plain/0354e355014b7bfda32622e0255399d859862fcd?hp=8593482f5ec33daa90fca63db380edc8283c39df Work around old buggy program which cannot cope with memcpy semantics. --- diff --git a/ChangeLog b/ChangeLog index f093d9a948..ff874664ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2011-03-26 H.J. Lu + + [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 . + (memcpy): Renamed to ... + (__new_memcpy): This. + (memcpy): Provide GLIBC_2_14 memcpy. + * sysdeps/x86_64/multiarch/memmove.c: Include . + (memcpy): Provide GLIBC_2_2_5 memcpy. + 2011-04-01 Ulrich Drepper [BZ #12631] diff --git a/NEWS b/NEWS index 711e11fab5..23be0b3084 100644 --- 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 Version 2.13 diff --git a/sysdeps/x86_64/Versions b/sysdeps/x86_64/Versions index 253a65f04e..a437f85e6e 100644 --- a/sysdeps/x86_64/Versions +++ b/sysdeps/x86_64/Versions @@ -1,3 +1,8 @@ +libc { + GLIBC_2.14 { + memcpy; + } +} libm { GLIBC_2.1 { # A generic bug got this omitted from other configurations' version diff --git a/sysdeps/x86_64/memcpy.S b/sysdeps/x86_64/memcpy.S index b4545ac9f7..724d44e6ce 100644 --- a/sysdeps/x86_64/memcpy.S +++ b/sysdeps/x86_64/memcpy.S @@ -31,6 +31,12 @@ # 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 +versioned_symbol (libc, __memcpy, memcpy, GLIBC_2_14); +# endif #endif diff --git a/sysdeps/x86_64/multiarch/memmove.c b/sysdeps/x86_64/memmove.c similarity index 55% copy from sysdeps/x86_64/multiarch/memmove.c copy to sysdeps/x86_64/memmove.c index 379862722b..1a6f87dc8f 100644 --- a/sysdeps/x86_64/multiarch/memmove.c +++ b/sysdeps/x86_64/memmove.c @@ -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 @@ -17,29 +16,12 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include +#include "string/memmove.c" -#ifndef NOT_IN_libc -#include "init-arch.h" +#if !defined memmove && !defined NOT_IN_libc +#include -#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 diff --git a/sysdeps/x86_64/multiarch/memcpy.S b/sysdeps/x86_64/multiarch/memcpy.S index 8e9fb190d3..9863014f55 100644 --- a/sysdeps/x86_64/multiarch/memcpy.S +++ b/sysdeps/x86_64/multiarch/memcpy.S @@ -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 +#include #include /* 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" diff --git a/sysdeps/x86_64/multiarch/memmove.c b/sysdeps/x86_64/multiarch/memmove.c index 379862722b..04de891293 100644 --- a/sysdeps/x86_64/multiarch/memmove.c +++ b/sysdeps/x86_64/multiarch/memmove.c @@ -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 #ifndef NOT_IN_libc +#include #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