2 * i386 register context support
4 * Copyright (C) 1999 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
36 /* copy a context structure according to the flags */
37 void copy_context( CONTEXT
*to
, const CONTEXT
*from
, unsigned int flags
)
39 flags
&= ~CONTEXT_i386
; /* get rid of CPU id */
40 if (flags
& CONTEXT_CONTROL
)
45 to
->SegCs
= from
->SegCs
;
46 to
->SegSs
= from
->SegSs
;
47 to
->EFlags
= from
->EFlags
;
49 if (flags
& CONTEXT_INTEGER
)
58 if (flags
& CONTEXT_SEGMENTS
)
60 to
->SegDs
= from
->SegDs
;
61 to
->SegEs
= from
->SegEs
;
62 to
->SegFs
= from
->SegFs
;
63 to
->SegGs
= from
->SegGs
;
65 if (flags
& CONTEXT_FLOATING_POINT
)
67 to
->FloatSave
= from
->FloatSave
;
69 if (flags
& CONTEXT_EXTENDED_REGISTERS
)
71 memcpy( to
->ExtendedRegisters
, from
->ExtendedRegisters
, sizeof(to
->ExtendedRegisters
) );
73 if (flags
& CONTEXT_DEBUG_REGISTERS
)
82 to
->ContextFlags
|= flags
;
85 /* retrieve the current instruction pointer of a context */
86 client_ptr_t
get_context_ip( const CONTEXT
*context
)
91 /* return the context flag that contains the CPU id */
92 unsigned int get_context_cpu_flag(void)
97 /* return only the context flags that correspond to system regs */
98 /* (system regs are the ones we can't access on the client side) */
99 unsigned int get_context_system_regs( unsigned int flags
)
101 return flags
& (CONTEXT_DEBUG_REGISTERS
& ~CONTEXT_i386
);
104 #endif /* __i386__ */