Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Mar 24-27, 2025, special US time zones
Register
Loading...
v4.17
  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 <uapi/asm/sigcontext.h>
 43
 44#ifdef __i386__
 45
 46#define __HAVE_ARCH_SIG_BITOPS
 47
 48#define sigaddset(set,sig)		    \
 49	(__builtin_constant_p(sig)	    \
 50	 ? __const_sigaddset((set), (sig))  \
 51	 : __gen_sigaddset((set), (sig)))
 52
 53static inline void __gen_sigaddset(sigset_t *set, int _sig)
 54{
 55	asm("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
 56}
 57
 58static inline void __const_sigaddset(sigset_t *set, int _sig)
 59{
 60	unsigned long sig = _sig - 1;
 61	set->sig[sig / _NSIG_BPW] |= 1 << (sig % _NSIG_BPW);
 62}
 63
 64#define sigdelset(set, sig)		    \
 65	(__builtin_constant_p(sig)	    \
 66	 ? __const_sigdelset((set), (sig))  \
 67	 : __gen_sigdelset((set), (sig)))
 68
 69
 70static inline void __gen_sigdelset(sigset_t *set, int _sig)
 71{
 72	asm("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
 73}
 74
 75static inline void __const_sigdelset(sigset_t *set, int _sig)
 76{
 77	unsigned long sig = _sig - 1;
 78	set->sig[sig / _NSIG_BPW] &= ~(1 << (sig % _NSIG_BPW));
 79}
 80
 81static inline int __const_sigismember(sigset_t *set, int _sig)
 82{
 83	unsigned long sig = _sig - 1;
 84	return 1 & (set->sig[sig / _NSIG_BPW] >> (sig % _NSIG_BPW));
 85}
 86
 87static inline int __gen_sigismember(sigset_t *set, int _sig)
 88{
 89	unsigned char ret;
 90	asm("btl %2,%1\n\tsetc %0"
 91	    : "=qm"(ret) : "m"(*set), "Ir"(_sig-1) : "cc");
 92	return ret;
 93}
 94
 95#define sigismember(set, sig)			\
 96	(__builtin_constant_p(sig)		\
 97	 ? __const_sigismember((set), (sig))	\
 98	 : __gen_sigismember((set), (sig)))
 99
100struct pt_regs;
101
102#else /* __i386__ */
103
104#undef __HAVE_ARCH_SIG_BITOPS
105
106#endif /* !__i386__ */
107
108#endif /* __ASSEMBLY__ */
109#endif /* _ASM_X86_SIGNAL_H */
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 */