about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
blob: 2c5fa0431c5940f9ffe23b6e49f9ea0335c52f96 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* Copyright (C) 1999-2016 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/>.  */

/* Where is System V/SH ABI?  */

#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H	1

#include <features.h>
#include <signal.h>

/* We need the signal context definitions even if they are not exposed
   by <signal.h>.  */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>


typedef int greg_t;

/* Number of general registers.  */
#define NGPREG	16

/* Container for all general registers.  */
typedef greg_t gregset_t[NGPREG];

#ifdef __USE_GNU
/* Number of each register is the `gregset_t' array.  */
enum
{
  R0 = 0,
#define R0	R0
  R1 = 1,
#define R1	R1
  R2 = 2,
#define R2	R2
  R3 = 3,
#define R3	R3
  R4 = 4,
#define R4	R4
  R5 = 5,
#define R5	R5
  R6 = 6,
#define R6	R6
  R7 = 7,
#define R7	R7
  R8 = 8,
#define R8	R8
  R9 = 9,
#define R9	R9
  R10 = 10,
#define R10	R10
  R11 = 11,
#define R11	R11
  R12 = 12,
#define R12	R12
  R13 = 13,
#define R13	R13
  R14 = 14,
#define R14	R14
  R15 = 15,
#define R15	R15
};
#endif

#if (defined(__SH4__) || defined(__SH4A__))
typedef int freg_t;

/* Number of FPU registers.  */
#define NFPREG	16

/* Structure to describe FPU registers.  */
typedef freg_t fpregset_t[NFPREG];

/* Context to describe whole processor state.  */
typedef struct
  {
    unsigned int oldmask;
    gregset_t gregs;
    unsigned int pc;
    unsigned int pr;
    unsigned int sr;
    unsigned int gbr;
    unsigned int mach;
    unsigned int macl;
    fpregset_t fpregs;
    fpregset_t xfpregs;
    unsigned int fpscr;
    unsigned int fpul;
    unsigned int ownedfp;
  } mcontext_t;
#else
/* Context to describe whole processor state.  */
typedef struct
  {
    unsigned int oldmask;
    gregset_t gregs;
    unsigned int pc;
    unsigned int pr;
    unsigned int sr;
    unsigned int gbr;
    unsigned int mach;
    unsigned int macl;
  } mcontext_t;
#endif /* __SH_FPU_ANY__ */

/* Userlevel context.  */
typedef struct ucontext
  {
    unsigned long int uc_flags;
    struct ucontext *uc_link;
    stack_t uc_stack;
    mcontext_t uc_mcontext;
    __sigset_t uc_sigmask;
  } ucontext_t;

#endif /* sys/ucontext.h */