faults.hh revision 10417
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 325569Snate@binkert.org#ifndef __ARCH_ALPHA_FAULTS_HH__ 335569Snate@binkert.org#define __ARCH_ALPHA_FAULTS_HH__ 342SN/A 355569Snate@binkert.org#include "arch/alpha/pagetable.hh" 367678Sgblack@eecs.umich.edu#include "mem/request.hh" 373614Sgblack@eecs.umich.edu#include "sim/faults.hh" 383614Sgblack@eecs.umich.edu 392166SN/A// The design of the "name" and "vect" functions is in sim/faults.hh 402147SN/A 415569Snate@binkert.orgnamespace AlphaISA { 422167SN/A 432147SN/Atypedef const Addr FaultVect; 442090SN/A 452222SN/Aclass AlphaFault : public FaultBase 462090SN/A{ 472201SN/A protected: 482201SN/A virtual bool skipFaultingInstruction() {return false;} 492201SN/A virtual bool setRestartAddress() {return true;} 502112SN/A public: 5110417Sandreas.hansson@arm.com void invoke(ThreadContext * tc, const StaticInstPtr &inst = 5210417Sandreas.hansson@arm.com StaticInst::nullStaticInstPtr); 532175SN/A virtual FaultVect vect() = 0; 542222SN/A virtual FaultStat & countStat() = 0; 552SN/A}; 562SN/A 572203SN/Aclass MachineCheckFault : public AlphaFault 582166SN/A{ 592166SN/A private: 602203SN/A static FaultName _name; 612166SN/A static FaultVect _vect; 622222SN/A static FaultStat _count; 635569Snate@binkert.org 642166SN/A public: 654695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 662166SN/A FaultVect vect() {return _vect;} 672222SN/A FaultStat & countStat() {return _count;} 682166SN/A}; 692166SN/A 702203SN/Aclass AlignmentFault : public AlphaFault 712166SN/A{ 722166SN/A private: 732203SN/A static FaultName _name; 742166SN/A static FaultVect _vect; 752222SN/A static FaultStat _count; 765569Snate@binkert.org 772166SN/A public: 784695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 792166SN/A FaultVect vect() {return _vect;} 802222SN/A FaultStat & countStat() {return _count;} 814695Sgblack@eecs.umich.edu bool isAlignmentFault() const {return true;} 822166SN/A}; 832166SN/A 842147SN/Aclass ResetFault : public AlphaFault 852090SN/A{ 862147SN/A private: 872147SN/A static FaultName _name; 882147SN/A static FaultVect _vect; 892222SN/A static FaultStat _count; 905569Snate@binkert.org 912112SN/A public: 924695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 932147SN/A FaultVect vect() {return _vect;} 942222SN/A FaultStat & countStat() {return _count;} 952147SN/A}; 962090SN/A 972147SN/Aclass ArithmeticFault : public AlphaFault 982090SN/A{ 992147SN/A private: 1002147SN/A static FaultName _name; 1012147SN/A static FaultVect _vect; 1022222SN/A static FaultStat _count; 1035569Snate@binkert.org 1045569Snate@binkert.org protected: 1055569Snate@binkert.org bool skipFaultingInstruction() {return true;} 1065569Snate@binkert.org 1072112SN/A public: 1084695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1092147SN/A FaultVect vect() {return _vect;} 1102222SN/A FaultStat & countStat() {return _count;} 11110417Sandreas.hansson@arm.com void invoke(ThreadContext * tc, const StaticInstPtr &inst = 11210417Sandreas.hansson@arm.com StaticInst::nullStaticInstPtr); 1132147SN/A}; 1142090SN/A 1152147SN/Aclass InterruptFault : public AlphaFault 1162090SN/A{ 1172147SN/A private: 1182147SN/A static FaultName _name; 1192147SN/A static FaultVect _vect; 1202222SN/A static FaultStat _count; 1215569Snate@binkert.org 1225569Snate@binkert.org protected: 1235569Snate@binkert.org bool setRestartAddress() {return false;} 1245569Snate@binkert.org 1252112SN/A public: 1264695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1272147SN/A FaultVect vect() {return _vect;} 1282222SN/A FaultStat & countStat() {return _count;} 1292147SN/A}; 1302090SN/A 1312502SN/Aclass DtbFault : public AlphaFault 1322502SN/A{ 1334997Sgblack@eecs.umich.edu protected: 1345568Snate@binkert.org VAddr vaddr; 1355736Snate@binkert.org Request::Flags reqFlags; 1362502SN/A uint64_t flags; 1375569Snate@binkert.org 1382502SN/A public: 1395736Snate@binkert.org DtbFault(VAddr _vaddr, Request::Flags _reqFlags, uint64_t _flags) 1402502SN/A : vaddr(_vaddr), reqFlags(_reqFlags), flags(_flags) 1412502SN/A { } 1424695Sgblack@eecs.umich.edu FaultName name() const = 0; 1432502SN/A FaultVect vect() = 0; 1442502SN/A FaultStat & countStat() = 0; 14510417Sandreas.hansson@arm.com void invoke(ThreadContext * tc, const StaticInstPtr &inst = 14610417Sandreas.hansson@arm.com StaticInst::nullStaticInstPtr); 1472502SN/A}; 1482502SN/A 1492502SN/Aclass NDtbMissFault : public DtbFault 1502090SN/A{ 1512147SN/A private: 1522147SN/A static FaultName _name; 1532147SN/A static FaultVect _vect; 1542222SN/A static FaultStat _count; 1555569Snate@binkert.org 1562112SN/A public: 1575736Snate@binkert.org NDtbMissFault(VAddr vaddr, Request::Flags reqFlags, uint64_t flags) 1582502SN/A : DtbFault(vaddr, reqFlags, flags) 1592502SN/A { } 1604695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1612147SN/A FaultVect vect() {return _vect;} 1622222SN/A FaultStat & countStat() {return _count;} 16310417Sandreas.hansson@arm.com void invoke(ThreadContext * tc, const StaticInstPtr &inst = 16410417Sandreas.hansson@arm.com StaticInst::nullStaticInstPtr); 1652147SN/A}; 1662090SN/A 1672502SN/Aclass PDtbMissFault : public DtbFault 1682090SN/A{ 1692147SN/A private: 1702147SN/A static FaultName _name; 1712147SN/A static FaultVect _vect; 1722222SN/A static FaultStat _count; 1735569Snate@binkert.org 1742112SN/A public: 1755736Snate@binkert.org PDtbMissFault(VAddr vaddr, Request::Flags reqFlags, uint64_t flags) 1762502SN/A : DtbFault(vaddr, reqFlags, flags) 1772502SN/A { } 1784695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1792147SN/A FaultVect vect() {return _vect;} 1802222SN/A FaultStat & countStat() {return _count;} 1812147SN/A}; 1822090SN/A 1832502SN/Aclass DtbPageFault : public DtbFault 1842090SN/A{ 1852147SN/A private: 1862147SN/A static FaultName _name; 1872147SN/A static FaultVect _vect; 1882222SN/A static FaultStat _count; 1895569Snate@binkert.org 1902112SN/A public: 1915736Snate@binkert.org DtbPageFault(VAddr vaddr, Request::Flags reqFlags, uint64_t flags) 1922502SN/A : DtbFault(vaddr, reqFlags, flags) 1932502SN/A { } 1944695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 1952147SN/A FaultVect vect() {return _vect;} 1962222SN/A FaultStat & countStat() {return _count;} 1972147SN/A}; 1982090SN/A 1992502SN/Aclass DtbAcvFault : public DtbFault 2002090SN/A{ 2012147SN/A private: 2022147SN/A static FaultName _name; 2032147SN/A static FaultVect _vect; 2042222SN/A static FaultStat _count; 2055569Snate@binkert.org 2062112SN/A public: 2075736Snate@binkert.org DtbAcvFault(VAddr vaddr, Request::Flags 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; 2215569Snate@binkert.org 2222112SN/A public: 2235736Snate@binkert.org DtbAlignmentFault(VAddr vaddr, Request::Flags reqFlags, uint64_t flags) 2242502SN/A : DtbFault(vaddr, reqFlags, flags) 2252502SN/A { } 2264695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2272147SN/A FaultVect vect() {return _vect;} 2282222SN/A FaultStat & countStat() {return _count;} 2292147SN/A}; 2302090SN/A 2312502SN/Aclass ItbFault : public AlphaFault 2322502SN/A{ 2334997Sgblack@eecs.umich.edu protected: 2342502SN/A Addr pc; 2355569Snate@binkert.org 2362502SN/A public: 2375569Snate@binkert.org ItbFault(Addr _pc) : pc(_pc) { } 2384695Sgblack@eecs.umich.edu FaultName name() const = 0; 2392505SN/A FaultVect vect() = 0; 2402505SN/A FaultStat & countStat() = 0; 24110417Sandreas.hansson@arm.com void invoke(ThreadContext * tc, const StaticInstPtr &inst = 24210417Sandreas.hansson@arm.com StaticInst::nullStaticInstPtr); 2432502SN/A}; 2442502SN/A 2452502SN/Aclass ItbPageFault : public ItbFault 2462090SN/A{ 2472147SN/A private: 2482147SN/A static FaultName _name; 2492147SN/A static FaultVect _vect; 2502222SN/A static FaultStat _count; 2515569Snate@binkert.org 2522112SN/A public: 2535569Snate@binkert.org ItbPageFault(Addr pc) : ItbFault(pc) { } 2544695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2552502SN/A FaultVect vect() {return _vect;} 2562502SN/A FaultStat & countStat() {return _count;} 25710417Sandreas.hansson@arm.com void invoke(ThreadContext * tc, const StaticInstPtr &inst = 25810417Sandreas.hansson@arm.com StaticInst::nullStaticInstPtr); 2592502SN/A}; 2602502SN/A 2612502SN/Aclass ItbAcvFault : public ItbFault 2622502SN/A{ 2632502SN/A private: 2642502SN/A static FaultName _name; 2652502SN/A static FaultVect _vect; 2662502SN/A static FaultStat _count; 2675569Snate@binkert.org 2682502SN/A public: 2695569Snate@binkert.org ItbAcvFault(Addr pc) : ItbFault(pc) { } 2704695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2712147SN/A FaultVect vect() {return _vect;} 2722222SN/A FaultStat & countStat() {return _count;} 2732147SN/A}; 2742090SN/A 2752147SN/Aclass UnimplementedOpcodeFault : public AlphaFault 2762090SN/A{ 2772147SN/A private: 2782147SN/A static FaultName _name; 2792147SN/A static FaultVect _vect; 2802222SN/A static FaultStat _count; 2815569Snate@binkert.org 2822112SN/A public: 2834695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2842147SN/A FaultVect vect() {return _vect;} 2852222SN/A FaultStat & countStat() {return _count;} 2862147SN/A}; 2872090SN/A 2882147SN/Aclass FloatEnableFault : public AlphaFault 2892090SN/A{ 2902147SN/A private: 2912147SN/A static FaultName _name; 2922147SN/A static FaultVect _vect; 2932222SN/A static FaultStat _count; 2945569Snate@binkert.org 2952112SN/A public: 2964695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 2972147SN/A FaultVect vect() {return _vect;} 2982222SN/A FaultStat & countStat() {return _count;} 2992147SN/A}; 3002090SN/A 3012147SN/Aclass PalFault : public AlphaFault 3022090SN/A{ 3032147SN/A private: 3042147SN/A static FaultName _name; 3052147SN/A static FaultVect _vect; 3062222SN/A static FaultStat _count; 3075569Snate@binkert.org 3085569Snate@binkert.org protected: 3095569Snate@binkert.org bool skipFaultingInstruction() {return true;} 3105569Snate@binkert.org 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; 3235569Snate@binkert.org 3242112SN/A public: 3254695Sgblack@eecs.umich.edu FaultName name() const {return _name;} 3262147SN/A FaultVect vect() {return _vect;} 3272222SN/A FaultStat & countStat() {return _count;} 3282147SN/A}; 3292090SN/A 3305569Snate@binkert.org} // namespace AlphaISA 3312167SN/A 3325569Snate@binkert.org#endif // __ARCH_ALPHA_FAULTS_HH__ 333