mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 08:11:08 +00:00
Work around old buggy program which cannot cope with memcpy semantics.
This commit is contained in:
parent
8593482f5e
commit
0354e35501
13
ChangeLog
13
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>
|
2011-04-01 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
[BZ #12631]
|
[BZ #12631]
|
||||||
|
4
NEWS
4
NEWS
@ -11,8 +11,8 @@ Version 2.14
|
|||||||
|
|
||||||
* The following bugs are resolved with this release:
|
* The following bugs are resolved with this release:
|
||||||
|
|
||||||
11724, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12583, 12587, 12597,
|
11724, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12518, 12583, 12587,
|
||||||
12631
|
12597, 12631
|
||||||
|
|
||||||
Version 2.13
|
Version 2.13
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
libc {
|
||||||
|
GLIBC_2.14 {
|
||||||
|
memcpy;
|
||||||
|
}
|
||||||
|
}
|
||||||
libm {
|
libm {
|
||||||
GLIBC_2.1 {
|
GLIBC_2.1 {
|
||||||
# A generic bug got this omitted from other configurations' version
|
# A generic bug got this omitted from other configurations' version
|
||||||
|
@ -31,6 +31,12 @@
|
|||||||
# define RETVAL (0)
|
# define RETVAL (0)
|
||||||
#else
|
#else
|
||||||
# define RETVAL (-8)
|
# 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
|
#endif
|
||||||
#define SAVE0 (RETVAL - 8)
|
#define SAVE0 (RETVAL - 8)
|
||||||
#define SAVE1 (SAVE0 - 8)
|
#define SAVE1 (SAVE0 - 8)
|
||||||
@ -571,4 +577,9 @@ END(memcpy)
|
|||||||
|
|
||||||
#ifndef USE_AS_MEMPCPY
|
#ifndef USE_AS_MEMPCPY
|
||||||
libc_hidden_builtin_def (memcpy)
|
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
|
#endif
|
||||||
|
27
sysdeps/x86_64/memmove.c
Normal file
27
sysdeps/x86_64/memmove.c
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* 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
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 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
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA. */
|
||||||
|
|
||||||
|
#include "string/memmove.c"
|
||||||
|
|
||||||
|
#if !defined memmove && !defined NOT_IN_libc
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14)
|
||||||
|
compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5);
|
||||||
|
#endif
|
||||||
|
#endif
|
@ -1,5 +1,6 @@
|
|||||||
/* Multiple versions of memcpy
|
/* Multiple versions of memcpy
|
||||||
Copyright (C) 2010 Free Software Foundation, Inc.
|
Copyright (C) 2010, 2011
|
||||||
|
Free Software Foundation, Inc.
|
||||||
Contributed by Intel Corporation.
|
Contributed by Intel Corporation.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
@ -19,6 +20,7 @@
|
|||||||
02111-1307 USA. */
|
02111-1307 USA. */
|
||||||
|
|
||||||
#include <sysdep.h>
|
#include <sysdep.h>
|
||||||
|
#include <shlib-compat.h>
|
||||||
#include <init-arch.h>
|
#include <init-arch.h>
|
||||||
|
|
||||||
/* Define multiple versions only for the definition in lib and for
|
/* Define multiple versions only for the definition in lib and for
|
||||||
@ -26,8 +28,8 @@
|
|||||||
happened. */
|
happened. */
|
||||||
#if defined SHARED && !defined NOT_IN_libc
|
#if defined SHARED && !defined NOT_IN_libc
|
||||||
.text
|
.text
|
||||||
ENTRY(memcpy)
|
ENTRY(__new_memcpy)
|
||||||
.type memcpy, @gnu_indirect_function
|
.type __new_memcpy, @gnu_indirect_function
|
||||||
cmpl $0, KIND_OFFSET+__cpu_features(%rip)
|
cmpl $0, KIND_OFFSET+__cpu_features(%rip)
|
||||||
jne 1f
|
jne 1f
|
||||||
call __init_cpu_features
|
call __init_cpu_features
|
||||||
@ -39,7 +41,7 @@ ENTRY(memcpy)
|
|||||||
jz 2f
|
jz 2f
|
||||||
leaq __memcpy_ssse3_back(%rip), %rax
|
leaq __memcpy_ssse3_back(%rip), %rax
|
||||||
2: ret
|
2: ret
|
||||||
END(memcpy)
|
END(__new_memcpy)
|
||||||
|
|
||||||
# undef ENTRY
|
# undef ENTRY
|
||||||
# define ENTRY(name) \
|
# define ENTRY(name) \
|
||||||
@ -68,6 +70,8 @@ END(memcpy)
|
|||||||
by the indirect call in the PLT. */
|
by the indirect call in the PLT. */
|
||||||
# define libc_hidden_builtin_def(name) \
|
# define libc_hidden_builtin_def(name) \
|
||||||
.globl __GI_memcpy; __GI_memcpy = __memcpy_sse2
|
.globl __GI_memcpy; __GI_memcpy = __memcpy_sse2
|
||||||
|
|
||||||
|
versioned_symbol (libc, __new_memcpy, memcpy, GLIBC_2_14);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../memcpy.S"
|
#include "../memcpy.S"
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* Multiple versions of memmove.
|
/* 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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -20,6 +21,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifndef NOT_IN_libc
|
#ifndef NOT_IN_libc
|
||||||
|
#include <shlib-compat.h>
|
||||||
#include "init-arch.h"
|
#include "init-arch.h"
|
||||||
|
|
||||||
#define MEMMOVE __memmove_sse2
|
#define MEMMOVE __memmove_sse2
|
||||||
@ -42,4 +44,8 @@ libc_ifunc (memmove,
|
|||||||
? (HAS_FAST_COPY_BACKWARD
|
? (HAS_FAST_COPY_BACKWARD
|
||||||
? __memmove_ssse3_back : __memmove_ssse3)
|
? __memmove_ssse3_back : __memmove_ssse3)
|
||||||
: __memmove_sse2);
|
: __memmove_sse2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT (libc, GLIBC_2_2_5, GLIBC_2_14)
|
||||||
|
compat_symbol (libc, memmove, memcpy, GLIBC_2_2_5);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user