summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2005-10-14 22:03:39 +0000
committerjhb <jhb@FreeBSD.org>2005-10-14 22:03:39 +0000
commit0d876e6b170adb77c59c0190df7d0eabace9a269 (patch)
tree1a47deb7e82ebcaa951440a37fff4ef3cdd5881a /sys
parentf104248124c9469adafce968a122507f738ea575 (diff)
downloadFreeBSD-src-0d876e6b170adb77c59c0190df7d0eabace9a269.zip
FreeBSD-src-0d876e6b170adb77c59c0190df7d0eabace9a269.tar.gz
Merge over the remaining changes from i386 of the ksiginfo_t changes so
that this compiles. Pointy hat to: davidxu
Diffstat (limited to 'sys')
-rw-r--r--sys/pc98/pc98/machdep.c64
1 files changed, 21 insertions, 43 deletions
diff --git a/sys/pc98/pc98/machdep.c b/sys/pc98/pc98/machdep.c
index 531781e..4be40a7 100644
--- a/sys/pc98/pc98/machdep.c
+++ b/sys/pc98/pc98/machdep.c
@@ -180,7 +180,7 @@ int cold = 1;
static void osendsig(sig_t catcher, ksiginfo_t *, sigset_t *mask);
#endif
#ifdef COMPAT_FREEBSD4
-static void freebsd4_sendsig(sig_t catcher, ksiginfo_t *, sigset_t *mask)
+static void freebsd4_sendsig(sig_t catcher, ksiginfo_t *, sigset_t *mask);
#endif
long Maxmem = 0;
@@ -310,7 +310,7 @@ osendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
sf.sf_arg2 = (register_t)&fp->sf_siginfo;
sf.sf_siginfo.si_signo = sig;
sf.sf_siginfo.si_code = code;
- sf.sf_siginfo.sf_value = ksi->ksi_value;
+ sf.sf_siginfo.si_value = ksi->ksi_value;
sf.sf_ahu.sf_action = (__osiginfohandler_t *)catcher;
} else {
/* Old FreeBSD-style arguments. */
@@ -397,22 +397,20 @@ osendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
#ifdef COMPAT_FREEBSD4
static void
-freebsd4_sendsig(catcher, sig, mask, code)
- sig_t catcher;
- int sig;
- sigset_t *mask;
- u_long code;
+freebsd4_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
{
struct sigframe4 sf, *sfp;
struct proc *p;
struct thread *td;
struct sigacts *psp;
struct trapframe *regs;
+ int sig;
int oonstack;
td = curthread;
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
+ sig = ksi->ksi_signo;
psp = p->p_sigacts;
mtx_assert(&psp->ps_mtx, MA_OWNED);
regs = td->td_frame;
@@ -453,12 +451,12 @@ freebsd4_sendsig(catcher, sig, mask, code)
/* Fill in POSIX parts */
sf.sf_si.si_signo = sig;
- sf.sf_si.si_code = code;
- sf.sf_si.si_addr = (void *)regs->tf_err;
+ sf.sf_si.si_code = ksi->ksi_code;
+ sf.sf_si.si_addr = ksi->ksi_addr;
} else {
/* Old FreeBSD-style arguments. */
- sf.sf_siginfo = code;
- sf.sf_addr = regs->tf_err;
+ sf.sf_siginfo = ksi->ksi_code;
+ sf.sf_addr = (register_t)ksi->ksi_addr;
sf.sf_ahu.sf_handler = catcher;
}
mtx_unlock(&psp->ps_mtx);
@@ -518,11 +516,7 @@ freebsd4_sendsig(catcher, sig, mask, code)
#endif /* COMPAT_FREEBSD4 */
void
-sendsig(catcher, sig, mask, code)
- sig_t catcher;
- int sig;
- sigset_t *mask;
- u_long code;
+sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
{
struct sigframe sf, *sfp;
struct proc *p;
@@ -530,22 +524,24 @@ sendsig(catcher, sig, mask, code)
struct sigacts *psp;
char *sp;
struct trapframe *regs;
+ int sig;
int oonstack;
td = curthread;
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
+ sig = ksi->ksi_signo;
psp = p->p_sigacts;
mtx_assert(&psp->ps_mtx, MA_OWNED);
#ifdef COMPAT_FREEBSD4
if (SIGISMEMBER(psp->ps_freebsd4, sig)) {
- freebsd4_sendsig(catcher, sig, mask, code);
+ freebsd4_sendsig(catcher, ksi, mask);
return;
}
#endif
#ifdef COMPAT_43
if (SIGISMEMBER(psp->ps_osigset, sig)) {
- osendsig(catcher, sig, mask, code);
+ osendsig(catcher, ksi, mask);
return;
}
#endif
@@ -591,13 +587,12 @@ sendsig(catcher, sig, mask, code)
sf.sf_ahu.sf_action = (__siginfohandler_t *)catcher;
/* Fill in POSIX parts */
- sf.sf_si.si_signo = sig;
- sf.sf_si.si_code = code;
- sf.sf_si.si_addr = (void *)regs->tf_err;
+ sf.sf_si = ksi->ksi_info;
+ sf.sf_si.si_signo = sig; /* maybe a translated signal */
} else {
/* Old FreeBSD-style arguments. */
- sf.sf_siginfo = code;
- sf.sf_addr = regs->tf_err;
+ sf.sf_siginfo = ksi->ksi_code;
+ sf.sf_addr = (register_t)ksi->ksi_addr;
sf.sf_ahu.sf_handler = catcher;
}
mtx_unlock(&psp->ps_mtx);
@@ -656,26 +651,6 @@ sendsig(catcher, sig, mask, code)
}
/*
- * Build siginfo_t for SA thread
- */
-void
-cpu_thread_siginfo(int sig, u_long code, siginfo_t *si)
-{
- struct proc *p;
- struct thread *td;
-
- td = curthread;
- p = td->td_proc;
- PROC_LOCK_ASSERT(p, MA_OWNED);
-
- bzero(si, sizeof(*si));
- si->si_signo = sig;
- si->si_code = code;
- si->si_addr = (void *)td->td_frame->tf_err;
- /* XXXKSE fill other fields */
-}
-
-/*
* System call to cleanup state after a signal
* has been taken. Reset signal mask and
* stack state from context left by sendsig (above).
@@ -699,6 +674,7 @@ osigreturn(td, uap)
struct osigcontext *scp;
struct proc *p = td->td_proc;
int eflags, error;
+ ksiginfo_t ksi;
regs = td->td_frame;
error = copyin(uap->sigcntxp, &sc, sizeof(sc));
@@ -827,6 +803,7 @@ freebsd4_sigreturn(td, uap)
struct trapframe *regs;
const struct ucontext4 *ucp;
int cs, eflags, error;
+ ksiginfo_t ksi;
error = copyin(uap->sigcntxp, &uc, sizeof(uc));
if (error != 0)
@@ -944,6 +921,7 @@ sigreturn(td, uap)
struct trapframe *regs;
const ucontext_t *ucp;
int cs, eflags, error, ret;
+ ksiginfo_t ksi;
error = copyin(uap->sigcntxp, &uc, sizeof(uc));
if (error != 0)
OpenPOWER on IntegriCloud