This patch refactor ARM memchr ifunc selector to a C implementation. No functional change is expected, including ifunc resolution rules.
It also reorganize the ifunc options code:
1. The memchr_impl.S is renamed to memchr_neon.S and multiple compilation options (which route to armv6t2/memchr one) is removed. The code to build if __ARM_NEON__ is defined is also simplified.
2. A memchr_noneon is added (which as build along previous ifunc resolution) and includes the armv6t2 direct.
3. Same as 2. for loader object.
Alongside the aforementioned changes, it also some cleanus:
- Internal memchr 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.
- sysdeps/arm/armv7/multiarch/Makefile [$(subdir) = string] (sysdeps_routines): Add memchr_noneon.
- sysdeps/arm/armv7/multiarch/ifunc-memchr.h: New file.
- sysdeps/arm/armv7/multiarch/memchr_noneon.S: Likewise.
- sysdeps/arm/armv7/multiarch/rtld-memchr.S: Likewise.
- sysdeps/arm/armv7/multiarch/memchr.S: Remove file.
- sysdeps/arm/armv7/multiarch/memchr.c: New file.
- sysdeps/arm/armv7/multiarch/memchr_impl.S: Move to ...
- sysdeps/arm/armv7/multiarch/memchr_neon.S: ... here.
a1a638dda9 arm: Implement memchr ifunc selection in C
ChangeLog | 10 ++
sysdeps/arm/armv7/multiarch/Makefile | 3 +-
sysdeps/arm/armv7/multiarch/ifunc-memchr.h | 28 ++++
sysdeps/arm/armv7/multiarch/memchr.S | 59 --------
sysdeps/arm/armv7/multiarch/memchr.c | 35 +++++
sysdeps/arm/armv7/multiarch/memchr_impl.S | 219 ---------------------------
sysdeps/arm/armv7/multiarch/memchr_neon.S | 221 +++++++++++++++++++++++++++-
sysdeps/arm/armv7/multiarch/memchr_noneon.S | 5 +
sysdeps/arm/armv7/multiarch/rtld-memchr.S | 1 +
9 files changed, 296 insertions(+), 285 deletions(-)