faults.hh revision 5568
12SN/A/* 21762SN/A * Copyright (c) 2003-2005 The Regents of The University of Michigan 32SN/A * All rights reserved. 42SN/A * 52SN/A * Redistribution and use in source and binary forms, with or without 62SN/A * modification, are permitted provided that the following conditions are 72SN/A * met: redistributions of source code must retain the above copyright 82SN/A * notice, this list of conditions and the following disclaimer; 92SN/A * redistributions in binary form must reproduce the above copyright 102SN/A * notice, this list of conditions and the following disclaimer in the 112SN/A * documentation and/or other materials provided with the distribution; 122SN/A * neither the name of the copyright holders nor the names of its 132SN/A * contributors may be used to endorse or promote products derived from 142SN/A * this software without specific prior written permission. 152SN/A * 162SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu * 282665Ssaidi@eecs.umich.edu * Authors: Gabe Black 292665Ssaidi@eecs.umich.edu * Kevin Lim 302SN/A */ 312SN/A 322090SN/A#ifndef __ALPHA_FAULTS_HH__ 332090SN/A#define __ALPHA_FAULTS_HH__ 342SN/A 353614Sgblack@eecs.umich.edu#include "config/full_system.hh" 363614Sgblack@eecs.umich.edu#include "sim/faults.hh" 373614Sgblack@eecs.umich.edu 382984Sgblack@eecs.umich.edu#include "arch/alpha/pagetable.hh" 392147SN/A 402166SN/A// The design of the "name" and "vect" functions is in sim/faults.hh 412147SN/A 422167SN/Anamespace AlphaISA 432167SN/A{ 442167SN/A 452147SN/Atypedef const Addr FaultVect; 462090SN/A 472222SN/Aclass AlphaFault : public FaultBase 482090SN/A{ 492201SN/A protected: 502201SN/A virtual bool skipFaultingInstruction() {return false;} 512201SN/A virtual bool setRestartAddress() {return true;} 522112SN/A public: 532174SN/A#if FULL_SYSTEM 542680Sktlim@umich.edu void invoke(ThreadContext * tc); 552174SN/A#endif 562175SN/A virtual FaultVect vect() = 0; 572222SN/A virtual FaultStat & countStat() = 0; 582SN/A}; 592SN/A 602203SN/Aclass MachineCheckFault : public AlphaFault 612166SN/A{ 622166SN/A private: 632203SN/A static FaultName _name; 642166SN/A static FaultVect _vect; 652222SN/A static FaultStat _count; 662166SN/A public: 674695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 682166SN/A FaultVect vect() {return _vect;} 692222SN/A FaultStat & countStat() {return _count;} 704695Sgblack@eecs.umich.edu bool isMachineCheckFault() const {return true;} 712166SN/A}; 722166SN/A 732203SN/Aclass AlignmentFault : public AlphaFault 742166SN/A{ 752166SN/A private: 762203SN/A static FaultName _name; 772166SN/A static FaultVect _vect; 782222SN/A static FaultStat _count; 792166SN/A public: 804695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 812166SN/A FaultVect vect() {return _vect;} 822222SN/A FaultStat & countStat() {return _count;} 834695Sgblack@eecs.umich.edu bool isAlignmentFault() const {return true;} 842166SN/A}; 852166SN/A 862166SN/Astatic inline Fault genMachineCheckFault() 872166SN/A{ 882203SN/A return new MachineCheckFault; 892166SN/A} 902166SN/A 912147SN/Aclass ResetFault : public AlphaFault 922090SN/A{ 932147SN/A private: 942147SN/A static FaultName _name; 952147SN/A static FaultVect _vect; 962222SN/A static FaultStat _count; 972112SN/A public: 984695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 992147SN/A FaultVect vect() {return _vect;} 1002222SN/A FaultStat & countStat() {return _count;} 1012147SN/A}; 1022090SN/A 1032147SN/Aclass ArithmeticFault : public AlphaFault 1042090SN/A{ 1052201SN/A protected: 1062201SN/A bool skipFaultingInstruction() {return true;} 1072147SN/A private: 1082147SN/A static FaultName _name; 1092147SN/A static FaultVect _vect; 1102222SN/A static FaultStat _count; 1112112SN/A public: 1124695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1132147SN/A FaultVect vect() {return _vect;} 1142222SN/A FaultStat & countStat() {return _count;} 1152203SN/A#if FULL_SYSTEM 1162680Sktlim@umich.edu void invoke(ThreadContext * tc); 1172203SN/A#endif 1182147SN/A}; 1192090SN/A 1202147SN/Aclass InterruptFault : public AlphaFault 1212090SN/A{ 1222201SN/A protected: 1232201SN/A bool setRestartAddress() {return false;} 1242147SN/A private: 1252147SN/A static FaultName _name; 1262147SN/A static FaultVect _vect; 1272222SN/A static FaultStat _count; 1282112SN/A public: 1294695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1302147SN/A FaultVect vect() {return _vect;} 1312222SN/A FaultStat & countStat() {return _count;} 1322147SN/A}; 1332090SN/A 1342502SN/Aclass DtbFault : public AlphaFault 1352502SN/A{ 1364997Sgblack@eecs.umich.edu protected: 1375568Snate@binkert.org VAddr vaddr; 1382502SN/A uint32_t reqFlags; 1392502SN/A uint64_t flags; 1402502SN/A public: 1415568Snate@binkert.org DtbFault(VAddr _vaddr, uint32_t _reqFlags, uint64_t _flags) 1422502SN/A : vaddr(_vaddr), reqFlags(_reqFlags), flags(_flags) 1432502SN/A { } 1444695Sgblack@eecs.umich.edu FaultName name() const = 0; 1452502SN/A FaultVect vect() = 0; 1462502SN/A FaultStat & countStat() = 0; 1472502SN/A#if FULL_SYSTEM 1482680Sktlim@umich.edu void invoke(ThreadContext * tc); 1492502SN/A#endif 1502502SN/A}; 1512502SN/A 1522502SN/Aclass NDtbMissFault : public DtbFault 1532090SN/A{ 1542147SN/A private: 1552147SN/A static FaultName _name; 1562147SN/A static FaultVect _vect; 1572222SN/A static FaultStat _count; 1582112SN/A public: 1595568Snate@binkert.org NDtbMissFault(VAddr vaddr, uint32_t reqFlags, uint64_t flags) 1602502SN/A : DtbFault(vaddr, reqFlags, flags) 1612502SN/A { } 1624695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1632147SN/A FaultVect vect() {return _vect;} 1642222SN/A FaultStat & countStat() {return _count;} 1654997Sgblack@eecs.umich.edu#if !FULL_SYSTEM 1664997Sgblack@eecs.umich.edu void invoke(ThreadContext * tc); 1674997Sgblack@eecs.umich.edu#endif 1682147SN/A}; 1692090SN/A 1702502SN/Aclass PDtbMissFault : public DtbFault 1712090SN/A{ 1722147SN/A private: 1732147SN/A static FaultName _name; 1742147SN/A static FaultVect _vect; 1752222SN/A static FaultStat _count; 1762112SN/A public: 1775568Snate@binkert.org PDtbMissFault(VAddr vaddr, uint32_t reqFlags, uint64_t flags) 1782502SN/A : DtbFault(vaddr, reqFlags, flags) 1792502SN/A { } 1804695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1812147SN/A FaultVect vect() {return _vect;} 1822222SN/A FaultStat & countStat() {return _count;} 1832147SN/A}; 1842090SN/A 1852502SN/Aclass DtbPageFault : public DtbFault 1862090SN/A{ 1872147SN/A private: 1882147SN/A static FaultName _name; 1892147SN/A static FaultVect _vect; 1902222SN/A static FaultStat _count; 1912112SN/A public: 1925568Snate@binkert.org DtbPageFault(VAddr vaddr, uint32_t reqFlags, uint64_t flags) 1932502SN/A : DtbFault(vaddr, reqFlags, flags) 1942502SN/A { } 1954695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1962147SN/A FaultVect vect() {return _vect;} 1972222SN/A FaultStat & countStat() {return _count;} 1982147SN/A}; 1992090SN/A 2002502SN/Aclass DtbAcvFault : public DtbFault 2012090SN/A{ 2022147SN/A private: 2032147SN/A static FaultName _name; 2042147SN/A static FaultVect _vect; 2052222SN/A static FaultStat _count; 2062112SN/A public: 2075568Snate@binkert.org DtbAcvFault(VAddr vaddr, uint32_t reqFlags, uint64_t flags) 2082502SN/A : DtbFault(vaddr, reqFlags, flags) 2092502SN/A { } 2104695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2112147SN/A FaultVect vect() {return _vect;} 2122222SN/A FaultStat & countStat() {return _count;} 2132147SN/A}; 2142090SN/A 2152502SN/Aclass DtbAlignmentFault : public DtbFault 2162090SN/A{ 2172147SN/A private: 2182147SN/A static FaultName _name; 2192147SN/A static FaultVect _vect; 2202222SN/A static FaultStat _count; 2212112SN/A public: 2225568Snate@binkert.org DtbAlignmentFault(VAddr vaddr, uint32_t reqFlags, uint64_t flags) 2232502SN/A : DtbFault(vaddr, reqFlags, flags) 2242502SN/A { } 2254695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2262147SN/A FaultVect vect() {return _vect;} 2272222SN/A FaultStat & countStat() {return _count;} 2282147SN/A}; 2292090SN/A 2302502SN/Aclass ItbFault : public AlphaFault 2312502SN/A{ 2324997Sgblack@eecs.umich.edu protected: 2332502SN/A Addr pc; 2342502SN/A public: 2352502SN/A ItbFault(Addr _pc) 2362502SN/A : pc(_pc) 2372502SN/A { } 2384695Sgblack@eecs.umich.edu FaultName name() const = 0; 2392505SN/A FaultVect vect() = 0; 2402505SN/A FaultStat & countStat() = 0; 2412502SN/A#if FULL_SYSTEM 2422680Sktlim@umich.edu void invoke(ThreadContext * tc); 2432502SN/A#endif 2442502SN/A}; 2452502SN/A 2462502SN/Aclass ItbPageFault : public ItbFault 2472090SN/A{ 2482147SN/A private: 2492147SN/A static FaultName _name; 2502147SN/A static FaultVect _vect; 2512222SN/A static FaultStat _count; 2522112SN/A public: 2532502SN/A ItbPageFault(Addr pc) 2542502SN/A : ItbFault(pc) 2552502SN/A { } 2564695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2572502SN/A FaultVect vect() {return _vect;} 2582502SN/A FaultStat & countStat() {return _count;} 2594997Sgblack@eecs.umich.edu#if !FULL_SYSTEM 2604997Sgblack@eecs.umich.edu void invoke(ThreadContext * tc); 2614997Sgblack@eecs.umich.edu#endif 2622502SN/A}; 2632502SN/A 2642502SN/Aclass ItbAcvFault : public ItbFault 2652502SN/A{ 2662502SN/A private: 2672502SN/A static FaultName _name; 2682502SN/A static FaultVect _vect; 2692502SN/A static FaultStat _count; 2702502SN/A public: 2712502SN/A ItbAcvFault(Addr pc) 2722502SN/A : ItbFault(pc) 2732502SN/A { } 2744695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2752147SN/A FaultVect vect() {return _vect;} 2762222SN/A FaultStat & countStat() {return _count;} 2772147SN/A}; 2782090SN/A 2792147SN/Aclass UnimplementedOpcodeFault : public AlphaFault 2802090SN/A{ 2812147SN/A private: 2822147SN/A static FaultName _name; 2832147SN/A static FaultVect _vect; 2842222SN/A static FaultStat _count; 2852112SN/A public: 2864695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2872147SN/A FaultVect vect() {return _vect;} 2882222SN/A FaultStat & countStat() {return _count;} 2892147SN/A}; 2902090SN/A 2912147SN/Aclass FloatEnableFault : public AlphaFault 2922090SN/A{ 2932147SN/A private: 2942147SN/A static FaultName _name; 2952147SN/A static FaultVect _vect; 2962222SN/A static FaultStat _count; 2972112SN/A public: 2984695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2992147SN/A FaultVect vect() {return _vect;} 3002222SN/A FaultStat & countStat() {return _count;} 3012147SN/A}; 3022090SN/A 3032147SN/Aclass PalFault : public AlphaFault 3042090SN/A{ 3052201SN/A protected: 3062201SN/A bool skipFaultingInstruction() {return true;} 3072147SN/A private: 3082147SN/A static FaultName _name; 3092147SN/A static FaultVect _vect; 3102222SN/A static FaultStat _count; 3112112SN/A public: 3124695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 3132147SN/A FaultVect vect() {return _vect;} 3142222SN/A FaultStat & countStat() {return _count;} 3152147SN/A}; 3162090SN/A 3172147SN/Aclass IntegerOverflowFault : public AlphaFault 3182090SN/A{ 3192147SN/A private: 3202147SN/A static FaultName _name; 3212147SN/A static FaultVect _vect; 3222222SN/A static FaultStat _count; 3232112SN/A public: 3244695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 3252147SN/A FaultVect vect() {return _vect;} 3262222SN/A FaultStat & countStat() {return _count;} 3272147SN/A}; 3282090SN/A 3292167SN/A} // AlphaISA namespace 3302167SN/A 3312SN/A#endif // __FAULTS_HH__ 332