1 /* Copyright (C) 1998-2021 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3 
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8 
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13 
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library.  If not, see
16    <https://www.gnu.org/licenses/>.  */
17 
18 /* System V/ARM ABI compliant context switching support.  */
19 
20 #ifndef _SYS_UCONTEXT_H
21 #define _SYS_UCONTEXT_H	1
22 
23 #include <features.h>
24 
25 #include <bits/types/sigset_t.h>
26 #include <bits/types/stack_t.h>
27 
28 
29 typedef int greg_t;
30 
31 /* Number of general registers.  */
32 #define __NGREG	16
33 #ifdef __USE_MISC
34 # define NGREG	__NGREG
35 #endif
36 
37 /* Container for all general registers.  */
38 typedef greg_t gregset_t[__NGREG];
39 
40 #ifdef __USE_MISC
41 /* Number of each register is the `gregset_t' array.  */
42 enum
43 {
44   R0 = 0,
45 # define R0	R0
46   R1 = 1,
47 # define R1	R1
48   R2 = 2,
49 # define R2	R2
50   R3 = 3,
51 # define R3	R3
52   R4 = 4,
53 # define R4	R4
54   R5 = 5,
55 # define R5	R5
56   R6 = 6,
57 # define R6	R6
58   R7 = 7,
59 # define R7	R7
60   R8 = 8,
61 # define R8	R8
62   R9 = 9,
63 # define R9	R9
64   R10 = 10,
65 # define R10	R10
66   R11 = 11,
67 # define R11	R11
68   R12 = 12,
69 # define R12	R12
70   R13 = 13,
71 # define R13	R13
72   R14 = 14,
73 # define R14	R14
74   R15 = 15,
75 # define R15	R15
76 };
77 #endif
78 
79 #ifdef __USE_MISC
80 # define __ctx(fld) fld
81 #else
82 # define __ctx(fld) __ ## fld
83 #endif
84 
85 /* Structure to describe FPU registers.  */
86 typedef struct
87   {
88   } fpregset_t;
89 
90 /* Context to describe whole processor state.  */
91 typedef struct
92   {
93     gregset_t __ctx(gregs);
94     fpregset_t __ctx(fpregs);
95   } mcontext_t;
96 
97 /* Userlevel context.  */
98 typedef struct ucontext_t
99   {
100     unsigned long int __ctx(uc_flags);
101     struct ucontext_t *uc_link;
102     sigset_t uc_sigmask;
103     stack_t uc_stack;
104     mcontext_t uc_mcontext;
105     long int __glibc_reserved1[5];
106   } ucontext_t;
107 
108 #undef __ctx
109 
110 #endif /* sys/ucontext.h */
111