diff options
author | bde <bde@FreeBSD.org> | 2002-02-03 09:13:58 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 2002-02-03 09:13:58 +0000 |
commit | 02ad3c7acac134e55beffbe42c345bc6f4b19d09 (patch) | |
tree | 5b287d6f54543df4565e79db5ade17a30aa455b6 /sys/pc98/i386 | |
parent | c41b30278b448bd9b788cceefb4d33e5084e52f8 (diff) | |
download | FreeBSD-src-02ad3c7acac134e55beffbe42c345bc6f4b19d09.zip FreeBSD-src-02ad3c7acac134e55beffbe42c345bc6f4b19d09.tar.gz |
Use osigreturn(2) instead of sigreturn(2) plus broken magic for returning
from old signal handlers. This is simpler and faster, and fixes (new)
sigreturn(2) when %eip in the new signal context happens to match the
magic value (0x1d516). 0x1d516 is below the default ELF text section,
so this probably never broken anything in practice.
locore.s:
In addition, don't build the signal trampoline for old signal handlers
when it is not used.
alpha:
Not fixed, but seems to be even less broken in practice due to more
advanced magic. A false match occurs for register #32 in mc_regs[].
Since there is no hardware register #32, a false match is only possible
for direct calls to sigreturn(2) that happen to have the magic number
in the spare mc_regs[32] field.
Diffstat (limited to 'sys/pc98/i386')
-rw-r--r-- | sys/pc98/i386/machdep.c | 9 |
1 files changed, 0 insertions, 9 deletions
diff --git a/sys/pc98/i386/machdep.c b/sys/pc98/i386/machdep.c index 0c0243d..71d2098 100644 --- a/sys/pc98/i386/machdep.c +++ b/sys/pc98/i386/machdep.c @@ -723,19 +723,10 @@ sigreturn(td, uap) } */ *uap; { struct proc *p = td->td_proc; - struct osigcontext *oscp; - struct osigreturn_args *ouap; struct trapframe *regs; ucontext_t *ucp; int cs, eflags; -#ifdef COMPAT_43 - ouap = (struct osigreturn_args *)uap; - oscp = ouap->sigcntxp; - if (fuword(&oscp->sc_trapno) == 0x01d516) - return (osigreturn(td, ouap)); -#endif - ucp = uap->sigcntxp; if (!useracc((caddr_t)ucp, sizeof(*ucp), VM_PROT_READ)) return (EFAULT); |