faults.hh revision 2201
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; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution; 12 * neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef __ALPHA_FAULTS_HH__ 30#define __ALPHA_FAULTS_HH__ 31 32#include "sim/faults.hh" 33 34// The design of the "name" and "vect" functions is in sim/faults.hh 35 36namespace AlphaISA 37{ 38 39typedef const Addr FaultVect; 40 41class AlphaFault : public virtual FaultBase 42{ 43 protected: 44 virtual bool skipFaultingInstruction() {return false;} 45 virtual bool setRestartAddress() {return true;} 46 public: 47#if FULL_SYSTEM 48 void invoke(ExecContext * xc); 49#endif 50 virtual FaultVect vect() = 0; 51}; 52 53class AlphaMachineCheckFault : 54 public MachineCheckFault, 55 public AlphaFault 56{ 57 private: 58 static FaultVect _vect; 59 static FaultStat _stat; 60 public: 61 FaultVect vect() {return _vect;} 62 FaultStat & stat() {return _stat;} 63}; 64 65class AlphaAlignmentFault : 66 public AlignmentFault, 67 public AlphaFault 68{ 69 private: 70 static FaultVect _vect; 71 static FaultStat _stat; 72 public: 73 FaultVect vect() {return _vect;} 74 FaultStat & stat() {return _stat;} 75}; 76 77static inline Fault genMachineCheckFault() 78{ 79 return new AlphaMachineCheckFault; 80} 81 82static inline Fault genAlignmentFault() 83{ 84 return new AlphaAlignmentFault; 85} 86 87class ResetFault : public AlphaFault 88{ 89 private: 90 static FaultName _name; 91 static FaultVect _vect; 92 static FaultStat _stat; 93 public: 94 FaultName name() {return _name;} 95 FaultVect vect() {return _vect;} 96 FaultStat & stat() {return _stat;} 97}; 98 99class ArithmeticFault : public AlphaFault 100{ 101 protected: 102 bool skipFaultingInstruction() {return true;} 103 private: 104 static FaultName _name; 105 static FaultVect _vect; 106 static FaultStat _stat; 107 public: 108 FaultName name() {return _name;} 109 FaultVect vect() {return _vect;} 110 FaultStat & stat() {return _stat;} 111 void invoke(ExecContext * xc); 112}; 113 114class InterruptFault : public AlphaFault 115{ 116 protected: 117 bool setRestartAddress() {return false;} 118 private: 119 static FaultName _name; 120 static FaultVect _vect; 121 static FaultStat _stat; 122 public: 123 FaultName name() {return _name;} 124 FaultVect vect() {return _vect;} 125 FaultStat & stat() {return _stat;} 126}; 127 128class NDtbMissFault : public AlphaFault 129{ 130 private: 131 static FaultName _name; 132 static FaultVect _vect; 133 static FaultStat _stat; 134 public: 135 FaultName name() {return _name;} 136 FaultVect vect() {return _vect;} 137 FaultStat & stat() {return _stat;} 138}; 139 140class PDtbMissFault : public AlphaFault 141{ 142 private: 143 static FaultName _name; 144 static FaultVect _vect; 145 static FaultStat _stat; 146 public: 147 FaultName name() {return _name;} 148 FaultVect vect() {return _vect;} 149 FaultStat & stat() {return _stat;} 150}; 151 152class DtbPageFault : public AlphaFault 153{ 154 private: 155 static FaultName _name; 156 static FaultVect _vect; 157 static FaultStat _stat; 158 public: 159 FaultName name() {return _name;} 160 FaultVect vect() {return _vect;} 161 FaultStat & stat() {return _stat;} 162}; 163 164class DtbAcvFault : public AlphaFault 165{ 166 private: 167 static FaultName _name; 168 static FaultVect _vect; 169 static FaultStat _stat; 170 public: 171 FaultName name() {return _name;} 172 FaultVect vect() {return _vect;} 173 FaultStat & stat() {return _stat;} 174}; 175 176class ItbMissFault : public AlphaFault 177{ 178 private: 179 static FaultName _name; 180 static FaultVect _vect; 181 static FaultStat _stat; 182 public: 183 FaultName name() {return _name;} 184 FaultVect vect() {return _vect;} 185 FaultStat & stat() {return _stat;} 186}; 187 188class ItbPageFault : public AlphaFault 189{ 190 private: 191 static FaultName _name; 192 static FaultVect _vect; 193 static FaultStat _stat; 194 public: 195 FaultName name() {return _name;} 196 FaultVect vect() {return _vect;} 197 FaultStat & stat() {return _stat;} 198}; 199 200class ItbAcvFault : public AlphaFault 201{ 202 private: 203 static FaultName _name; 204 static FaultVect _vect; 205 static FaultStat _stat; 206 public: 207 FaultName name() {return _name;} 208 FaultVect vect() {return _vect;} 209 FaultStat & stat() {return _stat;} 210}; 211 212class UnimplementedOpcodeFault : public AlphaFault 213{ 214 private: 215 static FaultName _name; 216 static FaultVect _vect; 217 static FaultStat _stat; 218 public: 219 FaultName name() {return _name;} 220 FaultVect vect() {return _vect;} 221 FaultStat & stat() {return _stat;} 222}; 223 224class FloatEnableFault : public AlphaFault 225{ 226 private: 227 static FaultName _name; 228 static FaultVect _vect; 229 static FaultStat _stat; 230 public: 231 FaultName name() {return _name;} 232 FaultVect vect() {return _vect;} 233 FaultStat & stat() {return _stat;} 234}; 235 236class PalFault : public AlphaFault 237{ 238 protected: 239 bool skipFaultingInstruction() {return true;} 240 private: 241 static FaultName _name; 242 static FaultVect _vect; 243 static FaultStat _stat; 244 public: 245 FaultName name() {return _name;} 246 FaultVect vect() {return _vect;} 247 FaultStat & stat() {return _stat;} 248}; 249 250class IntegerOverflowFault : public AlphaFault 251{ 252 private: 253 static FaultName _name; 254 static FaultVect _vect; 255 static FaultStat _stat; 256 public: 257 FaultName name() {return _name;} 258 FaultVect vect() {return _vect;} 259 FaultStat & stat() {return _stat;} 260}; 261 262} // AlphaISA namespace 263 264#endif // __FAULTS_HH__ 265