From a568a3185ee59bb37249a48388136cdb5bb0b5d0 Mon Sep 17 00:00:00 2001 From: kib Date: Sun, 7 Sep 2008 16:39:21 +0000 Subject: Segment registers are stored in the uc_mcontext member of the struct l_ucontext. To restore the registers content, trampoline needs to dereference uc_mcontext instead of taking some undefined values from l_ucontext. Submitted by: Dmitry Chagin MFC after: 1 week --- sys/i386/linux/linux_locore.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'sys/i386/linux/linux_locore.s') diff --git a/sys/i386/linux/linux_locore.s b/sys/i386/linux/linux_locore.s index 1c23b3a..044e8e2 100644 --- a/sys/i386/linux/linux_locore.s +++ b/sys/i386/linux/linux_locore.s @@ -19,7 +19,8 @@ NON_GPROF_ENTRY(linux_sigcode) linux_rt_sigcode: call *LINUX_RT_SIGF_HANDLER(%esp) leal LINUX_RT_SIGF_UC(%esp),%ebx /* linux ucp */ - movl LINUX_SC_GS(%ebx),%gs + leal LINUX_RT_SIGF_SC(%ebx),%ecx /* linux sigcontext */ + movl LINUX_SC_GS(%ecx),%gs push %eax /* fake ret addr */ movl $LINUX_SYS_linux_rt_sigreturn,%eax /* linux_rt_sigreturn() */ int $0x80 /* enter kernel with args */ -- cgit v1.1