x86-64: Implement memmove family IFUNC selectors in C
commit5c3e322d3be3803636e38bcaf083fb59b3a34f0c
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 14 Jun 2017 19:10:57 +0000 (14 12:10 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 14 Jun 2017 19:11:10 +0000 (14 12:11 -0700)
treec28fc5c42069960659ebff1bffd1d0e71f4adcfd
parent69052a3a95da37169a08f9e59b2cc1808312753c
x86-64: Implement memmove family IFUNC selectors in C

Implement memmove family IFUNC selectors in C.

All internal calls within libc.so can use IFUNC on x86-64 since unlike
x86, x86-64 supports PC-relative addressing to access the GOT entry so
that it can call via PLT without using an extra register.  For libc.a,
we can't use IFUNC for functions which are called before IFUNC has been
initialized.  Use IFUNC internally reduces the icache footprint since
libc.so and other codes in the process use the same implementations.
This patch uses IFUNC for memmove family functions within libc.

* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
memmove-sse2-unaligned-erms, memcpy_chk-nonshared,
mempcpy_chk-nonshared and memmove_chk-nonshared.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c
(__libc_ifunc_impl_list): Add tests for __memmove_chk_erms,
__memcpy_chk_erms and __mempcpy_chk_erms.  Update comments.
* sysdeps/x86_64/multiarch/ifunc-memmove.h: New file.
* sysdeps/x86_64/multiarch/memcpy.c: Likewise.
* sysdeps/x86_64/multiarch/memcpy_chk-nonshared.S: Likewise.
* sysdeps/x86_64/multiarch/memcpy_chk.c: Likewise.
* sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms.S: Likewise.
* sysdeps/x86_64/multiarch/memmove.c: Likewise.
* sysdeps/x86_64/multiarch/memmove_chk-nonshared.S: Likewise.
* sysdeps/x86_64/multiarch/memmove_chk.c: Likewise.
* sysdeps/x86_64/multiarch/mempcpy.c: Likewise.
* sysdeps/x86_64/multiarch/mempcpy_chk-nonshared.S: Likewise.
* sysdeps/x86_64/multiarch/mempcpy_chk.c: Likewise.
* sysdeps/x86_64/multiarch/memcpy.S: Removed.
* sysdeps/x86_64/multiarch/memcpy_chk.S: Likewise.
* sysdeps/x86_64/multiarch/memmove.S: Likewise.
* sysdeps/x86_64/multiarch/memmove_chk.S: Likewise.
* sysdeps/x86_64/multiarch/mempcpy.S: Likewise.
* sysdeps/x86_64/multiarch/mempcpy_chk.S: Likewise.
* sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
(__mempcpy_chk_erms): New function.
(__memmove_chk_erms): Likewise.
(__memcpy_chk_erms): New alias.
21 files changed:
ChangeLog
sysdeps/x86_64/multiarch/Makefile
sysdeps/x86_64/multiarch/ifunc-impl-list.c
sysdeps/x86_64/multiarch/ifunc-memmove.h [new file with mode: 0644]
sysdeps/x86_64/multiarch/memcpy.S [deleted file]
sysdeps/x86_64/multiarch/memcpy.c [new file with mode: 0644]
sysdeps/x86_64/multiarch/memcpy_chk-nonshared.S [new file with mode: 0644]
sysdeps/x86_64/multiarch/memcpy_chk.S [deleted file]
sysdeps/x86_64/multiarch/memcpy_chk.c [new file with mode: 0644]
sysdeps/x86_64/multiarch/memmove-sse2-unaligned-erms.S [new file with mode: 0644]
sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
sysdeps/x86_64/multiarch/memmove.S [deleted file]
sysdeps/x86_64/multiarch/memmove.c [new file with mode: 0644]
sysdeps/x86_64/multiarch/memmove_chk-nonshared.S [new file with mode: 0644]
sysdeps/x86_64/multiarch/memmove_chk.S [deleted file]
sysdeps/x86_64/multiarch/memmove_chk.c [new file with mode: 0644]
sysdeps/x86_64/multiarch/mempcpy.S [deleted file]
sysdeps/x86_64/multiarch/mempcpy.c [new file with mode: 0644]
sysdeps/x86_64/multiarch/mempcpy_chk-nonshared.S [new file with mode: 0644]
sysdeps/x86_64/multiarch/mempcpy_chk.S [deleted file]
sysdeps/x86_64/multiarch/mempcpy_chk.c [new file with mode: 0644]