summaryrefslogtreecommitdiff
path: root/sys/compat/linux/common/linux_oldselect.c
diff options
context:
space:
mode:
authormycroft <mycroft@NetBSD.org>1998-09-11 12:50:05 +0000
committermycroft <mycroft@NetBSD.org>1998-09-11 12:50:05 +0000
commitfb526e055ce7fc93c2d1e25d27ddcbb904326689 (patch)
tree246edcbecaa293bb66c325bdd2d7878a35c17b1f /sys/compat/linux/common/linux_oldselect.c
parent4e2ece10351d6d481d8324585b33261d0c47e49c (diff)
Substantial signal handling changes:
* Increase the size of sigset_t to accomodate 128 signals -- adding new versions of sys_setprocmask(), sys_sigaction(), sys_sigpending() and sys_sigsuspend() to handle the changed arguments. * Abstract the guts of sys_sigaltstack(), sys_setprocmask(), sys_sigaction(), sys_sigpending() and sys_sigsuspend() into separate functions, and call them from all the emulations rather than hard-coding everything. (Avoids uses the stackgap crap for these system calls.) * Add a new flag (p_checksig) to indicate that a process may have signals pending and userret() needs to do the full (slow) check. * Eliminate SAS_ALTSTACK; it's exactly the inverse of SS_DISABLE. * Correct emulation bugs with restoring SS_ONSTACK. * Make the signal mask in the sigcontext always use the emulated mask format. * Store signals internally in sigaction structures, rather than maintaining a bunch of little sigsets for each SA_* bit. * Keep track of where we put the signal trampoline, rather than figuring it out in *_sendsig(). * Issue a warning when a non-emulated sigaction bit is observed. * Add missing emulated signals, and a native SIGPWR (currently not used). * Implement the `not reset when caught' semantics for relevant signals. Note: Only code touched by the i386 port has been modified. Other ports and emulations need to be updated.
Diffstat (limited to 'sys/compat/linux/common/linux_oldselect.c')
-rw-r--r--sys/compat/linux/common/linux_oldselect.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/compat/linux/common/linux_oldselect.c b/sys/compat/linux/common/linux_oldselect.c
index 948227a8ba3..f6bb715ba22 100644
--- a/sys/compat/linux/common/linux_oldselect.c
+++ b/sys/compat/linux/common/linux_oldselect.c
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_oldselect.c,v 1.45 1998/09/08 20:02:52 rvb Exp $ */
+/* $NetBSD: linux_oldselect.c,v 1.46 1998/09/11 12:50:08 mycroft Exp $ */
/*
* Copyright (c) 1995 Frank van der Linden
@@ -94,10 +94,10 @@ bsd_to_linux_wstat(status)
if (WIFSIGNALED(*status))
*status = (*status & ~0177) |
- bsd_to_linux_sig[WTERMSIG(*status)];
+ native_to_linux_sig[WTERMSIG(*status)];
else if (WIFSTOPPED(*status))
*status = (*status & ~0xff00) |
- (bsd_to_linux_sig[WSTOPSIG(*status)] << 8);
+ (native_to_linux_sig[WSTOPSIG(*status)] << 8);
}
/*
@@ -134,7 +134,7 @@ linux_sys_waitpid(p, v, retval)
if ((error = sys_wait4(p, &w4a, retval)))
return error;
- p->p_siglist &= ~sigmask(SIGCHLD);
+ sigdelset(&p->p_siglist, SIGCHLD);
if (status != NULL) {
if ((error = copyin(status, &tstat, sizeof tstat)))
@@ -180,7 +180,7 @@ linux_sys_wait4(p, v, retval)
if ((error = sys_wait4(p, &w4a, retval)))
return error;
- p->p_siglist &= ~sigmask(SIGCHLD);
+ sigdelset(&p->p_siglist, SIGCHLD);
if (status != NULL) {
if ((error = copyin(status, &tstat, sizeof tstat)))