From 86761e7dd6cf3456bb1aae5858988badf423a7f1 Mon Sep 17 00:00:00 2001 From: deischen Date: Sat, 29 Mar 2003 16:38:15 +0000 Subject: Align signal frame placed on stack to 16 bytes so that SSE FPU register restores can work. Also correct allocation for signal frame size. Reviewed by: mini --- lib/libc/i386/gen/signalcontext.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/libc/i386/gen/signalcontext.c b/lib/libc/i386/gen/signalcontext.c index a66e2db..50c4889 100644 --- a/lib/libc/i386/gen/signalcontext.c +++ b/lib/libc/i386/gen/signalcontext.c @@ -56,7 +56,8 @@ __signalcontext(ucontext_t *ucp, int sig, __sighandler_t *func) */ p = (register_t *)(void *)(intptr_t)ucp->uc_mcontext.mc_esp; *--p = (register_t)(intptr_t)ucp; - p -= sizeof(struct sigframe); + p = (register_t *)((u_register_t)p & ~0xF); /* Align to 16 bytes. */ + p = (register_t *)((u_register_t)p - sizeof(struct sigframe)); sfp = (struct sigframe *)p; bzero(sfp, sizeof(struct sigframe)); sfp->sf_signum = sig; -- cgit v1.1