linux/arch/sparc/include/asm/sigcontext.h
<<
>>
Prefs
   1#ifndef __SPARC_SIGCONTEXT_H
   2#define __SPARC_SIGCONTEXT_H
   3
   4#ifdef __KERNEL__
   5#include <asm/ptrace.h>
   6
   7#ifndef __ASSEMBLY__
   8
   9#define __SUNOS_MAXWIN   31
  10
  11/* This is what SunOS does, so shall I unless we use new 32bit signals or rt signals. */
  12struct sigcontext32 {
  13        int sigc_onstack;      /* state to restore */
  14        int sigc_mask;         /* sigmask to restore */
  15        int sigc_sp;           /* stack pointer */
  16        int sigc_pc;           /* program counter */
  17        int sigc_npc;          /* next program counter */
  18        int sigc_psr;          /* for condition codes etc */
  19        int sigc_g1;           /* User uses these two registers */
  20        int sigc_o0;           /* within the trampoline code. */
  21
  22        /* Now comes information regarding the users window set
  23         * at the time of the signal.
  24         */
  25        int sigc_oswins;       /* outstanding windows */
  26
  27        /* stack ptrs for each regwin buf */
  28        unsigned sigc_spbuf[__SUNOS_MAXWIN];
  29
  30        /* Windows to restore after signal */
  31        struct reg_window32 sigc_wbuf[__SUNOS_MAXWIN];
  32};
  33
  34
  35/* This is what we use for 32bit new non-rt signals. */
  36
  37typedef struct {
  38        struct {
  39                unsigned int psr;
  40                unsigned int pc;
  41                unsigned int npc;
  42                unsigned int y;
  43                unsigned int u_regs[16]; /* globals and ins */
  44        }                       si_regs;
  45        int                     si_mask;
  46} __siginfo32_t;
  47
  48#ifdef CONFIG_SPARC64
  49typedef struct {
  50        unsigned   int si_float_regs [64];
  51        unsigned   long si_fsr;
  52        unsigned   long si_gsr;
  53        unsigned   long si_fprs;
  54} __siginfo_fpu_t;
  55
  56/* This is what SunOS doesn't, so we have to write this alone
  57   and do it properly. */
  58struct sigcontext {
  59        /* The size of this array has to match SI_MAX_SIZE from siginfo.h */
  60        char                    sigc_info[128];
  61        struct {
  62                unsigned long   u_regs[16]; /* globals and ins */
  63                unsigned long   tstate;
  64                unsigned long   tpc;
  65                unsigned long   tnpc;
  66                unsigned int    y;
  67                unsigned int    fprs;
  68        }                       sigc_regs;
  69        __siginfo_fpu_t *       sigc_fpu_save;
  70        struct {
  71                void    *       ss_sp;
  72                int             ss_flags;
  73                unsigned long   ss_size;
  74        }                       sigc_stack;
  75        unsigned long           sigc_mask;
  76};
  77
  78#else
  79
  80typedef struct {
  81        unsigned long si_float_regs [32];
  82        unsigned long si_fsr;
  83        unsigned long si_fpqdepth;
  84        struct {
  85                unsigned long *insn_addr;
  86                unsigned long insn;
  87        } si_fpqueue [16];
  88} __siginfo_fpu_t;
  89#endif /* (CONFIG_SPARC64) */
  90
  91
  92#endif /* !(__ASSEMBLY__) */
  93
  94#endif /* (__KERNEL__) */
  95
  96#endif /* !(__SPARC_SIGCONTEXT_H) */
  97