Linux Audio

Check our new training course

Loading...
v6.2
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _ASM_X86_SIGNAL_H
  3#define _ASM_X86_SIGNAL_H
  4
  5#ifndef __ASSEMBLY__
  6#include <linux/linkage.h>
  7
  8/* Most things should be clean enough to redefine this at will, if care
  9   is taken to make libc match.  */
 10
 11#define _NSIG		64
 12
 13#ifdef __i386__
 14# define _NSIG_BPW	32
 15#else
 16# define _NSIG_BPW	64
 17#endif
 18
 19#define _NSIG_WORDS	(_NSIG / _NSIG_BPW)
 20
 21typedef unsigned long old_sigset_t;		/* at least 32 bits */
 22
 23typedef struct {
 24	unsigned long sig[_NSIG_WORDS];
 25} sigset_t;
 26
 27/* non-uapi in-kernel SA_FLAGS for those indicates ABI for a signal frame */
 28#define SA_IA32_ABI	0x02000000u
 29#define SA_X32_ABI	0x01000000u
 30
 
 
 
 
 31#endif /* __ASSEMBLY__ */
 32#include <uapi/asm/signal.h>
 33#ifndef __ASSEMBLY__
 
 34
 35#define __ARCH_HAS_SA_RESTORER
 36
 37#include <asm/asm.h>
 38#include <uapi/asm/sigcontext.h>
 39
 40#ifdef __i386__
 41
 42#define __HAVE_ARCH_SIG_BITOPS
 43
 44#define sigaddset(set,sig)		    \
 45	(__builtin_constant_p(sig)	    \
 46	 ? __const_sigaddset((set), (sig))  \
 47	 : __gen_sigaddset((set), (sig)))
 48
 49static inline void __gen_sigaddset(sigset_t *set, int _sig)
 50{
 51	asm("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
 52}
 53
 54static inline void __const_sigaddset(sigset_t *set, int _sig)
 55{
 56	unsigned long sig = _sig - 1;
 57	set->sig[sig / _NSIG_BPW] |= 1 << (sig % _NSIG_BPW);
 58}
 59
 60#define sigdelset(set, sig)		    \
 61	(__builtin_constant_p(sig)	    \
 62	 ? __const_sigdelset((set), (sig))  \
 63	 : __gen_sigdelset((set), (sig)))
 64
 65
 66static inline void __gen_sigdelset(sigset_t *set, int _sig)
 67{
 68	asm("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
 69}
 70
 71static inline void __const_sigdelset(sigset_t *set, int _sig)
 72{
 73	unsigned long sig = _sig - 1;
 74	set->sig[sig / _NSIG_BPW] &= ~(1 << (sig % _NSIG_BPW));
 75}
 76
 77static inline int __const_sigismember(sigset_t *set, int _sig)
 78{
 79	unsigned long sig = _sig - 1;
 80	return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
 81}
 82
 83static inline int __gen_sigismember(sigset_t *set, int _sig)
 84{
 85	bool ret;
 86	asm("btl %2,%1" CC_SET(c)
 87	    : CC_OUT(c) (ret) : "m"(*set), "Ir"(_sig-1));
 88	return ret;
 89}
 90
 91#define sigismember(set, sig)			\
 92	(__builtin_constant_p(sig)		\
 93	 ? __const_sigismember((set), (sig))	\
 94	 : __gen_sigismember((set), (sig)))
 95
 96struct pt_regs;
 97
 98#else /* __i386__ */
 99
100#undef __HAVE_ARCH_SIG_BITOPS
101
102#endif /* !__i386__ */
103
104#endif /* __ASSEMBLY__ */
105#endif /* _ASM_X86_SIGNAL_H */
v5.4
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _ASM_X86_SIGNAL_H
  3#define _ASM_X86_SIGNAL_H
  4
  5#ifndef __ASSEMBLY__
  6#include <linux/linkage.h>
  7
  8/* Most things should be clean enough to redefine this at will, if care
  9   is taken to make libc match.  */
 10
 11#define _NSIG		64
 12
 13#ifdef __i386__
 14# define _NSIG_BPW	32
 15#else
 16# define _NSIG_BPW	64
 17#endif
 18
 19#define _NSIG_WORDS	(_NSIG / _NSIG_BPW)
 20
 21typedef unsigned long old_sigset_t;		/* at least 32 bits */
 22
 23typedef struct {
 24	unsigned long sig[_NSIG_WORDS];
 25} sigset_t;
 26
 27/* non-uapi in-kernel SA_FLAGS for those indicates ABI for a signal frame */
 28#define SA_IA32_ABI	0x02000000u
 29#define SA_X32_ABI	0x01000000u
 30
 31#ifndef CONFIG_COMPAT
 32typedef sigset_t compat_sigset_t;
 33#endif
 34
 35#endif /* __ASSEMBLY__ */
 36#include <uapi/asm/signal.h>
 37#ifndef __ASSEMBLY__
 38extern void do_signal(struct pt_regs *regs);
 39
 40#define __ARCH_HAS_SA_RESTORER
 41
 42#include <asm/asm.h>
 43#include <uapi/asm/sigcontext.h>
 44
 45#ifdef __i386__
 46
 47#define __HAVE_ARCH_SIG_BITOPS
 48
 49#define sigaddset(set,sig)		    \
 50	(__builtin_constant_p(sig)	    \
 51	 ? __const_sigaddset((set), (sig))  \
 52	 : __gen_sigaddset((set), (sig)))
 53
 54static inline void __gen_sigaddset(sigset_t *set, int _sig)
 55{
 56	asm("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
 57}
 58
 59static inline void __const_sigaddset(sigset_t *set, int _sig)
 60{
 61	unsigned long sig = _sig - 1;
 62	set->sig[sig / _NSIG_BPW] |= 1 << (sig % _NSIG_BPW);
 63}
 64
 65#define sigdelset(set, sig)		    \
 66	(__builtin_constant_p(sig)	    \
 67	 ? __const_sigdelset((set), (sig))  \
 68	 : __gen_sigdelset((set), (sig)))
 69
 70
 71static inline void __gen_sigdelset(sigset_t *set, int _sig)
 72{
 73	asm("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
 74}
 75
 76static inline void __const_sigdelset(sigset_t *set, int _sig)
 77{
 78	unsigned long sig = _sig - 1;
 79	set->sig[sig / _NSIG_BPW] &= ~(1 << (sig % _NSIG_BPW));
 80}
 81
 82static inline int __const_sigismember(sigset_t *set, int _sig)
 83{
 84	unsigned long sig = _sig - 1;
 85	return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
 86}
 87
 88static inline int __gen_sigismember(sigset_t *set, int _sig)
 89{
 90	bool ret;
 91	asm("btl %2,%1" CC_SET(c)
 92	    : CC_OUT(c) (ret) : "m"(*set), "Ir"(_sig-1));
 93	return ret;
 94}
 95
 96#define sigismember(set, sig)			\
 97	(__builtin_constant_p(sig)		\
 98	 ? __const_sigismember((set), (sig))	\
 99	 : __gen_sigismember((set), (sig)))
100
101struct pt_regs;
102
103#else /* __i386__ */
104
105#undef __HAVE_ARCH_SIG_BITOPS
106
107#endif /* !__i386__ */
108
109#endif /* __ASSEMBLY__ */
110#endif /* _ASM_X86_SIGNAL_H */