malloc/Makefile: Split and sort tests
[glibc.git] / sysdeps / i386 / sys / ucontext.h
blob7e3fe03135f4d43827379785504994f87e43b96c
1 /* Copyright (C) 1997-2024 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
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.
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.
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/>. */
18 /* System V/i386 ABI compliant context switching support. */
20 #ifndef _SYS_UCONTEXT_H
21 #define _SYS_UCONTEXT_H 1
23 #include <features.h>
25 #include <bits/types/sigset_t.h>
26 #include <bits/types/stack_t.h>
29 /* Type for general register. */
30 typedef int greg_t;
32 /* Number of general registers. */
33 #define __NGREG 19
34 #ifdef __USE_MISC
35 # define NGREG __NGREG
36 #endif
38 /* Container for all general registers. */
39 typedef greg_t gregset_t[__NGREG];
41 #ifdef __USE_MISC
42 /* Number of each register is the `gregset_t' array. */
43 enum
45 REG_GS = 0,
46 # define REG_GS REG_GS
47 REG_FS,
48 # define REG_FS REG_FS
49 REG_ES,
50 # define REG_ES REG_ES
51 REG_DS,
52 # define REG_DS REG_DS
53 REG_EDI,
54 # define REG_EDI REG_EDI
55 REG_ESI,
56 # define REG_ESI REG_ESI
57 REG_EBP,
58 # define REG_EBP REG_EBP
59 REG_ESP,
60 # define REG_ESP REG_ESP
61 REG_EBX,
62 # define REG_EBX REG_EBX
63 REG_EDX,
64 # define REG_EDX REG_EDX
65 REG_ECX,
66 # define REG_ECX REG_ECX
67 REG_EAX,
68 # define REG_EAX REG_EAX
69 REG_TRAPNO,
70 # define REG_TRAPNO REG_TRAPNO
71 REG_ERR,
72 # define REG_ERR REG_ERR
73 REG_EIP,
74 # define REG_EIP REG_EIP
75 REG_CS,
76 # define REG_CS REG_CS
77 REG_EFL,
78 # define REG_EFL REG_EFL
79 REG_UESP,
80 # define REG_UESP REG_UESP
81 REG_SS
82 # define REG_SS REG_SS
84 #endif
86 #ifdef __USE_MISC
87 # define __ctx(fld) fld
88 # define __ctxt(tag) tag
89 #else
90 # define __ctx(fld) __ ## fld
91 # define __ctxt(tag) /* Empty. */
92 #endif
94 /* Structure to describe FPU registers. */
95 typedef struct
97 union
99 struct __ctxt(fpchip_state)
101 int __ctx(state)[27];
102 int __ctx(status);
103 } __ctx(fpchip_state);
105 struct __ctxt(fp_emul_space)
107 char __ctx(fp_emul)[246];
108 char __ctx(fp_epad)[2];
109 } __ctx(fp_emul_space);
111 int __ctx(f_fpregs)[62];
112 } __ctx(fp_reg_set);
114 long int __ctx(f_wregs)[33];
115 } fpregset_t;
117 /* Context to describe whole processor state. */
118 typedef struct
120 gregset_t __ctx(gregs);
121 fpregset_t __ctx(fpregs);
122 } mcontext_t;
124 /* Userlevel context. */
125 typedef struct ucontext_t
127 unsigned long int __ctx(uc_flags);
128 struct ucontext_t *uc_link;
129 sigset_t uc_sigmask;
130 stack_t uc_stack;
131 mcontext_t uc_mcontext;
132 long int __glibc_reserved1[5];
133 } ucontext_t;
135 #undef __ctx
136 #undef __ctxt
138 #endif /* sys/ucontext.h */