faults.hh revision 5652
110447Snilay@cs.wisc.edu/* 210447Snilay@cs.wisc.edu * Copyright (c) 2007 The Hewlett-Packard Development Company 310447Snilay@cs.wisc.edu * All rights reserved. 410447Snilay@cs.wisc.edu * 510447Snilay@cs.wisc.edu * Redistribution and use of this software in source and binary forms, 610447Snilay@cs.wisc.edu * with or without modification, are permitted provided that the 710447Snilay@cs.wisc.edu * following conditions are met: 810447Snilay@cs.wisc.edu * 910447Snilay@cs.wisc.edu * The software must be used only for Non-Commercial Use which means any 1010447Snilay@cs.wisc.edu * use which is NOT directed to receiving any direct monetary 1110447Snilay@cs.wisc.edu * compensation for, or commercial advantage from such use. Illustrative 1210447Snilay@cs.wisc.edu * examples of non-commercial use are academic research, personal study, 1310447Snilay@cs.wisc.edu * teaching, education and corporate research & development. 1410447Snilay@cs.wisc.edu * Illustrative examples of commercial use are distributing products for 1510447Snilay@cs.wisc.edu * commercial advantage and providing services using the software for 1610447Snilay@cs.wisc.edu * commercial advantage. 1710447Snilay@cs.wisc.edu * 1810447Snilay@cs.wisc.edu * If you wish to use this software or functionality therein that may be 1910447Snilay@cs.wisc.edu * covered by patents for commercial use, please contact: 2010447Snilay@cs.wisc.edu * Director of Intellectual Property Licensing 2110447Snilay@cs.wisc.edu * Office of Strategy and Technology 2210447Snilay@cs.wisc.edu * Hewlett-Packard Company 2310447Snilay@cs.wisc.edu * 1501 Page Mill Road 2410447Snilay@cs.wisc.edu * Palo Alto, California 94304 2510447Snilay@cs.wisc.edu * 2610447Snilay@cs.wisc.edu * Redistributions of source code must retain the above copyright notice, 2710447Snilay@cs.wisc.edu * this list of conditions and the following disclaimer. Redistributions 2810447Snilay@cs.wisc.edu * in binary form must reproduce the above copyright notice, this list of 2910447Snilay@cs.wisc.edu * conditions and the following disclaimer in the documentation and/or 3010447Snilay@cs.wisc.edu * other materials provided with the distribution. Neither the name of 3110447Snilay@cs.wisc.edu * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 3210447Snilay@cs.wisc.edu * contributors may be used to endorse or promote products derived from 3310447Snilay@cs.wisc.edu * this software without specific prior written permission. No right of 3410447Snilay@cs.wisc.edu * sublicense is granted herewith. Derivatives of the software and 3510447Snilay@cs.wisc.edu * output created using the software may be prepared, but only for 3610447Snilay@cs.wisc.edu * Non-Commercial Uses. Derivatives of the software may be shared with 3710447Snilay@cs.wisc.edu * others provided: (i) the others agree to abide by the list of 3810447Snilay@cs.wisc.edu * conditions herein which includes the Non-Commercial Use restrictions; 3910447Snilay@cs.wisc.edu * and (ii) such Derivatives of the software include the above copyright 4010447Snilay@cs.wisc.edu * notice to acknowledge the contribution from this software where 4110447Snilay@cs.wisc.edu * applicable, this list of conditions and the disclaimer below. 4210447Snilay@cs.wisc.edu * 4310447Snilay@cs.wisc.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 4410447Snilay@cs.wisc.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 4510447Snilay@cs.wisc.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 4610447Snilay@cs.wisc.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 4710447Snilay@cs.wisc.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 4810447Snilay@cs.wisc.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 4910447Snilay@cs.wisc.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 5010447Snilay@cs.wisc.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 5110447Snilay@cs.wisc.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 5210447Snilay@cs.wisc.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 5310447Snilay@cs.wisc.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 5410447Snilay@cs.wisc.edu * 5510447Snilay@cs.wisc.edu * Authors: Gabe Black 5610447Snilay@cs.wisc.edu */ 5710447Snilay@cs.wisc.edu 5810447Snilay@cs.wisc.edu#ifndef __ARCH_X86_FAULTS_HH__ 5910447Snilay@cs.wisc.edu#define __ARCH_X86_FAULTS_HH__ 6010447Snilay@cs.wisc.edu 6110447Snilay@cs.wisc.edu#include "base/misc.hh" 6210447Snilay@cs.wisc.edu#include "sim/faults.hh" 6310447Snilay@cs.wisc.edu 6410447Snilay@cs.wisc.edunamespace X86ISA 6510447Snilay@cs.wisc.edu{ 6610447Snilay@cs.wisc.edu // Base class for all x86 "faults" where faults is in the m5 sense 6710447Snilay@cs.wisc.edu class X86FaultBase : public FaultBase 6810447Snilay@cs.wisc.edu { 6910447Snilay@cs.wisc.edu protected: 7010447Snilay@cs.wisc.edu const char * faultName; 7110447Snilay@cs.wisc.edu const char * mnem; 7210447Snilay@cs.wisc.edu uint64_t errorCode; 7310447Snilay@cs.wisc.edu 7410447Snilay@cs.wisc.edu X86FaultBase(const char * _faultName, const char * _mnem, 7510447Snilay@cs.wisc.edu uint64_t _errorCode = 0) : 7610447Snilay@cs.wisc.edu faultName(_faultName), mnem(_mnem), errorCode(_errorCode) 7710447Snilay@cs.wisc.edu { 7810447Snilay@cs.wisc.edu } 7910447Snilay@cs.wisc.edu 8010447Snilay@cs.wisc.edu const char * name() const 8110447Snilay@cs.wisc.edu { 8210447Snilay@cs.wisc.edu return faultName; 8310447Snilay@cs.wisc.edu } 8410447Snilay@cs.wisc.edu 8510447Snilay@cs.wisc.edu virtual bool isBenign() 8610447Snilay@cs.wisc.edu { 8710447Snilay@cs.wisc.edu return true; 8810447Snilay@cs.wisc.edu } 8910447Snilay@cs.wisc.edu 9010447Snilay@cs.wisc.edu virtual const char * mnemonic() const 9110447Snilay@cs.wisc.edu { 9210447Snilay@cs.wisc.edu return mnem; 9310447Snilay@cs.wisc.edu } 9410447Snilay@cs.wisc.edu }; 9510447Snilay@cs.wisc.edu 9610447Snilay@cs.wisc.edu // Base class for x86 faults which behave as if the underlying instruction 9710447Snilay@cs.wisc.edu // didn't happen. 9810447Snilay@cs.wisc.edu class X86Fault : public X86FaultBase 9910447Snilay@cs.wisc.edu { 10010447Snilay@cs.wisc.edu protected: 10110447Snilay@cs.wisc.edu X86Fault(const char * name, const char * mnem, 10210447Snilay@cs.wisc.edu uint64_t _errorCode = 0) : 10310447Snilay@cs.wisc.edu X86FaultBase(name, mnem, _errorCode) 10410447Snilay@cs.wisc.edu {} 10510447Snilay@cs.wisc.edu }; 10610447Snilay@cs.wisc.edu 10710447Snilay@cs.wisc.edu // Base class for x86 traps which behave as if the underlying instruction 10810447Snilay@cs.wisc.edu // completed. 10910447Snilay@cs.wisc.edu class X86Trap : public X86FaultBase 11010447Snilay@cs.wisc.edu { 11110447Snilay@cs.wisc.edu protected: 11210447Snilay@cs.wisc.edu X86Trap(const char * name, const char * mnem, 11310447Snilay@cs.wisc.edu uint64_t _errorCode = 0) : 11410447Snilay@cs.wisc.edu X86FaultBase(name, mnem, _errorCode) 11510447Snilay@cs.wisc.edu {} 11610447Snilay@cs.wisc.edu 11710447Snilay@cs.wisc.edu#if FULL_SYSTEM 11810447Snilay@cs.wisc.edu void invoke(ThreadContext * tc); 11910447Snilay@cs.wisc.edu#endif 12010447Snilay@cs.wisc.edu }; 12110447Snilay@cs.wisc.edu 12210447Snilay@cs.wisc.edu // Base class for x86 aborts which seem to be catastrophic failures. 12310447Snilay@cs.wisc.edu class X86Abort : public X86FaultBase 12410447Snilay@cs.wisc.edu { 12510447Snilay@cs.wisc.edu protected: 12610447Snilay@cs.wisc.edu X86Abort(const char * name, const char * mnem, 12710447Snilay@cs.wisc.edu uint64_t _errorCode = 0) : 12810447Snilay@cs.wisc.edu X86FaultBase(name, mnem, _errorCode) 12910447Snilay@cs.wisc.edu {} 13010447Snilay@cs.wisc.edu 13110447Snilay@cs.wisc.edu#if FULL_SYSTEM 13210447Snilay@cs.wisc.edu void invoke(ThreadContext * tc); 13310447Snilay@cs.wisc.edu#endif 13410447Snilay@cs.wisc.edu }; 13510447Snilay@cs.wisc.edu 13610447Snilay@cs.wisc.edu // Base class for x86 interrupts. 13710447Snilay@cs.wisc.edu class X86Interrupt : public X86FaultBase 13810447Snilay@cs.wisc.edu { 13910447Snilay@cs.wisc.edu protected: 14010447Snilay@cs.wisc.edu X86Interrupt(const char * name, const char * mnem, 14110447Snilay@cs.wisc.edu uint64_t _errorCode = 0) : 14210447Snilay@cs.wisc.edu X86FaultBase(name, mnem, _errorCode) 14310447Snilay@cs.wisc.edu {} 14410447Snilay@cs.wisc.edu 14510447Snilay@cs.wisc.edu#if FULL_SYSTEM 14610447Snilay@cs.wisc.edu void invoke(ThreadContext * tc); 14710447Snilay@cs.wisc.edu#endif 14810447Snilay@cs.wisc.edu }; 14910447Snilay@cs.wisc.edu 15010447Snilay@cs.wisc.edu class UnimpInstFault : public FaultBase 15110447Snilay@cs.wisc.edu { 15210447Snilay@cs.wisc.edu public: 15310447Snilay@cs.wisc.edu const char * name() const 15410447Snilay@cs.wisc.edu { 15510447Snilay@cs.wisc.edu return "unimplemented_micro"; 15610447Snilay@cs.wisc.edu } 15710447Snilay@cs.wisc.edu 15810447Snilay@cs.wisc.edu void invoke(ThreadContext * tc) 15910447Snilay@cs.wisc.edu { 16010447Snilay@cs.wisc.edu panic("Unimplemented instruction!"); 16110447Snilay@cs.wisc.edu } 16210447Snilay@cs.wisc.edu }; 16310447Snilay@cs.wisc.edu 16410447Snilay@cs.wisc.edu static inline Fault genMachineCheckFault() 16510447Snilay@cs.wisc.edu { 16610447Snilay@cs.wisc.edu panic("Machine check fault not implemented in x86!\n"); 16710447Snilay@cs.wisc.edu } 16810447Snilay@cs.wisc.edu 16910447Snilay@cs.wisc.edu // Below is a summary of the interrupt/exception information in the 17010447Snilay@cs.wisc.edu // architecture manuals. 17110447Snilay@cs.wisc.edu 17210447Snilay@cs.wisc.edu // Class | Type | vector | Cause | mnem 17310447Snilay@cs.wisc.edu //------------------------------------------------------------------------ 17410447Snilay@cs.wisc.edu //Contrib Fault 0 Divide-by-Zero-Error #DE 17510447Snilay@cs.wisc.edu //Benign Either 1 Debug #DB 17610447Snilay@cs.wisc.edu //Benign Interrupt 2 Non-Maskable-Interrupt #NMI 17710447Snilay@cs.wisc.edu //Benign Trap 3 Breakpoint #BP 17810447Snilay@cs.wisc.edu //Benign Trap 4 Overflow #OF 17910447Snilay@cs.wisc.edu //Benign Fault 5 Bound-Range #BR 18010447Snilay@cs.wisc.edu //Benign Fault 6 Invalid-Opcode #UD 18110447Snilay@cs.wisc.edu //Benign Fault 7 Device-Not-Available #NM 18210447Snilay@cs.wisc.edu //Benign Abort 8 Double-Fault #DF 18310447Snilay@cs.wisc.edu // 9 Coprocessor-Segment-Overrun 18410447Snilay@cs.wisc.edu //Contrib Fault 10 Invalid-TSS #TS 18510447Snilay@cs.wisc.edu //Contrib Fault 11 Segment-Not-Present #NP 18610447Snilay@cs.wisc.edu //Contrib Fault 12 Stack #SS 18710447Snilay@cs.wisc.edu //Contrib Fault 13 General-Protection #GP 18810447Snilay@cs.wisc.edu //Either Fault 14 Page-Fault #PF 18910447Snilay@cs.wisc.edu // 15 Reserved 19010447Snilay@cs.wisc.edu //Benign Fault 16 x87 Floating-Point Exception Pending #MF 19110447Snilay@cs.wisc.edu //Benign Fault 17 Alignment-Check #AC 19210447Snilay@cs.wisc.edu //Benign Abort 18 Machine-Check #MC 19310447Snilay@cs.wisc.edu //Benign Fault 19 SIMD Floating-Point #XF 19410447Snilay@cs.wisc.edu // 20-29 Reserved 19510447Snilay@cs.wisc.edu //Contrib ? 30 Security Exception #SX 19610447Snilay@cs.wisc.edu // 31 Reserved 19710447Snilay@cs.wisc.edu //Benign Interrupt 0-255 External Interrupts #INTR 19810447Snilay@cs.wisc.edu //Benign Interrupt 0-255 Software Interrupts INTn 19910447Snilay@cs.wisc.edu 20010447Snilay@cs.wisc.edu class DivideByZero : public X86Fault 20110447Snilay@cs.wisc.edu { 20210447Snilay@cs.wisc.edu public: 20310447Snilay@cs.wisc.edu DivideByZero() : 20410447Snilay@cs.wisc.edu X86Fault("Divide-by-Zero-Error", "#DE") 20510447Snilay@cs.wisc.edu {} 20610447Snilay@cs.wisc.edu }; 20710447Snilay@cs.wisc.edu 20810447Snilay@cs.wisc.edu class DebugException : public X86FaultBase 20910447Snilay@cs.wisc.edu { 21010447Snilay@cs.wisc.edu public: 21110447Snilay@cs.wisc.edu DebugException() : 21210447Snilay@cs.wisc.edu X86FaultBase("Debug", "#DB") 21310447Snilay@cs.wisc.edu {} 21410447Snilay@cs.wisc.edu }; 21510447Snilay@cs.wisc.edu 21610447Snilay@cs.wisc.edu class NonMaskableInterrupt : public X86Interrupt 21710447Snilay@cs.wisc.edu { 21810447Snilay@cs.wisc.edu public: 21910447Snilay@cs.wisc.edu NonMaskableInterrupt() : 22010447Snilay@cs.wisc.edu X86Interrupt("Non-Maskable-Interrupt", "#NMI") 22110447Snilay@cs.wisc.edu {} 22210447Snilay@cs.wisc.edu }; 22310447Snilay@cs.wisc.edu 22410447Snilay@cs.wisc.edu class Breakpoint : public X86Trap 22510447Snilay@cs.wisc.edu { 22610447Snilay@cs.wisc.edu public: 22710447Snilay@cs.wisc.edu Breakpoint() : 22810447Snilay@cs.wisc.edu X86Trap("Breakpoint", "#BP") 22910447Snilay@cs.wisc.edu {} 23010447Snilay@cs.wisc.edu }; 23110447Snilay@cs.wisc.edu 23210447Snilay@cs.wisc.edu class OverflowTrap : public X86Trap 23310447Snilay@cs.wisc.edu { 23410447Snilay@cs.wisc.edu public: 23510447Snilay@cs.wisc.edu OverflowTrap() : 23610447Snilay@cs.wisc.edu X86Trap("Overflow", "#OF") 23710447Snilay@cs.wisc.edu {} 23810447Snilay@cs.wisc.edu }; 23910447Snilay@cs.wisc.edu 24010447Snilay@cs.wisc.edu class BoundRange : public X86Fault 24110447Snilay@cs.wisc.edu { 24210447Snilay@cs.wisc.edu public: 24310447Snilay@cs.wisc.edu BoundRange() : 24410447Snilay@cs.wisc.edu X86Fault("Bound-Range", "#BR") 24510447Snilay@cs.wisc.edu {} 24610447Snilay@cs.wisc.edu }; 24710447Snilay@cs.wisc.edu 24810447Snilay@cs.wisc.edu class InvalidOpcode : public X86Fault 24910447Snilay@cs.wisc.edu { 25010447Snilay@cs.wisc.edu public: 25110447Snilay@cs.wisc.edu InvalidOpcode() : 25210447Snilay@cs.wisc.edu X86Fault("Invalid-Opcode", "#UD") 25310447Snilay@cs.wisc.edu {} 25410447Snilay@cs.wisc.edu }; 25510447Snilay@cs.wisc.edu 25610447Snilay@cs.wisc.edu class DeviceNotAvailable : public X86Fault 25710447Snilay@cs.wisc.edu { 25810447Snilay@cs.wisc.edu public: 25910447Snilay@cs.wisc.edu DeviceNotAvailable() : 26010447Snilay@cs.wisc.edu X86Fault("Device-Not-Available", "#NM") 26110447Snilay@cs.wisc.edu {} 26210447Snilay@cs.wisc.edu }; 26310447Snilay@cs.wisc.edu 26410447Snilay@cs.wisc.edu class DoubleFault : public X86Abort 26510447Snilay@cs.wisc.edu { 26610447Snilay@cs.wisc.edu public: 26710447Snilay@cs.wisc.edu DoubleFault() : 26810447Snilay@cs.wisc.edu X86Abort("Double-Fault", "#DF") 26910447Snilay@cs.wisc.edu {} 27010447Snilay@cs.wisc.edu }; 27110447Snilay@cs.wisc.edu 27210447Snilay@cs.wisc.edu class InvalidTSS : public X86Fault 27310447Snilay@cs.wisc.edu { 27410447Snilay@cs.wisc.edu public: 27510447Snilay@cs.wisc.edu InvalidTSS() : 27610447Snilay@cs.wisc.edu X86Fault("Invalid-TSS", "#TS") 27710447Snilay@cs.wisc.edu {} 27810447Snilay@cs.wisc.edu }; 27910447Snilay@cs.wisc.edu 28010447Snilay@cs.wisc.edu class SegmentNotPresent : public X86Fault 28110447Snilay@cs.wisc.edu { 28210447Snilay@cs.wisc.edu public: 28310447Snilay@cs.wisc.edu SegmentNotPresent() : 28410447Snilay@cs.wisc.edu X86Fault("Segment-Not-Present", "#NP") 28510447Snilay@cs.wisc.edu {} 28610447Snilay@cs.wisc.edu }; 28710447Snilay@cs.wisc.edu 28810447Snilay@cs.wisc.edu class StackFault : public X86Fault 28910447Snilay@cs.wisc.edu { 29010447Snilay@cs.wisc.edu public: 29110447Snilay@cs.wisc.edu StackFault() : 29210447Snilay@cs.wisc.edu X86Fault("Stack", "#SS") 29310447Snilay@cs.wisc.edu {} 29410447Snilay@cs.wisc.edu }; 29510447Snilay@cs.wisc.edu 29610447Snilay@cs.wisc.edu class GeneralProtection : public X86Fault 29710447Snilay@cs.wisc.edu { 29810447Snilay@cs.wisc.edu public: 29910447Snilay@cs.wisc.edu GeneralProtection(uint64_t _errorCode) : 30010447Snilay@cs.wisc.edu X86Fault("General-Protection", "#GP", _errorCode) 30110447Snilay@cs.wisc.edu {} 30210447Snilay@cs.wisc.edu }; 30310447Snilay@cs.wisc.edu 30410447Snilay@cs.wisc.edu class PageFault : public X86Fault 30510447Snilay@cs.wisc.edu { 30610447Snilay@cs.wisc.edu public: 30710447Snilay@cs.wisc.edu PageFault() : 30810447Snilay@cs.wisc.edu X86Fault("Page-Fault", "#PF") 30910447Snilay@cs.wisc.edu {} 31010447Snilay@cs.wisc.edu }; 31110447Snilay@cs.wisc.edu 31210447Snilay@cs.wisc.edu class X87FpExceptionPending : public X86Fault 31310447Snilay@cs.wisc.edu { 31410447Snilay@cs.wisc.edu public: 31510447Snilay@cs.wisc.edu X87FpExceptionPending() : 31610447Snilay@cs.wisc.edu X86Fault("x87 Floating-Point Exception Pending", "#MF") 31710447Snilay@cs.wisc.edu {} 31810447Snilay@cs.wisc.edu }; 31910447Snilay@cs.wisc.edu 32010447Snilay@cs.wisc.edu class AlignmentCheck : public X86Fault 32110447Snilay@cs.wisc.edu { 32210447Snilay@cs.wisc.edu public: 32310447Snilay@cs.wisc.edu AlignmentCheck() : 32410447Snilay@cs.wisc.edu X86Fault("Alignment-Check", "#AC") 32510447Snilay@cs.wisc.edu {} 32610447Snilay@cs.wisc.edu }; 32710447Snilay@cs.wisc.edu 32810447Snilay@cs.wisc.edu class MachineCheck : public X86Abort 32910447Snilay@cs.wisc.edu { 33010447Snilay@cs.wisc.edu public: 33110447Snilay@cs.wisc.edu MachineCheck() : 33210447Snilay@cs.wisc.edu X86Abort("Machine-Check", "#MC") 33310447Snilay@cs.wisc.edu {} 33410447Snilay@cs.wisc.edu }; 33510447Snilay@cs.wisc.edu 33610447Snilay@cs.wisc.edu class SIMDFloatingPointFault : public X86Fault 33710447Snilay@cs.wisc.edu { 33810447Snilay@cs.wisc.edu public: 33910447Snilay@cs.wisc.edu SIMDFloatingPointFault() : 34010447Snilay@cs.wisc.edu X86Fault("SIMD Floating-Point", "#XF") 34110447Snilay@cs.wisc.edu {} 34210447Snilay@cs.wisc.edu }; 34310447Snilay@cs.wisc.edu 34410447Snilay@cs.wisc.edu class SecurityException : public X86FaultBase 34510447Snilay@cs.wisc.edu { 34610447Snilay@cs.wisc.edu public: 34710447Snilay@cs.wisc.edu SecurityException() : 34810447Snilay@cs.wisc.edu X86FaultBase("Security Exception", "#SX") 34910447Snilay@cs.wisc.edu {} 35010447Snilay@cs.wisc.edu }; 35110447Snilay@cs.wisc.edu 35210447Snilay@cs.wisc.edu class ExternalInterrupt : public X86Interrupt 35310447Snilay@cs.wisc.edu { 35410447Snilay@cs.wisc.edu public: 35510447Snilay@cs.wisc.edu ExternalInterrupt() : 35610447Snilay@cs.wisc.edu X86Interrupt("External Interrupt", "#INTR") 35710447Snilay@cs.wisc.edu {} 35810447Snilay@cs.wisc.edu }; 35910447Snilay@cs.wisc.edu 36010447Snilay@cs.wisc.edu class SoftwareInterrupt : public X86Interrupt 36110447Snilay@cs.wisc.edu { 36210447Snilay@cs.wisc.edu public: 36310447Snilay@cs.wisc.edu SoftwareInterrupt() : 36410447Snilay@cs.wisc.edu X86Interrupt("Software Interrupt", "INTn") 36510447Snilay@cs.wisc.edu {} 36610447Snilay@cs.wisc.edu }; 36710447Snilay@cs.wisc.edu 36810447Snilay@cs.wisc.edu // These faults aren't part of the ISA definition. They trigger filling 36910447Snilay@cs.wisc.edu // the tlb on a miss and are to take the place of a hardware table walker. 37010447Snilay@cs.wisc.edu class FakeITLBFault : public X86Fault 37110447Snilay@cs.wisc.edu { 37210447Snilay@cs.wisc.edu protected: 37310447Snilay@cs.wisc.edu Addr vaddr; 37410447Snilay@cs.wisc.edu public: 37510447Snilay@cs.wisc.edu FakeITLBFault(Addr _vaddr) : 37610447Snilay@cs.wisc.edu X86Fault("fake instruction tlb fault", "itlb"), 37710447Snilay@cs.wisc.edu vaddr(_vaddr) 37810447Snilay@cs.wisc.edu {} 37910447Snilay@cs.wisc.edu 38010447Snilay@cs.wisc.edu void invoke(ThreadContext * tc); 38110447Snilay@cs.wisc.edu }; 38210447Snilay@cs.wisc.edu 38310447Snilay@cs.wisc.edu class FakeDTLBFault : public X86Fault 38410447Snilay@cs.wisc.edu { 38510447Snilay@cs.wisc.edu protected: 38610447Snilay@cs.wisc.edu Addr vaddr; 38710447Snilay@cs.wisc.edu public: 38810447Snilay@cs.wisc.edu FakeDTLBFault(Addr _vaddr) : 38910447Snilay@cs.wisc.edu X86Fault("fake data tlb fault", "dtlb"), 39010447Snilay@cs.wisc.edu vaddr(_vaddr) 39110447Snilay@cs.wisc.edu {} 39210447Snilay@cs.wisc.edu 39310447Snilay@cs.wisc.edu void invoke(ThreadContext * tc); 39410447Snilay@cs.wisc.edu }; 39510447Snilay@cs.wisc.edu}; 39610447Snilay@cs.wisc.edu 39710447Snilay@cs.wisc.edu#endif // __ARCH_X86_FAULTS_HH__ 39810447Snilay@cs.wisc.edu