faults.hh revision 2680
12131SN/A/* 22131SN/A * Copyright (c) 2003-2005 The Regents of The University of Michigan 32131SN/A * All rights reserved. 42131SN/A * 52131SN/A * Redistribution and use in source and binary forms, with or without 62131SN/A * modification, are permitted provided that the following conditions are 72131SN/A * met: redistributions of source code must retain the above copyright 82131SN/A * notice, this list of conditions and the following disclaimer; 92131SN/A * redistributions in binary form must reproduce the above copyright 102131SN/A * notice, this list of conditions and the following disclaimer in the 112131SN/A * documentation and/or other materials provided with the distribution; 122131SN/A * neither the name of the copyright holders nor the names of its 132131SN/A * contributors may be used to endorse or promote products derived from 142131SN/A * this software without specific prior written permission. 152131SN/A * 162131SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172131SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182131SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192131SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202131SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212131SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222131SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232131SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242131SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252131SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262131SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu * 282665Ssaidi@eecs.umich.edu * Authors: Korey Sewell 292131SN/A */ 302131SN/A 312239SN/A#ifndef __MIPS_FAULTS_HH__ 322239SN/A#define __MIPS_FAULTS_HH__ 332131SN/A 342131SN/A#include "sim/faults.hh" 352447SN/A 362447SN/A// The design of the "name" and "vect" functions is in sim/faults.hh 372447SN/A 382447SN/Anamespace MipsISA 392447SN/A{ 402447SN/A 412447SN/Atypedef const Addr FaultVect; 422131SN/A 432239SN/Aclass MipsFault : public FaultBase 442131SN/A{ 452447SN/A protected: 462447SN/A virtual bool skipFaultingInstruction() {return false;} 472447SN/A virtual bool setRestartAddress() {return true;} 482131SN/A public: 492447SN/A#if FULL_SYSTEM 502680Sktlim@umich.edu void invoke(ThreadContext * tc); 512447SN/A#endif 522447SN/A virtual FaultVect vect() = 0; 532447SN/A virtual FaultStat & countStat() = 0; 542131SN/A}; 552131SN/A 562447SN/Aclass MachineCheckFault : public MipsFault 572131SN/A{ 582447SN/A private: 592447SN/A static FaultName _name; 602447SN/A static FaultVect _vect; 612447SN/A static FaultStat _count; 622131SN/A public: 632447SN/A FaultName name() {return _name;} 642447SN/A FaultVect vect() {return _vect;} 652447SN/A FaultStat & countStat() {return _count;} 662447SN/A bool isMachineCheckFault() {return true;} 672447SN/A}; 682131SN/A 692447SN/Aclass AlignmentFault : public MipsFault 702131SN/A{ 712447SN/A private: 722447SN/A static FaultName _name; 732447SN/A static FaultVect _vect; 742447SN/A static FaultStat _count; 752131SN/A public: 762447SN/A FaultName name() {return _name;} 772447SN/A FaultVect vect() {return _vect;} 782447SN/A FaultStat & countStat() {return _count;} 792447SN/A bool isAlignmentFault() {return true;} 802447SN/A}; 812131SN/A 822447SN/Astatic inline Fault genMachineCheckFault() 832131SN/A{ 842447SN/A return new MachineCheckFault; 852447SN/A} 862447SN/A 872447SN/Astatic inline Fault genAlignmentFault() 882447SN/A{ 892447SN/A return new AlignmentFault; 902447SN/A} 912447SN/A 922447SN/Aclass ResetFault : public MipsFault 932447SN/A{ 942447SN/A private: 952447SN/A static FaultName _name; 962447SN/A static FaultVect _vect; 972447SN/A static FaultStat _count; 982131SN/A public: 992447SN/A FaultName name() {return _name;} 1002447SN/A FaultVect vect() {return _vect;} 1012447SN/A FaultStat & countStat() {return _count;} 1022447SN/A}; 1032131SN/A 1042447SN/Aclass ArithmeticFault : public MipsFault 1052131SN/A{ 1062447SN/A protected: 1072447SN/A bool skipFaultingInstruction() {return true;} 1082447SN/A private: 1092447SN/A static FaultName _name; 1102447SN/A static FaultVect _vect; 1112447SN/A static FaultStat _count; 1122131SN/A public: 1132447SN/A FaultName name() {return _name;} 1142447SN/A FaultVect vect() {return _vect;} 1152447SN/A FaultStat & countStat() {return _count;} 1162447SN/A#if FULL_SYSTEM 1172680Sktlim@umich.edu void invoke(ThreadContext * tc); 1182447SN/A#endif 1192447SN/A}; 1202131SN/A 1212447SN/Aclass InterruptFault : public MipsFault 1222131SN/A{ 1232447SN/A protected: 1242447SN/A bool setRestartAddress() {return false;} 1252447SN/A private: 1262447SN/A static FaultName _name; 1272447SN/A static FaultVect _vect; 1282447SN/A static FaultStat _count; 1292131SN/A public: 1302447SN/A FaultName name() {return _name;} 1312447SN/A FaultVect vect() {return _vect;} 1322447SN/A FaultStat & countStat() {return _count;} 1332447SN/A}; 1342131SN/A 1352447SN/Aclass NDtbMissFault : public MipsFault 1362131SN/A{ 1372447SN/A private: 1382447SN/A static FaultName _name; 1392447SN/A static FaultVect _vect; 1402447SN/A static FaultStat _count; 1412131SN/A public: 1422447SN/A FaultName name() {return _name;} 1432447SN/A FaultVect vect() {return _vect;} 1442447SN/A FaultStat & countStat() {return _count;} 1452447SN/A}; 1462131SN/A 1472447SN/Aclass PDtbMissFault : public MipsFault 1482131SN/A{ 1492447SN/A private: 1502447SN/A static FaultName _name; 1512447SN/A static FaultVect _vect; 1522447SN/A static FaultStat _count; 1532131SN/A public: 1542447SN/A FaultName name() {return _name;} 1552447SN/A FaultVect vect() {return _vect;} 1562447SN/A FaultStat & countStat() {return _count;} 1572447SN/A}; 1582131SN/A 1592447SN/Aclass DtbPageFault : public MipsFault 1602131SN/A{ 1612447SN/A private: 1622447SN/A static FaultName _name; 1632447SN/A static FaultVect _vect; 1642447SN/A static FaultStat _count; 1652131SN/A public: 1662447SN/A FaultName name() {return _name;} 1672447SN/A FaultVect vect() {return _vect;} 1682447SN/A FaultStat & countStat() {return _count;} 1692447SN/A}; 1702131SN/A 1712447SN/Aclass DtbAcvFault : public MipsFault 1722131SN/A{ 1732447SN/A private: 1742447SN/A static FaultName _name; 1752447SN/A static FaultVect _vect; 1762447SN/A static FaultStat _count; 1772131SN/A public: 1782447SN/A FaultName name() {return _name;} 1792447SN/A FaultVect vect() {return _vect;} 1802447SN/A FaultStat & countStat() {return _count;} 1812447SN/A}; 1822131SN/A 1832447SN/Aclass ItbMissFault : public MipsFault 1842131SN/A{ 1852447SN/A private: 1862447SN/A static FaultName _name; 1872447SN/A static FaultVect _vect; 1882447SN/A static FaultStat _count; 1892131SN/A public: 1902447SN/A FaultName name() {return _name;} 1912447SN/A FaultVect vect() {return _vect;} 1922447SN/A FaultStat & countStat() {return _count;} 1932447SN/A}; 1942131SN/A 1952447SN/Aclass ItbPageFault : public MipsFault 1962131SN/A{ 1972447SN/A private: 1982447SN/A static FaultName _name; 1992447SN/A static FaultVect _vect; 2002447SN/A static FaultStat _count; 2012131SN/A public: 2022447SN/A FaultName name() {return _name;} 2032447SN/A FaultVect vect() {return _vect;} 2042447SN/A FaultStat & countStat() {return _count;} 2052447SN/A}; 2062131SN/A 2072447SN/Aclass ItbAcvFault : public MipsFault 2082131SN/A{ 2092447SN/A private: 2102447SN/A static FaultName _name; 2112447SN/A static FaultVect _vect; 2122447SN/A static FaultStat _count; 2132131SN/A public: 2142447SN/A FaultName name() {return _name;} 2152447SN/A FaultVect vect() {return _vect;} 2162447SN/A FaultStat & countStat() {return _count;} 2172447SN/A}; 2182131SN/A 2192447SN/Aclass UnimplementedOpcodeFault : public MipsFault 2202131SN/A{ 2212447SN/A private: 2222447SN/A static FaultName _name; 2232447SN/A static FaultVect _vect; 2242447SN/A static FaultStat _count; 2252131SN/A public: 2262447SN/A FaultName name() {return _name;} 2272447SN/A FaultVect vect() {return _vect;} 2282447SN/A FaultStat & countStat() {return _count;} 2292447SN/A}; 2302131SN/A 2312447SN/Aclass FloatEnableFault : public MipsFault 2322131SN/A{ 2332447SN/A private: 2342447SN/A static FaultName _name; 2352447SN/A static FaultVect _vect; 2362447SN/A static FaultStat _count; 2372131SN/A public: 2382447SN/A FaultName name() {return _name;} 2392447SN/A FaultVect vect() {return _vect;} 2402447SN/A FaultStat & countStat() {return _count;} 2412447SN/A}; 2422131SN/A 2432447SN/Aclass PalFault : public MipsFault 2442447SN/A{ 2452447SN/A protected: 2462447SN/A bool skipFaultingInstruction() {return true;} 2472447SN/A private: 2482447SN/A static FaultName _name; 2492447SN/A static FaultVect _vect; 2502447SN/A static FaultStat _count; 2512447SN/A public: 2522447SN/A FaultName name() {return _name;} 2532447SN/A FaultVect vect() {return _vect;} 2542447SN/A FaultStat & countStat() {return _count;} 2552447SN/A}; 2562447SN/A 2572447SN/Aclass IntegerOverflowFault : public MipsFault 2582447SN/A{ 2592447SN/A private: 2602447SN/A static FaultName _name; 2612447SN/A static FaultVect _vect; 2622447SN/A static FaultStat _count; 2632447SN/A public: 2642447SN/A FaultName name() {return _name;} 2652447SN/A FaultVect vect() {return _vect;} 2662447SN/A FaultStat & countStat() {return _count;} 2672447SN/A}; 2682447SN/A 2692447SN/A} // MipsISA namespace 2702131SN/A 2712131SN/A#endif // __FAULTS_HH__ 272