1#ifndef _M68K_SIGNAL_H 2#define _M68K_SIGNAL_H 3 4#include <linux/types.h> 5 6/* Avoid too many header ordering problems. */ 7struct siginfo; 8 9#ifdef __KERNEL__ 10/* Most things should be clean enough to redefine this at will, if care 11 is taken to make libc match. */ 12 13#define _NSIG 64 14#define _NSIG_BPW 32 15#define _NSIG_WORDS (_NSIG / _NSIG_BPW) 16 17typedef unsigned long old_sigset_t; /* at least 32 bits */ 18 19typedef struct { 20 unsigned long sig[_NSIG_WORDS]; 21} sigset_t; 22 23#else 24/* Here we must cater to libcs that poke about in kernel headers. */ 25 26#define NSIG 32 27typedef unsigned long sigset_t; 28 29#endif /* __KERNEL__ */ 30 31#define SIGHUP 1 32#define SIGINT 2 33#define SIGQUIT 3 34#define SIGILL 4 35#define SIGTRAP 5 36#define SIGABRT 6 37#define SIGIOT 6 38#define SIGBUS 7 39#define SIGFPE 8 40#define SIGKILL 9 41#define SIGUSR1 10 42#define SIGSEGV 11 43#define SIGUSR2 12 44#define SIGPIPE 13 45#define SIGALRM 14 46#define SIGTERM 15 47#define SIGSTKFLT 16 48#define SIGCHLD 17 49#define SIGCONT 18 50#define SIGSTOP 19 51#define SIGTSTP 20 52#define SIGTTIN 21 53#define SIGTTOU 22 54#define SIGURG 23 55#define SIGXCPU 24 56#define SIGXFSZ 25 57#define SIGVTALRM 26 58#define SIGPROF 27 59#define SIGWINCH 28 60#define SIGIO 29 61#define SIGPOLL SIGIO 62/* 63#define SIGLOST 29 64*/ 65#define SIGPWR 30 66#define SIGSYS 31 67#define SIGUNUSED 31 68 69/* These should not be considered constants from userland. */ 70#define SIGRTMIN 32 71#define SIGRTMAX _NSIG 72 73/* 74 * SA_FLAGS values: 75 * 76 * SA_ONSTACK indicates that a registered stack_t will be used. 77 * SA_RESTART flag to get restarting signals (which were the default long ago) 78 * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. 79 * SA_RESETHAND clears the handler when the signal is delivered. 80 * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. 81 * SA_NODEFER prevents the current signal from being masked in the handler. 82 * 83 * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single 84 * Unix names RESETHAND and NODEFER respectively. 85 */ 86#define SA_NOCLDSTOP 0x00000001 87#define SA_NOCLDWAIT 0x00000002 88#define SA_SIGINFO 0x00000004 89#define SA_ONSTACK 0x08000000 90#define SA_RESTART 0x10000000 91#define SA_NODEFER 0x40000000 92#define SA_RESETHAND 0x80000000 93 94#define SA_NOMASK SA_NODEFER 95#define SA_ONESHOT SA_RESETHAND 96 97/* 98 * sigaltstack controls 99 */ 100#define SS_ONSTACK 1 101#define SS_DISABLE 2 102 103#define MINSIGSTKSZ 2048 104#define SIGSTKSZ 8192 105 106#include <asm-generic/signal.h> 107 108#ifdef __KERNEL__ 109struct old_sigaction { 110 __sighandler_t sa_handler; 111 old_sigset_t sa_mask; 112 unsigned long sa_flags; 113 __sigrestore_t sa_restorer; 114}; 115 116struct sigaction { 117 __sighandler_t sa_handler; 118 unsigned long sa_flags; 119 __sigrestore_t sa_restorer; 120 sigset_t sa_mask; /* mask last for extensibility */ 121}; 122 123struct k_sigaction { 124 struct sigaction sa; 125}; 126#else 127/* Here we must cater to libcs that poke about in kernel headers. */ 128 129struct sigaction { 130 union { 131 __sighandler_t _sa_handler; 132 void (*_sa_sigaction)(int, struct siginfo *, void *); 133 } _u; 134 sigset_t sa_mask; 135 unsigned long sa_flags; 136 void (*sa_restorer)(void); 137}; 138 139#define sa_handler _u._sa_handler 140#define sa_sigaction _u._sa_sigaction 141 142#endif /* __KERNEL__ */ 143 144typedef struct sigaltstack { 145 void __user *ss_sp; 146 int ss_flags; 147 size_t ss_size; 148} stack_t; 149 150#ifdef __KERNEL__ 151#include <asm/sigcontext.h> 152 153#define __HAVE_ARCH_SIG_BITOPS 154 155static inline void sigaddset(sigset_t *set, int _sig) 156{ 157 asm ("bfset %0{%1,#1}" 158 : "+od" (*set) 159 : "id" ((_sig - 1) ^ 31) 160 : "cc"); 161} 162 163static inline void sigdelset(sigset_t *set, int _sig) 164{ 165 asm ("bfclr %0{%1,#1}" 166 : "+od" (*set) 167 : "id" ((_sig - 1) ^ 31) 168 : "cc"); 169} 170 171static inline int __const_sigismember(sigset_t *set, int _sig) 172{ 173 unsigned long sig = _sig - 1; 174 return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW)); 175} 176 177static inline int __gen_sigismember(sigset_t *set, int _sig) 178{ 179 int ret; 180 asm ("bfextu %1{%2,#1},%0" 181 : "=d" (ret) 182 : "od" (*set), "id" ((_sig-1) ^ 31) 183 : "cc"); 184 return ret; 185} 186 187#define sigismember(set,sig) \ 188 (__builtin_constant_p(sig) ? \ 189 __const_sigismember(set,sig) : \ 190 __gen_sigismember(set,sig)) 191 192static inline int sigfindinword(unsigned long word) 193{ 194 asm ("bfffo %1{#0,#0},%0" 195 : "=d" (word) 196 : "d" (word & -word) 197 : "cc"); 198 return word ^ 31; 199} 200 201struct pt_regs; 202extern void ptrace_signal_deliver(struct pt_regs *regs, void *cookie); 203 204#endif /* __KERNEL__ */ 205 206#endif /* _M68K_SIGNAL_H */ 207