linux/arch/sparc/include/asm/sigcontext.h
<<
>>
Prefs
   1#ifndef __SPARC_SIGCONTEXT_H
   2#define __SPARC_SIGCONTEXT_H
   3
   4#include <asm/ptrace.h>
   5#include <uapi/asm/sigcontext.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 int 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#define __SIGC_MAXWIN   7
  49
  50typedef struct {
  51        unsigned long locals[8];
  52        unsigned long ins[8];
  53} __siginfo_reg_window;
  54
  55typedef struct {
  56        int                     wsaved;
  57        __siginfo_reg_window    reg_window[__SIGC_MAXWIN];
  58        unsigned long           rwbuf_stkptrs[__SIGC_MAXWIN];
  59} __siginfo_rwin_t;
  60
  61#ifdef CONFIG_SPARC64
  62typedef struct {
  63        unsigned   int si_float_regs [64];
  64        unsigned   long si_fsr;
  65        unsigned   long si_gsr;
  66        unsigned   long si_fprs;
  67} __siginfo_fpu_t;
  68
  69/* This is what SunOS doesn't, so we have to write this alone
  70   and do it properly. */
  71struct sigcontext {
  72        /* The size of this array has to match SI_MAX_SIZE from siginfo.h */
  73        char                    sigc_info[128];
  74        struct {
  75                unsigned long   u_regs[16]; /* globals and ins */
  76                unsigned long   tstate;
  77                unsigned long   tpc;
  78                unsigned long   tnpc;
  79                unsigned int    y;
  80                unsigned int    fprs;
  81        }                       sigc_regs;
  82        __siginfo_fpu_t *       sigc_fpu_save;
  83        struct {
  84                void    *       ss_sp;
  85                int             ss_flags;
  86                unsigned long   ss_size;
  87        }                       sigc_stack;
  88        unsigned long           sigc_mask;
  89        __siginfo_rwin_t *      sigc_rwin_save;
  90};
  91
  92#else
  93
  94typedef struct {
  95        unsigned long si_float_regs [32];
  96        unsigned long si_fsr;
  97        unsigned long si_fpqdepth;
  98        struct {
  99                unsigned long *insn_addr;
 100                unsigned long insn;
 101        } si_fpqueue [16];
 102} __siginfo_fpu_t;
 103#endif /* (CONFIG_SPARC64) */
 104
 105
 106#endif /* !(__ASSEMBLY__) */
 107
 108#endif /* !(__SPARC_SIGCONTEXT_H) */
 109