summaryrefslogtreecommitdiffstats
path: root/sys/alpha/osf1/osf1_signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/alpha/osf1/osf1_signal.c')
-rw-r--r--sys/alpha/osf1/osf1_signal.c105
1 files changed, 13 insertions, 92 deletions
diff --git a/sys/alpha/osf1/osf1_signal.c b/sys/alpha/osf1/osf1_signal.c
index 5dd585f..738b0a4 100644
--- a/sys/alpha/osf1/osf1_signal.c
+++ b/sys/alpha/osf1/osf1_signal.c
@@ -101,92 +101,18 @@ static void osf1_to_bsd_sigaction __P((const struct osf1_sigaction *osa,
#define osf1_sigismember(s, n) (*(s) & sigmask(n))
#define osf1_sigaddset(s, n) (*(s) |= sigmask(n))
-int bsd_to_osf1_sig[OSF1_SIGTBLSZ] = {
- OSF1_SIGHUP, /* 1 */
- OSF1_SIGINT, /* 2 */
- OSF1_SIGQUIT, /* 3 */
- OSF1_SIGILL, /* 4 */
- OSF1_SIGTRAP, /* 5 */
- OSF1_SIGABRT, /* 6 */
- OSF1_SIGEMT, /* 7 */
- OSF1_SIGFPE, /* 8 */
- OSF1_SIGKILL, /* 9 */
- OSF1_SIGBUS, /* 10 */
- OSF1_SIGSEGV, /* 11 */
- OSF1_SIGSYS, /* 12 */
- OSF1_SIGPIPE, /* 13 */
- OSF1_SIGALRM, /* 14 */
- OSF1_SIGTERM, /* 15 */
- OSF1_SIGURG, /* 16 */
- OSF1_SIGSTOP, /* 17 */
- OSF1_SIGTSTP, /* 18 */
- OSF1_SIGCONT, /* 19 */
- OSF1_SIGCHLD, /* 20 */
- OSF1_SIGTTIN, /* 21 */
- OSF1_SIGTTOU, /* 22 */
- OSF1_SIGIO, /* 23 */
- OSF1_SIGXCPU, /* 24 */
- OSF1_SIGXFSZ, /* 25 */
- OSF1_SIGVTALRM, /* 26 */
- OSF1_SIGPROF, /* 27 */
- OSF1_SIGWINCH, /* 28 */
- OSF1_SIGINFO, /* 29 */
- OSF1_SIGUSR1, /* 30 */
- OSF1_SIGUSR2, /* 31 */
- 0 /* 32 */
-};
-
-int osf1_to_bsd_sig[OSF1_SIGTBLSZ] = {
- SIGHUP, /* 1 */
- SIGINT, /* 2 */
- SIGQUIT, /* 3 */
- SIGILL, /* 4 */
- SIGTRAP, /* 5 */
- SIGABRT, /* 6 */
- SIGEMT, /* 7 */
- SIGFPE, /* 8 */
- SIGKILL, /* 9 */
- SIGBUS, /* 10 */
- SIGSEGV, /* 11 */
- SIGSYS, /* 12 */
- SIGPIPE, /* 13 */
- SIGALRM, /* 14 */
- SIGTERM, /* 15 */
- SIGURG, /* 16 */
- SIGSTOP, /* 17 */
- SIGTSTP, /* 18 */
- SIGCONT, /* 19 */
- SIGCHLD, /* 20 */
- SIGTTIN, /* 21 */
- SIGTTOU, /* 22 */
- SIGIO, /* 23 */
- SIGXCPU, /* 24 */
- SIGXFSZ, /* 25 */
- SIGVTALRM, /* 26 */
- SIGPROF, /* 27 */
- SIGWINCH, /* 28 */
- SIGINFO, /* 29 */
- SIGUSR1, /* 30 */
- SIGUSR2, /* 31 */
- 0 /* 32 */
-};
-
void
osf1_to_bsd_sigset(oss, bss)
const osf1_sigset_t *oss;
sigset_t *bss;
{
- int i, newsig;
+ const u_int32_t *obits;
SIGEMPTYSET(*bss);
- for (i = 1; i <= OSF1_SIGTBLSZ; i++) {
- if (osf1_sigismember(oss, i)) {
- newsig = osf1_to_bsd_sig[_SIG_IDX(i)];
- if (newsig)
- SIGADDSET(*bss, newsig);
- }
- }
+ obits = (const u_int32_t *)oss;
+ bss->__bits[0] = obits[0];
+ bss->__bits[1] = obits[1];
}
void
@@ -194,17 +120,12 @@ bsd_to_osf1_sigset(bss, oss)
const sigset_t *bss;
osf1_sigset_t *oss;
{
- int i, newsig;
+ u_int32_t *obits;
osf1_sigemptyset(oss);
- for (i = 1; i <= OSF1_SIGTBLSZ; i++) {
- if (SIGISMEMBER(*bss, i)) {
- newsig = bsd_to_osf1_sig[_SIG_IDX(i)];
- if (newsig)
- osf1_sigaddset(oss, newsig);
- }
- }
-
+ obits = (u_int32_t *)oss;
+ obits[0] = bss->__bits[0];
+ obits[1] = bss->__bits[1];
}
/*
@@ -319,7 +240,7 @@ osf1_sigaction(p, uap)
} else
nbsa = NULL;
- SCARG(&sa, sig) = OSF1_OSF12BSD_SIG(SCARG(uap, signum));
+ SCARG(&sa, sig) = SCARG(uap, signum);
SCARG(&sa, act) = nbsa;
SCARG(&sa, oact) = obsa;
@@ -394,7 +315,7 @@ osf1_signal(p, uap)
sg = stackgap_init();
- signum = OSF1_OSF12BSD_SIG(OSF1_SIGNO(SCARG(uap, signum)));
+ signum = OSF1_SIGNO(SCARG(uap, signum));
if (signum <= 0 || signum > OSF1_NSIG) {
if (OSF1_SIGCALL(SCARG(uap, signum)) == OSF1_SIGNAL_MASK ||
OSF1_SIGCALL(SCARG(uap, signum)) == OSF1_SIGDEFER_MASK)
@@ -635,7 +556,7 @@ osf1_kill(p, uap)
struct kill_args ka;
SCARG(&ka, pid) = SCARG(uap, pid);
- SCARG(&ka, signum) = OSF1_OSF12BSD_SIG(SCARG(uap, signum));
+ SCARG(&ka, signum) = SCARG(uap, signum);
return kill(p, &ka);
}
@@ -698,7 +619,7 @@ osf1_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
* Build the signal context to be used by sigreturn.
*/
ksi.si_sc.sc_onstack = oonstack;
- SIG2OSIG(*mask, ksi.si_sc.sc_mask);
+ bsd_to_osf1_sigset(mask, &ksi.si_sc.sc_mask);
ksi.si_sc.sc_pc = frame->tf_regs[FRAME_PC];
ksi.si_sc.sc_ps = frame->tf_regs[FRAME_PS];
@@ -787,7 +708,7 @@ osf1_sigreturn(struct proc *p,
* sigmask is stored in sc_reserved, sc_mask is only used for
* backward compatibility.
*/
- SIGSETOLD(p->p_sigmask, ksc.sc_mask);
+ osf1_to_bsd_sigset(&ksc.sc_mask, &p->p_sigmask);
SIG_CANTMASK(p->p_sigmask);
set_regs(p, (struct reg *)ksc.sc_regs);
OpenPOWER on IntegriCloud