162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
262306a36Sopenharmony_ci#ifndef _UAPI__SPARC_SIGNAL_H
362306a36Sopenharmony_ci#define _UAPI__SPARC_SIGNAL_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <asm/sigcontext.h>
662306a36Sopenharmony_ci#include <linux/compiler.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/* On the Sparc the signal handlers get passed a 'sub-signal' code
1062306a36Sopenharmony_ci * for certain signal types, which we document here.
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_ci#define SIGHUP		 1
1362306a36Sopenharmony_ci#define SIGINT		 2
1462306a36Sopenharmony_ci#define SIGQUIT		 3
1562306a36Sopenharmony_ci#define SIGILL		 4
1662306a36Sopenharmony_ci#define    SUBSIG_STACK       0
1762306a36Sopenharmony_ci#define    SUBSIG_ILLINST     2
1862306a36Sopenharmony_ci#define    SUBSIG_PRIVINST    3
1962306a36Sopenharmony_ci#define    SUBSIG_BADTRAP(t)  (0x80 + (t))
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define SIGTRAP		 5
2262306a36Sopenharmony_ci#define SIGABRT		 6
2362306a36Sopenharmony_ci#define SIGIOT		 6
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci#define SIGEMT           7
2662306a36Sopenharmony_ci#define    SUBSIG_TAG    10
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define SIGFPE		 8
2962306a36Sopenharmony_ci#define    SUBSIG_FPDISABLED     0x400
3062306a36Sopenharmony_ci#define    SUBSIG_FPERROR        0x404
3162306a36Sopenharmony_ci#define    SUBSIG_FPINTOVFL      0x001
3262306a36Sopenharmony_ci#define    SUBSIG_FPSTSIG        0x002
3362306a36Sopenharmony_ci#define    SUBSIG_IDIVZERO       0x014
3462306a36Sopenharmony_ci#define    SUBSIG_FPINEXACT      0x0c4
3562306a36Sopenharmony_ci#define    SUBSIG_FPDIVZERO      0x0c8
3662306a36Sopenharmony_ci#define    SUBSIG_FPUNFLOW       0x0cc
3762306a36Sopenharmony_ci#define    SUBSIG_FPOPERROR      0x0d0
3862306a36Sopenharmony_ci#define    SUBSIG_FPOVFLOW       0x0d4
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#define SIGKILL		 9
4162306a36Sopenharmony_ci#define SIGBUS          10
4262306a36Sopenharmony_ci#define    SUBSIG_BUSTIMEOUT    1
4362306a36Sopenharmony_ci#define    SUBSIG_ALIGNMENT     2
4462306a36Sopenharmony_ci#define    SUBSIG_MISCERROR     5
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci#define SIGSEGV		11
4762306a36Sopenharmony_ci#define    SUBSIG_NOMAPPING     3
4862306a36Sopenharmony_ci#define    SUBSIG_PROTECTION    4
4962306a36Sopenharmony_ci#define    SUBSIG_SEGERROR      5
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci#define SIGSYS		12
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#define SIGPIPE		13
5462306a36Sopenharmony_ci#define SIGALRM		14
5562306a36Sopenharmony_ci#define SIGTERM		15
5662306a36Sopenharmony_ci#define SIGURG          16
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/* SunOS values which deviate from the Linux/i386 ones */
5962306a36Sopenharmony_ci#define SIGSTOP		17
6062306a36Sopenharmony_ci#define SIGTSTP		18
6162306a36Sopenharmony_ci#define SIGCONT		19
6262306a36Sopenharmony_ci#define SIGCHLD		20
6362306a36Sopenharmony_ci#define SIGTTIN		21
6462306a36Sopenharmony_ci#define SIGTTOU		22
6562306a36Sopenharmony_ci#define SIGIO		23
6662306a36Sopenharmony_ci#define SIGPOLL		SIGIO   /* SysV name for SIGIO */
6762306a36Sopenharmony_ci#define SIGXCPU		24
6862306a36Sopenharmony_ci#define SIGXFSZ		25
6962306a36Sopenharmony_ci#define SIGVTALRM	26
7062306a36Sopenharmony_ci#define SIGPROF		27
7162306a36Sopenharmony_ci#define SIGWINCH	28
7262306a36Sopenharmony_ci#define SIGLOST		29
7362306a36Sopenharmony_ci#define SIGPWR		SIGLOST
7462306a36Sopenharmony_ci#define SIGUSR1		30
7562306a36Sopenharmony_ci#define SIGUSR2		31
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci/* Most things should be clean enough to redefine this at will, if care
7862306a36Sopenharmony_ci   is taken to make libc match.  */
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci#define __OLD_NSIG	32
8162306a36Sopenharmony_ci#define __NEW_NSIG      64
8262306a36Sopenharmony_ci#ifdef __arch64__
8362306a36Sopenharmony_ci#define _NSIG_BPW       64
8462306a36Sopenharmony_ci#else
8562306a36Sopenharmony_ci#define _NSIG_BPW       32
8662306a36Sopenharmony_ci#endif
8762306a36Sopenharmony_ci#define _NSIG_WORDS     (__NEW_NSIG / _NSIG_BPW)
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci#define SIGRTMIN       32
9062306a36Sopenharmony_ci#define SIGRTMAX       __NEW_NSIG
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci#if defined(__KERNEL__) || defined(__WANT_POSIX1B_SIGNALS__)
9362306a36Sopenharmony_ci#define _NSIG			__NEW_NSIG
9462306a36Sopenharmony_ci#define __new_sigset_t		sigset_t
9562306a36Sopenharmony_ci#define __new_sigaction		sigaction
9662306a36Sopenharmony_ci#define __new_sigaction32	sigaction32
9762306a36Sopenharmony_ci#define __old_sigset_t		old_sigset_t
9862306a36Sopenharmony_ci#define __old_sigaction		old_sigaction
9962306a36Sopenharmony_ci#define __old_sigaction32	old_sigaction32
10062306a36Sopenharmony_ci#else
10162306a36Sopenharmony_ci#define _NSIG			__OLD_NSIG
10262306a36Sopenharmony_ci#define NSIG			_NSIG
10362306a36Sopenharmony_ci#define __old_sigset_t		sigset_t
10462306a36Sopenharmony_ci#define __old_sigaction		sigaction
10562306a36Sopenharmony_ci#define __old_sigaction32	sigaction32
10662306a36Sopenharmony_ci#endif
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci#ifndef __ASSEMBLY__
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_citypedef unsigned long __old_sigset_t;            /* at least 32 bits */
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_citypedef struct {
11362306a36Sopenharmony_ci       unsigned long sig[_NSIG_WORDS];
11462306a36Sopenharmony_ci} __new_sigset_t;
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci/* A SunOS sigstack */
11762306a36Sopenharmony_cistruct sigstack {
11862306a36Sopenharmony_ci	/* XXX 32-bit pointers pinhead XXX */
11962306a36Sopenharmony_ci	char *the_stack;
12062306a36Sopenharmony_ci	int   cur_status;
12162306a36Sopenharmony_ci};
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci/* Sigvec flags */
12462306a36Sopenharmony_ci#define _SV_SSTACK    1u    /* This signal handler should use sig-stack */
12562306a36Sopenharmony_ci#define _SV_INTR      2u    /* Sig return should not restart system call */
12662306a36Sopenharmony_ci#define _SV_RESET     4u    /* Set handler to SIG_DFL upon taken signal */
12762306a36Sopenharmony_ci#define _SV_IGNCHILD  8u    /* Do not send SIGCHLD */
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci/*
13062306a36Sopenharmony_ci * sa_flags values: SA_STACK is not currently supported, but will allow the
13162306a36Sopenharmony_ci * usage of signal stacks by using the (now obsolete) sa_restorer field in
13262306a36Sopenharmony_ci * the sigaction structure as a stack pointer. This is now possible due to
13362306a36Sopenharmony_ci * the changes in signal handling. LBT 010493.
13462306a36Sopenharmony_ci * SA_RESTART flag to get restarting signals (which were the default long ago)
13562306a36Sopenharmony_ci */
13662306a36Sopenharmony_ci#define SA_NOCLDSTOP	_SV_IGNCHILD
13762306a36Sopenharmony_ci#define SA_STACK	_SV_SSTACK
13862306a36Sopenharmony_ci#define SA_ONSTACK	_SV_SSTACK
13962306a36Sopenharmony_ci#define SA_RESTART	_SV_INTR
14062306a36Sopenharmony_ci#define SA_RESETHAND	_SV_RESET
14162306a36Sopenharmony_ci#define SA_NODEFER	0x20u
14262306a36Sopenharmony_ci#define SA_NOCLDWAIT    0x100u
14362306a36Sopenharmony_ci#define SA_SIGINFO      0x200u
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci#define SIG_BLOCK          0x01	/* for blocking signals */
14662306a36Sopenharmony_ci#define SIG_UNBLOCK        0x02	/* for unblocking signals */
14762306a36Sopenharmony_ci#define SIG_SETMASK        0x04	/* for setting the signal mask */
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci#define MINSIGSTKSZ	4096
15062306a36Sopenharmony_ci#define SIGSTKSZ	16384
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci#include <asm-generic/signal-defs.h>
15462306a36Sopenharmony_ci#include <asm/posix_types.h>
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci#ifndef __KERNEL__
15762306a36Sopenharmony_cistruct __new_sigaction {
15862306a36Sopenharmony_ci	__sighandler_t		sa_handler;
15962306a36Sopenharmony_ci	unsigned long		sa_flags;
16062306a36Sopenharmony_ci	__sigrestore_t		sa_restorer;  /* not used by Linux/SPARC yet */
16162306a36Sopenharmony_ci	__new_sigset_t		sa_mask;
16262306a36Sopenharmony_ci};
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_cistruct __old_sigaction {
16562306a36Sopenharmony_ci	__sighandler_t		sa_handler;
16662306a36Sopenharmony_ci	__old_sigset_t		sa_mask;
16762306a36Sopenharmony_ci	unsigned long		sa_flags;
16862306a36Sopenharmony_ci	void			(*sa_restorer)(void);  /* not used by Linux/SPARC yet */
16962306a36Sopenharmony_ci};
17062306a36Sopenharmony_ci#endif
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_citypedef struct sigaltstack {
17362306a36Sopenharmony_ci	void			__user *ss_sp;
17462306a36Sopenharmony_ci	int			ss_flags;
17562306a36Sopenharmony_ci	__kernel_size_t		ss_size;
17662306a36Sopenharmony_ci} stack_t;
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci#endif /* !(__ASSEMBLY__) */
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci#endif /* _UAPI__SPARC_SIGNAL_H */
182