xref: /OK3568_Linux_fs/kernel/arch/sparc/include/uapi/asm/signal.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun #ifndef _UAPI__SPARC_SIGNAL_H
3*4882a593Smuzhiyun #define _UAPI__SPARC_SIGNAL_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <asm/sigcontext.h>
6*4882a593Smuzhiyun #include <linux/compiler.h>
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun /* On the Sparc the signal handlers get passed a 'sub-signal' code
10*4882a593Smuzhiyun  * for certain signal types, which we document here.
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun #define SIGHUP		 1
13*4882a593Smuzhiyun #define SIGINT		 2
14*4882a593Smuzhiyun #define SIGQUIT		 3
15*4882a593Smuzhiyun #define SIGILL		 4
16*4882a593Smuzhiyun #define    SUBSIG_STACK       0
17*4882a593Smuzhiyun #define    SUBSIG_ILLINST     2
18*4882a593Smuzhiyun #define    SUBSIG_PRIVINST    3
19*4882a593Smuzhiyun #define    SUBSIG_BADTRAP(t)  (0x80 + (t))
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #define SIGTRAP		 5
22*4882a593Smuzhiyun #define SIGABRT		 6
23*4882a593Smuzhiyun #define SIGIOT		 6
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #define SIGEMT           7
26*4882a593Smuzhiyun #define    SUBSIG_TAG    10
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define SIGFPE		 8
29*4882a593Smuzhiyun #define    SUBSIG_FPDISABLED     0x400
30*4882a593Smuzhiyun #define    SUBSIG_FPERROR        0x404
31*4882a593Smuzhiyun #define    SUBSIG_FPINTOVFL      0x001
32*4882a593Smuzhiyun #define    SUBSIG_FPSTSIG        0x002
33*4882a593Smuzhiyun #define    SUBSIG_IDIVZERO       0x014
34*4882a593Smuzhiyun #define    SUBSIG_FPINEXACT      0x0c4
35*4882a593Smuzhiyun #define    SUBSIG_FPDIVZERO      0x0c8
36*4882a593Smuzhiyun #define    SUBSIG_FPUNFLOW       0x0cc
37*4882a593Smuzhiyun #define    SUBSIG_FPOPERROR      0x0d0
38*4882a593Smuzhiyun #define    SUBSIG_FPOVFLOW       0x0d4
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define SIGKILL		 9
41*4882a593Smuzhiyun #define SIGBUS          10
42*4882a593Smuzhiyun #define    SUBSIG_BUSTIMEOUT    1
43*4882a593Smuzhiyun #define    SUBSIG_ALIGNMENT     2
44*4882a593Smuzhiyun #define    SUBSIG_MISCERROR     5
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define SIGSEGV		11
47*4882a593Smuzhiyun #define    SUBSIG_NOMAPPING     3
48*4882a593Smuzhiyun #define    SUBSIG_PROTECTION    4
49*4882a593Smuzhiyun #define    SUBSIG_SEGERROR      5
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #define SIGSYS		12
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #define SIGPIPE		13
54*4882a593Smuzhiyun #define SIGALRM		14
55*4882a593Smuzhiyun #define SIGTERM		15
56*4882a593Smuzhiyun #define SIGURG          16
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /* SunOS values which deviate from the Linux/i386 ones */
59*4882a593Smuzhiyun #define SIGSTOP		17
60*4882a593Smuzhiyun #define SIGTSTP		18
61*4882a593Smuzhiyun #define SIGCONT		19
62*4882a593Smuzhiyun #define SIGCHLD		20
63*4882a593Smuzhiyun #define SIGTTIN		21
64*4882a593Smuzhiyun #define SIGTTOU		22
65*4882a593Smuzhiyun #define SIGIO		23
66*4882a593Smuzhiyun #define SIGPOLL		SIGIO   /* SysV name for SIGIO */
67*4882a593Smuzhiyun #define SIGXCPU		24
68*4882a593Smuzhiyun #define SIGXFSZ		25
69*4882a593Smuzhiyun #define SIGVTALRM	26
70*4882a593Smuzhiyun #define SIGPROF		27
71*4882a593Smuzhiyun #define SIGWINCH	28
72*4882a593Smuzhiyun #define SIGLOST		29
73*4882a593Smuzhiyun #define SIGPWR		SIGLOST
74*4882a593Smuzhiyun #define SIGUSR1		30
75*4882a593Smuzhiyun #define SIGUSR2		31
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun /* Most things should be clean enough to redefine this at will, if care
78*4882a593Smuzhiyun    is taken to make libc match.  */
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun #define __OLD_NSIG	32
81*4882a593Smuzhiyun #define __NEW_NSIG      64
82*4882a593Smuzhiyun #ifdef __arch64__
83*4882a593Smuzhiyun #define _NSIG_BPW       64
84*4882a593Smuzhiyun #else
85*4882a593Smuzhiyun #define _NSIG_BPW       32
86*4882a593Smuzhiyun #endif
87*4882a593Smuzhiyun #define _NSIG_WORDS     (__NEW_NSIG / _NSIG_BPW)
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define SIGRTMIN       32
90*4882a593Smuzhiyun #define SIGRTMAX       __NEW_NSIG
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #if defined(__KERNEL__) || defined(__WANT_POSIX1B_SIGNALS__)
93*4882a593Smuzhiyun #define _NSIG			__NEW_NSIG
94*4882a593Smuzhiyun #define __new_sigset_t		sigset_t
95*4882a593Smuzhiyun #define __new_sigaction		sigaction
96*4882a593Smuzhiyun #define __new_sigaction32	sigaction32
97*4882a593Smuzhiyun #define __old_sigset_t		old_sigset_t
98*4882a593Smuzhiyun #define __old_sigaction		old_sigaction
99*4882a593Smuzhiyun #define __old_sigaction32	old_sigaction32
100*4882a593Smuzhiyun #else
101*4882a593Smuzhiyun #define _NSIG			__OLD_NSIG
102*4882a593Smuzhiyun #define NSIG			_NSIG
103*4882a593Smuzhiyun #define __old_sigset_t		sigset_t
104*4882a593Smuzhiyun #define __old_sigaction		sigaction
105*4882a593Smuzhiyun #define __old_sigaction32	sigaction32
106*4882a593Smuzhiyun #endif
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun #ifndef __ASSEMBLY__
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun typedef unsigned long __old_sigset_t;            /* at least 32 bits */
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun typedef struct {
113*4882a593Smuzhiyun        unsigned long sig[_NSIG_WORDS];
114*4882a593Smuzhiyun } __new_sigset_t;
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* A SunOS sigstack */
117*4882a593Smuzhiyun struct sigstack {
118*4882a593Smuzhiyun 	/* XXX 32-bit pointers pinhead XXX */
119*4882a593Smuzhiyun 	char *the_stack;
120*4882a593Smuzhiyun 	int   cur_status;
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* Sigvec flags */
124*4882a593Smuzhiyun #define _SV_SSTACK    1u    /* This signal handler should use sig-stack */
125*4882a593Smuzhiyun #define _SV_INTR      2u    /* Sig return should not restart system call */
126*4882a593Smuzhiyun #define _SV_RESET     4u    /* Set handler to SIG_DFL upon taken signal */
127*4882a593Smuzhiyun #define _SV_IGNCHILD  8u    /* Do not send SIGCHLD */
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /*
130*4882a593Smuzhiyun  * sa_flags values: SA_STACK is not currently supported, but will allow the
131*4882a593Smuzhiyun  * usage of signal stacks by using the (now obsolete) sa_restorer field in
132*4882a593Smuzhiyun  * the sigaction structure as a stack pointer. This is now possible due to
133*4882a593Smuzhiyun  * the changes in signal handling. LBT 010493.
134*4882a593Smuzhiyun  * SA_RESTART flag to get restarting signals (which were the default long ago)
135*4882a593Smuzhiyun  */
136*4882a593Smuzhiyun #define SA_NOCLDSTOP	_SV_IGNCHILD
137*4882a593Smuzhiyun #define SA_STACK	_SV_SSTACK
138*4882a593Smuzhiyun #define SA_ONSTACK	_SV_SSTACK
139*4882a593Smuzhiyun #define SA_RESTART	_SV_INTR
140*4882a593Smuzhiyun #define SA_RESETHAND	_SV_RESET
141*4882a593Smuzhiyun #define SA_NODEFER	0x20u
142*4882a593Smuzhiyun #define SA_NOCLDWAIT    0x100u
143*4882a593Smuzhiyun #define SA_SIGINFO      0x200u
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun #define SIG_BLOCK          0x01	/* for blocking signals */
146*4882a593Smuzhiyun #define SIG_UNBLOCK        0x02	/* for unblocking signals */
147*4882a593Smuzhiyun #define SIG_SETMASK        0x04	/* for setting the signal mask */
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun #define MINSIGSTKSZ	4096
150*4882a593Smuzhiyun #define SIGSTKSZ	16384
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun #include <asm-generic/signal-defs.h>
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #ifndef __KERNEL__
156*4882a593Smuzhiyun struct __new_sigaction {
157*4882a593Smuzhiyun 	__sighandler_t		sa_handler;
158*4882a593Smuzhiyun 	unsigned long		sa_flags;
159*4882a593Smuzhiyun 	__sigrestore_t		sa_restorer;  /* not used by Linux/SPARC yet */
160*4882a593Smuzhiyun 	__new_sigset_t		sa_mask;
161*4882a593Smuzhiyun };
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun struct __old_sigaction {
164*4882a593Smuzhiyun 	__sighandler_t		sa_handler;
165*4882a593Smuzhiyun 	__old_sigset_t		sa_mask;
166*4882a593Smuzhiyun 	unsigned long		sa_flags;
167*4882a593Smuzhiyun 	void			(*sa_restorer)(void);  /* not used by Linux/SPARC yet */
168*4882a593Smuzhiyun };
169*4882a593Smuzhiyun #endif
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun typedef struct sigaltstack {
172*4882a593Smuzhiyun 	void			__user *ss_sp;
173*4882a593Smuzhiyun 	int			ss_flags;
174*4882a593Smuzhiyun 	size_t			ss_size;
175*4882a593Smuzhiyun } stack_t;
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun #endif /* !(__ASSEMBLY__) */
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun #endif /* _UAPI__SPARC_SIGNAL_H */
181