This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 0/5] Move x86 __cpu_features to rtld_global
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Wed, 5 Aug 2015 10:07:41 -0700
- Subject: [PATCH 0/5] Move x86 __cpu_features to rtld_global
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Here is a set of 5 patches to move x86 __cpu_features to
_dl_x86_cpu_features in rtld_global.
One drawback of the current x86 struct cpu_features initialization is
we don't know if it is available when it is used. IFUNC selectors have
to check __cpu_features and call __init_cpu_features before using
__cpu_features, which leads to code duplication. It is also expensive
for ia32 since it has to save and restore EBX for function call via PLT.
This set of patches add _dl_x86_cpu_features to rtld_global and
initialize it early before __libc_start_main is called so that
cpu_features is always available when it is used and we can avoid
calling __init_cpu_features in IFUNC selectors.
H.J. Lu (5):
Add _dl_x86_cpu_features to rtld_global
Update x86_64 multiarch functions for <cpu-features.h>
Update i686 multiarch functions for <cpu-features.h>
Update libmvec multiarch functions for <cpu-features.h>
Update x86 elision-conf.c for <cpu-features.h>
math/Makefile | 2 +-
sysdeps/i386/dl-machine.h | 3 +
sysdeps/i386/dl-procinfo.c | 16 ++
sysdeps/i386/i686/cacheinfo.c | 1 -
sysdeps/i386/i686/fpu/multiarch/e_expf.c | 8 +-
sysdeps/i386/i686/fpu/multiarch/s_cosf.c | 2 +-
sysdeps/i386/i686/fpu/multiarch/s_sincosf.c | 3 +-
sysdeps/i386/i686/fpu/multiarch/s_sinf.c | 2 +-
sysdeps/i386/i686/multiarch/Makefile | 1 -
sysdeps/i386/i686/multiarch/Versions | 5 -
sysdeps/i386/i686/multiarch/bcopy.S | 45 +---
sysdeps/i386/i686/multiarch/bzero.S | 39 +---
sysdeps/i386/i686/multiarch/ifunc-defines.sym | 1 -
sysdeps/i386/i686/multiarch/ifunc-impl-list.c | 199 ++++++++++-------
sysdeps/i386/i686/multiarch/memchr.S | 36 +---
sysdeps/i386/i686/multiarch/memcmp.S | 39 +---
sysdeps/i386/i686/multiarch/memcpy.S | 29 +--
sysdeps/i386/i686/multiarch/memcpy_chk.S | 29 +--
sysdeps/i386/i686/multiarch/memmove.S | 60 ++----
sysdeps/i386/i686/multiarch/memmove_chk.S | 50 +----
sysdeps/i386/i686/multiarch/mempcpy.S | 29 +--
sysdeps/i386/i686/multiarch/mempcpy_chk.S | 29 +--
sysdeps/i386/i686/multiarch/memrchr.S | 36 +---
sysdeps/i386/i686/multiarch/memset.S | 39 +---
sysdeps/i386/i686/multiarch/memset_chk.S | 40 +---
sysdeps/i386/i686/multiarch/rawmemchr.S | 36 +---
sysdeps/i386/i686/multiarch/s_fma.c | 3 +-
sysdeps/i386/i686/multiarch/s_fmaf.c | 3 +-
sysdeps/i386/i686/multiarch/strcasecmp.S | 43 +---
sysdeps/i386/i686/multiarch/strcat.S | 44 +---
sysdeps/i386/i686/multiarch/strchr.S | 23 +-
sysdeps/i386/i686/multiarch/strcmp.S | 43 +---
sysdeps/i386/i686/multiarch/strcpy.S | 44 +---
sysdeps/i386/i686/multiarch/strcspn.S | 32 +--
sysdeps/i386/i686/multiarch/strlen.S | 23 +-
sysdeps/i386/i686/multiarch/strncase.S | 43 +---
sysdeps/i386/i686/multiarch/strnlen.S | 19 +-
sysdeps/i386/i686/multiarch/strrchr.S | 23 +-
sysdeps/i386/i686/multiarch/strspn.S | 32 +--
sysdeps/i386/i686/multiarch/wcschr.S | 19 +-
sysdeps/i386/i686/multiarch/wcscmp.S | 19 +-
sysdeps/i386/i686/multiarch/wcscpy.S | 19 +-
sysdeps/i386/i686/multiarch/wcslen.S | 19 +-
sysdeps/i386/i686/multiarch/wcsrchr.S | 19 +-
sysdeps/i386/i686/multiarch/wmemcmp.S | 23 +-
sysdeps/i386/ldsodefs.h | 1 +
sysdeps/unix/sysv/linux/x86/Makefile | 1 -
sysdeps/unix/sysv/linux/x86/elision-conf.c | 4 +-
sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c | 2 +-
sysdeps/x86/Makefile | 11 +
sysdeps/x86/Versions | 5 +
sysdeps/x86/cpu-features-offsets.sym | 7 +
sysdeps/x86/cpu-features.c | 202 +++++++++++++++++
sysdeps/x86/cpu-features.h | 240 +++++++++++++++++++++
sysdeps/x86/dl-get-cpu-features.c | 27 +++
sysdeps/x86/libc-start.c | 41 ++++
sysdeps/x86/rtld-global-offsets.sym | 7 +
sysdeps/x86/tst-get-cpu-features-static.c | 1 +
sysdeps/x86/tst-get-cpu-features.c | 31 +++
sysdeps/x86_64/cacheinfo.c | 137 ++----------
sysdeps/x86_64/dl-machine.h | 3 +
sysdeps/x86_64/dl-procinfo.c | 57 +++++
sysdeps/x86_64/fpu/math-tests-arch.h | 42 +---
sysdeps/x86_64/fpu/multiarch/e_asin.c | 8 +-
sysdeps/x86_64/fpu/multiarch/e_atan2.c | 9 +-
sysdeps/x86_64/fpu/multiarch/e_exp.c | 9 +-
sysdeps/x86_64/fpu/multiarch/e_log.c | 9 +-
sysdeps/x86_64/fpu/multiarch/e_pow.c | 5 +-
sysdeps/x86_64/fpu/multiarch/s_atan.c | 9 +-
sysdeps/x86_64/fpu/multiarch/s_ceil.S | 5 +-
sysdeps/x86_64/fpu/multiarch/s_ceilf.S | 5 +-
sysdeps/x86_64/fpu/multiarch/s_floor.S | 5 +-
sysdeps/x86_64/fpu/multiarch/s_floorf.S | 4 +-
sysdeps/x86_64/fpu/multiarch/s_fma.c | 9 +-
sysdeps/x86_64/fpu/multiarch/s_fmaf.c | 9 +-
sysdeps/x86_64/fpu/multiarch/s_nearbyint.S | 4 +-
sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S | 5 +-
sysdeps/x86_64/fpu/multiarch/s_rint.S | 5 +-
sysdeps/x86_64/fpu/multiarch/s_rintf.S | 5 +-
sysdeps/x86_64/fpu/multiarch/s_sin.c | 14 +-
sysdeps/x86_64/fpu/multiarch/s_tan.c | 9 +-
sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S | 8 +-
.../x86_64/fpu/multiarch/svml_s_sincosf16_core.S | 10 +-
.../x86_64/fpu/multiarch/svml_s_sincosf4_core.S | 8 +-
.../x86_64/fpu/multiarch/svml_s_sincosf8_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S | 10 +-
sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S | 8 +-
sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S | 6 +-
sysdeps/x86_64/ldsodefs.h | 1 +
sysdeps/x86_64/multiarch/Makefile | 1 -
sysdeps/x86_64/multiarch/Versions | 5 -
sysdeps/x86_64/multiarch/cacheinfo.c | 2 -
sysdeps/x86_64/multiarch/ifunc-defines.sym | 1 -
sysdeps/x86_64/multiarch/ifunc-impl-list.c | 139 +++++++-----
sysdeps/x86_64/multiarch/init-arch.c | 223 -------------------
sysdeps/x86_64/multiarch/init-arch.h | 194 +----------------
sysdeps/x86_64/multiarch/memcmp.S | 9 +-
sysdeps/x86_64/multiarch/memcpy.S | 12 +-
sysdeps/x86_64/multiarch/memcpy_chk.S | 12 +-
sysdeps/x86_64/multiarch/memmove.c | 6 +-
sysdeps/x86_64/multiarch/memmove_chk.c | 6 +-
sysdeps/x86_64/multiarch/mempcpy.S | 12 +-
sysdeps/x86_64/multiarch/mempcpy_chk.S | 12 +-
sysdeps/x86_64/multiarch/memset.S | 8 +-
sysdeps/x86_64/multiarch/memset_chk.S | 8 +-
sysdeps/x86_64/multiarch/sched_cpucount.c | 2 +-
sysdeps/x86_64/multiarch/strcat.S | 10 +-
sysdeps/x86_64/multiarch/strchr.S | 8 +-
sysdeps/x86_64/multiarch/strcmp.S | 42 ++--
sysdeps/x86_64/multiarch/strcpy.S | 10 +-
sysdeps/x86_64/multiarch/strcspn.S | 8 +-
sysdeps/x86_64/multiarch/strspn.S | 8 +-
sysdeps/x86_64/multiarch/strstr.c | 5 +-
sysdeps/x86_64/multiarch/test-multiarch.c | 18 +-
sysdeps/x86_64/multiarch/wcscpy.S | 7 +-
sysdeps/x86_64/multiarch/wmemcmp.S | 9 +-
145 files changed, 1400 insertions(+), 1905 deletions(-)
delete mode 100644 sysdeps/i386/i686/multiarch/Versions
create mode 100644 sysdeps/x86/Versions
create mode 100644 sysdeps/x86/cpu-features-offsets.sym
create mode 100644 sysdeps/x86/cpu-features.c
create mode 100644 sysdeps/x86/cpu-features.h
create mode 100644 sysdeps/x86/dl-get-cpu-features.c
create mode 100644 sysdeps/x86/libc-start.c
create mode 100644 sysdeps/x86/rtld-global-offsets.sym
create mode 100644 sysdeps/x86/tst-get-cpu-features-static.c
create mode 100644 sysdeps/x86/tst-get-cpu-features.c
create mode 100644 sysdeps/x86_64/dl-procinfo.c
delete mode 100644 sysdeps/x86_64/multiarch/Versions
delete mode 100644 sysdeps/x86_64/multiarch/cacheinfo.c
delete mode 100644 sysdeps/x86_64/multiarch/init-arch.c
--
2.4.3