mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
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>
This commit is contained in:
parent
ff0f87632a
commit
ce96593c88
1 changed files with 2 additions and 3 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue