ucontext.h
001: 
002: 
003: 
004: 
005: 
006: 
007: 
008: 
009: 
010: 
011: 
012: 
013: 
014: 
015: 
016: 
017: 
018: 
019: #ifndef _SYS_UCONTEXT_H
020: #define _SYS_UCONTEXT_H 1
021: 
022: #include <features.h>
023: #include <signal.h>
024: #include <bits/wordsize.h>
025: 
026: 
027: 
028: #include <bits/sigcontext.h>
029: 
030: #if __WORDSIZE == 64
031: 
032: 
033: typedef long int greg_t;
034: 
035: 
036: #define NGREG   23
037: 
038: 
039: typedef greg_t gregset_t[NGREG];
040: 
041: #ifdef __USE_GNU
042: 
043: enum
044: {
045:   REG_R8 = 0,
046: # define REG_R8         REG_R8
047:   REG_R9,
048: # define REG_R9         REG_R9
049:   REG_R10,
050: # define REG_R10        REG_R10
051:   REG_R11,
052: # define REG_R11        REG_R11
053:   REG_R12,
054: # define REG_R12        REG_R12
055:   REG_R13,
056: # define REG_R13        REG_R13
057:   REG_R14,
058: # define REG_R14        REG_R14
059:   REG_R15,
060: # define REG_R15        REG_R15
061:   REG_RDI,
062: # define REG_RDI        REG_RDI
063:   REG_RSI,
064: # define REG_RSI        REG_RSI
065:   REG_RBP,
066: # define REG_RBP        REG_RBP
067:   REG_RBX,
068: # define REG_RBX        REG_RBX
069:   REG_RDX,
070: # define REG_RDX        REG_RDX
071:   REG_RAX,
072: # define REG_RAX        REG_RAX
073:   REG_RCX,
074: # define REG_RCX        REG_RCX
075:   REG_RSP,
076: # define REG_RSP        REG_RSP
077:   REG_RIP,
078: # define REG_RIP        REG_RIP
079:   REG_EFL,
080: # define REG_EFL        REG_EFL
081:   REG_CSGSFS,           
082: # define REG_CSGSFS     REG_CSGSFS
083:   REG_ERR,
084: # define REG_ERR        REG_ERR
085:   REG_TRAPNO,
086: # define REG_TRAPNO     REG_TRAPNO
087:   REG_OLDMASK,
088: # define REG_OLDMASK    REG_OLDMASK
089:   REG_CR2
090: # define REG_CR2        REG_CR2
091: };
092: #endif
093: 
094: struct _libc_fpxreg
095: {
096:   unsigned short int significand[4];
097:   unsigned short int exponent;
098:   unsigned short int padding[3];
099: };
100: 
101: struct _libc_xmmreg
102: {
103:   __uint32_t    element[4];
104: };
105: 
106: struct _libc_fpstate
107: {
108:   
109:   __uint16_t            cwd;
110:   __uint16_t            swd;
111:   __uint16_t            ftw;
112:   __uint16_t            fop;
113:   __uint64_t            rip;
114:   __uint64_t            rdp;
115:   __uint32_t            mxcsr;
116:   __uint32_t            mxcr_mask;
117:   struct _libc_fpxreg   _st[8];
118:   struct _libc_xmmreg   _xmm[16];
119:   __uint32_t            padding[24];
120: };
121: 
122: 
123: typedef struct _libc_fpstate *fpregset_t;
124: 
125: 
126: typedef struct
127:   {
128:     gregset_t gregs;
129:     
130:     fpregset_t fpregs;
131:     unsigned long __reserved1 [8];
132: } mcontext_t;
133: 
134: 
135: typedef struct ucontext
136:   {
137:     unsigned long int uc_flags;
138:     struct ucontext *uc_link;
139:     stack_t uc_stack;
140:     mcontext_t uc_mcontext;
141:     __sigset_t uc_sigmask;
142:     struct _libc_fpstate __fpregs_mem;
143:   } ucontext_t;
144: 
145: #else 
146: 
147: 
148: typedef int greg_t;
149: 
150: 
151: #define NGREG   19
152: 
153: 
154: typedef greg_t gregset_t[NGREG];
155: 
156: #ifdef __USE_GNU
157: 
158: enum
159: {
160:   REG_GS = 0,
161: # define REG_GS         REG_GS
162:   REG_FS,
163: # define REG_FS         REG_FS
164:   REG_ES,
165: # define REG_ES         REG_ES
166:   REG_DS,
167: # define REG_DS         REG_DS
168:   REG_EDI,
169: # define REG_EDI        REG_EDI
170:   REG_ESI,
171: # define REG_ESI        REG_ESI
172:   REG_EBP,
173: # define REG_EBP        REG_EBP
174:   REG_ESP,
175: # define REG_ESP        REG_ESP
176:   REG_EBX,
177: # define REG_EBX        REG_EBX
178:   REG_EDX,
179: # define REG_EDX        REG_EDX
180:   REG_ECX,
181: # define REG_ECX        REG_ECX
182:   REG_EAX,
183: # define REG_EAX        REG_EAX
184:   REG_TRAPNO,
185: # define REG_TRAPNO     REG_TRAPNO
186:   REG_ERR,
187: # define REG_ERR        REG_ERR
188:   REG_EIP,
189: # define REG_EIP        REG_EIP
190:   REG_CS,
191: # define REG_CS         REG_CS
192:   REG_EFL,
193: # define REG_EFL        REG_EFL
194:   REG_UESP,
195: # define REG_UESP       REG_UESP
196:   REG_SS
197: # define REG_SS REG_SS
198: };
199: #endif
200: 
201: 
202: struct _libc_fpreg
203: {
204:   unsigned short int significand[4];
205:   unsigned short int exponent;
206: };
207: 
208: struct _libc_fpstate
209: {
210:   unsigned long int cw;
211:   unsigned long int sw;
212:   unsigned long int tag;
213:   unsigned long int ipoff;
214:   unsigned long int cssel;
215:   unsigned long int dataoff;
216:   unsigned long int datasel;
217:   struct _libc_fpreg _st[8];
218:   unsigned long int status;
219: };
220: 
221: 
222: typedef struct _libc_fpstate *fpregset_t;
223: 
224: 
225: typedef struct
226:   {
227:     gregset_t gregs;
228:     
229: 
230:     fpregset_t fpregs;
231:     unsigned long int oldmask;
232:     unsigned long int cr2;
233:   } mcontext_t;
234: 
235: 
236: typedef struct ucontext
237:   {
238:     unsigned long int uc_flags;
239:     struct ucontext *uc_link;
240:     stack_t uc_stack;
241:     mcontext_t uc_mcontext;
242:     __sigset_t uc_sigmask;
243:     struct _libc_fpstate __fpregs_mem;
244:   } ucontext_t;
245: 
246: #endif 
247: 
248: #endif 
249: 
      
      
      
      
   
      
      
         
            
            © Andrew Scott 2006 -
            2025, 
            All Rights Reserved