2008-10-23 09:26:29 +04:00
# ifndef _ASM_X86_SIGNAL_H
# define _ASM_X86_SIGNAL_H
2007-10-24 00:37:24 +04:00
# ifndef __ASSEMBLY__
# include <linux/types.h>
# include <linux/time.h>
# include <linux/compiler.h>
/* Avoid too many header ordering problems. */
struct siginfo ;
2007-10-11 13:20:03 +04:00
# ifdef __KERNEL__
2007-10-24 00:37:24 +04:00
# include <linux/linkage.h>
/* Most things should be clean enough to redefine this at will, if care
is taken to make libc match . */
# define _NSIG 64
# ifdef __i386__
# define _NSIG_BPW 32
2007-10-11 13:20:03 +04:00
# else
2007-10-24 00:37:24 +04:00
# define _NSIG_BPW 64
# endif
# define _NSIG_WORDS (_NSIG / _NSIG_BPW)
typedef unsigned long old_sigset_t ; /* at least 32 bits */
typedef struct {
unsigned long sig [ _NSIG_WORDS ] ;
} sigset_t ;
# else
/* Here we must cater to libcs that poke about in kernel headers. */
# define NSIG 32
typedef unsigned long sigset_t ;
# endif /* __KERNEL__ */
# endif /* __ASSEMBLY__ */
# define SIGHUP 1
# define SIGINT 2
# define SIGQUIT 3
# define SIGILL 4
# define SIGTRAP 5
# define SIGABRT 6
# define SIGIOT 6
# define SIGBUS 7
# define SIGFPE 8
# define SIGKILL 9
# define SIGUSR1 10
# define SIGSEGV 11
# define SIGUSR2 12
# define SIGPIPE 13
# define SIGALRM 14
# define SIGTERM 15
# define SIGSTKFLT 16
# define SIGCHLD 17
# define SIGCONT 18
# define SIGSTOP 19
# define SIGTSTP 20
# define SIGTTIN 21
# define SIGTTOU 22
# define SIGURG 23
# define SIGXCPU 24
# define SIGXFSZ 25
# define SIGVTALRM 26
# define SIGPROF 27
# define SIGWINCH 28
# define SIGIO 29
# define SIGPOLL SIGIO
/*
# define SIGLOST 29
*/
# define SIGPWR 30
# define SIGSYS 31
# define SIGUNUSED 31
/* These should not be considered constants from userland. */
# define SIGRTMIN 32
# define SIGRTMAX _NSIG
/*
* SA_FLAGS values :
*
* SA_ONSTACK indicates that a registered stack_t will be used .
* SA_RESTART flag to get restarting signals ( which were the default long ago )
* SA_NOCLDSTOP flag to turn off SIGCHLD when children stop .
* SA_RESETHAND clears the handler when the signal is delivered .
* SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies .
* SA_NODEFER prevents the current signal from being masked in the handler .
*
* SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
* Unix names RESETHAND and NODEFER respectively .
*/
# define SA_NOCLDSTOP 0x00000001u
# define SA_NOCLDWAIT 0x00000002u
# define SA_SIGINFO 0x00000004u
# define SA_ONSTACK 0x08000000u
# define SA_RESTART 0x10000000u
# define SA_NODEFER 0x40000000u
# define SA_RESETHAND 0x80000000u
# define SA_NOMASK SA_NODEFER
# define SA_ONESHOT SA_RESETHAND
# define SA_RESTORER 0x04000000
/*
* sigaltstack controls
*/
# define SS_ONSTACK 1
# define SS_DISABLE 2
# define MINSIGSTKSZ 2048
# define SIGSTKSZ 8192
# include <asm-generic/signal.h>
# ifndef __ASSEMBLY__
# ifdef __i386__
# ifdef __KERNEL__
struct old_sigaction {
__sighandler_t sa_handler ;
old_sigset_t sa_mask ;
unsigned long sa_flags ;
__sigrestore_t sa_restorer ;
} ;
struct sigaction {
__sighandler_t sa_handler ;
unsigned long sa_flags ;
__sigrestore_t sa_restorer ;
sigset_t sa_mask ; /* mask last for extensibility */
} ;
struct k_sigaction {
struct sigaction sa ;
} ;
2008-07-21 20:07:52 +04:00
extern void do_notify_resume ( struct pt_regs * , void * , __u32 ) ;
2007-10-24 00:37:24 +04:00
# else /* __KERNEL__ */
/* Here we must cater to libcs that poke about in kernel headers. */
struct sigaction {
union {
__sighandler_t _sa_handler ;
void ( * _sa_sigaction ) ( int , struct siginfo * , void * ) ;
} _u ;
sigset_t sa_mask ;
unsigned long sa_flags ;
void ( * sa_restorer ) ( void ) ;
} ;
# define sa_handler _u._sa_handler
# define sa_sigaction _u._sa_sigaction
# endif /* ! __KERNEL__ */
# else /* __i386__ */
struct sigaction {
__sighandler_t sa_handler ;
unsigned long sa_flags ;
__sigrestore_t sa_restorer ;
sigset_t sa_mask ; /* mask last for extensibility */
} ;
struct k_sigaction {
struct sigaction sa ;
} ;
# endif /* !__i386__ */
typedef struct sigaltstack {
void __user * ss_sp ;
int ss_flags ;
size_t ss_size ;
} stack_t ;
# ifdef __KERNEL__
# include <asm/sigcontext.h>
2008-07-15 00:40:23 +04:00
# ifdef __i386__
2007-10-24 00:37:24 +04:00
# define __HAVE_ARCH_SIG_BITOPS
2008-03-23 11:03:28 +03:00
# define sigaddset(set,sig) \
2008-07-15 00:40:23 +04:00
( __builtin_constant_p ( sig ) \
2008-03-23 11:03:28 +03:00
? __const_sigaddset ( ( set ) , ( sig ) ) \
: __gen_sigaddset ( ( set ) , ( sig ) ) )
2007-10-24 00:37:24 +04:00
2008-03-23 11:03:28 +03:00
static inline void __gen_sigaddset ( sigset_t * set , int _sig )
2007-10-24 00:37:24 +04:00
{
2008-03-23 11:03:28 +03:00
asm ( " btsl %1,%0 " : " +m " ( * set ) : " Ir " ( _sig - 1 ) : " cc " ) ;
2007-10-24 00:37:24 +04:00
}
2008-03-23 11:03:28 +03:00
static inline void __const_sigaddset ( sigset_t * set , int _sig )
2007-10-24 00:37:24 +04:00
{
unsigned long sig = _sig - 1 ;
set - > sig [ sig / _NSIG_BPW ] | = 1 < < ( sig % _NSIG_BPW ) ;
}
2008-03-23 11:03:28 +03:00
# define sigdelset(set, sig) \
( __builtin_constant_p ( sig ) \
? __const_sigdelset ( ( set ) , ( sig ) ) \
: __gen_sigdelset ( ( set ) , ( sig ) ) )
2007-10-24 00:37:24 +04:00
2008-03-23 11:03:28 +03:00
static inline void __gen_sigdelset ( sigset_t * set , int _sig )
2007-10-24 00:37:24 +04:00
{
2008-03-23 11:03:28 +03:00
asm ( " btrl %1,%0 " : " +m " ( * set ) : " Ir " ( _sig - 1 ) : " cc " ) ;
2007-10-24 00:37:24 +04:00
}
2008-03-23 11:03:28 +03:00
static inline void __const_sigdelset ( sigset_t * set , int _sig )
2007-10-24 00:37:24 +04:00
{
unsigned long sig = _sig - 1 ;
set - > sig [ sig / _NSIG_BPW ] & = ~ ( 1 < < ( sig % _NSIG_BPW ) ) ;
}
2008-03-23 11:03:28 +03:00
static inline int __const_sigismember ( sigset_t * set , int _sig )
2007-10-24 00:37:24 +04:00
{
unsigned long sig = _sig - 1 ;
return 1 & ( set - > sig [ sig / _NSIG_BPW ] > > ( sig % _NSIG_BPW ) ) ;
}
2008-03-23 11:03:28 +03:00
static inline int __gen_sigismember ( sigset_t * set , int _sig )
2007-10-24 00:37:24 +04:00
{
int ret ;
2008-03-23 11:03:28 +03:00
asm ( " btl %2,%1 \n \t sbbl %0,%0 "
: " =r " ( ret ) : " m " ( * set ) , " Ir " ( _sig - 1 ) : " cc " ) ;
2007-10-24 00:37:24 +04:00
return ret ;
}
2008-03-23 11:03:28 +03:00
# define sigismember(set, sig) \
( __builtin_constant_p ( sig ) \
? __const_sigismember ( ( set ) , ( sig ) ) \
: __gen_sigismember ( ( set ) , ( sig ) ) )
2007-10-24 00:37:24 +04:00
2008-03-23 11:03:28 +03:00
static inline int sigfindinword ( unsigned long word )
2007-10-24 00:37:24 +04:00
{
2008-03-23 11:03:28 +03:00
asm ( " bsfl %1,%0 " : " =r " ( word ) : " rm " ( word ) : " cc " ) ;
2007-10-24 00:37:24 +04:00
return word ;
}
struct pt_regs ;
# else /* __i386__ */
# undef __HAVE_ARCH_SIG_BITOPS
2008-01-30 15:30:50 +03:00
# endif /* !__i386__ */
2007-10-24 00:37:24 +04:00
# define ptrace_signal_deliver(regs, cookie) do { } while (0)
# endif /* __KERNEL__ */
# endif /* __ASSEMBLY__ */
2008-10-23 09:26:29 +04:00
# endif /* _ASM_X86_SIGNAL_H */