| 1 | /*- |
| 2 | * SPDX-License-Identifier: BSD-3-Clause |
| 3 | * |
| 4 | * Copyright (c) 1982, 1986, 1989, 1991, 1993 |
| 5 | *	The Regents of the University of California. All rights reserved. |
| 6 | * (c) UNIX System Laboratories, Inc. |
| 7 | * All or some portions of this file are derived from material licensed |
| 8 | * to the University of California by American Telephone and Telegraph |
| 9 | * Co. or Unix System Laboratories, Inc. and are reproduced herein with |
| 10 | * the permission of UNIX System Laboratories, Inc. |
| 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without |
| 13 | * modification, are permitted provided that the following conditions |
| 14 | * are met: |
| 15 | * 1. Redistributions of source code must retain the above copyright |
| 16 | * notice, this list of conditions and the following disclaimer. |
| 17 | * 2. Redistributions in binary form must reproduce the above copyright |
| 18 | * notice, this list of conditions and the following disclaimer in the |
| 19 | * documentation and/or other materials provided with the distribution. |
| 20 | * 3. Neither the name of the University nor the names of its contributors |
| 21 | * may be used to endorse or promote products derived from this software |
| 22 | * without specific prior written permission. |
| 23 | * |
| 24 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| 25 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| 27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| 30 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 31 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 32 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 33 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 34 | * SUCH DAMAGE. |
| 35 | */ |
| 36 | |
| 37 | #ifndef _SYS_SIGNAL_H_ |
| 38 | #define	_SYS_SIGNAL_H_ |
| 39 | |
| 40 | #include <sys/cdefs.h> |
| 41 | #include <sys/_types.h> |
| 42 | #include <sys/_sigset.h> |
| 43 | #include <sys/_sigaltstack.h> |
| 44 | #include <sys/_sigval.h> |
| 45 | |
| 46 | #include <machine/_limits.h>	/* __MINSIGSTKSZ */ |
| 47 | #include <machine/signal.h>	/* sig_atomic_t; trap codes; sigcontext */ |
| 48 | |
| 49 | #if __POSIX_VISIBLE >= 200809 |
| 50 | |
| 51 | #include <sys/_pthreadtypes.h> |
| 52 | #include <sys/_timespec.h> |
| 53 | |
| 54 | #ifndef _SIZE_T_DECLARED |
| 55 | typedef	__size_t	size_t; |
| 56 | #define	_SIZE_T_DECLARED |
| 57 | #endif |
| 58 | |
| 59 | #ifndef _UID_T_DECLARED |
| 60 | typedef	__uid_t		uid_t; |
| 61 | #define	_UID_T_DECLARED |
| 62 | #endif |
| 63 | |
| 64 | #endif /* __POSIX_VISIBLE >= 200809 */ |
| 65 | |
| 66 | /* |
| 67 | * System defined signals. |
| 68 | */ |
| 69 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 70 | #define	SIGHUP		1	/* hangup */ |
| 71 | #endif |
| 72 | #define	SIGINT		2	/* interrupt */ |
| 73 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 74 | #define	SIGQUIT		3	/* quit */ |
| 75 | #endif |
| 76 | #define	SIGILL		4	/* illegal instr. (not reset when caught) */ |
| 77 | #if __XSI_VISIBLE |
| 78 | #define	SIGTRAP		5	/* trace trap (not reset when caught) */ |
| 79 | #endif |
| 80 | #define	SIGABRT		6	/* abort() */ |
| 81 | #if __BSD_VISIBLE |
| 82 | #define	SIGIOT		SIGABRT	/* compatibility */ |
| 83 | #define	SIGEMT		7	/* EMT instruction */ |
| 84 | #endif |
| 85 | #define	SIGFPE		8	/* floating point exception */ |
| 86 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 87 | #define	SIGKILL		9	/* kill (cannot be caught or ignored) */ |
| 88 | #endif |
| 89 | #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE |
| 90 | #define	SIGBUS		10	/* bus error */ |
| 91 | #endif |
| 92 | #define	SIGSEGV		11	/* segmentation violation */ |
| 93 | #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE |
| 94 | #define	SIGSYS		12	/* non-existent system call invoked */ |
| 95 | #endif |
| 96 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 97 | #define	SIGPIPE		13	/* write on a pipe with no one to read it */ |
| 98 | #define	SIGALRM		14	/* alarm clock */ |
| 99 | #endif |
| 100 | #define	SIGTERM		15	/* software termination signal from kill */ |
| 101 | #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE |
| 102 | #define	SIGURG		16	/* urgent condition on IO channel */ |
| 103 | #endif |
| 104 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 105 | #define	SIGSTOP		17	/* sendable stop signal not from tty */ |
| 106 | #define	SIGTSTP		18	/* stop signal from tty */ |
| 107 | #define	SIGCONT		19	/* continue a stopped process */ |
| 108 | #define	SIGCHLD		20	/* to parent on child stop or exit */ |
| 109 | #define	SIGTTIN		21	/* to readers pgrp upon background tty read */ |
| 110 | #define	SIGTTOU		22	/* like TTIN if (tp->t_local&LTOSTOP) */ |
| 111 | #endif |
| 112 | #if __BSD_VISIBLE |
| 113 | #define	SIGIO		23	/* input/output possible signal */ |
| 114 | #endif |
| 115 | #if __XSI_VISIBLE |
| 116 | #define	SIGXCPU		24	/* exceeded CPU time limit */ |
| 117 | #define	SIGXFSZ		25	/* exceeded file size limit */ |
| 118 | #define	SIGVTALRM	26	/* virtual time alarm */ |
| 119 | #define	SIGPROF		27	/* profiling time alarm */ |
| 120 | #endif |
| 121 | #if __BSD_VISIBLE |
| 122 | #define	SIGWINCH	28	/* window size changes */ |
| 123 | #define	SIGINFO		29	/* information request */ |
| 124 | #endif |
| 125 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 126 | #define	SIGUSR1		30	/* user defined signal 1 */ |
| 127 | #define	SIGUSR2		31	/* user defined signal 2 */ |
| 128 | #endif |
| 129 | #if __BSD_VISIBLE |
| 130 | #define	SIGTHR		32	/* reserved by thread library. */ |
| 131 | #define	SIGLWP		SIGTHR |
| 132 | #define	SIGLIBRT	33	/* reserved by real-time library. */ |
| 133 | #endif |
| 134 | |
| 135 | #define	SIGRTMIN	65 |
| 136 | #define	SIGRTMAX	126 |
| 137 | |
| 138 | #define	SIG_DFL		((__sighandler_t *)0) |
| 139 | #define	SIG_IGN		((__sighandler_t *)1) |
| 140 | #define	SIG_ERR		((__sighandler_t *)-1) |
| 141 | /* #define	SIG_CATCH	((__sighandler_t *)2) See signalvar.h */ |
| 142 | #define SIG_HOLD ((__sighandler_t *)3) |
| 143 | |
| 144 | /* |
| 145 | * Type of a signal handling function. |
| 146 | * |
| 147 | * Language spec sez signal handlers take exactly one arg, even though we |
| 148 | * actually supply three. Ugh! |
| 149 | * |
| 150 | * We don't try to hide the difference by leaving out the args because |
| 151 | * that would cause warnings about conformant programs. Nonconformant |
| 152 | * programs can avoid the warnings by casting to (__sighandler_t *) or |
| 153 | * sig_t before calling signal() or assigning to sa_handler or sv_handler. |
| 154 | * |
| 155 | * The kernel should reverse the cast before calling the function. It |
| 156 | * has no way to do this, but on most machines 1-arg and 3-arg functions |
| 157 | * have the same calling protocol so there is no problem in practice. |
| 158 | * A bit in sa_flags could be used to specify the number of args. |
| 159 | */ |
| 160 | typedef	void __sighandler_t(int); |
| 161 | |
| 162 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 163 | #ifndef _SIGSET_T_DECLARED |
| 164 | #define	_SIGSET_T_DECLARED |
| 165 | typedef	__sigset_t	sigset_t; |
| 166 | #endif |
| 167 | #endif |
| 168 | |
| 169 | #if __POSIX_VISIBLE >= 199309 |
| 170 | |
| 171 | struct pthread_attr; |
| 172 | |
| 173 | struct sigevent { |
| 174 | 	int	sigev_notify;		/* Notification type */ |
| 175 | 	int	sigev_signo;		/* Signal number */ |
| 176 | 	union sigval sigev_value;	/* Signal value */ |
| 177 | 	union { |
| 178 | 		__lwpid_t	_threadid; |
| 179 | 		struct { |
| 180 | 			void (*_function)(union sigval); |
| 181 | 			struct pthread_attr **_attribute; |
| 182 | 		} _sigev_thread; |
| 183 | 		unsigned short _kevent_flags; |
| 184 | 		long __spare__[8]; |
| 185 | 	} _sigev_un; |
| 186 | }; |
| 187 | |
| 188 | #if __BSD_VISIBLE |
| 189 | #define	sigev_notify_kqueue		sigev_signo |
| 190 | #define	sigev_notify_kevent_flags	_sigev_un._kevent_flags |
| 191 | #define	sigev_notify_thread_id		_sigev_un._threadid |
| 192 | #endif |
| 193 | #define	sigev_notify_function		_sigev_un._sigev_thread._function |
| 194 | #define	sigev_notify_attributes		_sigev_un._sigev_thread._attribute |
| 195 | |
| 196 | #define	SIGEV_NONE	0		/* No async notification. */ |
| 197 | #define	SIGEV_SIGNAL	1		/* Generate a queued signal. */ |
| 198 | #define	SIGEV_THREAD	2		/* Call back from another pthread. */ |
| 199 | #if __BSD_VISIBLE |
| 200 | #define	SIGEV_KEVENT	3		/* Generate a kevent. */ |
| 201 | #define	SIGEV_THREAD_ID	4		/* Send signal to a kernel thread. */ |
| 202 | #endif |
| 203 | |
| 204 | #endif /* __POSIX_VISIBLE >= 199309 */ |
| 205 | |
| 206 | #if __POSIX_VISIBLE >= 199309 || __XSI_VISIBLE |
| 207 | typedef	struct __siginfo { |
| 208 | 	int	si_signo;		/* signal number */ |
| 209 | 	int	si_errno;		/* errno association */ |
| 210 | 	/* |
| 211 | 	 * Cause of signal, one of the SI_ macros or signal-specific |
| 212 | 	 * values, i.e. one of the FPE_... values for SIGFPE. This |
| 213 | 	 * value is equivalent to the second argument to an old-style |
| 214 | 	 * FreeBSD signal handler. |
| 215 | 	 */ |
| 216 | 	int	si_code;		/* signal code */ |
| 217 | 	__pid_t	si_pid;			/* sending process */ |
| 218 | 	__uid_t	si_uid;			/* sender's ruid */ |
| 219 | 	int	si_status;		/* exit value */ |
| 220 | 	void	*si_addr;		/* faulting instruction */ |
| 221 | 	union sigval si_value;		/* signal value */ |
| 222 | 	union	{ |
| 223 | 		struct { |
| 224 | 			int	_trapno;/* machine specific trap code */ |
| 225 | 		} _fault; |
| 226 | 		struct { |
| 227 | 			int	_timerid; |
| 228 | 			int	_overrun; |
| 229 | 		} _timer; |
| 230 | 		struct { |
| 231 | 			int	_mqd; |
| 232 | 		} _mesgq; |
| 233 | 		struct { |
| 234 | 			long	_band;		/* band event for SIGPOLL */ |
| 235 | 		} _poll;			/* was this ever used ? */ |
| 236 | 		struct { |
| 237 | 			int	_syscall;	/* Syscall number for signals |
| 238 | 						 * delivered as a result of |
| 239 | 						 * system calls denied by |
| 240 | 						 * Capsicum. */ |
| 241 | 		} _capsicum; |
| 242 | 		struct { |
| 243 | 			long	__spare1__; |
| 244 | 			int	__spare2__[7]; |
| 245 | 		} __spare__; |
| 246 | 	} _reason; |
| 247 | } siginfo_t; |
| 248 | |
| 249 | #define si_trapno	_reason._fault._trapno |
| 250 | #define si_timerid	_reason._timer._timerid |
| 251 | #define si_overrun	_reason._timer._overrun |
| 252 | #define si_mqd		_reason._mesgq._mqd |
| 253 | #define si_band		_reason._poll._band |
| 254 | #define si_syscall	_reason._capsicum._syscall |
| 255 | |
| 256 | #if defined(_WANT_LWPINFO32) || (defined(_KERNEL) && defined(__LP64__)) |
| 257 | struct __siginfo32 { |
| 258 | 	int	si_signo;		/* signal number */ |
| 259 | 	int	si_errno;		/* errno association */ |
| 260 | 	int	si_code;		/* signal code */ |
| 261 | 	__pid_t	si_pid;			/* sending process */ |
| 262 | 	__uid_t	si_uid;			/* sender's ruid */ |
| 263 | 	int	si_status;		/* exit value */ |
| 264 | 	uint32_t si_addr;		/* faulting instruction */ |
| 265 | 	union sigval32 si_value;	/* signal value */ |
| 266 | 	union	{ |
| 267 | 		struct { |
| 268 | 			int	_trapno;/* machine specific trap code */ |
| 269 | 		} _fault; |
| 270 | 		struct { |
| 271 | 			int	_timerid; |
| 272 | 			int	_overrun; |
| 273 | 		} _timer; |
| 274 | 		struct { |
| 275 | 			int	_mqd; |
| 276 | 		} _mesgq; |
| 277 | 		struct { |
| 278 | 			int32_t	_band;		/* band event for SIGPOLL */ |
| 279 | 		} _poll;			/* was this ever used ? */ |
| 280 | 		struct { |
| 281 | 			int32_t	__spare1__; |
| 282 | 			int	__spare2__[7]; |
| 283 | 		} __spare__; |
| 284 | 	} _reason; |
| 285 | }; |
| 286 | #endif |
| 287 | |
| 288 | /** si_code **/ |
| 289 | /* codes for SIGILL */ |
| 290 | #define ILL_ILLOPC 	1	/* Illegal opcode.			*/ |
| 291 | #define ILL_ILLOPN 	2	/* Illegal operand.			*/ |
| 292 | #define ILL_ILLADR 	3	/* Illegal addressing mode.		*/ |
| 293 | #define ILL_ILLTRP 	4	/* Illegal trap.			*/ |
| 294 | #define ILL_PRVOPC 	5	/* Privileged opcode.			*/ |
| 295 | #define ILL_PRVREG 	6	/* Privileged register.			*/ |
| 296 | #define ILL_COPROC 	7	/* Coprocessor error.			*/ |
| 297 | #define ILL_BADSTK 	8	/* Internal stack error.		*/ |
| 298 | |
| 299 | /* codes for SIGBUS */ |
| 300 | #define BUS_ADRALN	1	/* Invalid address alignment.		*/ |
| 301 | #define BUS_ADRERR	2	/* Nonexistent physical address.	*/ |
| 302 | #define BUS_OBJERR	3	/* Object-specific hardware error.	*/ |
| 303 | #define BUS_OOMERR	100	/* Non-standard: No memory.		*/ |
| 304 | |
| 305 | /* codes for SIGSEGV */ |
| 306 | #define SEGV_MAPERR	1	/* Address not mapped to object.	*/ |
| 307 | #define SEGV_ACCERR	2	/* Invalid permissions for mapped	*/ |
| 308 | 				/* object.				*/ |
| 309 | #define	SEGV_PKUERR	100	/* x86: PKU violation			*/ |
| 310 | |
| 311 | /* codes for SIGFPE */ |
| 312 | #define FPE_INTOVF	1	/* Integer overflow.			*/ |
| 313 | #define FPE_INTDIV	2	/* Integer divide by zero.		*/ |
| 314 | #define FPE_FLTDIV	3	/* Floating point divide by zero.	*/ |
| 315 | #define FPE_FLTOVF	4	/* Floating point overflow.		*/ |
| 316 | #define FPE_FLTUND	5	/* Floating point underflow.		*/ |
| 317 | #define FPE_FLTRES	6	/* Floating point inexact result.	*/ |
| 318 | #define FPE_FLTINV	7	/* Invalid floating point operation.	*/ |
| 319 | #define FPE_FLTSUB	8	/* Subscript out of range.		*/ |
| 320 | #define FPE_FLTIDO	9	/* Input denormal operation		*/ |
| 321 | |
| 322 | /* codes for SIGTRAP */ |
| 323 | #define TRAP_BRKPT	1	/* Process breakpoint.			*/ |
| 324 | #define TRAP_TRACE	2	/* Process trace trap.			*/ |
| 325 | #define	TRAP_DTRACE	3	/* DTrace induced trap.			*/ |
| 326 | #define	TRAP_CAP	4	/* Capabilities protective trap.	*/ |
| 327 | |
| 328 | /* codes for SIGCHLD */ |
| 329 | #define CLD_EXITED	1	/* Child has exited			*/ |
| 330 | #define CLD_KILLED	2	/* Child has terminated abnormally but	*/ |
| 331 | 				/* did not create a core file		*/ |
| 332 | #define CLD_DUMPED	3	/* Child has terminated abnormally and	*/ |
| 333 | 				/* created a core file			*/ |
| 334 | #define CLD_TRAPPED	4	/* Traced child has trapped		*/ |
| 335 | #define CLD_STOPPED	5	/* Child has stopped			*/ |
| 336 | #define CLD_CONTINUED	6	/* Stopped child has continued		*/ |
| 337 | |
| 338 | /* codes for SIGPOLL */ |
| 339 | #define POLL_IN		1	/* Data input available			*/ |
| 340 | #define POLL_OUT	2	/* Output buffers available		*/ |
| 341 | #define POLL_MSG	3	/* Input message available		*/ |
| 342 | #define POLL_ERR	4	/* I/O Error				*/ |
| 343 | #define POLL_PRI	5	/* High priority input available	*/ |
| 344 | #define POLL_HUP	6	/* Device disconnected			*/ |
| 345 | |
| 346 | #endif |
| 347 | |
| 348 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 349 | struct __siginfo; |
| 350 | |
| 351 | /* |
| 352 | * Signal vector "template" used in sigaction call. |
| 353 | */ |
| 354 | struct sigaction { |
| 355 | 	union { |
| 356 | 		void (*__sa_handler)(int); |
| 357 | 		void (*__sa_sigaction)(int, struct __siginfo *, void *); |
| 358 | 	} __sigaction_u;		/* signal handler */ |
| 359 | 	int	sa_flags;		/* see signal options below */ |
| 360 | 	sigset_t sa_mask;		/* signal mask to apply */ |
| 361 | }; |
| 362 | |
| 363 | #define	sa_handler	__sigaction_u.__sa_handler |
| 364 | #endif |
| 365 | |
| 366 | #if __XSI_VISIBLE |
| 367 | /* If SA_SIGINFO is set, sa_sigaction must be used instead of sa_handler. */ |
| 368 | #define	sa_sigaction	__sigaction_u.__sa_sigaction |
| 369 | #endif |
| 370 | |
| 371 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 372 | #define	SA_NOCLDSTOP	0x0008	/* do not generate SIGCHLD on child stop */ |
| 373 | #endif /* __POSIX_VISIBLE || __XSI_VISIBLE */ |
| 374 | |
| 375 | #if __XSI_VISIBLE || __POSIX_VISIBLE >= 200809 |
| 376 | #define	SA_ONSTACK	0x0001	/* take signal on signal stack */ |
| 377 | #define	SA_RESTART	0x0002	/* restart system call on signal return */ |
| 378 | #define	SA_RESETHAND	0x0004	/* reset to SIG_DFL when taking signal */ |
| 379 | #define	SA_NODEFER	0x0010	/* don't mask the signal we're delivering */ |
| 380 | #define	SA_NOCLDWAIT	0x0020	/* don't keep zombies around */ |
| 381 | #define	SA_SIGINFO	0x0040	/* signal handler with SA_SIGINFO args */ |
| 382 | #endif |
| 383 | |
| 384 | #if __BSD_VISIBLE |
| 385 | #define	NSIG		32	/* number of old signals (counting 0) */ |
| 386 | #endif |
| 387 | |
| 388 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 389 | #define	SI_NOINFO	0		/* No signal info besides si_signo. */ |
| 390 | #define	SI_USER		0x10001		/* Signal sent by kill(). */ |
| 391 | #define	SI_QUEUE	0x10002		/* Signal sent by the sigqueue(). */ |
| 392 | #define	SI_TIMER	0x10003		/* Signal generated by expiration of */ |
| 393 | 					/* a timer set by timer_settime(). */ |
| 394 | #define	SI_ASYNCIO	0x10004		/* Signal generated by completion of */ |
| 395 | 					/* an asynchronous I/O request.*/ |
| 396 | #define	SI_MESGQ	0x10005		/* Signal generated by arrival of a */ |
| 397 | 					/* message on an empty message queue. */ |
| 398 | #define	SI_KERNEL	0x10006 |
| 399 | #define	SI_LWP		0x10007		/* Signal sent by thr_kill */ |
| 400 | #endif |
| 401 | #if __BSD_VISIBLE |
| 402 | #define	SI_UNDEFINED	0 |
| 403 | #endif |
| 404 | |
| 405 | #if __BSD_VISIBLE |
| 406 | typedef	__sighandler_t	*sig_t;	/* type of pointer to a signal function */ |
| 407 | typedef	void __siginfohandler_t(int, struct __siginfo *, void *); |
| 408 | #endif |
| 409 | |
| 410 | #if __BSD_VISIBLE |
| 411 | /* |
| 412 | * 4.3 compatibility: |
| 413 | * Signal vector "template" used in sigvec call. |
| 414 | */ |
| 415 | struct sigvec { |
| 416 | 	__sighandler_t *sv_handler;	/* signal handler */ |
| 417 | 	int	sv_mask;		/* signal mask to apply */ |
| 418 | 	int	sv_flags;		/* see signal options below */ |
| 419 | }; |
| 420 | |
| 421 | #define	SV_ONSTACK	SA_ONSTACK |
| 422 | #define	SV_INTERRUPT	SA_RESTART	/* same bit, opposite sense */ |
| 423 | #define	SV_RESETHAND	SA_RESETHAND |
| 424 | #define	SV_NODEFER	SA_NODEFER |
| 425 | #define	SV_NOCLDSTOP	SA_NOCLDSTOP |
| 426 | #define	SV_SIGINFO	SA_SIGINFO |
| 427 | #define	sv_onstack	sv_flags	/* isn't compatibility wonderful! */ |
| 428 | #endif |
| 429 | |
| 430 | /* Keep this in one place only */ |
| 431 | #if defined(_KERNEL) && defined(COMPAT_43) && \ |
| 432 | !defined(__i386__) |
| 433 | struct osigcontext { |
| 434 | 	int _not_used; |
| 435 | }; |
| 436 | #endif |
| 437 | |
| 438 | #if __XSI_VISIBLE |
| 439 | /* |
| 440 | * Structure used in sigstack call. |
| 441 | */ |
| 442 | struct sigstack { |
| 443 | 	void	*ss_sp;			/* signal stack pointer */ |
| 444 | 	int	ss_onstack;		/* current status */ |
| 445 | }; |
| 446 | #endif |
| 447 | |
| 448 | #if __BSD_VISIBLE || __POSIX_VISIBLE > 0 && __POSIX_VISIBLE <= 200112 |
| 449 | /* |
| 450 | * Macro for converting signal number to a mask suitable for |
| 451 | * sigblock(). |
| 452 | */ |
| 453 | #define	sigmask(m)	(1 << ((m)-1)) |
| 454 | #endif |
| 455 | |
| 456 | #if __BSD_VISIBLE |
| 457 | #define	BADSIG		SIG_ERR |
| 458 | |
| 459 | /* sigqueue(2) signo high-bits flags */ |
| 460 | #define	__SIGQUEUE_TID	0x80000000	/* queue for tid, instead of pid */ |
| 461 | #define	__SIGQUEUE_RSRV	0x40000000	/* reserved */ |
| 462 | #endif |
| 463 | |
| 464 | #if __POSIX_VISIBLE || __XSI_VISIBLE |
| 465 | /* |
| 466 | * Flags for sigprocmask: |
| 467 | */ |
| 468 | #define	SIG_BLOCK	1	/* block specified signal set */ |
| 469 | #define	SIG_UNBLOCK	2	/* unblock specified signal set */ |
| 470 | #define	SIG_SETMASK	3	/* set specified signal set */ |
| 471 | #endif |
| 472 | |
| 473 | /* |
| 474 | * For historical reasons; programs expect signal's return value to be |
| 475 | * defined by <sys/signal.h>. |
| 476 | */ |
| 477 | __BEGIN_DECLS |
| 478 | __sighandler_t *signal(int, __sighandler_t *); |
| 479 | __END_DECLS |
| 480 | |
| 481 | #endif /* !_SYS_SIGNAL_H_ */ |