faults.hh (4183:3d19c1d46946) faults.hh (4695:a63378aed062)
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 52 unchanged lines hidden (view full) ---

61
62class MachineCheckFault : public AlphaFault
63{
64 private:
65 static FaultName _name;
66 static FaultVect _vect;
67 static FaultStat _count;
68 public:
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 52 unchanged lines hidden (view full) ---

61
62class MachineCheckFault : public AlphaFault
63{
64 private:
65 static FaultName _name;
66 static FaultVect _vect;
67 static FaultStat _count;
68 public:
69 FaultName name() {return _name;}
69 FaultName name() const {return _name;}
70 FaultVect vect() {return _vect;}
71 FaultStat & countStat() {return _count;}
70 FaultVect vect() {return _vect;}
71 FaultStat & countStat() {return _count;}
72 bool isMachineCheckFault() {return true;}
72 bool isMachineCheckFault() const {return true;}
73};
74
75class AlignmentFault : public AlphaFault
76{
77 private:
78 static FaultName _name;
79 static FaultVect _vect;
80 static FaultStat _count;
81 public:
73};
74
75class AlignmentFault : public AlphaFault
76{
77 private:
78 static FaultName _name;
79 static FaultVect _vect;
80 static FaultStat _count;
81 public:
82 FaultName name() {return _name;}
82 FaultName name() const {return _name;}
83 FaultVect vect() {return _vect;}
84 FaultStat & countStat() {return _count;}
83 FaultVect vect() {return _vect;}
84 FaultStat & countStat() {return _count;}
85 bool isAlignmentFault() {return true;}
85 bool isAlignmentFault() const {return true;}
86};
87
88static inline Fault genMachineCheckFault()
89{
90 return new MachineCheckFault;
91}
92
93static inline Fault genAlignmentFault()
94{
95 return new AlignmentFault;
96}
97
98class ResetFault : public AlphaFault
99{
100 private:
101 static FaultName _name;
102 static FaultVect _vect;
103 static FaultStat _count;
104 public:
86};
87
88static inline Fault genMachineCheckFault()
89{
90 return new MachineCheckFault;
91}
92
93static inline Fault genAlignmentFault()
94{
95 return new AlignmentFault;
96}
97
98class ResetFault : public AlphaFault
99{
100 private:
101 static FaultName _name;
102 static FaultVect _vect;
103 static FaultStat _count;
104 public:
105 FaultName name() {return _name;}
105 FaultName name() const {return _name;}
106 FaultVect vect() {return _vect;}
107 FaultStat & countStat() {return _count;}
108};
109
110class ArithmeticFault : public AlphaFault
111{
112 protected:
113 bool skipFaultingInstruction() {return true;}
114 private:
115 static FaultName _name;
116 static FaultVect _vect;
117 static FaultStat _count;
118 public:
106 FaultVect vect() {return _vect;}
107 FaultStat & countStat() {return _count;}
108};
109
110class ArithmeticFault : public AlphaFault
111{
112 protected:
113 bool skipFaultingInstruction() {return true;}
114 private:
115 static FaultName _name;
116 static FaultVect _vect;
117 static FaultStat _count;
118 public:
119 FaultName name() {return _name;}
119 FaultName name() const {return _name;}
120 FaultVect vect() {return _vect;}
121 FaultStat & countStat() {return _count;}
122#if FULL_SYSTEM
123 void invoke(ThreadContext * tc);
124#endif
125};
126
127class InterruptFault : public AlphaFault
128{
129 protected:
130 bool setRestartAddress() {return false;}
131 private:
132 static FaultName _name;
133 static FaultVect _vect;
134 static FaultStat _count;
135 public:
120 FaultVect vect() {return _vect;}
121 FaultStat & countStat() {return _count;}
122#if FULL_SYSTEM
123 void invoke(ThreadContext * tc);
124#endif
125};
126
127class InterruptFault : public AlphaFault
128{
129 protected:
130 bool setRestartAddress() {return false;}
131 private:
132 static FaultName _name;
133 static FaultVect _vect;
134 static FaultStat _count;
135 public:
136 FaultName name() {return _name;}
136 FaultName name() const {return _name;}
137 FaultVect vect() {return _vect;}
138 FaultStat & countStat() {return _count;}
139};
140
141class DtbFault : public AlphaFault
142{
143#if FULL_SYSTEM
144 private:
145 AlphaISA::VAddr vaddr;
146 uint32_t reqFlags;
147 uint64_t flags;
148 public:
149 DtbFault(AlphaISA::VAddr _vaddr, uint32_t _reqFlags, uint64_t _flags)
150 : vaddr(_vaddr), reqFlags(_reqFlags), flags(_flags)
151 { }
152#endif
137 FaultVect vect() {return _vect;}
138 FaultStat & countStat() {return _count;}
139};
140
141class DtbFault : public AlphaFault
142{
143#if FULL_SYSTEM
144 private:
145 AlphaISA::VAddr vaddr;
146 uint32_t reqFlags;
147 uint64_t flags;
148 public:
149 DtbFault(AlphaISA::VAddr _vaddr, uint32_t _reqFlags, uint64_t _flags)
150 : vaddr(_vaddr), reqFlags(_reqFlags), flags(_flags)
151 { }
152#endif
153 FaultName name() = 0;
153 FaultName name() const = 0;
154 FaultVect vect() = 0;
155 FaultStat & countStat() = 0;
156#if FULL_SYSTEM
157 void invoke(ThreadContext * tc);
158#endif
159};
160
161class NDtbMissFault : public DtbFault
162{
163 private:
164 static FaultName _name;
165 static FaultVect _vect;
166 static FaultStat _count;
167 public:
168#if FULL_SYSTEM
169 NDtbMissFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
170 : DtbFault(vaddr, reqFlags, flags)
171 { }
172#endif
154 FaultVect vect() = 0;
155 FaultStat & countStat() = 0;
156#if FULL_SYSTEM
157 void invoke(ThreadContext * tc);
158#endif
159};
160
161class NDtbMissFault : public DtbFault
162{
163 private:
164 static FaultName _name;
165 static FaultVect _vect;
166 static FaultStat _count;
167 public:
168#if FULL_SYSTEM
169 NDtbMissFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
170 : DtbFault(vaddr, reqFlags, flags)
171 { }
172#endif
173 FaultName name() {return _name;}
173 FaultName name() const {return _name;}
174 FaultVect vect() {return _vect;}
175 FaultStat & countStat() {return _count;}
176};
177
178class PDtbMissFault : public DtbFault
179{
180 private:
181 static FaultName _name;
182 static FaultVect _vect;
183 static FaultStat _count;
184 public:
185#if FULL_SYSTEM
186 PDtbMissFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
187 : DtbFault(vaddr, reqFlags, flags)
188 { }
189#endif
174 FaultVect vect() {return _vect;}
175 FaultStat & countStat() {return _count;}
176};
177
178class PDtbMissFault : public DtbFault
179{
180 private:
181 static FaultName _name;
182 static FaultVect _vect;
183 static FaultStat _count;
184 public:
185#if FULL_SYSTEM
186 PDtbMissFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
187 : DtbFault(vaddr, reqFlags, flags)
188 { }
189#endif
190 FaultName name() {return _name;}
190 FaultName name() const {return _name;}
191 FaultVect vect() {return _vect;}
192 FaultStat & countStat() {return _count;}
193};
194
195class DtbPageFault : public DtbFault
196{
197 private:
198 static FaultName _name;
199 static FaultVect _vect;
200 static FaultStat _count;
201 public:
202#if FULL_SYSTEM
203 DtbPageFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
204 : DtbFault(vaddr, reqFlags, flags)
205 { }
206#endif
191 FaultVect vect() {return _vect;}
192 FaultStat & countStat() {return _count;}
193};
194
195class DtbPageFault : public DtbFault
196{
197 private:
198 static FaultName _name;
199 static FaultVect _vect;
200 static FaultStat _count;
201 public:
202#if FULL_SYSTEM
203 DtbPageFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
204 : DtbFault(vaddr, reqFlags, flags)
205 { }
206#endif
207 FaultName name() {return _name;}
207 FaultName name() const {return _name;}
208 FaultVect vect() {return _vect;}
209 FaultStat & countStat() {return _count;}
210};
211
212class DtbAcvFault : public DtbFault
213{
214 private:
215 static FaultName _name;
216 static FaultVect _vect;
217 static FaultStat _count;
218 public:
219#if FULL_SYSTEM
220 DtbAcvFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
221 : DtbFault(vaddr, reqFlags, flags)
222 { }
223#endif
208 FaultVect vect() {return _vect;}
209 FaultStat & countStat() {return _count;}
210};
211
212class DtbAcvFault : public DtbFault
213{
214 private:
215 static FaultName _name;
216 static FaultVect _vect;
217 static FaultStat _count;
218 public:
219#if FULL_SYSTEM
220 DtbAcvFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
221 : DtbFault(vaddr, reqFlags, flags)
222 { }
223#endif
224 FaultName name() {return _name;}
224 FaultName name() const {return _name;}
225 FaultVect vect() {return _vect;}
226 FaultStat & countStat() {return _count;}
227};
228
229class DtbAlignmentFault : public DtbFault
230{
231 private:
232 static FaultName _name;
233 static FaultVect _vect;
234 static FaultStat _count;
235 public:
236#if FULL_SYSTEM
237 DtbAlignmentFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
238 : DtbFault(vaddr, reqFlags, flags)
239 { }
240#endif
225 FaultVect vect() {return _vect;}
226 FaultStat & countStat() {return _count;}
227};
228
229class DtbAlignmentFault : public DtbFault
230{
231 private:
232 static FaultName _name;
233 static FaultVect _vect;
234 static FaultStat _count;
235 public:
236#if FULL_SYSTEM
237 DtbAlignmentFault(AlphaISA::VAddr vaddr, uint32_t reqFlags, uint64_t flags)
238 : DtbFault(vaddr, reqFlags, flags)
239 { }
240#endif
241 FaultName name() {return _name;}
241 FaultName name() const {return _name;}
242 FaultVect vect() {return _vect;}
243 FaultStat & countStat() {return _count;}
244};
245
246class ItbFault : public AlphaFault
247{
248 private:
249 Addr pc;
250 public:
251 ItbFault(Addr _pc)
252 : pc(_pc)
253 { }
242 FaultVect vect() {return _vect;}
243 FaultStat & countStat() {return _count;}
244};
245
246class ItbFault : public AlphaFault
247{
248 private:
249 Addr pc;
250 public:
251 ItbFault(Addr _pc)
252 : pc(_pc)
253 { }
254 FaultName name() = 0;
254 FaultName name() const = 0;
255 FaultVect vect() = 0;
256 FaultStat & countStat() = 0;
257#if FULL_SYSTEM
258 void invoke(ThreadContext * tc);
259#endif
260};
261
262class ItbMissFault : public ItbFault
263{
264 private:
265 static FaultName _name;
266 static FaultVect _vect;
267 static FaultStat _count;
268 public:
269 ItbMissFault(Addr pc)
270 : ItbFault(pc)
271 { }
255 FaultVect vect() = 0;
256 FaultStat & countStat() = 0;
257#if FULL_SYSTEM
258 void invoke(ThreadContext * tc);
259#endif
260};
261
262class ItbMissFault : public ItbFault
263{
264 private:
265 static FaultName _name;
266 static FaultVect _vect;
267 static FaultStat _count;
268 public:
269 ItbMissFault(Addr pc)
270 : ItbFault(pc)
271 { }
272 FaultName name() {return _name;}
272 FaultName name() const {return _name;}
273 FaultVect vect() {return _vect;}
274 FaultStat & countStat() {return _count;}
275};
276
277class ItbPageFault : public ItbFault
278{
279 private:
280 static FaultName _name;
281 static FaultVect _vect;
282 static FaultStat _count;
283 public:
284 ItbPageFault(Addr pc)
285 : ItbFault(pc)
286 { }
273 FaultVect vect() {return _vect;}
274 FaultStat & countStat() {return _count;}
275};
276
277class ItbPageFault : public ItbFault
278{
279 private:
280 static FaultName _name;
281 static FaultVect _vect;
282 static FaultStat _count;
283 public:
284 ItbPageFault(Addr pc)
285 : ItbFault(pc)
286 { }
287 FaultName name() {return _name;}
287 FaultName name() const {return _name;}
288 FaultVect vect() {return _vect;}
289 FaultStat & countStat() {return _count;}
290};
291
292class ItbAcvFault : public ItbFault
293{
294 private:
295 static FaultName _name;
296 static FaultVect _vect;
297 static FaultStat _count;
298 public:
299 ItbAcvFault(Addr pc)
300 : ItbFault(pc)
301 { }
288 FaultVect vect() {return _vect;}
289 FaultStat & countStat() {return _count;}
290};
291
292class ItbAcvFault : public ItbFault
293{
294 private:
295 static FaultName _name;
296 static FaultVect _vect;
297 static FaultStat _count;
298 public:
299 ItbAcvFault(Addr pc)
300 : ItbFault(pc)
301 { }
302 FaultName name() {return _name;}
302 FaultName name() const {return _name;}
303 FaultVect vect() {return _vect;}
304 FaultStat & countStat() {return _count;}
305};
306
307class UnimplementedOpcodeFault : public AlphaFault
308{
309 private:
310 static FaultName _name;
311 static FaultVect _vect;
312 static FaultStat _count;
313 public:
303 FaultVect vect() {return _vect;}
304 FaultStat & countStat() {return _count;}
305};
306
307class UnimplementedOpcodeFault : public AlphaFault
308{
309 private:
310 static FaultName _name;
311 static FaultVect _vect;
312 static FaultStat _count;
313 public:
314 FaultName name() {return _name;}
314 FaultName name() const {return _name;}
315 FaultVect vect() {return _vect;}
316 FaultStat & countStat() {return _count;}
317};
318
319class FloatEnableFault : public AlphaFault
320{
321 private:
322 static FaultName _name;
323 static FaultVect _vect;
324 static FaultStat _count;
325 public:
315 FaultVect vect() {return _vect;}
316 FaultStat & countStat() {return _count;}
317};
318
319class FloatEnableFault : public AlphaFault
320{
321 private:
322 static FaultName _name;
323 static FaultVect _vect;
324 static FaultStat _count;
325 public:
326 FaultName name() {return _name;}
326 FaultName name() const {return _name;}
327 FaultVect vect() {return _vect;}
328 FaultStat & countStat() {return _count;}
329};
330
331class PalFault : public AlphaFault
332{
333 protected:
334 bool skipFaultingInstruction() {return true;}
335 private:
336 static FaultName _name;
337 static FaultVect _vect;
338 static FaultStat _count;
339 public:
327 FaultVect vect() {return _vect;}
328 FaultStat & countStat() {return _count;}
329};
330
331class PalFault : public AlphaFault
332{
333 protected:
334 bool skipFaultingInstruction() {return true;}
335 private:
336 static FaultName _name;
337 static FaultVect _vect;
338 static FaultStat _count;
339 public:
340 FaultName name() {return _name;}
340 FaultName name() const {return _name;}
341 FaultVect vect() {return _vect;}
342 FaultStat & countStat() {return _count;}
343};
344
345class IntegerOverflowFault : public AlphaFault
346{
347 private:
348 static FaultName _name;
349 static FaultVect _vect;
350 static FaultStat _count;
351 public:
341 FaultVect vect() {return _vect;}
342 FaultStat & countStat() {return _count;}
343};
344
345class IntegerOverflowFault : public AlphaFault
346{
347 private:
348 static FaultName _name;
349 static FaultVect _vect;
350 static FaultStat _count;
351 public:
352 FaultName name() {return _name;}
352 FaultName name() const {return _name;}
353 FaultVect vect() {return _vect;}
354 FaultStat & countStat() {return _count;}
355};
356
357} // AlphaISA namespace
358
359#endif // __FAULTS_HH__
353 FaultVect vect() {return _vect;}
354 FaultStat & countStat() {return _count;}
355};
356
357} // AlphaISA namespace
358
359#endif // __FAULTS_HH__