Enable SA_SIGINFO for COMPAT_DARWIN

This commit is contained in:
manu 2003-12-16 13:38:25 +00:00
parent c3eb252046
commit d2b4a2c0fa
3 changed files with 30 additions and 7 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: darwin_machdep.c,v 1.11 2003/12/16 13:36:18 manu Exp $ */
/* $NetBSD: darwin_machdep.c,v 1.12 2003/12/16 13:38:26 manu Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: darwin_machdep.c,v 1.11 2003/12/16 13:36:18 manu Exp $");
__KERNEL_RCSID(0, "$NetBSD: darwin_machdep.c,v 1.12 2003/12/16 13:38:26 manu Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -128,7 +128,7 @@ darwin_sendsig(ksi, mask)
sig = 0;
}
sf.duc.si.darwin_si_signo = sig;
native_to_darwin_siginfo(ksi, &sf.duc.si);
sf.duc.uctx.uc_onstack = onstack;
native_sigset_to_sigset13(mask, &sf.duc.uctx.uc_sigmask);
sf.duc.uctx.uc_stack.ss_sp = (char *)sfp;
@ -160,7 +160,10 @@ darwin_sendsig(ksi, mask)
/* Prepare registers */
tf->fixreg[1] = (u_long)sfp;
tf->fixreg[3] = (u_long)catcher;
tf->fixreg[4] = 1; /* 1 => without siginfo, 2 => with siginfo */
if (SIGACTION(p, sig).sa_flags & SA_SIGINFO)
tf->fixreg[4] = 2; /* with siginfo */
else
tf->fixreg[4] = 1; /* without siginfo */
tf->fixreg[5] = (u_long)sig;
tf->fixreg[6] = (u_long)&sfp->duc.si;
tf->fixreg[7] = (u_long)&sfp->duc.uctx;

View File

@ -1,4 +1,4 @@
/* $NetBSD: darwin_signal.c,v 1.12 2003/12/09 12:13:44 manu Exp $ */
/* $NetBSD: darwin_signal.c,v 1.13 2003/12/16 13:38:25 manu Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: darwin_signal.c,v 1.12 2003/12/09 12:13:44 manu Exp $");
__KERNEL_RCSID(0, "$NetBSD: darwin_signal.c,v 1.13 2003/12/16 13:38:25 manu Exp $");
#include <sys/types.h>
#include <sys/param.h>
@ -187,3 +187,22 @@ darwin_sigfilter(l, ksi)
return EINVAL;
}
void
native_to_darwin_siginfo(ksi, dsi)
const struct ksiginfo *ksi;
struct darwin___siginfo *dsi;
{
dsi->darwin_si_signo = ksi->ksi_signo;
dsi->darwin_si_errno = ksi->ksi_errno;
dsi->darwin_si_code = ksi->ksi_code;
dsi->darwin_si_pid = ksi->ksi_pid;
dsi->darwin_si_uid = ksi->ksi_uid;
dsi->darwin_si_status = ksi->ksi_status;
dsi->darwin_si_addr = ksi->ksi_addr;
(void)memcpy(&dsi->darwin_si_value,
&ksi->ksi_sigval, sizeof(dsi->darwin_si_value));
dsi->darwin_si_band = ksi->ksi_band;
return;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: darwin_signal.h,v 1.10 2003/12/03 18:40:07 manu Exp $ */
/* $NetBSD: darwin_signal.h,v 1.11 2003/12/16 13:38:26 manu Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@ -82,6 +82,7 @@ struct darwin___sigaction {
void darwin_sendsig(const ksiginfo_t *, const sigset_t *);
void darwin_trapsignal(struct lwp *, const struct ksiginfo *);
int darwin_sigfilter(struct lwp *, const struct ksiginfo *);
void native_to_darwin_siginfo(const struct ksiginfo *, struct darwin___siginfo *);
#endif /* _DARWIN_SIGNAL_H_ */