/* Copyright (C) 1998-2018 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H	1

#include <features.h>

#include <bits/types/sigset_t.h>
#include <bits/types/stack_t.h>

#include <bits/wordsize.h>


#ifdef __USE_MISC
# define __ctx(fld) fld
#else
# define __ctx(fld) __ ## fld
#endif

#if __WORDSIZE == 64

#define __MC_NGREG	19
#ifdef __USE_MISC
# define MC_TSTATE	0
# define MC_PC		1
# define MC_NPC		2
# define MC_Y		3
# define MC_G1		4
# define MC_G2		5
# define MC_G3		6
# define MC_G4		7
# define MC_G5		8
# define MC_G6		9
# define MC_G7		10
# define MC_O0		11
# define MC_O1		12
# define MC_O2		13
# define MC_O3		14
# define MC_O4		15
# define MC_O5		16
# define MC_O6		17
# define MC_O7		18
# define MC_NGREG	__MC_NGREG
#endif

typedef unsigned long mc_greg_t;
typedef mc_greg_t mc_gregset_t[__MC_NGREG];

#ifdef __USE_MISC
# define MC_MAXFPQ	16
#endif
struct __mc_fq {
	unsigned long	*__ctx(mcfq_addr);
	unsigned int	__ctx(mcfq_insn);
};

typedef struct {
	union {
		unsigned int	__ctx(sregs)[32];
		unsigned long	__ctx(dregs)[32];
		long double	__ctx(qregs)[16];
	} __ctx(mcfpu_fregs);
	unsigned long	__ctx(mcfpu_fsr);
	unsigned long	__ctx(mcfpu_fprs);
	unsigned long	__ctx(mcfpu_gsr);
	struct __mc_fq	*__ctx(mcfpu_fq);
	unsigned char	__ctx(mcfpu_qcnt);
	unsigned char	__ctx(mcfpu_qentsz);
	unsigned char	__ctx(mcfpu_enab);
} mc_fpu_t;

typedef struct {
	mc_gregset_t	__ctx(mc_gregs);
	mc_greg_t	__ctx(mc_fp);
	mc_greg_t	__ctx(mc_i7);
	mc_fpu_t	__ctx(mc_fpregs);
} mcontext_t;

typedef struct ucontext_t {
	struct ucontext_t	*uc_link;
	unsigned long		__ctx(uc_flags);
	unsigned long		__uc_sigmask;
	mcontext_t		uc_mcontext;
	stack_t			uc_stack;
	sigset_t		uc_sigmask;
} ucontext_t;

#endif /* __WORDISIZE == 64 */

/*
 * Location of the users' stored registers relative to R0.
 * Usage is as an index into a gregset_t array or as u.u_ar0[XX].
 */
#ifdef __USE_MISC
# define REG_PSR (0)
# define REG_PC  (1)
# define REG_nPC (2)
# define REG_Y   (3)
# define REG_G1  (4)
# define REG_G2  (5)
# define REG_G3  (6)
# define REG_G4  (7)
# define REG_G5  (8)
# define REG_G6  (9)
# define REG_G7  (10)
# define REG_O0  (11)
# define REG_O1  (12)
# define REG_O2  (13)
# define REG_O3  (14)
# define REG_O4  (15)
# define REG_O5  (16)
# define REG_O6  (17)
# define REG_O7  (18)
#endif

/*
 * A gregset_t is defined as an array type for compatibility with the reference
 * source. This is important due to differences in the way the C language
 * treats arrays and structures as parameters.
 *
 * Note that NGREG is really (sizeof (struct regs) / sizeof (greg_t)),
 * but that the ABI defines it absolutely to be 21 (resp. 19).
 */

#if __WORDSIZE == 64

# define __NGREG   21
# ifdef __USE_MISC
#  define REG_ASI	(19)
#  define REG_FPRS (20)

#  define NGREG   __NGREG
# endif
typedef long greg_t;

#else /* __WORDSIZE == 32 */

# define __NGREG   19
# ifdef __USE_MISC
#  define NGREG   __NGREG
# endif
typedef int greg_t;

#endif /* __WORDSIZE == 32 */

typedef greg_t  gregset_t[__NGREG];

/*
 * The following structures define how a register window can appear on the
 * stack. This structure is available (when required) through the `gwins'
 * field of an mcontext (nested within ucontext). SPARC_MAXWINDOW is the
 * maximum number of outstanding regiters window defined in the SPARC
 * architecture (*not* implementation).
 */
# define __SPARC_MAXREGWINDOW	31	/* max windows in SPARC arch. */
#ifdef __USE_MISC
# define SPARC_MAXREGWINDOW	__SPARC_MAXREGWINDOW
#endif
struct  __rwindow
  {
    greg_t __ctx(rw_local)[8];			/* locals */
    greg_t __ctx(rw_in)[8];			/* ins */
  };

#ifdef __USE_MISC
# define rw_fp   __ctx(rw_in)[6]		/* frame pointer */
# define rw_rtn  __ctx(rw_in)[7]		/* return address */
#endif

typedef struct
  {
    int            __ctx(wbcnt);
    int           *__ctx(spbuf)[__SPARC_MAXREGWINDOW];
    struct __rwindow __ctx(wbuf)[__SPARC_MAXREGWINDOW];
  } gwindows_t;

/*
 * Floating point definitions.
 */

#ifdef __USE_MISC
# define MAXFPQ	16	/* max # of fpu queue entries currently supported */
#endif

/*
 * struct fq defines the minimal format of a floating point instruction queue
 * entry. The size of entries in the floating point queue are implementation
 * dependent. The union FQu is guarenteed to be the first field in any ABI
 * conformant system implementation. Any additional fields provided by an
 * implementation should not be used applications designed to be ABI conformant. */

struct __fpq
  {
    unsigned long *__ctx(fpq_addr);		/* address */
    unsigned long __ctx(fpq_instr);		/* instruction */
  };

struct __fq
  {
    union				/* FPU inst/addr queue */
      {
        double __ctx(whole);
        struct __fpq __ctx(fpq);
      } __ctx(FQu);
  };

#ifdef __USE_MISC
# define FPU_REGS_TYPE           unsigned
# define FPU_DREGS_TYPE          unsigned long long
# define V7_FPU_FSR_TYPE         unsigned
# define V9_FPU_FSR_TYPE         unsigned long long
# define V9_FPU_FPRS_TYPE        unsigned
#endif

#if __WORDSIZE == 64

typedef struct
  {
    union {				/* FPU floating point regs */
      unsigned		__ctx(fpu_regs)[32];	/* 32 singles */
      double            __ctx(fpu_dregs)[32];	/* 32 doubles */
      long double	__ctx(fpu_qregs)[16];  /* 16 quads */
    } __ctx(fpu_fr);
    struct __fq     *__ctx(fpu_q);		/* ptr to array of FQ entries */
    unsigned long   __ctx(fpu_fsr);		/* FPU status register */
    unsigned char   __ctx(fpu_qcnt);		/* # of entries in saved FQ */
    unsigned char   __ctx(fpu_q_entrysize);	/* # of bytes per FQ entry */
    unsigned char   __ctx(fpu_en);		/* flag signifying fpu in use */
  } fpregset_t;

#else /* __WORDSIZE == 32 */

typedef struct
  {
    union {				/* FPU floating point regs */
      __extension__ unsigned long long __ctx(fpu_regs)[32];	/* 32 singles */
      double             __ctx(fpu_dregs)[16];	/* 16 doubles */
    } __ctx(fpu_fr);
    struct __fq     *__ctx(fpu_q);		/* ptr to array of FQ entries */
    unsigned        __ctx(fpu_fsr);		/* FPU status register */
    unsigned char   __ctx(fpu_qcnt);		/* # of entries in saved FQ */
    unsigned char   __ctx(fpu_q_entrysize);	/* # of bytes per FQ entry */
    unsigned char   __ctx(fpu_en);		/* flag signifying fpu in use */
  } fpregset_t;

/*
 * The following structure is for associating extra register state with
 * the ucontext structure and is kept within the uc_mcontext filler area.
 *
 * If (xrs_id == XRS_ID) then the xrs_ptr field is a valid pointer to
 * extra register state. The exact format of the extra register state
 * pointed to by xrs_ptr is platform-dependent.
 *
 * Note: a platform may or may not manage extra register state.
 */
typedef struct
  {
    unsigned int __ctx(xrs_id);		/* indicates xrs_ptr validity */
    void *       __ctx(xrs_ptr);		/* ptr to extra reg state */
  } xrs_t;

#ifdef __USE_MISC
# define XRS_ID	0x78727300		/* the string "xrs" */
#endif

typedef struct
  {
    gregset_t   __ctx(gregs);		/* general register set */
    gwindows_t  *__ctx(gwins);		/* POSSIBLE pointer to register
					   windows */
    fpregset_t  __ctx(fpregs);		/* floating point register set */
    xrs_t       __ctx(xrs);		/* POSSIBLE extra register state
					   association */
    long        __glibc_reserved1[19];
  } mcontext_t;


/* Userlevel context.  */
typedef struct ucontext_t
  {
    unsigned long   __ctx(uc_flags);
    struct ucontext_t *uc_link;
    sigset_t	    uc_sigmask;
    stack_t         uc_stack;
    mcontext_t      uc_mcontext;
  } ucontext_t;

#endif /* __WORDSIZE == 32 */
#endif /* sys/ucontext.h */
