summaryrefslogtreecommitdiffstats
path: root/lib/libc/amd64
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2004-06-15 21:46:36 +0000
committerdavidxu <davidxu@FreeBSD.org>2004-06-15 21:46:36 +0000
commit682485c4b36ff37b9f76bac76e0acb2c38baa708 (patch)
tree2f8723c9735c2787504a475098c4efd60b615f50 /lib/libc/amd64
parent69fc473ab3b7ad17d88abf0626e21c10d697f1aa (diff)
downloadFreeBSD-src-682485c4b36ff37b9f76bac76e0acb2c38baa708.zip
FreeBSD-src-682485c4b36ff37b9f76bac76e0acb2c38baa708.tar.gz
Avoid to touch red zone, in libpthread, ucontext may be saved by kernel's
get_mcontext, and libpthread will use signalcontext to deliver signal in userland, it looks same as kernel's send_sig does. Reviewed by: deischen, tjr
Diffstat (limited to 'lib/libc/amd64')
-rw-r--r--lib/libc/amd64/gen/signalcontext.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/libc/amd64/gen/signalcontext.c b/lib/libc/amd64/gen/signalcontext.c
index 4eb1919..e24f6cb 100644
--- a/lib/libc/amd64/gen/signalcontext.c
+++ b/lib/libc/amd64/gen/signalcontext.c
@@ -58,7 +58,7 @@ __signalcontext(ucontext_t *ucp, int sig, __sighandler_t *func)
* This means that we need an 8-byte-odd alignment since the ABI expects
* the return address to be pushed, thus breaking the 16 byte alignment.
*/
- sp = (ucp->uc_mcontext.mc_rsp - sizeof(ucontext_t)) & ~15UL;
+ sp = (ucp->uc_mcontext.mc_rsp - 128 - sizeof(ucontext_t)) & ~15UL;
sig_uc = (ucontext_t *)sp;
bcopy(ucp, sig_uc, sizeof(*sig_uc));
sp = (sp - sizeof(siginfo_t)) & ~15UL;
OpenPOWER on IntegriCloud