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 "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: |
51 void invoke(ThreadContext * tc, 52 StaticInstPtr inst = StaticInst::nullStaticInstPtr); |
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;} |
111 void invoke(ThreadContext * tc, 112 StaticInstPtr inst = StaticInst::nullStaticInstPtr); |
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; |
145 void invoke(ThreadContext * tc, 146 StaticInstPtr inst = StaticInst::nullStaticInstPtr); |
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;} |
163 void invoke(ThreadContext * tc, 164 StaticInstPtr inst = StaticInst::nullStaticInstPtr); |
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; |
241 void invoke(ThreadContext * tc, 242 StaticInstPtr inst = StaticInst::nullStaticInstPtr); |
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;} |
257 void invoke(ThreadContext * tc, 258 StaticInstPtr inst = StaticInst::nullStaticInstPtr); |
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 --- |