Change memcpy ifunc to return memmove for x86
It is cleaner to do this with ifunc. This is a partial revert of: https://android-review.googlesource.com/c/platform/bionic/+/693863 Test: run bionic unit test Change-Id: I5fb5745fc98807805aedb94b683e959e2a76a25d
This commit is contained in:
parent
b9244ff551
commit
e141362aa1
|
@ -1171,7 +1171,7 @@ cc_library_static {
|
||||||
"arch-x86/atom/string/sse2-memset-atom.S",
|
"arch-x86/atom/string/sse2-memset-atom.S",
|
||||||
"arch-x86/atom/string/sse2-strlen-atom.S",
|
"arch-x86/atom/string/sse2-strlen-atom.S",
|
||||||
"arch-x86/atom/string/ssse3-memcmp-atom.S",
|
"arch-x86/atom/string/ssse3-memcmp-atom.S",
|
||||||
"arch-x86/atom/string/ssse3-memcpy-atom.S",
|
"arch-x86/atom/string/ssse3-memmove-atom.S",
|
||||||
"arch-x86/atom/string/ssse3-strcpy-atom.S",
|
"arch-x86/atom/string/ssse3-strcpy-atom.S",
|
||||||
"arch-x86/atom/string/ssse3-strncpy-atom.S",
|
"arch-x86/atom/string/ssse3-strncpy-atom.S",
|
||||||
"arch-x86/atom/string/ssse3-wmemcmp-atom.S",
|
"arch-x86/atom/string/ssse3-wmemcmp-atom.S",
|
||||||
|
|
|
@ -34,10 +34,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
# define MEMCPY memcpy_atom
|
# define MEMCPY memcpy_atom
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef USE_AS_MEMMOVE
|
|
||||||
# define USE_AS_MEMMOVE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef L
|
#ifndef L
|
||||||
# define L(label) .L##label
|
# define L(label) .L##label
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,12 +67,6 @@ name: \
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ALIAS_SYMBOL
|
|
||||||
# define ALIAS_SYMBOL(alias, original) \
|
|
||||||
.globl alias; \
|
|
||||||
.equ alias, original
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef END
|
#ifndef END
|
||||||
# define END(name) \
|
# define END(name) \
|
||||||
cfi_endproc; \
|
cfi_endproc; \
|
||||||
|
@ -3132,5 +3122,3 @@ L(bk_ssse3_cpy):
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
END (MEMCPY)
|
END (MEMCPY)
|
||||||
|
|
||||||
ALIAS_SYMBOL(memmove_atom, MEMCPY)
|
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2010, Intel Corporation
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of Intel Corporation nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define MEMCPY memmove_atom
|
||||||
|
#define USE_AS_MEMMOVE
|
||||||
|
#include "ssse3-memcpy-atom.S"
|
|
@ -93,13 +93,6 @@ DEFINE_IFUNC_FOR(__memset_chk) {
|
||||||
RETURN_FUNC(__memset_chk_func, __memset_chk_generic);
|
RETURN_FUNC(__memset_chk_func, __memset_chk_generic);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void* memcpy_func(void*, const void*, size_t);
|
|
||||||
DEFINE_IFUNC_FOR(memcpy) {
|
|
||||||
__builtin_cpu_init();
|
|
||||||
if (cpu_is(ATOM)) RETURN_FUNC(memcpy_func, memcpy_atom);
|
|
||||||
RETURN_FUNC(memcpy_func, memcpy_generic);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef void* memmove_func(void* __dst, const void* __src, size_t __n);
|
typedef void* memmove_func(void* __dst, const void* __src, size_t __n);
|
||||||
DEFINE_IFUNC_FOR(memmove) {
|
DEFINE_IFUNC_FOR(memmove) {
|
||||||
__builtin_cpu_init();
|
__builtin_cpu_init();
|
||||||
|
@ -107,6 +100,11 @@ DEFINE_IFUNC_FOR(memmove) {
|
||||||
RETURN_FUNC(memmove_func, memmove_generic);
|
RETURN_FUNC(memmove_func, memmove_generic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef void* memcpy_func(void*, const void*, size_t);
|
||||||
|
DEFINE_IFUNC_FOR(memcpy) {
|
||||||
|
return memmove_resolver();
|
||||||
|
}
|
||||||
|
|
||||||
typedef char* strcpy_func(char* __dst, const char* __src);
|
typedef char* strcpy_func(char* __dst, const char* __src);
|
||||||
DEFINE_IFUNC_FOR(strcpy) {
|
DEFINE_IFUNC_FOR(strcpy) {
|
||||||
__builtin_cpu_init();
|
__builtin_cpu_init();
|
||||||
|
|
|
@ -67,12 +67,6 @@ name: \
|
||||||
cfi_startproc
|
cfi_startproc
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ALIAS_SYMBOL
|
|
||||||
# define ALIAS_SYMBOL(alias, original) \
|
|
||||||
.globl alias; \
|
|
||||||
.equ alias, original
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef END
|
#ifndef END
|
||||||
# define END(name) \
|
# define END(name) \
|
||||||
cfi_endproc; \
|
cfi_endproc; \
|
||||||
|
@ -543,5 +537,3 @@ L(mm_large_page_loop_backward):
|
||||||
jmp L(mm_recalc_len)
|
jmp L(mm_recalc_len)
|
||||||
|
|
||||||
END (MEMMOVE)
|
END (MEMMOVE)
|
||||||
|
|
||||||
ALIAS_SYMBOL(memcpy_generic, MEMMOVE)
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ END(name)
|
||||||
FUNCTION_DELEGATE(memcmp, memcmp_generic)
|
FUNCTION_DELEGATE(memcmp, memcmp_generic)
|
||||||
FUNCTION_DELEGATE(memset, memset_generic)
|
FUNCTION_DELEGATE(memset, memset_generic)
|
||||||
FUNCTION_DELEGATE(__memset_chk, __memset_chk_generic)
|
FUNCTION_DELEGATE(__memset_chk, __memset_chk_generic)
|
||||||
FUNCTION_DELEGATE(memcpy, memcpy_generic)
|
FUNCTION_DELEGATE(memcpy, memmove_generic)
|
||||||
FUNCTION_DELEGATE(memmove, memmove_generic)
|
FUNCTION_DELEGATE(memmove, memmove_generic)
|
||||||
FUNCTION_DELEGATE(strcpy, strcpy_generic)
|
FUNCTION_DELEGATE(strcpy, strcpy_generic)
|
||||||
FUNCTION_DELEGATE(strncpy, strncpy_generic)
|
FUNCTION_DELEGATE(strncpy, strncpy_generic)
|
||||||
|
|
Loading…
Reference in New Issue