This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 0/5] Move x86 __cpu_features to rtld_global
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 11 Aug 2015 05:19:18 -0700
- Subject: Re: [PATCH 0/5] Move x86 __cpu_features to rtld_global
- Authentication-results: sourceware.org; auth=none
- References: <20150805170741 dot GA12339 at intel dot com>
On Wed, Aug 5, 2015 at 10:07 AM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> 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
>
I will check it in this Thursday if I don't hear any objections.
--
H.J.