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