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;

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

28 * Authors: Gabe Black
29 * Kevin Lim
30 */
31
32#ifndef __ARCH_ALPHA_FAULTS_HH__
33#define __ARCH_ALPHA_FAULTS_HH__
34
35#include "arch/alpha/pagetable.hh"
36#include "config/full_system.hh"
36#include "mem/request.hh"
37#include "sim/faults.hh"
38
39// The design of the "name" and "vect" functions is in sim/faults.hh
40
41namespace AlphaISA {
42
43typedef const Addr FaultVect;
44
45class AlphaFault : public FaultBase
46{
47 protected:
48 virtual bool skipFaultingInstruction() {return false;}
49 virtual bool setRestartAddress() {return true;}
50 public:
52#if FULL_SYSTEM
51 void invoke(ThreadContext * tc,
52 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
55#endif
53 virtual FaultVect vect() = 0;
54 virtual FaultStat & countStat() = 0;
55};
56
57class MachineCheckFault : public AlphaFault
58{
59 private:
60 static FaultName _name;

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

103
104 protected:
105 bool skipFaultingInstruction() {return true;}
106
107 public:
108 FaultName name() const {return _name;}
109 FaultVect vect() {return _vect;}
110 FaultStat & countStat() {return _count;}
114#if FULL_SYSTEM
111 void invoke(ThreadContext * tc,
112 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
117#endif
113};
114
115class InterruptFault : public AlphaFault
116{
117 private:
118 static FaultName _name;
119 static FaultVect _vect;
120 static FaultStat _count;

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

137
138 public:
139 DtbFault(VAddr _vaddr, Request::Flags _reqFlags, uint64_t _flags)
140 : vaddr(_vaddr), reqFlags(_reqFlags), flags(_flags)
141 { }
142 FaultName name() const = 0;
143 FaultVect vect() = 0;
144 FaultStat & countStat() = 0;
150#if FULL_SYSTEM
145 void invoke(ThreadContext * tc,
146 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
153#endif
147};
148
149class NDtbMissFault : public DtbFault
150{
151 private:
152 static FaultName _name;
153 static FaultVect _vect;
154 static FaultStat _count;
155
156 public:
157 NDtbMissFault(VAddr vaddr, Request::Flags reqFlags, uint64_t flags)
158 : DtbFault(vaddr, reqFlags, flags)
159 { }
160 FaultName name() const {return _name;}
161 FaultVect vect() {return _vect;}
162 FaultStat & countStat() {return _count;}
170#if !FULL_SYSTEM
163 void invoke(ThreadContext * tc,
164 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
173#endif
165};
166
167class PDtbMissFault : public DtbFault
168{
169 private:
170 static FaultName _name;
171 static FaultVect _vect;
172 static FaultStat _count;

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

233 protected:
234 Addr pc;
235
236 public:
237 ItbFault(Addr _pc) : pc(_pc) { }
238 FaultName name() const = 0;
239 FaultVect vect() = 0;
240 FaultStat & countStat() = 0;
250#if FULL_SYSTEM
241 void invoke(ThreadContext * tc,
242 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
253#endif
243};
244
245class ItbPageFault : public ItbFault
246{
247 private:
248 static FaultName _name;
249 static FaultVect _vect;
250 static FaultStat _count;
251
252 public:
253 ItbPageFault(Addr pc) : ItbFault(pc) { }
254 FaultName name() const {return _name;}
255 FaultVect vect() {return _vect;}
256 FaultStat & countStat() {return _count;}
268#if !FULL_SYSTEM
257 void invoke(ThreadContext * tc,
258 StaticInstPtr inst = StaticInst::nullStaticInstPtr);
271#endif
259};
260
261class ItbAcvFault : public ItbFault
262{
263 private:
264 static FaultName _name;
265 static FaultVect _vect;
266 static FaultStat _count;

--- 66 unchanged lines hidden ---