This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 0/5] Move x86 __cpu_features to rtld_global


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]