about summary refs log tree commit diff
path: root/sysdeps/mach
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2024-01-03 20:14:43 +0300
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-01-04 23:48:23 +0100
commit4145de65f696ae06be72fadd67967be556c31ac2 (patch)
tree2d520062204d5badb73fd9bec659e779b5fb0698 /sysdeps/mach
parent9eaa0e179962a10db91fe566753fc38623097dbe (diff)
downloadglibc-4145de65f696ae06be72fadd67967be556c31ac2.tar.gz
glibc-4145de65f696ae06be72fadd67967be556c31ac2.tar.xz
glibc-4145de65f696ae06be72fadd67967be556c31ac2.zip
hurd: Only init early static TLS if it's used to store stack or pointer guards
This is the case on both x86 architectures, but not on AArch64.

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
Message-ID: <20240103171502.1358371-11-bugaevc@gmail.com>
Diffstat (limited to 'sysdeps/mach')
-rw-r--r--sysdeps/mach/hurd/init-first.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sysdeps/mach/hurd/init-first.c b/sysdeps/mach/hurd/init-first.c
index 8526191692..26ccd37e55 100644
--- a/sysdeps/mach/hurd/init-first.c
+++ b/sysdeps/mach/hurd/init-first.c
@@ -38,7 +38,16 @@ extern int __libc_argc attribute_hidden;
 extern char **__libc_argv attribute_hidden;
 extern char **_dl_argv;
 
-#ifndef SHARED
+#if !defined (SHARED) && (defined (THREAD_SET_STACK_GUARD) || defined (THREAD_SET_POINTER_GUARD))
+/* In the static case, we need to set up TLS early so that the stack
+   protection guard can be read at from TLS by the GCC-generated snippets,
+   on architectures that store the guard in TLS and not globally.  */
+# define USE_INIT1_TCBHEAD 1
+#else
+# define USE_INIT1_TCBHEAD 0
+#endif
+
+#if USE_INIT1_TCBHEAD
 static tcbhead_t __init1_tcbhead;
 #endif
 
@@ -153,9 +162,7 @@ first_init (void)
   /* Initialize data structures so we can do RPCs.  */
   __mach_init ();
 
-#ifndef SHARED
-  /* In the static case, we need to set up TLS early so that the stack
-     protection guard can be read at from TLS by the GCC-generated snippets.  */
+#if USE_INIT1_TCBHEAD
   _hurd_tls_init (&__init1_tcbhead, 0);
 #endif