|
|
1.1 root 1: /*
2: * @HP_COPYRIGHT@
3: */
4: /*
5: * HISTORY
6: * $Log: thread_status.h,v $
7: * Revision 1.4.3.2 1992/01/09 20:05:31 sharpe
8: * initial 1.1 vers from 1.0
9: * [1992/01/09 19:29:20 sharpe]
10: *
11: * Revision 1.4 1991/07/03 17:25:42 osfrcs
12: * 06/19/90 rand Add THREAD_STATE_FLAVOR_LIST to getstatus
13: * [91/06/21 17:29:52 brezak]
14: *
15: * Revision 1.3.2.2 91/06/21 18:05:17 brezak
16: * 06/19/90 rand Add THREAD_STATE_FLAVOR_LIST to getstatus
17: * [91/06/21 17:29:52 brezak]
18: *
19: * Revision 1.2.2.2 91/04/30 09:48:00 brezak
20: * rand 04/19/91 Add options to control reflection of assist/unalign exceptions
21: * [91/04/29 11:46:12 brezak]
22: *
23: * Revision 1.2 91/04/14 20:47:10 osfrcs
24: * Initial version.
25: * [91/03/30 09:32:42 brezak]
26: *
27: * $EndLog$
28: */
29:
30: #ifndef _HPPA_THREAD_STATE_
31: #define _HPPA_THREAD_STATE_
32:
33: #include <mach/machine/boolean.h>
34:
35:
36: #define HPPA_INTEGER_THREAD_STATE 1
37: #define HPPA_FRAME_THREAD_STATE 2
38: #define HPPA_FP_THREAD_STATE 3
39:
40: /*
41: * Flow control information that can
42: * be changed from user state (with
43: * some restrictions on psw).
44: */
45: struct hp_pa_frame_thread_state {
46: unsigned long ts_pcsq_front; /* instruction address space front */
47: unsigned long ts_pcsq_back; /* instruction address space back */
48: unsigned long ts_pcoq_front; /* instruction offset space front */
49: unsigned long ts_pcoq_back; /* instruction offset space back */
50: unsigned long ts_psw; /* process status word */
51: unsigned long ts_unaligned_faults; /* number of unaligned data references READ-ONLY */
52: unsigned long ts_fault_address; /* address of failing page fault READ-ONLY */
53: /*
54: * A step range is a range of address that
55: * will be executed with out generating a single
56: * step event. If both values are 0 no stepping
57: * will occur. Otherwise the program will run while:
58: *
59: * if (step_range_start <= step_range_stop)
60: * pcoq0 >= step_range_start && pcoq0 < step_range_stop
61: * if (step_range_start > step_range_stop)
62: * pcoq0 < step_range_stop && pcoq0 >= step_range_start
63: *
64: * notice that setting step_range_start and step_range_stop to the
65: * same non-zero value will execute only one instruction due to action
66: * of the pc queue. (Yes, nullified instructions count)
67: */
68: unsigned long ts_step_range_start;
69: unsigned long ts_step_range_stop;
70:
71: /* Generate an exception when OS assists with an alignment fault */
72: boolean_t ts_alignment_trap_reflect;
73:
74: /* Generate an exception when OS assists with an FP fault */
75: boolean_t ts_execution_trap_reflect;
76: };
77:
78: /*
79: * Get rid of as soon as all users of frame_thread_state
80: * have been recompiled. XXX
81: */
82: struct hp_pa_old_frame_thread_state {
83: unsigned long ts_pcsq_front; /* instruction address space front */
84: unsigned long ts_pcsq_back; /* instruction address space back */
85: unsigned long ts_pcoq_front; /* instruction offset space front */
86: unsigned long ts_pcoq_back; /* instruction offset space back */
87: unsigned long ts_psw; /* process status word */
88: };
89:
90: /*
91: * The unsigned longeger state that may be changed by any
92: * process in user space.
93: */
94: typedef struct hp_pa_integer_thread_state {
95: unsigned long ts_gr1; /* the user's general registers */
96: unsigned long ts_gr2;
97: unsigned long ts_gr3;
98: unsigned long ts_gr4;
99: unsigned long ts_gr5;
100: unsigned long ts_gr6;
101: unsigned long ts_gr7;
102: unsigned long ts_gr8;
103: unsigned long ts_gr9;
104: unsigned long ts_gr10;
105: unsigned long ts_gr11;
106: unsigned long ts_gr12;
107: unsigned long ts_gr13;
108: unsigned long ts_gr14;
109: unsigned long ts_gr15;
110: unsigned long ts_gr16;
111: unsigned long ts_gr17;
112: unsigned long ts_gr18;
113: unsigned long ts_gr19;
114: unsigned long ts_gr20;
115: unsigned long ts_gr21;
116: unsigned long ts_gr22;
117: unsigned long ts_gr23;
118: unsigned long ts_gr24;
119: unsigned long ts_gr25;
120: unsigned long ts_gr26;
121: unsigned long ts_gr27;
122: unsigned long ts_gr28;
123: unsigned long ts_gr29;
124: unsigned long ts_gr30;
125: unsigned long ts_gr31;
126: unsigned long ts_sr0; /* the user's space registgers */
127: unsigned long ts_sr1;
128: unsigned long ts_sr2;
129: unsigned long ts_sr3;
130: unsigned long ts_sar; /* the user's shift amount register */
131: } hp_pa_integer_thread_state_t;
132:
133: /*
134: * The floating point state that may be changed by any
135: * process in user space.
136: */
137: typedef struct hp_pa_fp_thread_state {
138: double ts_fp0; /* all of the execution unit registers */
139: double ts_fp1;
140: double ts_fp2;
141: double ts_fp3;
142: double ts_fp4;
143: double ts_fp5;
144: double ts_fp6;
145: double ts_fp7;
146: double ts_fp8;
147: double ts_fp9;
148: double ts_fp10;
149: double ts_fp11;
150: double ts_fp12;
151: double ts_fp13;
152: double ts_fp14;
153: double ts_fp15;
154: double ts_fp16;
155: double ts_fp17;
156: double ts_fp18;
157: double ts_fp19;
158: double ts_fp20;
159: double ts_fp21;
160: double ts_fp22;
161: double ts_fp23;
162: double ts_fp24;
163: double ts_fp25;
164: double ts_fp26;
165: double ts_fp27;
166: double ts_fp28;
167: double ts_fp29;
168: double ts_fp30;
169: double ts_fp31;
170: } hp_pa_fp_thread_state_t;
171:
172: #define HPPA_INTEGER_THREAD_STATE_COUNT (sizeof(struct hp_pa_integer_thread_state) / sizeof(unsigned long))
173: #define HPPA_FRAME_THREAD_STATE_COUNT (sizeof(struct hp_pa_frame_thread_state) / sizeof(unsigned long))
174: #define HPPA_FP_THREAD_STATE_COUNT (sizeof(struct hp_pa_fp_thread_state) / sizeof(unsigned long))
175:
176: /* Get rid of as soon as all users of thread_frame_state have been recompiled XXX */
177: #define HPPA_OLD_FRAME_THREAD_STATE_COUNT (sizeof(struct hp_pa_old_frame_thread_state) / sizeof(unsigned long))
178:
179: #endif /* _HPPA_THREAD_STATE_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.