]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
hurd: make __thread_set_pcsptp align stack
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 17 Jan 2026 14:15:33 +0000 (15:15 +0100)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 17 Jan 2026 14:15:33 +0000 (15:15 +0100)
When cancelling a thread, __pthread_do_cancel forces calling call_exit,
but we need to align down the stack, so any further SSE use can work.

sysdeps/mach/hurd/x86_64/htl/pt-machdep.c

index 2cb0ce98382d1a4828edf07f5708fc35e99ad5c4..e11a1f994b87a3e88a34e99c2e40801c015cd37e 100644 (file)
@@ -24,6 +24,7 @@
 #include <mach/x86_64/mach_i386.h>
 #include <mach/mig_errors.h>
 #include <mach/thread_status.h>
+#include <thread_state.h>
 #include <pt-sysdep.h>
 
 int
@@ -48,7 +49,11 @@ __thread_set_pcsptp (thread_t thread,
   if (set_sp)
     state.ursp = (uintptr_t) sp;
   if (set_ip)
-    state.rip = (uintptr_t) ip;
+    {
+      /* Making it call something else, we have to re-align the stack for SSE.  */
+      state.ursp = PTR_ALIGN_DOWN_8_16 (state.ursp);
+      state.rip = (uintptr_t) ip;
+    }
 
   err = __thread_set_state (thread, i386_REGS_SEGS_STATE,
                             (thread_state_t) &state, i386_THREAD_STATE_COUNT);