faults.hh revision 7678
14120Sgblack@eecs.umich.edu/* 24120Sgblack@eecs.umich.edu * Copyright (c) 2007 The Hewlett-Packard Development Company 34120Sgblack@eecs.umich.edu * All rights reserved. 44120Sgblack@eecs.umich.edu * 57087Snate@binkert.org * The license below extends only to copyright in the software and shall 67087Snate@binkert.org * not be construed as granting a license to any other intellectual 77087Snate@binkert.org * property including but not limited to intellectual property relating 87087Snate@binkert.org * to a hardware implementation of the functionality of the software 97087Snate@binkert.org * licensed hereunder. You may use the software subject to the license 107087Snate@binkert.org * terms below provided that you ensure that this notice is replicated 117087Snate@binkert.org * unmodified and in its entirety in all distributions of the software, 127087Snate@binkert.org * modified or unmodified, in source code or in binary form. 134120Sgblack@eecs.umich.edu * 147087Snate@binkert.org * Redistribution and use in source and binary forms, with or without 157087Snate@binkert.org * modification, are permitted provided that the following conditions are 167087Snate@binkert.org * met: redistributions of source code must retain the above copyright 177087Snate@binkert.org * notice, this list of conditions and the following disclaimer; 187087Snate@binkert.org * redistributions in binary form must reproduce the above copyright 197087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 207087Snate@binkert.org * documentation and/or other materials provided with the distribution; 217087Snate@binkert.org * neither the name of the copyright holders nor the names of its 224120Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 237087Snate@binkert.org * this software without specific prior written permission. 244120Sgblack@eecs.umich.edu * 254120Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 264120Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 274120Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 284120Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 294120Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 304120Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 314120Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 324120Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 334120Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 344120Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 354120Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 364120Sgblack@eecs.umich.edu * 374120Sgblack@eecs.umich.edu * Authors: Gabe Black 384120Sgblack@eecs.umich.edu */ 394120Sgblack@eecs.umich.edu 404120Sgblack@eecs.umich.edu#ifndef __ARCH_X86_FAULTS_HH__ 414120Sgblack@eecs.umich.edu#define __ARCH_X86_FAULTS_HH__ 424120Sgblack@eecs.umich.edu 435857Sgblack@eecs.umich.edu#include "base/bitunion.hh" 444139Sgblack@eecs.umich.edu#include "base/misc.hh" 454135Sgblack@eecs.umich.edu#include "sim/faults.hh" 466023Snate@binkert.org#include "sim/tlb.hh" 474120Sgblack@eecs.umich.edu 485909Sgblack@eecs.umich.edu#include <string> 495909Sgblack@eecs.umich.edu 504120Sgblack@eecs.umich.edunamespace X86ISA 514120Sgblack@eecs.umich.edu{ 525114Sgblack@eecs.umich.edu // Base class for all x86 "faults" where faults is in the m5 sense 535114Sgblack@eecs.umich.edu class X86FaultBase : public FaultBase 544135Sgblack@eecs.umich.edu { 554365Sgblack@eecs.umich.edu protected: 565114Sgblack@eecs.umich.edu const char * faultName; 575114Sgblack@eecs.umich.edu const char * mnem; 585851Sgblack@eecs.umich.edu uint8_t vector; 595139Sgblack@eecs.umich.edu uint64_t errorCode; 605114Sgblack@eecs.umich.edu 615139Sgblack@eecs.umich.edu X86FaultBase(const char * _faultName, const char * _mnem, 626009Snate@binkert.org const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1) 636009Snate@binkert.org : faultName(_faultName), mnem(_mnem), 646009Snate@binkert.org vector(_vector), errorCode(_errorCode) 655114Sgblack@eecs.umich.edu { 665114Sgblack@eecs.umich.edu } 675114Sgblack@eecs.umich.edu 684729Sgblack@eecs.umich.edu const char * name() const 694365Sgblack@eecs.umich.edu { 705114Sgblack@eecs.umich.edu return faultName; 714365Sgblack@eecs.umich.edu } 724365Sgblack@eecs.umich.edu 735114Sgblack@eecs.umich.edu virtual bool isBenign() 745114Sgblack@eecs.umich.edu { 755114Sgblack@eecs.umich.edu return true; 765114Sgblack@eecs.umich.edu } 775114Sgblack@eecs.umich.edu 785114Sgblack@eecs.umich.edu virtual const char * mnemonic() const 795114Sgblack@eecs.umich.edu { 805114Sgblack@eecs.umich.edu return mnem; 815114Sgblack@eecs.umich.edu } 825684Sgblack@eecs.umich.edu 835858Sgblack@eecs.umich.edu virtual bool isSoft() 845684Sgblack@eecs.umich.edu { 855858Sgblack@eecs.umich.edu return false; 865684Sgblack@eecs.umich.edu } 875858Sgblack@eecs.umich.edu 885858Sgblack@eecs.umich.edu#if FULL_SYSTEM 897678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 907678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr); 915909Sgblack@eecs.umich.edu 925909Sgblack@eecs.umich.edu virtual std::string describe() const; 935858Sgblack@eecs.umich.edu#endif 945114Sgblack@eecs.umich.edu }; 955114Sgblack@eecs.umich.edu 965114Sgblack@eecs.umich.edu // Base class for x86 faults which behave as if the underlying instruction 975114Sgblack@eecs.umich.edu // didn't happen. 985114Sgblack@eecs.umich.edu class X86Fault : public X86FaultBase 995114Sgblack@eecs.umich.edu { 1005114Sgblack@eecs.umich.edu protected: 1015139Sgblack@eecs.umich.edu X86Fault(const char * name, const char * mnem, 1026009Snate@binkert.org const uint8_t vector, uint64_t _errorCode = (uint64_t)-1) 1036009Snate@binkert.org : X86FaultBase(name, mnem, vector, _errorCode) 1045114Sgblack@eecs.umich.edu {} 1055114Sgblack@eecs.umich.edu }; 1065114Sgblack@eecs.umich.edu 1075114Sgblack@eecs.umich.edu // Base class for x86 traps which behave as if the underlying instruction 1085114Sgblack@eecs.umich.edu // completed. 1095114Sgblack@eecs.umich.edu class X86Trap : public X86FaultBase 1105114Sgblack@eecs.umich.edu { 1115114Sgblack@eecs.umich.edu protected: 1125139Sgblack@eecs.umich.edu X86Trap(const char * name, const char * mnem, 1136009Snate@binkert.org const uint8_t vector, uint64_t _errorCode = (uint64_t)-1) 1146009Snate@binkert.org : X86FaultBase(name, mnem, vector, _errorCode) 1155114Sgblack@eecs.umich.edu {} 1165114Sgblack@eecs.umich.edu 1175114Sgblack@eecs.umich.edu#if FULL_SYSTEM 1187678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 1197678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr); 1205114Sgblack@eecs.umich.edu#endif 1215114Sgblack@eecs.umich.edu }; 1225114Sgblack@eecs.umich.edu 1235114Sgblack@eecs.umich.edu // Base class for x86 aborts which seem to be catastrophic failures. 1245114Sgblack@eecs.umich.edu class X86Abort : public X86FaultBase 1255114Sgblack@eecs.umich.edu { 1265114Sgblack@eecs.umich.edu protected: 1275139Sgblack@eecs.umich.edu X86Abort(const char * name, const char * mnem, 1286009Snate@binkert.org const uint8_t vector, uint64_t _errorCode = (uint64_t)-1) 1296009Snate@binkert.org : X86FaultBase(name, mnem, vector, _errorCode) 1305114Sgblack@eecs.umich.edu {} 1315114Sgblack@eecs.umich.edu 1325114Sgblack@eecs.umich.edu#if FULL_SYSTEM 1337678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 1347678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr); 1355114Sgblack@eecs.umich.edu#endif 1365114Sgblack@eecs.umich.edu }; 1375114Sgblack@eecs.umich.edu 1385114Sgblack@eecs.umich.edu // Base class for x86 interrupts. 1395114Sgblack@eecs.umich.edu class X86Interrupt : public X86FaultBase 1405114Sgblack@eecs.umich.edu { 1415114Sgblack@eecs.umich.edu protected: 1425851Sgblack@eecs.umich.edu X86Interrupt(const char * name, const char * mnem, 1436009Snate@binkert.org const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1) 1446009Snate@binkert.org : X86FaultBase(name, mnem, _vector, _errorCode) 1455114Sgblack@eecs.umich.edu {} 1464135Sgblack@eecs.umich.edu }; 1474150Sgblack@eecs.umich.edu 1484365Sgblack@eecs.umich.edu class UnimpInstFault : public FaultBase 1494365Sgblack@eecs.umich.edu { 1504365Sgblack@eecs.umich.edu public: 1514729Sgblack@eecs.umich.edu const char * name() const 1524365Sgblack@eecs.umich.edu { 1534365Sgblack@eecs.umich.edu return "unimplemented_micro"; 1544365Sgblack@eecs.umich.edu } 1554365Sgblack@eecs.umich.edu 1567678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 1577678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr) 1584365Sgblack@eecs.umich.edu { 1594365Sgblack@eecs.umich.edu panic("Unimplemented instruction!"); 1604365Sgblack@eecs.umich.edu } 1614365Sgblack@eecs.umich.edu }; 1624365Sgblack@eecs.umich.edu 1634150Sgblack@eecs.umich.edu static inline Fault genMachineCheckFault() 1644150Sgblack@eecs.umich.edu { 1654150Sgblack@eecs.umich.edu panic("Machine check fault not implemented in x86!\n"); 1664150Sgblack@eecs.umich.edu } 1675114Sgblack@eecs.umich.edu 1685114Sgblack@eecs.umich.edu // Below is a summary of the interrupt/exception information in the 1695114Sgblack@eecs.umich.edu // architecture manuals. 1705114Sgblack@eecs.umich.edu 1715114Sgblack@eecs.umich.edu // Class | Type | vector | Cause | mnem 1725114Sgblack@eecs.umich.edu //------------------------------------------------------------------------ 1735114Sgblack@eecs.umich.edu //Contrib Fault 0 Divide-by-Zero-Error #DE 1745114Sgblack@eecs.umich.edu //Benign Either 1 Debug #DB 1755114Sgblack@eecs.umich.edu //Benign Interrupt 2 Non-Maskable-Interrupt #NMI 1765114Sgblack@eecs.umich.edu //Benign Trap 3 Breakpoint #BP 1775114Sgblack@eecs.umich.edu //Benign Trap 4 Overflow #OF 1785114Sgblack@eecs.umich.edu //Benign Fault 5 Bound-Range #BR 1795114Sgblack@eecs.umich.edu //Benign Fault 6 Invalid-Opcode #UD 1805114Sgblack@eecs.umich.edu //Benign Fault 7 Device-Not-Available #NM 1815114Sgblack@eecs.umich.edu //Benign Abort 8 Double-Fault #DF 1825114Sgblack@eecs.umich.edu // 9 Coprocessor-Segment-Overrun 1835114Sgblack@eecs.umich.edu //Contrib Fault 10 Invalid-TSS #TS 1845114Sgblack@eecs.umich.edu //Contrib Fault 11 Segment-Not-Present #NP 1855114Sgblack@eecs.umich.edu //Contrib Fault 12 Stack #SS 1865114Sgblack@eecs.umich.edu //Contrib Fault 13 General-Protection #GP 1875114Sgblack@eecs.umich.edu //Either Fault 14 Page-Fault #PF 1885114Sgblack@eecs.umich.edu // 15 Reserved 1895114Sgblack@eecs.umich.edu //Benign Fault 16 x87 Floating-Point Exception Pending #MF 1905114Sgblack@eecs.umich.edu //Benign Fault 17 Alignment-Check #AC 1915114Sgblack@eecs.umich.edu //Benign Abort 18 Machine-Check #MC 1925114Sgblack@eecs.umich.edu //Benign Fault 19 SIMD Floating-Point #XF 1935114Sgblack@eecs.umich.edu // 20-29 Reserved 1945114Sgblack@eecs.umich.edu //Contrib ? 30 Security Exception #SX 1955114Sgblack@eecs.umich.edu // 31 Reserved 1965114Sgblack@eecs.umich.edu //Benign Interrupt 0-255 External Interrupts #INTR 1975114Sgblack@eecs.umich.edu //Benign Interrupt 0-255 Software Interrupts INTn 1985114Sgblack@eecs.umich.edu 1995114Sgblack@eecs.umich.edu class DivideByZero : public X86Fault 2005114Sgblack@eecs.umich.edu { 2015114Sgblack@eecs.umich.edu public: 2025114Sgblack@eecs.umich.edu DivideByZero() : 2035851Sgblack@eecs.umich.edu X86Fault("Divide-by-Zero-Error", "#DE", 0) 2045114Sgblack@eecs.umich.edu {} 2055114Sgblack@eecs.umich.edu }; 2065114Sgblack@eecs.umich.edu 2075114Sgblack@eecs.umich.edu class DebugException : public X86FaultBase 2085114Sgblack@eecs.umich.edu { 2095114Sgblack@eecs.umich.edu public: 2105114Sgblack@eecs.umich.edu DebugException() : 2115851Sgblack@eecs.umich.edu X86FaultBase("Debug", "#DB", 1) 2125114Sgblack@eecs.umich.edu {} 2135114Sgblack@eecs.umich.edu }; 2145114Sgblack@eecs.umich.edu 2155114Sgblack@eecs.umich.edu class NonMaskableInterrupt : public X86Interrupt 2165114Sgblack@eecs.umich.edu { 2175114Sgblack@eecs.umich.edu public: 2185655Sgblack@eecs.umich.edu NonMaskableInterrupt(uint8_t _vector) : 2195851Sgblack@eecs.umich.edu X86Interrupt("Non Maskable Interrupt", "#NMI", 2, _vector) 2205114Sgblack@eecs.umich.edu {} 2215114Sgblack@eecs.umich.edu }; 2225114Sgblack@eecs.umich.edu 2235114Sgblack@eecs.umich.edu class Breakpoint : public X86Trap 2245114Sgblack@eecs.umich.edu { 2255114Sgblack@eecs.umich.edu public: 2265114Sgblack@eecs.umich.edu Breakpoint() : 2275851Sgblack@eecs.umich.edu X86Trap("Breakpoint", "#BP", 3) 2285114Sgblack@eecs.umich.edu {} 2295114Sgblack@eecs.umich.edu }; 2305114Sgblack@eecs.umich.edu 2315114Sgblack@eecs.umich.edu class OverflowTrap : public X86Trap 2325114Sgblack@eecs.umich.edu { 2335114Sgblack@eecs.umich.edu public: 2345114Sgblack@eecs.umich.edu OverflowTrap() : 2355851Sgblack@eecs.umich.edu X86Trap("Overflow", "#OF", 4) 2365114Sgblack@eecs.umich.edu {} 2375114Sgblack@eecs.umich.edu }; 2385114Sgblack@eecs.umich.edu 2395114Sgblack@eecs.umich.edu class BoundRange : public X86Fault 2405114Sgblack@eecs.umich.edu { 2415114Sgblack@eecs.umich.edu public: 2425114Sgblack@eecs.umich.edu BoundRange() : 2435851Sgblack@eecs.umich.edu X86Fault("Bound-Range", "#BR", 5) 2445114Sgblack@eecs.umich.edu {} 2455114Sgblack@eecs.umich.edu }; 2465114Sgblack@eecs.umich.edu 2475114Sgblack@eecs.umich.edu class InvalidOpcode : public X86Fault 2485114Sgblack@eecs.umich.edu { 2495114Sgblack@eecs.umich.edu public: 2505114Sgblack@eecs.umich.edu InvalidOpcode() : 2515851Sgblack@eecs.umich.edu X86Fault("Invalid-Opcode", "#UD", 6) 2525114Sgblack@eecs.umich.edu {} 2535114Sgblack@eecs.umich.edu }; 2545114Sgblack@eecs.umich.edu 2555114Sgblack@eecs.umich.edu class DeviceNotAvailable : public X86Fault 2565114Sgblack@eecs.umich.edu { 2575114Sgblack@eecs.umich.edu public: 2585114Sgblack@eecs.umich.edu DeviceNotAvailable() : 2595851Sgblack@eecs.umich.edu X86Fault("Device-Not-Available", "#NM", 7) 2605114Sgblack@eecs.umich.edu {} 2615114Sgblack@eecs.umich.edu }; 2625114Sgblack@eecs.umich.edu 2635114Sgblack@eecs.umich.edu class DoubleFault : public X86Abort 2645114Sgblack@eecs.umich.edu { 2655114Sgblack@eecs.umich.edu public: 2665114Sgblack@eecs.umich.edu DoubleFault() : 2675857Sgblack@eecs.umich.edu X86Abort("Double-Fault", "#DF", 8, 0) 2685114Sgblack@eecs.umich.edu {} 2695114Sgblack@eecs.umich.edu }; 2705114Sgblack@eecs.umich.edu 2715114Sgblack@eecs.umich.edu class InvalidTSS : public X86Fault 2725114Sgblack@eecs.umich.edu { 2735114Sgblack@eecs.umich.edu public: 2745857Sgblack@eecs.umich.edu InvalidTSS(uint32_t _errorCode) : 2755857Sgblack@eecs.umich.edu X86Fault("Invalid-TSS", "#TS", 10, _errorCode) 2765114Sgblack@eecs.umich.edu {} 2775114Sgblack@eecs.umich.edu }; 2785114Sgblack@eecs.umich.edu 2795114Sgblack@eecs.umich.edu class SegmentNotPresent : public X86Fault 2805114Sgblack@eecs.umich.edu { 2815114Sgblack@eecs.umich.edu public: 2825857Sgblack@eecs.umich.edu SegmentNotPresent(uint32_t _errorCode) : 2835857Sgblack@eecs.umich.edu X86Fault("Segment-Not-Present", "#NP", 11, _errorCode) 2845114Sgblack@eecs.umich.edu {} 2855114Sgblack@eecs.umich.edu }; 2865114Sgblack@eecs.umich.edu 2875114Sgblack@eecs.umich.edu class StackFault : public X86Fault 2885114Sgblack@eecs.umich.edu { 2895114Sgblack@eecs.umich.edu public: 2905857Sgblack@eecs.umich.edu StackFault(uint32_t _errorCode) : 2915857Sgblack@eecs.umich.edu X86Fault("Stack", "#SS", 12, _errorCode) 2925114Sgblack@eecs.umich.edu {} 2935114Sgblack@eecs.umich.edu }; 2945114Sgblack@eecs.umich.edu 2955114Sgblack@eecs.umich.edu class GeneralProtection : public X86Fault 2965114Sgblack@eecs.umich.edu { 2975114Sgblack@eecs.umich.edu public: 2985857Sgblack@eecs.umich.edu GeneralProtection(uint32_t _errorCode) : 2995851Sgblack@eecs.umich.edu X86Fault("General-Protection", "#GP", 13, _errorCode) 3005114Sgblack@eecs.umich.edu {} 3015114Sgblack@eecs.umich.edu }; 3025114Sgblack@eecs.umich.edu 3035114Sgblack@eecs.umich.edu class PageFault : public X86Fault 3045114Sgblack@eecs.umich.edu { 3055857Sgblack@eecs.umich.edu protected: 3065857Sgblack@eecs.umich.edu BitUnion32(PageFaultErrorCode) 3075857Sgblack@eecs.umich.edu Bitfield<0> present; 3085857Sgblack@eecs.umich.edu Bitfield<1> write; 3095857Sgblack@eecs.umich.edu Bitfield<2> user; 3105857Sgblack@eecs.umich.edu Bitfield<3> reserved; 3115857Sgblack@eecs.umich.edu Bitfield<4> fetch; 3125857Sgblack@eecs.umich.edu EndBitUnion(PageFaultErrorCode) 3135857Sgblack@eecs.umich.edu 3145858Sgblack@eecs.umich.edu Addr addr; 3155858Sgblack@eecs.umich.edu 3165114Sgblack@eecs.umich.edu public: 3175858Sgblack@eecs.umich.edu PageFault(Addr _addr, uint32_t _errorCode) : 3185858Sgblack@eecs.umich.edu X86Fault("Page-Fault", "#PF", 14, _errorCode), addr(_addr) 3195114Sgblack@eecs.umich.edu {} 3205858Sgblack@eecs.umich.edu 3216023Snate@binkert.org PageFault(Addr _addr, bool present, BaseTLB::Mode mode, 3226023Snate@binkert.org bool user, bool reserved) : 3235858Sgblack@eecs.umich.edu X86Fault("Page-Fault", "#PF", 14, 0), addr(_addr) 3245857Sgblack@eecs.umich.edu { 3255857Sgblack@eecs.umich.edu PageFaultErrorCode code = 0; 3265857Sgblack@eecs.umich.edu code.present = present; 3276023Snate@binkert.org code.write = (mode == BaseTLB::Write); 3285857Sgblack@eecs.umich.edu code.user = user; 3295857Sgblack@eecs.umich.edu code.reserved = reserved; 3306023Snate@binkert.org code.fetch = (mode == BaseTLB::Execute); 3315857Sgblack@eecs.umich.edu errorCode = code; 3325857Sgblack@eecs.umich.edu } 3335858Sgblack@eecs.umich.edu 3347678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 3357678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr); 3365909Sgblack@eecs.umich.edu 3377625Sgblack@eecs.umich.edu#if FULL_SYSTEM 3385909Sgblack@eecs.umich.edu virtual std::string describe() const; 3395858Sgblack@eecs.umich.edu#endif 3405114Sgblack@eecs.umich.edu }; 3415114Sgblack@eecs.umich.edu 3425114Sgblack@eecs.umich.edu class X87FpExceptionPending : public X86Fault 3435114Sgblack@eecs.umich.edu { 3445114Sgblack@eecs.umich.edu public: 3455114Sgblack@eecs.umich.edu X87FpExceptionPending() : 3465851Sgblack@eecs.umich.edu X86Fault("x87 Floating-Point Exception Pending", "#MF", 16) 3475114Sgblack@eecs.umich.edu {} 3485114Sgblack@eecs.umich.edu }; 3495114Sgblack@eecs.umich.edu 3505652Sgblack@eecs.umich.edu class AlignmentCheck : public X86Fault 3515114Sgblack@eecs.umich.edu { 3525114Sgblack@eecs.umich.edu public: 3535114Sgblack@eecs.umich.edu AlignmentCheck() : 3545857Sgblack@eecs.umich.edu X86Fault("Alignment-Check", "#AC", 17, 0) 3555114Sgblack@eecs.umich.edu {} 3565114Sgblack@eecs.umich.edu }; 3575114Sgblack@eecs.umich.edu 3585652Sgblack@eecs.umich.edu class MachineCheck : public X86Abort 3595114Sgblack@eecs.umich.edu { 3605114Sgblack@eecs.umich.edu public: 3615114Sgblack@eecs.umich.edu MachineCheck() : 3625851Sgblack@eecs.umich.edu X86Abort("Machine-Check", "#MC", 18) 3635114Sgblack@eecs.umich.edu {} 3645114Sgblack@eecs.umich.edu }; 3655114Sgblack@eecs.umich.edu 3665652Sgblack@eecs.umich.edu class SIMDFloatingPointFault : public X86Fault 3675114Sgblack@eecs.umich.edu { 3685114Sgblack@eecs.umich.edu public: 3695114Sgblack@eecs.umich.edu SIMDFloatingPointFault() : 3705851Sgblack@eecs.umich.edu X86Fault("SIMD Floating-Point", "#XF", 19) 3715114Sgblack@eecs.umich.edu {} 3725114Sgblack@eecs.umich.edu }; 3735114Sgblack@eecs.umich.edu 3745652Sgblack@eecs.umich.edu class SecurityException : public X86FaultBase 3755114Sgblack@eecs.umich.edu { 3765114Sgblack@eecs.umich.edu public: 3775114Sgblack@eecs.umich.edu SecurityException() : 3785851Sgblack@eecs.umich.edu X86FaultBase("Security Exception", "#SX", 30) 3795114Sgblack@eecs.umich.edu {} 3805114Sgblack@eecs.umich.edu }; 3815114Sgblack@eecs.umich.edu 3825652Sgblack@eecs.umich.edu class ExternalInterrupt : public X86Interrupt 3835114Sgblack@eecs.umich.edu { 3845114Sgblack@eecs.umich.edu public: 3855654Sgblack@eecs.umich.edu ExternalInterrupt(uint8_t _vector) : 3865681Sgblack@eecs.umich.edu X86Interrupt("External Interrupt", "#INTR", _vector) 3875114Sgblack@eecs.umich.edu {} 3885114Sgblack@eecs.umich.edu }; 3895114Sgblack@eecs.umich.edu 3905655Sgblack@eecs.umich.edu class SystemManagementInterrupt : public X86Interrupt 3915655Sgblack@eecs.umich.edu { 3925655Sgblack@eecs.umich.edu public: 3935655Sgblack@eecs.umich.edu SystemManagementInterrupt() : 3945681Sgblack@eecs.umich.edu X86Interrupt("System Management Interrupt", "#SMI", 0) 3955655Sgblack@eecs.umich.edu {} 3965655Sgblack@eecs.umich.edu }; 3975655Sgblack@eecs.umich.edu 3985655Sgblack@eecs.umich.edu class InitInterrupt : public X86Interrupt 3995655Sgblack@eecs.umich.edu { 4005655Sgblack@eecs.umich.edu public: 4015655Sgblack@eecs.umich.edu InitInterrupt(uint8_t _vector) : 4025681Sgblack@eecs.umich.edu X86Interrupt("INIT Interrupt", "#INIT", _vector) 4035655Sgblack@eecs.umich.edu {} 4046048Sgblack@eecs.umich.edu 4057678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 4067678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr); 4075655Sgblack@eecs.umich.edu }; 4085655Sgblack@eecs.umich.edu 4096049Sgblack@eecs.umich.edu class StartupInterrupt : public X86Interrupt 4106049Sgblack@eecs.umich.edu { 4116049Sgblack@eecs.umich.edu public: 4126049Sgblack@eecs.umich.edu StartupInterrupt(uint8_t _vector) : 4136049Sgblack@eecs.umich.edu X86Interrupt("Startup Interrupt", "#SIPI", _vector) 4146049Sgblack@eecs.umich.edu {} 4156049Sgblack@eecs.umich.edu 4167678Sgblack@eecs.umich.edu void invoke(ThreadContext * tc, 4177678Sgblack@eecs.umich.edu StaticInstPtr inst = StaticInst::nullStaticInstPtr); 4186049Sgblack@eecs.umich.edu }; 4196049Sgblack@eecs.umich.edu 4205652Sgblack@eecs.umich.edu class SoftwareInterrupt : public X86Interrupt 4215114Sgblack@eecs.umich.edu { 4225114Sgblack@eecs.umich.edu public: 4235681Sgblack@eecs.umich.edu SoftwareInterrupt(uint8_t _vector) : 4245909Sgblack@eecs.umich.edu X86Interrupt("Software Interrupt", "#INTR", _vector) 4255114Sgblack@eecs.umich.edu {} 4265858Sgblack@eecs.umich.edu 4275858Sgblack@eecs.umich.edu bool isSoft() 4285858Sgblack@eecs.umich.edu { 4295858Sgblack@eecs.umich.edu return true; 4305858Sgblack@eecs.umich.edu } 4315114Sgblack@eecs.umich.edu }; 4324120Sgblack@eecs.umich.edu}; 4334120Sgblack@eecs.umich.edu 4344120Sgblack@eecs.umich.edu#endif // __ARCH_X86_FAULTS_HH__ 435