0001
0002
0003
0004
0005
0006
0007 #ifndef _ASM_S390_SIGCONTEXT_H
0008 #define _ASM_S390_SIGCONTEXT_H
0009
0010 #include <linux/compiler.h>
0011 #include <linux/types.h>
0012
0013 #define __NUM_GPRS 16
0014 #define __NUM_FPRS 16
0015 #define __NUM_ACRS 16
0016 #define __NUM_VXRS 32
0017 #define __NUM_VXRS_LOW 16
0018 #define __NUM_VXRS_HIGH 16
0019
0020 #ifndef __s390x__
0021
0022
0023 #define _SIGCONTEXT_NSIG 64
0024 #define _SIGCONTEXT_NSIG_BPW 32
0025
0026 #define __SIGNAL_FRAMESIZE 96
0027
0028 #else
0029
0030
0031 #define _SIGCONTEXT_NSIG 64
0032 #define _SIGCONTEXT_NSIG_BPW 64
0033
0034 #define __SIGNAL_FRAMESIZE 160
0035
0036 #endif
0037
0038 #define _SIGCONTEXT_NSIG_WORDS (_SIGCONTEXT_NSIG / _SIGCONTEXT_NSIG_BPW)
0039 #define _SIGMASK_COPY_SIZE (sizeof(unsigned long)*_SIGCONTEXT_NSIG_WORDS)
0040
0041 typedef struct
0042 {
0043 unsigned long mask;
0044 unsigned long addr;
0045 } __attribute__ ((aligned(8))) _psw_t;
0046
0047 typedef struct
0048 {
0049 _psw_t psw;
0050 unsigned long gprs[__NUM_GPRS];
0051 unsigned int acrs[__NUM_ACRS];
0052 } _s390_regs_common;
0053
0054 typedef struct
0055 {
0056 unsigned int fpc;
0057 unsigned int pad;
0058 double fprs[__NUM_FPRS];
0059 } _s390_fp_regs;
0060
0061 typedef struct
0062 {
0063 _s390_regs_common regs;
0064 _s390_fp_regs fpregs;
0065 } _sigregs;
0066
0067 typedef struct
0068 {
0069 #ifndef __s390x__
0070 unsigned long gprs_high[__NUM_GPRS];
0071 #endif
0072 unsigned long long vxrs_low[__NUM_VXRS_LOW];
0073 __vector128 vxrs_high[__NUM_VXRS_HIGH];
0074 unsigned char __reserved[128];
0075 } _sigregs_ext;
0076
0077 struct sigcontext
0078 {
0079 unsigned long oldmask[_SIGCONTEXT_NSIG_WORDS];
0080 _sigregs __user *sregs;
0081 };
0082
0083
0084 #endif
0085