1 /* Mach thread state definitions for machine-independent code.  i386 version.
2    Copyright (C) 1994-2022 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4 
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <https://www.gnu.org/licenses/>.  */
18 
19 #ifndef _MACH_I386_THREAD_STATE_H
20 #define _MACH_I386_THREAD_STATE_H 1
21 
22 #include <mach/machine/thread_status.h>
23 
24 /* This lets the kernel define segments for a new thread.  */
25 #define MACHINE_NEW_THREAD_STATE_FLAVOR	i386_THREAD_STATE
26 /* This makes the kernel load our segments descriptors.  */
27 #define MACHINE_THREAD_STATE_FLAVOR	i386_REGS_SEGS_STATE
28 #define MACHINE_THREAD_STATE_COUNT	i386_THREAD_STATE_COUNT
29 
30 #define machine_thread_state i386_thread_state
31 
32 #define PC eip
33 #define SP uesp
34 #define SYSRETURN eax
35 
36 #define MACHINE_THREAD_STATE_FIX_NEW(ts) do { \
37 	asm ("mov %%cs, %w0" : "=q" ((ts)->cs)); \
38 	asm ("mov %%ds, %w0" : "=q" ((ts)->ds)); \
39 	asm ("mov %%es, %w0" : "=q" ((ts)->es)); \
40 	asm ("mov %%fs, %w0" : "=q" ((ts)->fs)); \
41 	asm ("mov %%gs, %w0" : "=q" ((ts)->gs)); \
42 } while(0)
43 
44 struct machine_thread_all_state
45   {
46     int set;			/* Mask of bits (1 << FLAVOR).  */
47     struct i386_thread_state basic;
48     struct i386_float_state fpu;
49   };
50 
51 #include <sysdeps/mach/thread_state.h>
52 
53 #endif /* mach/i386/thread_state.h */
54