summaryrefslogtreecommitdiff
path: root/csu
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@sourceware.org>2017-05-31 06:38:32 +0530
committerSiddhesh Poyarekar <siddhesh@sourceware.org>2017-05-31 06:38:33 +0530
commit4158ba082c641f407009363b186b4c85f8a01a35 (patch)
treefcce87f0eaeed4b2c2e76f68fcc41a73f2c63b29 /csu
parentAdd reallocarray function (diff)
downloadglibc-4158ba082c641f407009363b186b4c85f8a01a35.tar.gz
glibc-4158ba082c641f407009363b186b4c85f8a01a35.tar.bz2
glibc-4158ba082c641f407009363b186b4c85f8a01a35.zip
Delay initialization of CPU features struct in static binaries
Allow the CPU features structure set up to be overridden by tunables by delaying it to until after tunables are initialized. The initialization is already delayed in dynamically linked glibc, it is only in static binaries that the initialization is set early to allow it to influence IFUNC relocations that happen in libc-start. It is a bit too early however and there is a good place between tunables initialization and IFUNC relocations where this can be done. Verified that this does not regress the testsuite. * csu/libc-start.c [!ARCH_INIT_CPU_FEATURES]: Define ARCH_INIT_CPU_FEATURES. (LIBC_START_MAIN): Call it. * sysdeps/unix/sysv/linux/aarch64/libc-start.c (__libc_start_main): Remove. (ARCH_INIT_CPU_FEATURES): New macro. * sysdeps/x86/libc-start.c (__libc_start_main): Remove. (ARCH_INIT_CPU_FEATURES): New macro.
Diffstat (limited to 'csu')
-rw-r--r--csu/libc-start.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/csu/libc-start.c b/csu/libc-start.c
index 9a56dcbbae..c2dd1593eb 100644
--- a/csu/libc-start.c
+++ b/csu/libc-start.c
@@ -104,6 +104,10 @@ apply_irel (void)
# define MAIN_AUXVEC_PARAM
#endif
+#ifndef ARCH_INIT_CPU_FEATURES
+# define ARCH_INIT_CPU_FEATURES()
+#endif
+
STATIC int LIBC_START_MAIN (int (*main) (int, char **, char **
MAIN_AUXVEC_DECL),
int argc,
@@ -182,6 +186,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
__tunables_init (__environ);
+ ARCH_INIT_CPU_FEATURES ();
+
/* Perform IREL{,A} relocations. */
apply_irel ();