cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sigcontext.h (2616B)


      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) */