]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
hurd: Fix setting up signal thread stack alignment
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 27 May 2023 22:29:14 +0000 (00:29 +0200)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 27 May 2023 22:30:26 +0000 (00:30 +0200)
x86_64 needs special alignment when calling functions, so we have to use
MACHINE_THREAD_STATE_SETUP_CALL for the signal thread when forking.

sysdeps/mach/hurd/_Fork.c

index 77cd29171e3ffa84090027360d4f04fd81b5cb88..9981699a5a59df0f040832ed4c33d96ddcdd637a 100644 (file)
@@ -481,13 +481,11 @@ retry:
                                    MACHINE_THREAD_STATE_FLAVOR,
                                    (natural_t *) &state, &statecount))
        LOSE;
-#ifdef STACK_GROWTH_UP
-      state.SP = __hurd_sigthread_stack_base;
-#else
-      state.SP = __hurd_sigthread_stack_end;
-#endif
-      MACHINE_THREAD_STATE_SET_PC (&state,
-                                  (unsigned long int) _hurd_msgport_receive);
+
+      MACHINE_THREAD_STATE_SETUP_CALL(&state,
+         __hurd_sigthread_stack_base,
+         __hurd_sigthread_stack_end - __hurd_sigthread_stack_base,
+         (uintptr_t) _hurd_msgport_receive);
 
       /* Do special signal thread setup for TLS if needed.  */
       if (err = _hurd_tls_fork (sigthread, _hurd_msgport_thread, &state))