 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			314 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: sigvec.3,v 1.26 2010/03/22 19:30:53 joerg Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1980, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\"     from: @(#)sigvec.2	8.2 (Berkeley) 4/19/94
 | |
| .\"
 | |
| .Dd December 3, 2005
 | |
| .Dt SIGVEC 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm sigvec
 | |
| .Nd software signal facilities
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In signal.h
 | |
| .Bd -literal
 | |
| struct sigvec {
 | |
| 	void	(*sv_handler)();
 | |
| 	int	sv_mask;
 | |
| 	int	sv_flags;
 | |
| };
 | |
| .Ed
 | |
| .Ft int
 | |
| .Fn sigvec "int sig" "struct sigvec *vec" "struct sigvec *ovec"
 | |
| .Sh DESCRIPTION
 | |
| .Bf -symbolic
 | |
| This interface is made obsolete by
 | |
| .Xr sigaction 2 .
 | |
| The structure, flags, and function declaration have been removed from
 | |
| the header files but the function is kept in the c library for binary
 | |
| compatibility.
 | |
| .Ef
 | |
| .Pp
 | |
| The system defines a set of signals that may be delivered to a process.
 | |
| Signal delivery resembles the occurrence of a hardware interrupt:
 | |
| the signal is blocked from further occurrence, the current process
 | |
| context is saved, and a new one is built.
 | |
| A process may specify a
 | |
| .Em handler
 | |
| to which a signal is delivered, or specify that a signal is to be
 | |
| .Em ignored .
 | |
| A process may also specify that a default action is to be taken
 | |
| by the system when a signal occurs.
 | |
| A signal may also be
 | |
| .Em blocked ,
 | |
| in which case its delivery is postponed until it is
 | |
| .Em unblocked .
 | |
| The action to be taken on delivery is determined at the time
 | |
| of delivery.
 | |
| Normally, signal handlers execute on the current stack
 | |
| of the process.
 | |
| This may be changed, on a per-handler basis, so that signals are
 | |
| taken on a special
 | |
| .Em "signal stack" .
 | |
| .Pp
 | |
| Signal routines execute with the signal that caused their
 | |
| invocation
 | |
| .Em blocked ,
 | |
| but other signals may yet occur.
 | |
| A global
 | |
| .Em "signal mask"
 | |
| defines the set of signals currently blocked from delivery
 | |
| to a process.
 | |
| The signal mask for a process is initialized from that of its parent
 | |
| (normally 0).
 | |
| It may be changed with a
 | |
| .Xr sigblock 3
 | |
| or
 | |
| .Xr sigsetmask 3
 | |
| call, or when a signal is delivered to the process.
 | |
| .Pp
 | |
| When a signal
 | |
| condition arises for a process, the signal is added to a set of
 | |
| signals pending for the process.
 | |
| If the signal is not currently
 | |
| .Em blocked
 | |
| by the process then it is delivered to the process.
 | |
| When a caught signal
 | |
| is delivered, the current state of the process is saved,
 | |
| a new signal mask is calculated (as described below),
 | |
| and the signal handler is invoked.
 | |
| The call to the handler is arranged so that if the signal handling
 | |
| routine returns normally the process will resume execution in the
 | |
| context from before the signal's delivery.
 | |
| If the process wishes to resume in a different context, then it
 | |
| must arrange to restore the previous context itself.
 | |
| .Pp
 | |
| When a signal is delivered to a process a new signal mask is
 | |
| installed for the duration of the process' signal handler
 | |
| (or until a
 | |
| .Xr sigblock 3
 | |
| or
 | |
| .Xr sigsetmask 3
 | |
| call is made).
 | |
| This mask is formed by taking the union of the current signal mask,
 | |
| the signal to be delivered, and
 | |
| the signal mask associated with the handler to be invoked.
 | |
| .Pp
 | |
| .Fn sigvec
 | |
| assigns a handler for a specific signal.
 | |
| If
 | |
| .Fa vec
 | |
| is non-zero, it
 | |
| specifies an action
 | |
| .Pf ( Dv SIG_DFL ,
 | |
| .Dv SIG_IGN ,
 | |
| or a handler routine) and mask
 | |
| to be used when delivering the specified signal.
 | |
| Further, if the
 | |
| .Dv SV_ONSTACK
 | |
| bit is set in
 | |
| .Fa sv_flags ,
 | |
| the system will deliver the signal to the process on a
 | |
| .Em "signal stack" ,
 | |
| specified with
 | |
| .Xr sigaltstack 2 .
 | |
| If
 | |
| .Fa ovec
 | |
| is non-zero, the previous handling information for the signal
 | |
| is returned to the user.
 | |
| .Pp
 | |
| Once a signal handler is installed, it remains installed
 | |
| until another
 | |
| .Fn sigvec
 | |
| call is made, or an
 | |
| .Xr execve 2
 | |
| is performed.
 | |
| A signal-specific default action may be reset by
 | |
| setting
 | |
| .Fa sv_handler
 | |
| to
 | |
| .Dv SIG_DFL .
 | |
| The defaults are process termination, possibly with core dump;
 | |
| no action; stopping the process; or continuing the process.
 | |
| See the signal list below for each signal's default action.
 | |
| If
 | |
| .Fa sv_handler
 | |
| is set to
 | |
| .Dv SIG_DFL ,
 | |
| the default action for the signal is to discard the signal,
 | |
| and if a signal is pending,
 | |
| the pending signal is discarded even if the signal is masked.
 | |
| If
 | |
| .Fa sv_handler
 | |
| is set to
 | |
| .Dv SIG_IGN ,
 | |
| current and pending instances
 | |
| of the signal are ignored and discarded.
 | |
| .Pp
 | |
| Options may be specified by setting
 | |
| .Em sv_flags .
 | |
| If the
 | |
| .Dv SV_ONSTACK
 | |
| bit is set in
 | |
| .Fa sv_flags ,
 | |
| the system will deliver the signal to the process on a
 | |
| .Em "signal stack" ,
 | |
| specified with
 | |
| .Xr sigstack 2 .
 | |
| .Pp
 | |
| If a signal is caught during the system calls listed below,
 | |
| the call may be restarted,
 | |
| the call may return with a data transfer shorter than requested,
 | |
| or the call may be forced to terminate
 | |
| with the error
 | |
| .Dv EINTR .
 | |
| Interrupting of pending calls is requested
 | |
| by setting the
 | |
| .Dv SV_INTERRUPT
 | |
| bit in
 | |
| .Ar sv_flags .
 | |
| The affected system calls include
 | |
| .Xr open 2 ,
 | |
| .Xr read 2 ,
 | |
| .Xr write 2 ,
 | |
| .Xr sendto 2 ,
 | |
| .Xr recvfrom 2 ,
 | |
| .Xr sendmsg 2
 | |
| and
 | |
| .Xr recvmsg 2
 | |
| on a communications channel or a slow device (such as a terminal,
 | |
| but not a regular file)
 | |
| and during a
 | |
| .Xr wait 2
 | |
| or
 | |
| .Xr ioctl 2 .
 | |
| However, calls that have already committed are not restarted,
 | |
| but instead return a partial success (for example, a short read count).
 | |
| .Pp
 | |
| After a
 | |
| .Xr fork 2
 | |
| or
 | |
| .Xr vfork 2
 | |
| all signals, the signal mask, the signal stack,
 | |
| and the interrupt/restart flags are inherited by the child.
 | |
| .Pp
 | |
| The
 | |
| .Xr execve 2
 | |
| system call reinstates the default action for all signals which
 | |
| were caught and resets all signals to be caught on the user stack.
 | |
| Ignored signals remain ignored;
 | |
| the signal mask remains the same;
 | |
| signals that interrupt pending system calls continue to do so.
 | |
| .Pp
 | |
| See
 | |
| .Xr signal 7
 | |
| for comprehensive list of supported signals.
 | |
| .Sh NOTES
 | |
| The mask specified in
 | |
| .Fa vec
 | |
| is not allowed to block
 | |
| .Dv SIGKILL
 | |
| or
 | |
| .Dv SIGSTOP .
 | |
| This is enforced silently by the system.
 | |
| .Pp
 | |
| The
 | |
| .Dv SV_INTERRUPT
 | |
| flag is not available in
 | |
| .Bx 4.2 ,
 | |
| hence it should not be used if backward compatibility is needed.
 | |
| .Sh RETURN VALUES
 | |
| A 0 value indicated that the call succeeded.
 | |
| A \-1 return value indicates an error occurred and
 | |
| .Va errno
 | |
| is set to indicated the reason.
 | |
| .Sh EXAMPLES
 | |
| The handler routine can be declared:
 | |
| .Bd -literal -offset indent
 | |
| void
 | |
| handler(sig, code, scp)
 | |
| 	int sig, code;
 | |
| 	struct sigcontext *scp;
 | |
| .Ed
 | |
| .Pp
 | |
| Here
 | |
| .Fa sig
 | |
| is the signal number, into which the hardware faults and traps are
 | |
| mapped as defined below.
 | |
| .Fa code
 | |
| is a parameter that is either a constant
 | |
| or the code provided by the hardware.
 | |
| .Fa scp
 | |
| is a pointer to the
 | |
| .Fa sigcontext
 | |
| structure (defined in
 | |
| .In signal.h ) ,
 | |
| used to restore the context from before the signal.
 | |
| .Sh ERRORS
 | |
| .Fn sigvec
 | |
| will fail and no new signal handler will be installed if one
 | |
| of the following occurs:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EFAULT
 | |
| Either
 | |
| .Fa vec
 | |
| or
 | |
| .Fa ovec
 | |
| points to memory that is not a valid part of the process
 | |
| address space.
 | |
| .It Bq Er EINVAL
 | |
| .Fa sig
 | |
| is not a valid signal number.
 | |
| .It Bq Er EINVAL
 | |
| An attempt is made to ignore or supply a handler for
 | |
| .Dv SIGKILL
 | |
| or
 | |
| .Dv SIGSTOP .
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr kill 1 ,
 | |
| .Xr kill 2 ,
 | |
| .Xr ptrace 2 ,
 | |
| .Xr sigaction 2 ,
 | |
| .Xr sigaltstack 2 ,
 | |
| .Xr sigprocmask 2 ,
 | |
| .Xr sigstack 2 ,
 | |
| .Xr sigsuspend 2 ,
 | |
| .Xr setjmp 3 ,
 | |
| .Xr sigblock 3 ,
 | |
| .Xr siginterrupt 3 ,
 | |
| .Xr signal 3 ,
 | |
| .Xr sigpause 3 ,
 | |
| .Xr sigsetmask 3 ,
 | |
| .Xr sigsetops 3 ,
 | |
| .Xr tty 4 ,
 | |
| .Xr signal 7
 |