root/arch/sparc/include/asm/sigcontext.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */