1/*
| 1/*
|
2 * Copyright N) 2007 MIPS Technologies, Inc. All Rights Reserved
| 2 * Copyright (c) 2007 MIPS Technologies, Inc. 3 * All rights reserved.
|
3 *
| 4 *
|
4 * This software is part of the M5 simulator.
| 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.
|
5 *
| 15 *
|
6 * THIS IS A LEGAL AGREEMENT. BY DOWNLOADING, USING, COPYING, CREATING 7 * DERIVATIVE WORKS, AND/OR DISTRIBUTING THIS SOFTWARE YOU ARE AGREEING 8 * TO THESE TERMS AND CONDITIONS.
| 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.
|
9 *
| 27 *
|
10 * Permission is granted to use, copy, create derivative works and 11 * distribute this software and such derivative works for any purpose, 12 * so long as (1) the copyright notice above, this grant of permission, 13 * and the disclaimer below appear in all copies and derivative works 14 * made, (2) the copyright notice above is augmented as appropriate to 15 * reflect the addition of any new copyrightable work in a derivative 16 * work (e.g., Copyright N) <Publication Year> Copyright Owner), and (3) 17 * the name of MIPS Technologies, Inc. ($(B!H(BMIPS$(B!I(B) is not used in any 18 * advertising or publicity pertaining to the use or distribution of 19 * this software without specific, written prior authorization. 20 * 21 * THIS SOFTWARE IS PROVIDED $(B!H(BAS IS.$(B!I(B MIPS MAKES NO WARRANTIES AND 22 * DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS, STATUTORY, IMPLIED OR 23 * OTHERWISE, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND 25 * NON-INFRINGEMENT OF THIRD PARTY RIGHTS, REGARDING THIS SOFTWARE. 26 * IN NO EVENT SHALL MIPS BE LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, 27 * INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL, OR PUNITIVE DAMAGES OF 28 * ANY KIND OR NATURE, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, 29 * THIS SOFTWARE AND/OR THE USE OF THIS SOFTWARE, WHETHER SUCH LIABILITY 30 * IS ASSERTED ON THE BASIS OF CONTRACT, TORT (INCLUDING NEGLIGENCE OR 31 * STRICT LIABILITY), OR OTHERWISE, EVEN IF MIPS HAS BEEN WARNED OF THE 32 * POSSIBILITY OF ANY SUCH LOSS OR DAMAGE IN ADVANCE. 33 * 34 * Authors: Gabe M. Black 35 * Korey L. Sewell
| 28 * Authors: Gabe Black 29 * Korey Sewell
|
36 * Jaidev Patwardhan 37 */ 38 39#ifndef __MIPS_FAULTS_HH__ 40#define __MIPS_FAULTS_HH__ 41 42#include "sim/faults.hh" 43 44// The design of the "name" and "vect" functions is in sim/faults.hh 45 46namespace MipsISA 47{ 48typedef const Addr FaultVect; 49 50class MipsFault : public FaultBase 51{ 52 protected: 53 virtual bool skipFaultingInstruction() {return false;} 54 virtual bool setRestartAddress() {return true;} 55 public: 56 Addr BadVAddr; 57 Addr EntryHi_Asid; 58 Addr EntryHi_VPN2; 59 Addr EntryHi_VPN2X; 60 Addr Context_BadVPN2; 61#if FULL_SYSTEM 62 void invoke(ThreadContext * tc) {}; 63 void setExceptionState(ThreadContext *,uint8_t); 64 void setHandlerPC(Addr,ThreadContext *); 65#endif 66 virtual FaultVect vect() = 0; 67 virtual FaultStat & countStat() = 0; 68}; 69 70class MachineCheckFault : public MipsFault 71{ 72 private: 73 static FaultName _name; 74 static FaultVect _vect; 75 static FaultStat _count; 76 public: 77 FaultName name() const {return _name;} 78 FaultVect vect() {return _vect;} 79 FaultStat & countStat() {return _count;} 80 bool isMachineCheckFault() {return true;} 81}; 82 83class NonMaskableInterrupt : public MipsFault 84{ 85 private: 86 static FaultName _name; 87 static FaultVect _vect; 88 static FaultStat _count; 89 public: 90 FaultName name() const {return _name;} 91 FaultVect vect() {return _vect;} 92 FaultStat & countStat() {return _count;} 93 bool isNonMaskableInterrupt() {return true;} 94}; 95 96class AlignmentFault : public MipsFault 97{ 98 private: 99 static FaultName _name; 100 static FaultVect _vect; 101 static FaultStat _count; 102 public: 103 FaultName name() const {return _name;} 104 FaultVect vect() {return _vect;} 105 FaultStat & countStat() {return _count;} 106 bool isAlignmentFault() {return true;} 107}; 108 109class AddressErrorFault : public MipsFault 110{ 111 private: 112 static FaultName _name; 113 static FaultVect _vect; 114 static FaultStat _count; 115 public: 116 FaultName name() const {return _name;} 117 FaultVect vect() {return _vect;} 118 FaultStat & countStat() {return _count;} 119#if FULL_SYSTEM 120 void invoke(ThreadContext * tc); 121#endif 122 123}; 124class StoreAddressErrorFault : public MipsFault 125{ 126 private: 127 static FaultName _name; 128 static FaultVect _vect; 129 static FaultStat _count; 130 public: 131 FaultName name() const {return _name;} 132 FaultVect vect() {return _vect;} 133 FaultStat & countStat() {return _count;} 134#if FULL_SYSTEM 135 void invoke(ThreadContext * tc); 136#endif 137 138}; 139class UnimplementedOpcodeFault : public MipsFault 140{ 141 private: 142 static FaultName _name; 143 static FaultVect _vect; 144 static FaultStat _count; 145 public: 146 FaultName name() const {return _name;} 147 FaultVect vect() {return _vect;} 148 FaultStat & countStat() {return _count;} 149}; 150 151 152class TLBRefillIFetchFault : public MipsFault 153{ 154 private: 155 Addr vaddr; 156 static FaultName _name; 157 static FaultVect _vect; 158 static FaultStat _count; 159 public: 160 FaultName name() const {return _name;} 161 FaultVect vect() {return _vect;} 162 FaultStat & countStat() {return _count;} 163 void invoke(ThreadContext * tc); 164}; 165class TLBInvalidIFetchFault : public MipsFault 166{ 167 private: 168 Addr vaddr; 169 static FaultName _name; 170 static FaultVect _vect; 171 static FaultStat _count; 172 public: 173 FaultName name() const {return _name;} 174 FaultVect vect() {return _vect;} 175 FaultStat & countStat() {return _count;} 176 void invoke(ThreadContext * tc); 177}; 178 179class NDtbMissFault : public MipsFault 180{ 181 private: 182 static FaultName _name; 183 static FaultVect _vect; 184 static FaultStat _count; 185 public: 186 FaultName name() const {return _name;} 187 FaultVect vect() {return _vect;} 188 FaultStat & countStat() {return _count;} 189}; 190 191class PDtbMissFault : public MipsFault 192{ 193 private: 194 static FaultName _name; 195 static FaultVect _vect; 196 static FaultStat _count; 197 public: 198 FaultName name() const {return _name;} 199 FaultVect vect() {return _vect;} 200 FaultStat & countStat() {return _count;} 201}; 202 203class DtbPageFault : public MipsFault 204{ 205 private: 206 static FaultName _name; 207 static FaultVect _vect; 208 static FaultStat _count; 209 public: 210 FaultName name() const {return _name;} 211 FaultVect vect() {return _vect;} 212 FaultStat & countStat() {return _count;} 213}; 214 215class DtbAcvFault : public MipsFault 216{ 217 private: 218 static FaultName _name; 219 static FaultVect _vect; 220 static FaultStat _count; 221 public: 222 FaultName name() const {return _name;} 223 FaultVect vect() {return _vect;} 224 FaultStat & countStat() {return _count;} 225}; 226 227class CacheErrorFault : public MipsFault 228{ 229 private: 230 Addr vaddr; 231 static FaultName _name; 232 static FaultVect _vect; 233 static FaultStat _count; 234 public: 235 FaultName name() const {return _name;} 236 FaultVect vect() {return _vect;} 237 FaultStat & countStat() {return _count;} 238 void invoke(ThreadContext * tc); 239}; 240 241 242 243 244static inline Fault genMachineCheckFault() 245{ 246 return new MachineCheckFault; 247} 248 249static inline Fault genAlignmentFault() 250{ 251 return new AlignmentFault; 252} 253 254class ResetFault : public MipsFault 255{ 256 private: 257 static FaultName _name; 258 static FaultVect _vect; 259 static FaultStat _count; 260 public: 261 FaultName name() const {return _name;} 262 FaultVect vect() {return _vect;} 263 FaultStat & countStat() {return _count;} 264 void invoke(ThreadContext * tc); 265 266}; 267class SystemCallFault : public MipsFault 268{ 269 private: 270 static FaultName _name; 271 static FaultVect _vect; 272 static FaultStat _count; 273 public: 274 FaultName name() const {return _name;} 275 FaultVect vect() {return _vect;} 276 FaultStat & countStat() {return _count;} 277 void invoke(ThreadContext * tc); 278}; 279 280class SoftResetFault : public MipsFault 281{ 282 private: 283 static FaultName _name; 284 static FaultVect _vect; 285 static FaultStat _count; 286 public: 287 FaultName name() const {return _name;} 288 FaultVect vect() {return _vect;} 289 FaultStat & countStat() {return _count;} 290 void invoke(ThreadContext * tc); 291}; 292class DebugSingleStep : public MipsFault 293{ 294 private: 295 static FaultName _name; 296 static FaultVect _vect; 297 static FaultStat _count; 298 public: 299 FaultName name() const {return _name;} 300 FaultVect vect() {return _vect;} 301 FaultStat & countStat() {return _count;} 302 void invoke(ThreadContext * tc); 303}; 304class DebugInterrupt : public MipsFault 305{ 306 private: 307 static FaultName _name; 308 static FaultVect _vect; 309 static FaultStat _count; 310 public: 311 FaultName name() const {return _name;} 312 FaultVect vect() {return _vect;} 313 FaultStat & countStat() {return _count;} 314 void invoke(ThreadContext * tc); 315}; 316 317class CoprocessorUnusableFault : public MipsFault 318{ 319 private: 320 static FaultName _name; 321 static FaultVect _vect; 322 static FaultStat _count; 323 int coProcID; 324 public: 325 FaultName name() const {return _name;} 326 FaultVect vect() {return _vect;} 327 FaultStat & countStat() {return _count;} 328 void invoke(ThreadContext * tc); 329 CoprocessorUnusableFault(int _procid){ coProcID = _procid;} 330}; 331 332class ReservedInstructionFault : public MipsFault 333{ 334 private: 335 static FaultName _name; 336 static FaultVect _vect; 337 static FaultStat _count; 338 public: 339 FaultName name() const {return _name;} 340 FaultVect vect() {return _vect;} 341 FaultStat & countStat() {return _count;} 342 void invoke(ThreadContext * tc); 343}; 344 345class ThreadFault : public MipsFault 346{ 347 private: 348 static FaultName _name; 349 static FaultVect _vect; 350 static FaultStat _count; 351 public: 352 FaultName name() const {return _name;} 353 FaultVect vect() {return _vect;} 354 FaultStat & countStat() {return _count;} 355 void invoke(ThreadContext * tc); 356}; 357 358 359class ArithmeticFault : public MipsFault 360{ 361 protected: 362 bool skipFaultingInstruction() {return true;} 363 private: 364 static FaultName _name; 365 static FaultVect _vect; 366 static FaultStat _count; 367 public: 368 FaultName name() const {return _name;} 369 FaultVect vect() {return _vect;} 370 FaultStat & countStat() {return _count;} 371#if FULL_SYSTEM 372 void invoke(ThreadContext * tc); 373#endif 374}; 375 376class InterruptFault : public MipsFault 377{ 378 protected: 379 bool setRestartAddress() {return false;} 380 private: 381 static FaultName _name; 382 static FaultVect _vect; 383 static FaultStat _count; 384 public: 385 FaultName name() const {return _name;} 386 FaultVect vect() {return _vect;} 387 FaultStat & countStat() {return _count;} 388 389#if FULL_SYSTEM 390 void invoke(ThreadContext * tc); 391#endif 392 393 //void invoke(ThreadContext * tc); 394}; 395 396class TrapFault : public MipsFault 397{ 398 private: 399 static FaultName _name; 400 static FaultVect _vect; 401 static FaultStat _count; 402 public: 403 FaultName name() const {return _name;} 404 FaultVect vect() {return _vect;} 405 FaultStat & countStat() {return _count;} 406#if FULL_SYSTEM 407 void invoke(ThreadContext * tc); 408#endif 409}; 410 411class BreakpointFault : public MipsFault 412{ 413 private: 414 static FaultName _name; 415 static FaultVect _vect; 416 static FaultStat _count; 417 public: 418 FaultName name() const {return _name;} 419 FaultVect vect() {return _vect;} 420 FaultStat & countStat() {return _count;} 421#if FULL_SYSTEM 422 void invoke(ThreadContext * tc); 423#endif 424}; 425 426class ItbRefillFault : public MipsFault 427{ 428 private: 429 static FaultName _name; 430 static FaultVect _vect; 431 static FaultStat _count; 432 public: 433 FaultName name() const {return _name;} 434 FaultVect vect() {return _vect;} 435 FaultStat & countStat() {return _count;} 436#if FULL_SYSTEM 437 void invoke(ThreadContext * tc); 438#endif 439}; 440class DtbRefillFault : public MipsFault 441{ 442 private: 443 static FaultName _name; 444 static FaultVect _vect; 445 static FaultStat _count; 446 public: 447 FaultName name() const {return _name;} 448 FaultVect vect() {return _vect;} 449 FaultStat & countStat() {return _count;} 450#if FULL_SYSTEM 451 void invoke(ThreadContext * tc); 452#endif 453}; 454 455class ItbPageFault : public MipsFault 456{ 457 private: 458 static FaultName _name; 459 static FaultVect _vect; 460 static FaultStat _count; 461 public: 462 FaultName name() const {return _name;} 463 FaultVect vect() {return _vect;} 464 FaultStat & countStat() {return _count;} 465#if FULL_SYSTEM 466 void invoke(ThreadContext * tc); 467#endif 468}; 469 470class ItbInvalidFault : public MipsFault 471{ 472 private: 473 static FaultName _name; 474 static FaultVect _vect; 475 static FaultStat _count; 476 public: 477 FaultName name() const {return _name;} 478 FaultVect vect() {return _vect;} 479 FaultStat & countStat() {return _count;} 480#if FULL_SYSTEM 481 void invoke(ThreadContext * tc); 482#endif 483 484}; 485class TLBModifiedFault : public MipsFault 486{ 487 private: 488 static FaultName _name; 489 static FaultVect _vect; 490 static FaultStat _count; 491 public: 492 FaultName name() const {return _name;} 493 FaultVect vect() {return _vect;} 494 FaultStat & countStat() {return _count;} 495#if FULL_SYSTEM 496 void invoke(ThreadContext * tc); 497#endif 498 499}; 500 501class DtbInvalidFault : public MipsFault 502{ 503 private: 504 static FaultName _name; 505 static FaultVect _vect; 506 static FaultStat _count; 507 public: 508 FaultName name() const {return _name;} 509 FaultVect vect() {return _vect;} 510 FaultStat & countStat() {return _count;} 511#if FULL_SYSTEM 512 void invoke(ThreadContext * tc); 513#endif 514 515}; 516 517class FloatEnableFault : public MipsFault 518{ 519 private: 520 static FaultName _name; 521 static FaultVect _vect; 522 static FaultStat _count; 523 public: 524 FaultName name() const {return _name;} 525 FaultVect vect() {return _vect;} 526 FaultStat & countStat() {return _count;} 527}; 528 529class ItbMissFault : public MipsFault 530{ 531 private: 532 static FaultName _name; 533 static FaultVect _vect; 534 static FaultStat _count; 535 public: 536 FaultName name() const {return _name;} 537 FaultVect vect() {return _vect;} 538 FaultStat & countStat() {return _count;} 539}; 540 541class ItbAcvFault : public MipsFault 542{ 543 private: 544 static FaultName _name; 545 static FaultVect _vect; 546 static FaultStat _count; 547 public: 548 FaultName name() const {return _name;} 549 FaultVect vect() {return _vect;} 550 FaultStat & countStat() {return _count;} 551}; 552 553class IntegerOverflowFault : public MipsFault 554{ 555 private: 556 static FaultName _name; 557 static FaultVect _vect; 558 static FaultStat _count; 559 public: 560 FaultName name() const {return _name;} 561 FaultVect vect() {return _vect;} 562 FaultStat & countStat() {return _count;} 563}; 564 565class DspStateDisabledFault : public MipsFault 566{ 567 private: 568 static FaultName _name; 569 static FaultVect _vect; 570 static FaultStat _count; 571 public: 572 FaultName name() const {return _name;} 573 FaultVect vect() {return _vect;} 574 FaultStat & countStat() {return _count;} 575 void invoke(ThreadContext * tc); 576}; 577 578} // MipsISA namespace 579 580#endif // __MIPS_FAULTS_HH__
| 30 * Jaidev Patwardhan 31 */ 32 33#ifndef __MIPS_FAULTS_HH__ 34#define __MIPS_FAULTS_HH__ 35 36#include "sim/faults.hh" 37 38// The design of the "name" and "vect" functions is in sim/faults.hh 39 40namespace MipsISA 41{ 42typedef const Addr FaultVect; 43 44class MipsFault : public FaultBase 45{ 46 protected: 47 virtual bool skipFaultingInstruction() {return false;} 48 virtual bool setRestartAddress() {return true;} 49 public: 50 Addr BadVAddr; 51 Addr EntryHi_Asid; 52 Addr EntryHi_VPN2; 53 Addr EntryHi_VPN2X; 54 Addr Context_BadVPN2; 55#if FULL_SYSTEM 56 void invoke(ThreadContext * tc) {}; 57 void setExceptionState(ThreadContext *,uint8_t); 58 void setHandlerPC(Addr,ThreadContext *); 59#endif 60 virtual FaultVect vect() = 0; 61 virtual FaultStat & countStat() = 0; 62}; 63 64class MachineCheckFault : public MipsFault 65{ 66 private: 67 static FaultName _name; 68 static FaultVect _vect; 69 static FaultStat _count; 70 public: 71 FaultName name() const {return _name;} 72 FaultVect vect() {return _vect;} 73 FaultStat & countStat() {return _count;} 74 bool isMachineCheckFault() {return true;} 75}; 76 77class NonMaskableInterrupt : public MipsFault 78{ 79 private: 80 static FaultName _name; 81 static FaultVect _vect; 82 static FaultStat _count; 83 public: 84 FaultName name() const {return _name;} 85 FaultVect vect() {return _vect;} 86 FaultStat & countStat() {return _count;} 87 bool isNonMaskableInterrupt() {return true;} 88}; 89 90class AlignmentFault : public MipsFault 91{ 92 private: 93 static FaultName _name; 94 static FaultVect _vect; 95 static FaultStat _count; 96 public: 97 FaultName name() const {return _name;} 98 FaultVect vect() {return _vect;} 99 FaultStat & countStat() {return _count;} 100 bool isAlignmentFault() {return true;} 101}; 102 103class AddressErrorFault : public MipsFault 104{ 105 private: 106 static FaultName _name; 107 static FaultVect _vect; 108 static FaultStat _count; 109 public: 110 FaultName name() const {return _name;} 111 FaultVect vect() {return _vect;} 112 FaultStat & countStat() {return _count;} 113#if FULL_SYSTEM 114 void invoke(ThreadContext * tc); 115#endif 116 117}; 118class StoreAddressErrorFault : public MipsFault 119{ 120 private: 121 static FaultName _name; 122 static FaultVect _vect; 123 static FaultStat _count; 124 public: 125 FaultName name() const {return _name;} 126 FaultVect vect() {return _vect;} 127 FaultStat & countStat() {return _count;} 128#if FULL_SYSTEM 129 void invoke(ThreadContext * tc); 130#endif 131 132}; 133class UnimplementedOpcodeFault : public MipsFault 134{ 135 private: 136 static FaultName _name; 137 static FaultVect _vect; 138 static FaultStat _count; 139 public: 140 FaultName name() const {return _name;} 141 FaultVect vect() {return _vect;} 142 FaultStat & countStat() {return _count;} 143}; 144 145 146class TLBRefillIFetchFault : public MipsFault 147{ 148 private: 149 Addr vaddr; 150 static FaultName _name; 151 static FaultVect _vect; 152 static FaultStat _count; 153 public: 154 FaultName name() const {return _name;} 155 FaultVect vect() {return _vect;} 156 FaultStat & countStat() {return _count;} 157 void invoke(ThreadContext * tc); 158}; 159class TLBInvalidIFetchFault : public MipsFault 160{ 161 private: 162 Addr vaddr; 163 static FaultName _name; 164 static FaultVect _vect; 165 static FaultStat _count; 166 public: 167 FaultName name() const {return _name;} 168 FaultVect vect() {return _vect;} 169 FaultStat & countStat() {return _count;} 170 void invoke(ThreadContext * tc); 171}; 172 173class NDtbMissFault : public MipsFault 174{ 175 private: 176 static FaultName _name; 177 static FaultVect _vect; 178 static FaultStat _count; 179 public: 180 FaultName name() const {return _name;} 181 FaultVect vect() {return _vect;} 182 FaultStat & countStat() {return _count;} 183}; 184 185class PDtbMissFault : public MipsFault 186{ 187 private: 188 static FaultName _name; 189 static FaultVect _vect; 190 static FaultStat _count; 191 public: 192 FaultName name() const {return _name;} 193 FaultVect vect() {return _vect;} 194 FaultStat & countStat() {return _count;} 195}; 196 197class DtbPageFault : public MipsFault 198{ 199 private: 200 static FaultName _name; 201 static FaultVect _vect; 202 static FaultStat _count; 203 public: 204 FaultName name() const {return _name;} 205 FaultVect vect() {return _vect;} 206 FaultStat & countStat() {return _count;} 207}; 208 209class DtbAcvFault : public MipsFault 210{ 211 private: 212 static FaultName _name; 213 static FaultVect _vect; 214 static FaultStat _count; 215 public: 216 FaultName name() const {return _name;} 217 FaultVect vect() {return _vect;} 218 FaultStat & countStat() {return _count;} 219}; 220 221class CacheErrorFault : public MipsFault 222{ 223 private: 224 Addr vaddr; 225 static FaultName _name; 226 static FaultVect _vect; 227 static FaultStat _count; 228 public: 229 FaultName name() const {return _name;} 230 FaultVect vect() {return _vect;} 231 FaultStat & countStat() {return _count;} 232 void invoke(ThreadContext * tc); 233}; 234 235 236 237 238static inline Fault genMachineCheckFault() 239{ 240 return new MachineCheckFault; 241} 242 243static inline Fault genAlignmentFault() 244{ 245 return new AlignmentFault; 246} 247 248class ResetFault : public MipsFault 249{ 250 private: 251 static FaultName _name; 252 static FaultVect _vect; 253 static FaultStat _count; 254 public: 255 FaultName name() const {return _name;} 256 FaultVect vect() {return _vect;} 257 FaultStat & countStat() {return _count;} 258 void invoke(ThreadContext * tc); 259 260}; 261class SystemCallFault : public MipsFault 262{ 263 private: 264 static FaultName _name; 265 static FaultVect _vect; 266 static FaultStat _count; 267 public: 268 FaultName name() const {return _name;} 269 FaultVect vect() {return _vect;} 270 FaultStat & countStat() {return _count;} 271 void invoke(ThreadContext * tc); 272}; 273 274class SoftResetFault : public MipsFault 275{ 276 private: 277 static FaultName _name; 278 static FaultVect _vect; 279 static FaultStat _count; 280 public: 281 FaultName name() const {return _name;} 282 FaultVect vect() {return _vect;} 283 FaultStat & countStat() {return _count;} 284 void invoke(ThreadContext * tc); 285}; 286class DebugSingleStep : public MipsFault 287{ 288 private: 289 static FaultName _name; 290 static FaultVect _vect; 291 static FaultStat _count; 292 public: 293 FaultName name() const {return _name;} 294 FaultVect vect() {return _vect;} 295 FaultStat & countStat() {return _count;} 296 void invoke(ThreadContext * tc); 297}; 298class DebugInterrupt : public MipsFault 299{ 300 private: 301 static FaultName _name; 302 static FaultVect _vect; 303 static FaultStat _count; 304 public: 305 FaultName name() const {return _name;} 306 FaultVect vect() {return _vect;} 307 FaultStat & countStat() {return _count;} 308 void invoke(ThreadContext * tc); 309}; 310 311class CoprocessorUnusableFault : public MipsFault 312{ 313 private: 314 static FaultName _name; 315 static FaultVect _vect; 316 static FaultStat _count; 317 int coProcID; 318 public: 319 FaultName name() const {return _name;} 320 FaultVect vect() {return _vect;} 321 FaultStat & countStat() {return _count;} 322 void invoke(ThreadContext * tc); 323 CoprocessorUnusableFault(int _procid){ coProcID = _procid;} 324}; 325 326class ReservedInstructionFault : public MipsFault 327{ 328 private: 329 static FaultName _name; 330 static FaultVect _vect; 331 static FaultStat _count; 332 public: 333 FaultName name() const {return _name;} 334 FaultVect vect() {return _vect;} 335 FaultStat & countStat() {return _count;} 336 void invoke(ThreadContext * tc); 337}; 338 339class ThreadFault : public MipsFault 340{ 341 private: 342 static FaultName _name; 343 static FaultVect _vect; 344 static FaultStat _count; 345 public: 346 FaultName name() const {return _name;} 347 FaultVect vect() {return _vect;} 348 FaultStat & countStat() {return _count;} 349 void invoke(ThreadContext * tc); 350}; 351 352 353class ArithmeticFault : public MipsFault 354{ 355 protected: 356 bool skipFaultingInstruction() {return true;} 357 private: 358 static FaultName _name; 359 static FaultVect _vect; 360 static FaultStat _count; 361 public: 362 FaultName name() const {return _name;} 363 FaultVect vect() {return _vect;} 364 FaultStat & countStat() {return _count;} 365#if FULL_SYSTEM 366 void invoke(ThreadContext * tc); 367#endif 368}; 369 370class InterruptFault : public MipsFault 371{ 372 protected: 373 bool setRestartAddress() {return false;} 374 private: 375 static FaultName _name; 376 static FaultVect _vect; 377 static FaultStat _count; 378 public: 379 FaultName name() const {return _name;} 380 FaultVect vect() {return _vect;} 381 FaultStat & countStat() {return _count;} 382 383#if FULL_SYSTEM 384 void invoke(ThreadContext * tc); 385#endif 386 387 //void invoke(ThreadContext * tc); 388}; 389 390class TrapFault : public MipsFault 391{ 392 private: 393 static FaultName _name; 394 static FaultVect _vect; 395 static FaultStat _count; 396 public: 397 FaultName name() const {return _name;} 398 FaultVect vect() {return _vect;} 399 FaultStat & countStat() {return _count;} 400#if FULL_SYSTEM 401 void invoke(ThreadContext * tc); 402#endif 403}; 404 405class BreakpointFault : public MipsFault 406{ 407 private: 408 static FaultName _name; 409 static FaultVect _vect; 410 static FaultStat _count; 411 public: 412 FaultName name() const {return _name;} 413 FaultVect vect() {return _vect;} 414 FaultStat & countStat() {return _count;} 415#if FULL_SYSTEM 416 void invoke(ThreadContext * tc); 417#endif 418}; 419 420class ItbRefillFault : public MipsFault 421{ 422 private: 423 static FaultName _name; 424 static FaultVect _vect; 425 static FaultStat _count; 426 public: 427 FaultName name() const {return _name;} 428 FaultVect vect() {return _vect;} 429 FaultStat & countStat() {return _count;} 430#if FULL_SYSTEM 431 void invoke(ThreadContext * tc); 432#endif 433}; 434class DtbRefillFault : public MipsFault 435{ 436 private: 437 static FaultName _name; 438 static FaultVect _vect; 439 static FaultStat _count; 440 public: 441 FaultName name() const {return _name;} 442 FaultVect vect() {return _vect;} 443 FaultStat & countStat() {return _count;} 444#if FULL_SYSTEM 445 void invoke(ThreadContext * tc); 446#endif 447}; 448 449class ItbPageFault : public MipsFault 450{ 451 private: 452 static FaultName _name; 453 static FaultVect _vect; 454 static FaultStat _count; 455 public: 456 FaultName name() const {return _name;} 457 FaultVect vect() {return _vect;} 458 FaultStat & countStat() {return _count;} 459#if FULL_SYSTEM 460 void invoke(ThreadContext * tc); 461#endif 462}; 463 464class ItbInvalidFault : public MipsFault 465{ 466 private: 467 static FaultName _name; 468 static FaultVect _vect; 469 static FaultStat _count; 470 public: 471 FaultName name() const {return _name;} 472 FaultVect vect() {return _vect;} 473 FaultStat & countStat() {return _count;} 474#if FULL_SYSTEM 475 void invoke(ThreadContext * tc); 476#endif 477 478}; 479class TLBModifiedFault : public MipsFault 480{ 481 private: 482 static FaultName _name; 483 static FaultVect _vect; 484 static FaultStat _count; 485 public: 486 FaultName name() const {return _name;} 487 FaultVect vect() {return _vect;} 488 FaultStat & countStat() {return _count;} 489#if FULL_SYSTEM 490 void invoke(ThreadContext * tc); 491#endif 492 493}; 494 495class DtbInvalidFault : public MipsFault 496{ 497 private: 498 static FaultName _name; 499 static FaultVect _vect; 500 static FaultStat _count; 501 public: 502 FaultName name() const {return _name;} 503 FaultVect vect() {return _vect;} 504 FaultStat & countStat() {return _count;} 505#if FULL_SYSTEM 506 void invoke(ThreadContext * tc); 507#endif 508 509}; 510 511class FloatEnableFault : public MipsFault 512{ 513 private: 514 static FaultName _name; 515 static FaultVect _vect; 516 static FaultStat _count; 517 public: 518 FaultName name() const {return _name;} 519 FaultVect vect() {return _vect;} 520 FaultStat & countStat() {return _count;} 521}; 522 523class ItbMissFault : public MipsFault 524{ 525 private: 526 static FaultName _name; 527 static FaultVect _vect; 528 static FaultStat _count; 529 public: 530 FaultName name() const {return _name;} 531 FaultVect vect() {return _vect;} 532 FaultStat & countStat() {return _count;} 533}; 534 535class ItbAcvFault : public MipsFault 536{ 537 private: 538 static FaultName _name; 539 static FaultVect _vect; 540 static FaultStat _count; 541 public: 542 FaultName name() const {return _name;} 543 FaultVect vect() {return _vect;} 544 FaultStat & countStat() {return _count;} 545}; 546 547class IntegerOverflowFault : public MipsFault 548{ 549 private: 550 static FaultName _name; 551 static FaultVect _vect; 552 static FaultStat _count; 553 public: 554 FaultName name() const {return _name;} 555 FaultVect vect() {return _vect;} 556 FaultStat & countStat() {return _count;} 557}; 558 559class DspStateDisabledFault : public MipsFault 560{ 561 private: 562 static FaultName _name; 563 static FaultVect _vect; 564 static FaultStat _count; 565 public: 566 FaultName name() const {return _name;} 567 FaultVect vect() {return _vect;} 568 FaultStat & countStat() {return _count;} 569 void invoke(ThreadContext * tc); 570}; 571 572} // MipsISA namespace 573 574#endif // __MIPS_FAULTS_HH__
|