faults.hh revision 2935
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 * 282935Sksewell@umich.edu * Authors: Gabe Black 292935Sksewell@umich.edu * Korey Sewell 302131SN/A */ 312131SN/A 322239SN/A#ifndef __MIPS_FAULTS_HH__ 332239SN/A#define __MIPS_FAULTS_HH__ 342131SN/A 352131SN/A#include "sim/faults.hh" 362447SN/A 372447SN/A// The design of the "name" and "vect" functions is in sim/faults.hh 382447SN/A 392447SN/Anamespace MipsISA 402447SN/A{ 412447SN/A 422447SN/Atypedef const Addr FaultVect; 432131SN/A 442239SN/Aclass MipsFault : public FaultBase 452131SN/A{ 462447SN/A protected: 472447SN/A virtual bool skipFaultingInstruction() {return false;} 482447SN/A virtual bool setRestartAddress() {return true;} 492131SN/A public: 502447SN/A#if FULL_SYSTEM 512680Sktlim@umich.edu void invoke(ThreadContext * tc); 522447SN/A#endif 532447SN/A virtual FaultVect vect() = 0; 542447SN/A virtual FaultStat & countStat() = 0; 552131SN/A}; 562131SN/A 572447SN/Aclass MachineCheckFault : public MipsFault 582131SN/A{ 592447SN/A private: 602447SN/A static FaultName _name; 612447SN/A static FaultVect _vect; 622447SN/A static FaultStat _count; 632131SN/A public: 642447SN/A FaultName name() {return _name;} 652447SN/A FaultVect vect() {return _vect;} 662447SN/A FaultStat & countStat() {return _count;} 672447SN/A bool isMachineCheckFault() {return true;} 682447SN/A}; 692131SN/A 702447SN/Aclass AlignmentFault : public MipsFault 712131SN/A{ 722447SN/A private: 732447SN/A static FaultName _name; 742447SN/A static FaultVect _vect; 752447SN/A static FaultStat _count; 762131SN/A public: 772447SN/A FaultName name() {return _name;} 782447SN/A FaultVect vect() {return _vect;} 792447SN/A FaultStat & countStat() {return _count;} 802447SN/A bool isAlignmentFault() {return true;} 812447SN/A}; 822131SN/A 832800Ssaidi@eecs.umich.edu#if !FULL_SYSTEM 842800Ssaidi@eecs.umich.educlass PageTableFault : public MipsFault 852800Ssaidi@eecs.umich.edu{ 862800Ssaidi@eecs.umich.edu private: 872800Ssaidi@eecs.umich.edu Addr vaddr; 882800Ssaidi@eecs.umich.edu static FaultName _name; 892800Ssaidi@eecs.umich.edu static FaultVect _vect; 902800Ssaidi@eecs.umich.edu static FaultStat _count; 912800Ssaidi@eecs.umich.edu public: 922800Ssaidi@eecs.umich.edu PageTableFault(Addr va) 932800Ssaidi@eecs.umich.edu : vaddr(va) {} 942800Ssaidi@eecs.umich.edu FaultName name() {return _name;} 952800Ssaidi@eecs.umich.edu FaultVect vect() {return _vect;} 962800Ssaidi@eecs.umich.edu FaultStat & countStat() {return _count;} 972800Ssaidi@eecs.umich.edu void invoke(ThreadContext * tc); 982800Ssaidi@eecs.umich.edu}; 992800Ssaidi@eecs.umich.edu 1002800Ssaidi@eecs.umich.edustatic inline Fault genPageTableFault(Addr va) 1012800Ssaidi@eecs.umich.edu{ 1022800Ssaidi@eecs.umich.edu return new PageTableFault(va); 1032800Ssaidi@eecs.umich.edu} 1042800Ssaidi@eecs.umich.edu#endif 1052800Ssaidi@eecs.umich.edu 1062800Ssaidi@eecs.umich.edu 1072447SN/Astatic inline Fault genMachineCheckFault() 1082131SN/A{ 1092447SN/A return new MachineCheckFault; 1102447SN/A} 1112447SN/A 1122447SN/Astatic inline Fault genAlignmentFault() 1132447SN/A{ 1142447SN/A return new AlignmentFault; 1152447SN/A} 1162447SN/A 1172447SN/Aclass ResetFault : public MipsFault 1182447SN/A{ 1192447SN/A private: 1202447SN/A static FaultName _name; 1212447SN/A static FaultVect _vect; 1222447SN/A static FaultStat _count; 1232131SN/A public: 1242447SN/A FaultName name() {return _name;} 1252447SN/A FaultVect vect() {return _vect;} 1262447SN/A FaultStat & countStat() {return _count;} 1272447SN/A}; 1282131SN/A 1292447SN/Aclass ArithmeticFault : public MipsFault 1302131SN/A{ 1312447SN/A protected: 1322447SN/A bool skipFaultingInstruction() {return true;} 1332447SN/A private: 1342447SN/A static FaultName _name; 1352447SN/A static FaultVect _vect; 1362447SN/A static FaultStat _count; 1372131SN/A public: 1382447SN/A FaultName name() {return _name;} 1392447SN/A FaultVect vect() {return _vect;} 1402447SN/A FaultStat & countStat() {return _count;} 1412447SN/A#if FULL_SYSTEM 1422680Sktlim@umich.edu void invoke(ThreadContext * tc); 1432447SN/A#endif 1442447SN/A}; 1452131SN/A 1462447SN/Aclass InterruptFault : public MipsFault 1472131SN/A{ 1482447SN/A protected: 1492447SN/A bool setRestartAddress() {return false;} 1502447SN/A private: 1512447SN/A static FaultName _name; 1522447SN/A static FaultVect _vect; 1532447SN/A static FaultStat _count; 1542131SN/A public: 1552447SN/A FaultName name() {return _name;} 1562447SN/A FaultVect vect() {return _vect;} 1572447SN/A FaultStat & countStat() {return _count;} 1582447SN/A}; 1592131SN/A 1602447SN/Aclass NDtbMissFault : public MipsFault 1612131SN/A{ 1622447SN/A private: 1632447SN/A static FaultName _name; 1642447SN/A static FaultVect _vect; 1652447SN/A static FaultStat _count; 1662131SN/A public: 1672447SN/A FaultName name() {return _name;} 1682447SN/A FaultVect vect() {return _vect;} 1692447SN/A FaultStat & countStat() {return _count;} 1702447SN/A}; 1712131SN/A 1722447SN/Aclass PDtbMissFault : public MipsFault 1732131SN/A{ 1742447SN/A private: 1752447SN/A static FaultName _name; 1762447SN/A static FaultVect _vect; 1772447SN/A static FaultStat _count; 1782131SN/A public: 1792447SN/A FaultName name() {return _name;} 1802447SN/A FaultVect vect() {return _vect;} 1812447SN/A FaultStat & countStat() {return _count;} 1822447SN/A}; 1832131SN/A 1842447SN/Aclass DtbPageFault : public MipsFault 1852131SN/A{ 1862447SN/A private: 1872447SN/A static FaultName _name; 1882447SN/A static FaultVect _vect; 1892447SN/A static FaultStat _count; 1902131SN/A public: 1912447SN/A FaultName name() {return _name;} 1922447SN/A FaultVect vect() {return _vect;} 1932447SN/A FaultStat & countStat() {return _count;} 1942447SN/A}; 1952131SN/A 1962447SN/Aclass DtbAcvFault : public MipsFault 1972131SN/A{ 1982447SN/A private: 1992447SN/A static FaultName _name; 2002447SN/A static FaultVect _vect; 2012447SN/A static FaultStat _count; 2022131SN/A public: 2032447SN/A FaultName name() {return _name;} 2042447SN/A FaultVect vect() {return _vect;} 2052447SN/A FaultStat & countStat() {return _count;} 2062447SN/A}; 2072131SN/A 2082447SN/Aclass ItbMissFault : public MipsFault 2092131SN/A{ 2102447SN/A private: 2112447SN/A static FaultName _name; 2122447SN/A static FaultVect _vect; 2132447SN/A static FaultStat _count; 2142131SN/A public: 2152447SN/A FaultName name() {return _name;} 2162447SN/A FaultVect vect() {return _vect;} 2172447SN/A FaultStat & countStat() {return _count;} 2182447SN/A}; 2192131SN/A 2202447SN/Aclass ItbPageFault : public MipsFault 2212131SN/A{ 2222447SN/A private: 2232447SN/A static FaultName _name; 2242447SN/A static FaultVect _vect; 2252447SN/A static FaultStat _count; 2262131SN/A public: 2272447SN/A FaultName name() {return _name;} 2282447SN/A FaultVect vect() {return _vect;} 2292447SN/A FaultStat & countStat() {return _count;} 2302447SN/A}; 2312131SN/A 2322447SN/Aclass ItbAcvFault : public MipsFault 2332131SN/A{ 2342447SN/A private: 2352447SN/A static FaultName _name; 2362447SN/A static FaultVect _vect; 2372447SN/A static FaultStat _count; 2382131SN/A public: 2392447SN/A FaultName name() {return _name;} 2402447SN/A FaultVect vect() {return _vect;} 2412447SN/A FaultStat & countStat() {return _count;} 2422447SN/A}; 2432131SN/A 2442447SN/Aclass UnimplementedOpcodeFault : public MipsFault 2452131SN/A{ 2462447SN/A private: 2472447SN/A static FaultName _name; 2482447SN/A static FaultVect _vect; 2492447SN/A static FaultStat _count; 2502131SN/A public: 2512447SN/A FaultName name() {return _name;} 2522447SN/A FaultVect vect() {return _vect;} 2532447SN/A FaultStat & countStat() {return _count;} 2542447SN/A}; 2552131SN/A 2562447SN/Aclass FloatEnableFault : public MipsFault 2572131SN/A{ 2582447SN/A private: 2592447SN/A static FaultName _name; 2602447SN/A static FaultVect _vect; 2612447SN/A static FaultStat _count; 2622131SN/A public: 2632447SN/A FaultName name() {return _name;} 2642447SN/A FaultVect vect() {return _vect;} 2652447SN/A FaultStat & countStat() {return _count;} 2662447SN/A}; 2672131SN/A 2682447SN/Aclass PalFault : public MipsFault 2692447SN/A{ 2702447SN/A protected: 2712447SN/A bool skipFaultingInstruction() {return true;} 2722447SN/A private: 2732447SN/A static FaultName _name; 2742447SN/A static FaultVect _vect; 2752447SN/A static FaultStat _count; 2762447SN/A public: 2772447SN/A FaultName name() {return _name;} 2782447SN/A FaultVect vect() {return _vect;} 2792447SN/A FaultStat & countStat() {return _count;} 2802447SN/A}; 2812447SN/A 2822447SN/Aclass IntegerOverflowFault : public MipsFault 2832447SN/A{ 2842447SN/A private: 2852447SN/A static FaultName _name; 2862447SN/A static FaultVect _vect; 2872447SN/A static FaultStat _count; 2882447SN/A public: 2892447SN/A FaultName name() {return _name;} 2902447SN/A FaultVect vect() {return _vect;} 2912447SN/A FaultStat & countStat() {return _count;} 2922447SN/A}; 2932447SN/A 2942447SN/A} // MipsISA namespace 2952131SN/A 2962131SN/A#endif // __FAULTS_HH__ 297