Date: Tue, 11 Nov 2003 01:25:19 -0800 (PST) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/ia64/ia64 machdep.c syscall.S Message-ID: <200311110925.hAB9PJK5021905@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
marcel 2003/11/11 01:25:19 PST FreeBSD src repository Modified files: sys/ia64/ia64 machdep.c syscall.S Log: Fix a nasty bug that got exposed when the sendsig() and sigreturn() functions switched to using {g|s}et_mcontext(). The problem is that sigreturn(), being a syscall, can be given an async. context (i.e. one corresponding to an interrupt or trap). When this happens, we try to return to user mode via epc_syscall_return with a trapframe that can only be used to return to user mode via exception_restore. To fix this, we check the frame's flags immediately prior to epc_syscall_return and branch to exception_restore for non-syscall frames. Modify the assertion in set_mcontext() to check that if there's a mismatch, it's because of sigreturn(). Revision Changes Path 1.167 +10 -1 src/sys/ia64/ia64/machdep.c 1.11 +16 -3 src/sys/ia64/ia64/syscall.S
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311110925.hAB9PJK5021905>