Update copyright to LGPL on all files
[dyninst.git] / dyninstAPI / src / w32CONTEXT.h
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32
33 /* 
34  * $Id: w32CONTEXT.h,v 1.4 2006/03/14 22:57:32 legendre Exp $
35  */
36
37 #ifndef _w32CONTEXT_H
38 #define _w32CONTEXT_H
39
40 #ifdef mips_unknown_ce2_11 //ccw 27 july 2000
41 // the below definition of CONTEXT allows the MIPS context
42 // to be passed back up to the NT box and handled correctly.
43 // I have changed the pdwinnt.C file to use the type 
44 // w32CONTEXT rather than CONTEXT.  w32CONTEXT is defined
45 // below, either as mipsCONTEXT or plain old CONTEXT
46
47
48 // FROM WINNT.H 
49
50 // The following flags control the contents of the CONTEXT structure.
51 //
52 #define mipsCONTEXT_R4000   0x00010000    // r4000 context
53
54 #define mipsCONTEXT_CONTROL         (mipsCONTEXT_R4000 | 0x00000001L)
55 #define mipsCONTEXT_FLOATING_POINT  (mipsCONTEXT_R4000 | 0x00000002L)
56 #define mipsCONTEXT_INTEGER         (mipsCONTEXT_R4000 | 0x00000004L)
57
58 #define mipsCONTEXT_FULL (mipsCONTEXT_CONTROL | mipsCONTEXT_FLOATING_POINT | mipsCONTEXT_INTEGER)
59
60 //
61 // Context Frame
62 //
63 //  N.B. This frame must be exactly a multiple of 16 bytes in length.
64 //
65 //  This frame has a several purposes: 1) it is used as an argument to
66 //  NtContinue, 2) it is used to constuct a call frame for APC delivery,
67 //  3) it is used to construct a call frame for exception dispatching
68 //  in user mode, and 4) it is used in the user level thread creation
69 //  routines.
70 //
71 //  The layout of the record conforms to a standard call frame.
72 //
73
74 typedef struct _mipsCONTEXT {
75
76     //
77     // This section is always present and is used as an argument build
78     // area.
79     //
80
81     DWORD Argument[4];
82
83     //
84     // This section is specified/returned if the ContextFlags word contains
85     // the flag CONTEXT_FLOATING_POINT.
86     //
87
88     DWORD FltF0;
89     DWORD FltF1;
90     DWORD FltF2;
91     DWORD FltF3;
92     DWORD FltF4;
93     DWORD FltF5;
94     DWORD FltF6;
95     DWORD FltF7;
96     DWORD FltF8;
97     DWORD FltF9;
98     DWORD FltF10;
99     DWORD FltF11;
100     DWORD FltF12;
101     DWORD FltF13;
102     DWORD FltF14;
103     DWORD FltF15;
104     DWORD FltF16;
105     DWORD FltF17;
106     DWORD FltF18;
107     DWORD FltF19;
108     DWORD FltF20;
109     DWORD FltF21;
110     DWORD FltF22;
111     DWORD FltF23;
112     DWORD FltF24;
113     DWORD FltF25;
114     DWORD FltF26;
115     DWORD FltF27;
116     DWORD FltF28;
117     DWORD FltF29;
118     DWORD FltF30;
119     DWORD FltF31;
120
121     //
122     // This section is specified/returned if the ContextFlags word contains
123     // the flag CONTEXT_INTEGER.
124     //
125     // N.B. The registers gp, sp, and ra are defined in this section, but are
126     //  considered part of the control context rather than part of the integer
127     //  context.
128     //
129     // N.B. Register zero is not stored in the frame.
130     //
131
132     DWORD IntZero;
133     DWORD IntAt;
134     DWORD IntV0;
135     DWORD IntV1;
136     DWORD IntA0;
137     DWORD IntA1;
138     DWORD IntA2;
139     DWORD IntA3;
140     DWORD IntT0;
141     DWORD IntT1;
142     DWORD IntT2;
143     DWORD IntT3;
144     DWORD IntT4;
145     DWORD IntT5;
146     DWORD IntT6;
147     DWORD IntT7;
148     DWORD IntS0;
149     DWORD IntS1;
150     DWORD IntS2;
151     DWORD IntS3;
152     DWORD IntS4;
153     DWORD IntS5;
154     DWORD IntS6;
155     DWORD IntS7;
156     DWORD IntT8;
157     DWORD IntT9;
158     DWORD IntK0;
159     DWORD IntK1;
160     DWORD IntGp;
161     DWORD IntSp;
162     DWORD IntS8;
163     DWORD IntRa;
164     DWORD IntLo;
165     DWORD IntHi;
166
167     //
168     // This section is specified/returned if the ContextFlags word contains
169     // the flag CONTEXT_FLOATING_POINT.
170     //
171
172     DWORD Fsr;
173
174     //
175     // This section is specified/returned if the ContextFlags word contains
176     // the flag CONTEXT_CONTROL.
177     //
178     // N.B. The registers gp, sp, and ra are defined in the integer section,
179     //   but are considered part of the control context rather than part of
180     //   the integer context.
181     //
182
183     DWORD Fir;
184     DWORD Psr;
185
186     //
187     // The flags values within this flag control the contents of
188     // a CONTEXT record.
189     //
190     // If the context record is used as an input parameter, then
191     // for each portion of the context record controlled by a flag
192     // whose value is set, it is assumed that that portion of the
193     // context record contains valid context. If the context record
194     // is being used to modify a thread's context, then only that
195     // portion of the threads context will be modified.
196     //
197     // If the context record is used as an IN OUT parameter to capture
198     // the context of a thread, then only those portions of the thread's
199     // context corresponding to set flags will be returned.
200     //
201     // The context record is never used as an OUT only parameter.
202     //
203
204     DWORD ContextFlags;
205
206     DWORD Fill[2];
207 } mipsCONTEXT, *PmipsCONTEXT;
208
209 //end WINNT.H
210
211 #define w32CONTEXT mipsCONTEXT
212 #define w32CONTEXT_CONTROL mipsCONTEXT_CONTROL
213 #define w32CONTEXT_FLOATING_POINT mipsCONTEXT_FLOATING_POINT
214 #define w32CONTEXT_INTEGER mipsCONTEXT_INTEGER
215 #define w32CONTEXT_FULL mipsCONTEXT_FULL
216
217 #else
218 //ccw 27 july 2000 : use standard CONTEXT, for whatever chip winnt determines.
219 #define w32CONTEXT CONTEXT 
220
221 #define w32CONTEXT_CONTROL CONTEXT_CONTROL
222 #define w32CONTEXT_FLOATING_POINT CONTEXT_FLOATING_POINT
223 #define w32CONTEXT_INTEGER CONTEXT_INTEGER
224
225 #define w32CONTEXT_FULL CONTEXT_FULL
226
227 #endif // ifdef mips_unknown_ce2_11
228
229
230 #endif