linux/arch/sparc/include/asm/sigcontext.h
<<
>>
Prefs
   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. */
  13struct 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
  38typedef 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
  51typedef struct {
  52        unsigned long locals[8];
  53        unsigned long ins[8];
  54} __siginfo_reg_window;
  55
  56typedef 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
  63typedef 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. */
  72struct 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
  95typedef 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) */
 110