xref: /freebsd-src/sys/x86/include/signal.h (revision 29363fb446372cb3f10bc98664e9767c53fbb457)
131a53cd0SKonstantin Belousov /*-
2*51369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
3*51369649SPedro F. Giffuni  *
431a53cd0SKonstantin Belousov  * Copyright (c) 1986, 1989, 1991, 1993
531a53cd0SKonstantin Belousov  *	The Regents of the University of California.  All rights reserved.
631a53cd0SKonstantin Belousov  * Copyright (c) 2003 Peter Wemm.
731a53cd0SKonstantin Belousov  *
831a53cd0SKonstantin Belousov  * Redistribution and use in source and binary forms, with or without
931a53cd0SKonstantin Belousov  * modification, are permitted provided that the following conditions
1031a53cd0SKonstantin Belousov  * are met:
1131a53cd0SKonstantin Belousov  * 1. Redistributions of source code must retain the above copyright
1231a53cd0SKonstantin Belousov  *    notice, this list of conditions and the following disclaimer.
1331a53cd0SKonstantin Belousov  * 2. Redistributions in binary form must reproduce the above copyright
1431a53cd0SKonstantin Belousov  *    notice, this list of conditions and the following disclaimer in the
1531a53cd0SKonstantin Belousov  *    documentation and/or other materials provided with the distribution.
16fbbd9655SWarner Losh  * 3. Neither the name of the University nor the names of its contributors
1731a53cd0SKonstantin Belousov  *    may be used to endorse or promote products derived from this software
1831a53cd0SKonstantin Belousov  *    without specific prior written permission.
1931a53cd0SKonstantin Belousov  *
2031a53cd0SKonstantin Belousov  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2131a53cd0SKonstantin Belousov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2231a53cd0SKonstantin Belousov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2331a53cd0SKonstantin Belousov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2431a53cd0SKonstantin Belousov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2531a53cd0SKonstantin Belousov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2631a53cd0SKonstantin Belousov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2731a53cd0SKonstantin Belousov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2831a53cd0SKonstantin Belousov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2931a53cd0SKonstantin Belousov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3031a53cd0SKonstantin Belousov  * SUCH DAMAGE.
3131a53cd0SKonstantin Belousov  */
3231a53cd0SKonstantin Belousov 
3331a53cd0SKonstantin Belousov #ifndef _X86_SIGNAL_H
3431a53cd0SKonstantin Belousov #define	_X86_SIGNAL_H 1
3531a53cd0SKonstantin Belousov 
3631a53cd0SKonstantin Belousov /*
3731a53cd0SKonstantin Belousov  * Machine-dependent signal definitions
3831a53cd0SKonstantin Belousov  */
3931a53cd0SKonstantin Belousov 
4031a53cd0SKonstantin Belousov #include <sys/cdefs.h>
4131a53cd0SKonstantin Belousov #include <sys/_sigset.h>
4231a53cd0SKonstantin Belousov 
4331a53cd0SKonstantin Belousov #ifdef __i386__
4431a53cd0SKonstantin Belousov typedef int sig_atomic_t;
4531a53cd0SKonstantin Belousov 
4631a53cd0SKonstantin Belousov #if __BSD_VISIBLE
4731a53cd0SKonstantin Belousov struct sigcontext {
4831a53cd0SKonstantin Belousov 	struct __sigset sc_mask;	/* signal mask to restore */
4931a53cd0SKonstantin Belousov 	int	sc_onstack;		/* sigstack state to restore */
5031a53cd0SKonstantin Belousov 	int	sc_gs;			/* machine state (struct trapframe) */
5131a53cd0SKonstantin Belousov 	int	sc_fs;
5231a53cd0SKonstantin Belousov 	int	sc_es;
5331a53cd0SKonstantin Belousov 	int	sc_ds;
5431a53cd0SKonstantin Belousov 	int	sc_edi;
5531a53cd0SKonstantin Belousov 	int	sc_esi;
5631a53cd0SKonstantin Belousov 	int	sc_ebp;
5731a53cd0SKonstantin Belousov 	int	sc_isp;
5831a53cd0SKonstantin Belousov 	int	sc_ebx;
5931a53cd0SKonstantin Belousov 	int	sc_edx;
6031a53cd0SKonstantin Belousov 	int	sc_ecx;
6131a53cd0SKonstantin Belousov 	int	sc_eax;
6231a53cd0SKonstantin Belousov 	int	sc_trapno;
6331a53cd0SKonstantin Belousov 	int	sc_err;
6431a53cd0SKonstantin Belousov 	int	sc_eip;
6531a53cd0SKonstantin Belousov 	int	sc_cs;
6631a53cd0SKonstantin Belousov 	int	sc_efl;
6731a53cd0SKonstantin Belousov 	int	sc_esp;
6831a53cd0SKonstantin Belousov 	int	sc_ss;
6931a53cd0SKonstantin Belousov 	int	sc_len;			/* sizeof(mcontext_t) */
7031a53cd0SKonstantin Belousov 	/*
7131a53cd0SKonstantin Belousov 	 * See <machine/ucontext.h> and <machine/npx.h> for
7231a53cd0SKonstantin Belousov 	 * the following fields.
7331a53cd0SKonstantin Belousov 	 */
7431a53cd0SKonstantin Belousov 	int	sc_fpformat;
7531a53cd0SKonstantin Belousov 	int	sc_ownedfp;
7631a53cd0SKonstantin Belousov 	int	sc_flags;
7731a53cd0SKonstantin Belousov 	int	sc_fpstate[128] __aligned(16);
7831a53cd0SKonstantin Belousov 
7931a53cd0SKonstantin Belousov 	int	sc_fsbase;
8031a53cd0SKonstantin Belousov 	int	sc_gsbase;
8131a53cd0SKonstantin Belousov 
8231a53cd0SKonstantin Belousov 	int	sc_xfpustate;
8331a53cd0SKonstantin Belousov 	int	sc_xfpustate_len;
8431a53cd0SKonstantin Belousov 
8531a53cd0SKonstantin Belousov 	int	sc_spare2[4];
8631a53cd0SKonstantin Belousov };
8731a53cd0SKonstantin Belousov 
8831a53cd0SKonstantin Belousov #define	sc_sp		sc_esp
8931a53cd0SKonstantin Belousov #define	sc_fp		sc_ebp
9031a53cd0SKonstantin Belousov #define	sc_pc		sc_eip
9131a53cd0SKonstantin Belousov #define	sc_ps		sc_efl
9231a53cd0SKonstantin Belousov #define	sc_eflags	sc_efl
9331a53cd0SKonstantin Belousov 
9431a53cd0SKonstantin Belousov #endif /* __BSD_VISIBLE */
9531a53cd0SKonstantin Belousov #endif /* __i386__ */
9631a53cd0SKonstantin Belousov 
9731a53cd0SKonstantin Belousov #ifdef __amd64__
9831a53cd0SKonstantin Belousov typedef long sig_atomic_t;
9931a53cd0SKonstantin Belousov 
10031a53cd0SKonstantin Belousov #if __BSD_VISIBLE
10131a53cd0SKonstantin Belousov /*
10231a53cd0SKonstantin Belousov  * Information pushed on stack when a signal is delivered.
10331a53cd0SKonstantin Belousov  * This is used by the kernel to restore state following
10431a53cd0SKonstantin Belousov  * execution of the signal handler.  It is also made available
10531a53cd0SKonstantin Belousov  * to the handler to allow it to restore state properly if
10631a53cd0SKonstantin Belousov  * a non-standard exit is performed.
10731a53cd0SKonstantin Belousov  *
10831a53cd0SKonstantin Belousov  * The sequence of the fields/registers after sc_mask in struct
10931a53cd0SKonstantin Belousov  * sigcontext must match those in mcontext_t and struct trapframe.
11031a53cd0SKonstantin Belousov  */
11131a53cd0SKonstantin Belousov struct sigcontext {
11231a53cd0SKonstantin Belousov 	struct __sigset sc_mask;	/* signal mask to restore */
11331a53cd0SKonstantin Belousov 	long	sc_onstack;		/* sigstack state to restore */
11431a53cd0SKonstantin Belousov 	long	sc_rdi;		/* machine state (struct trapframe) */
11531a53cd0SKonstantin Belousov 	long	sc_rsi;
11631a53cd0SKonstantin Belousov 	long	sc_rdx;
11731a53cd0SKonstantin Belousov 	long	sc_rcx;
11831a53cd0SKonstantin Belousov 	long	sc_r8;
11931a53cd0SKonstantin Belousov 	long	sc_r9;
12031a53cd0SKonstantin Belousov 	long	sc_rax;
12131a53cd0SKonstantin Belousov 	long	sc_rbx;
12231a53cd0SKonstantin Belousov 	long	sc_rbp;
12331a53cd0SKonstantin Belousov 	long	sc_r10;
12431a53cd0SKonstantin Belousov 	long	sc_r11;
12531a53cd0SKonstantin Belousov 	long	sc_r12;
12631a53cd0SKonstantin Belousov 	long	sc_r13;
12731a53cd0SKonstantin Belousov 	long	sc_r14;
12831a53cd0SKonstantin Belousov 	long	sc_r15;
12931a53cd0SKonstantin Belousov 	int	sc_trapno;
13031a53cd0SKonstantin Belousov 	short	sc_fs;
13131a53cd0SKonstantin Belousov 	short	sc_gs;
13231a53cd0SKonstantin Belousov 	long	sc_addr;
13331a53cd0SKonstantin Belousov 	int	sc_flags;
13431a53cd0SKonstantin Belousov 	short	sc_es;
13531a53cd0SKonstantin Belousov 	short	sc_ds;
13631a53cd0SKonstantin Belousov 	long	sc_err;
13731a53cd0SKonstantin Belousov 	long	sc_rip;
13831a53cd0SKonstantin Belousov 	long	sc_cs;
13931a53cd0SKonstantin Belousov 	long	sc_rflags;
14031a53cd0SKonstantin Belousov 	long	sc_rsp;
14131a53cd0SKonstantin Belousov 	long	sc_ss;
14231a53cd0SKonstantin Belousov 	long	sc_len;			/* sizeof(mcontext_t) */
14331a53cd0SKonstantin Belousov 	/*
14431a53cd0SKonstantin Belousov 	 * See <machine/ucontext.h> and <machine/fpu.h> for the following
14531a53cd0SKonstantin Belousov 	 * fields.
14631a53cd0SKonstantin Belousov 	 */
14731a53cd0SKonstantin Belousov 	long	sc_fpformat;
14831a53cd0SKonstantin Belousov 	long	sc_ownedfp;
14931a53cd0SKonstantin Belousov 	long	sc_fpstate[64] __aligned(16);
15031a53cd0SKonstantin Belousov 
15131a53cd0SKonstantin Belousov 	long	sc_fsbase;
15231a53cd0SKonstantin Belousov 	long	sc_gsbase;
15331a53cd0SKonstantin Belousov 
15431a53cd0SKonstantin Belousov 	long	sc_xfpustate;
15531a53cd0SKonstantin Belousov 	long	sc_xfpustate_len;
15631a53cd0SKonstantin Belousov 
15731a53cd0SKonstantin Belousov 	long	sc_spare[4];
15831a53cd0SKonstantin Belousov };
15931a53cd0SKonstantin Belousov #endif /* __BSD_VISIBLE */
16031a53cd0SKonstantin Belousov #endif /* __amd64__ */
16131a53cd0SKonstantin Belousov 
16231a53cd0SKonstantin Belousov #endif
163