arm: Implement memcpy ifunc selection in C

System Internals / glibc - Adhemerval Zanella [linaro.org] - 6 November 2017 19:37 EST

This patch refactor ARM memcpy ifunc selector to a C implementation. No functional change is expected, including ifunc resolution rules.

It also adds some cleanup:

- Internal memcpy hidden definition (__GI_memcpy) is now a hidden symbol.

- No need to create hidden definition for the ifunc variants.

Checked on armv7-linux-gnueabihf and with a build for arm-linux-gnueabi, arm-linux-gnueabihf with and without multiarch support and with both GCC 7.1 and GCC mainline. I also checked with the some possible multiarch different configurations that trigger different memcpy buids (__ARM_NEON__ && !__SOFT_FP__, !__ARM_NEON__ && !__SOFT_FP__, and !__ARM_NEON__ && __SOFT_FP__).

- sysdeps/arm/arm-ifunc.h: New file.
- sysdeps/arm/armv7/multiarch/ifunc-memcpy.h: Likewise.
- sysdeps/arm/armv7/multiarch/memcpy.c: Likewise.
- sysdeps/arm/armv7/multiarch/memcpy_arm.S: Likewise.
- sysdeps/arm/armv7/multiarch/rtld-memcpy.S: Likewise.
- sysdeps/arm/armv7/multiarch/memcpy_neon.S [!__ARM_NEON__] (__memcpy_neon): Avoid create hidden alias.
- sysdeps/arm/armv7/multiarch/memcpy_vfp.S [!__ARM_NEON_] (__memcpy_vfp): Likewise.
- sysdeps/arm/armv7/multiarch/Makefile [$(subdir) = string] (sysdep_routines): Add memcpy_arm.
- sysdeps/arm/armv7/multiarch/memcpy.S: Remove file.

802c1f1645 arm: Implement memcpy ifunc selection in C
ChangeLog | 15 ++++++
sysdeps/arm/arm-ifunc.h | 33 +++++++++++++
sysdeps/arm/armv7/multiarch/Makefile | 2 +-
sysdeps/arm/armv7/multiarch/ifunc-memcpy.h | 37 +++++++++++++++
sysdeps/arm/armv7/multiarch/memcpy.S | 76 ------------------------------
sysdeps/arm/armv7/multiarch/memcpy.c | 35 ++++++++++++++
sysdeps/arm/armv7/multiarch/memcpy_arm.S | 10 ++++
sysdeps/arm/armv7/multiarch/memcpy_neon.S | 8 ++--
sysdeps/arm/armv7/multiarch/memcpy_vfp.S | 4 +-
sysdeps/arm/armv7/multiarch/rtld-memcpy.S | 1 +
10 files changed, 139 insertions(+), 82 deletions(-)

Upstream: sourceware.org


  • Share