aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2023-05-15 11:33:21 +0300
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-05-16 16:08:58 +0200
commitce96593c882b393461084048533120e9c1e9d328 (patch)
treef1c5b0dd783019cfe0bfe6843bfbfeddfd282ba9
parentff0f87632a74a369a2b992f4436ae406065a4012 (diff)
downloadglibc-ce96593c882b393461084048533120e9c1e9d328.zip
glibc-ce96593c882b393461084048533120e9c1e9d328.tar.gz
glibc-ce96593c882b393461084048533120e9c1e9d328.tar.bz2
hurd: Align signal stack pointer after allocating stackframe
sizeof (*stackframe) appears to be divisible by 16, but we should not rely on that. So make sure to leave enough space for the stackframe first, and then align the final pointer at 16 bytes. Checked on x86_64-gnu. Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> Message-Id: <20230515083323.1358039-3-bugaevc@gmail.com>
-rw-r--r--sysdeps/mach/hurd/x86/trampoline.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sysdeps/mach/hurd/x86/trampoline.c b/sysdeps/mach/hurd/x86/trampoline.c
index 19bddad..1f92064 100644
--- a/sysdeps/mach/hurd/x86/trampoline.c
+++ b/sysdeps/mach/hurd/x86/trampoline.c
@@ -196,15 +196,14 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, const struct sigaction *action
#endif
}
+ /* Push the arguments to call `trampoline' on the stack. */
+ sigsp -= sizeof (*stackframe);
#ifdef __x86_64__
/* Align SP at 16 bytes. Coupled with the fact that sigreturn_addr is
16-byte aligned within the stackframe struct, this ensures that it ends
up on a 16-byte aligned address, as required by the ABI. */
sigsp = (void *) ((uintptr_t) sigsp & ~15UL);
#endif
-
- /* Push the arguments to call `trampoline' on the stack. */
- sigsp -= sizeof (*stackframe);
stackframe = sigsp;
if (_hurdsig_catch_memory_fault (stackframe))