faults.hh revision 6023
111308Santhony.gutierrez@amd.com/* 211308Santhony.gutierrez@amd.com * Copyright (c) 2007 The Hewlett-Packard Development Company 311308Santhony.gutierrez@amd.com * All rights reserved. 411308Santhony.gutierrez@amd.com * 511308Santhony.gutierrez@amd.com * Redistribution and use of this software in source and binary forms, 611308Santhony.gutierrez@amd.com * with or without modification, are permitted provided that the 711308Santhony.gutierrez@amd.com * following conditions are met: 811308Santhony.gutierrez@amd.com * 911308Santhony.gutierrez@amd.com * The software must be used only for Non-Commercial Use which means any 1011308Santhony.gutierrez@amd.com * use which is NOT directed to receiving any direct monetary 1111308Santhony.gutierrez@amd.com * compensation for, or commercial advantage from such use. Illustrative 1211308Santhony.gutierrez@amd.com * examples of non-commercial use are academic research, personal study, 1311308Santhony.gutierrez@amd.com * teaching, education and corporate research & development. 1411308Santhony.gutierrez@amd.com * Illustrative examples of commercial use are distributing products for 1511308Santhony.gutierrez@amd.com * commercial advantage and providing services using the software for 1611308Santhony.gutierrez@amd.com * commercial advantage. 1711308Santhony.gutierrez@amd.com * 1811308Santhony.gutierrez@amd.com * If you wish to use this software or functionality therein that may be 1911308Santhony.gutierrez@amd.com * covered by patents for commercial use, please contact: 2011308Santhony.gutierrez@amd.com * Director of Intellectual Property Licensing 2111308Santhony.gutierrez@amd.com * Office of Strategy and Technology 2211308Santhony.gutierrez@amd.com * Hewlett-Packard Company 2311308Santhony.gutierrez@amd.com * 1501 Page Mill Road 2411308Santhony.gutierrez@amd.com * Palo Alto, California 94304 2511308Santhony.gutierrez@amd.com * 2611308Santhony.gutierrez@amd.com * Redistributions of source code must retain the above copyright notice, 2711308Santhony.gutierrez@amd.com * this list of conditions and the following disclaimer. Redistributions 2811308Santhony.gutierrez@amd.com * in binary form must reproduce the above copyright notice, this list of 2911308Santhony.gutierrez@amd.com * conditions and the following disclaimer in the documentation and/or 3011308Santhony.gutierrez@amd.com * other materials provided with the distribution. Neither the name of 3111308Santhony.gutierrez@amd.com * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its 3211308Santhony.gutierrez@amd.com * contributors may be used to endorse or promote products derived from 3311308Santhony.gutierrez@amd.com * this software without specific prior written permission. No right of 3411308Santhony.gutierrez@amd.com * sublicense is granted herewith. Derivatives of the software and 3511308Santhony.gutierrez@amd.com * output created using the software may be prepared, but only for 3611308Santhony.gutierrez@amd.com * Non-Commercial Uses. Derivatives of the software may be shared with 3711308Santhony.gutierrez@amd.com * others provided: (i) the others agree to abide by the list of 3811308Santhony.gutierrez@amd.com * conditions herein which includes the Non-Commercial Use restrictions; 3911308Santhony.gutierrez@amd.com * and (ii) such Derivatives of the software include the above copyright 4011308Santhony.gutierrez@amd.com * notice to acknowledge the contribution from this software where 4111308Santhony.gutierrez@amd.com * applicable, this list of conditions and the disclaimer below. 4211308Santhony.gutierrez@amd.com * 4311308Santhony.gutierrez@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 4411308Santhony.gutierrez@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 4511308Santhony.gutierrez@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 4611308Santhony.gutierrez@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 4711308Santhony.gutierrez@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 4811308Santhony.gutierrez@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 4911308Santhony.gutierrez@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 5011308Santhony.gutierrez@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 5111308Santhony.gutierrez@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 5211308Santhony.gutierrez@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 5311308Santhony.gutierrez@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 5411308Santhony.gutierrez@amd.com * 5511308Santhony.gutierrez@amd.com * Authors: Gabe Black 5611308Santhony.gutierrez@amd.com */ 5711308Santhony.gutierrez@amd.com 5811308Santhony.gutierrez@amd.com#ifndef __ARCH_X86_FAULTS_HH__ 5911308Santhony.gutierrez@amd.com#define __ARCH_X86_FAULTS_HH__ 6011308Santhony.gutierrez@amd.com 6111308Santhony.gutierrez@amd.com#include "base/bitunion.hh" 6211308Santhony.gutierrez@amd.com#include "base/misc.hh" 6311308Santhony.gutierrez@amd.com#include "sim/faults.hh" 6411308Santhony.gutierrez@amd.com#include "sim/tlb.hh" 6511308Santhony.gutierrez@amd.com 6611308Santhony.gutierrez@amd.com#include <string> 6711308Santhony.gutierrez@amd.com 6811308Santhony.gutierrez@amd.comnamespace X86ISA 6911308Santhony.gutierrez@amd.com{ 7011308Santhony.gutierrez@amd.com // Base class for all x86 "faults" where faults is in the m5 sense 7111308Santhony.gutierrez@amd.com class X86FaultBase : public FaultBase 7211308Santhony.gutierrez@amd.com { 7311308Santhony.gutierrez@amd.com protected: 7411308Santhony.gutierrez@amd.com const char * faultName; 7511308Santhony.gutierrez@amd.com const char * mnem; 7611308Santhony.gutierrez@amd.com uint8_t vector; 7711308Santhony.gutierrez@amd.com uint64_t errorCode; 7811308Santhony.gutierrez@amd.com 7911308Santhony.gutierrez@amd.com X86FaultBase(const char * _faultName, const char * _mnem, 8011308Santhony.gutierrez@amd.com const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1) 8111308Santhony.gutierrez@amd.com : faultName(_faultName), mnem(_mnem), 8211308Santhony.gutierrez@amd.com vector(_vector), errorCode(_errorCode) 8311308Santhony.gutierrez@amd.com { 8411308Santhony.gutierrez@amd.com } 8511308Santhony.gutierrez@amd.com 8611308Santhony.gutierrez@amd.com const char * name() const 8711308Santhony.gutierrez@amd.com { 8811308Santhony.gutierrez@amd.com return faultName; 8911308Santhony.gutierrez@amd.com } 9011308Santhony.gutierrez@amd.com 9111308Santhony.gutierrez@amd.com virtual bool isBenign() 9211308Santhony.gutierrez@amd.com { 9311308Santhony.gutierrez@amd.com return true; 9411308Santhony.gutierrez@amd.com } 9511308Santhony.gutierrez@amd.com 9611308Santhony.gutierrez@amd.com virtual const char * mnemonic() const 9711308Santhony.gutierrez@amd.com { 9811308Santhony.gutierrez@amd.com return mnem; 9911308Santhony.gutierrez@amd.com } 10011308Santhony.gutierrez@amd.com 10111308Santhony.gutierrez@amd.com virtual bool isSoft() 10211308Santhony.gutierrez@amd.com { 10311308Santhony.gutierrez@amd.com return false; 10411308Santhony.gutierrez@amd.com } 10511308Santhony.gutierrez@amd.com 10611308Santhony.gutierrez@amd.com#if FULL_SYSTEM 10711308Santhony.gutierrez@amd.com void invoke(ThreadContext * tc); 10811308Santhony.gutierrez@amd.com 10911308Santhony.gutierrez@amd.com virtual std::string describe() const; 11011308Santhony.gutierrez@amd.com#endif 11111308Santhony.gutierrez@amd.com }; 11211308Santhony.gutierrez@amd.com 11311308Santhony.gutierrez@amd.com // Base class for x86 faults which behave as if the underlying instruction 11411308Santhony.gutierrez@amd.com // didn't happen. 11511308Santhony.gutierrez@amd.com class X86Fault : public X86FaultBase 11611308Santhony.gutierrez@amd.com { 11711308Santhony.gutierrez@amd.com protected: 11811308Santhony.gutierrez@amd.com X86Fault(const char * name, const char * mnem, 11911308Santhony.gutierrez@amd.com const uint8_t vector, uint64_t _errorCode = (uint64_t)-1) 12011308Santhony.gutierrez@amd.com : X86FaultBase(name, mnem, vector, _errorCode) 12111308Santhony.gutierrez@amd.com {} 12211308Santhony.gutierrez@amd.com }; 12311308Santhony.gutierrez@amd.com 12411308Santhony.gutierrez@amd.com // Base class for x86 traps which behave as if the underlying instruction 12511308Santhony.gutierrez@amd.com // completed. 12611308Santhony.gutierrez@amd.com class X86Trap : public X86FaultBase 12711308Santhony.gutierrez@amd.com { 12811308Santhony.gutierrez@amd.com protected: 12911308Santhony.gutierrez@amd.com X86Trap(const char * name, const char * mnem, 13011308Santhony.gutierrez@amd.com const uint8_t vector, uint64_t _errorCode = (uint64_t)-1) 13111308Santhony.gutierrez@amd.com : X86FaultBase(name, mnem, vector, _errorCode) 13211308Santhony.gutierrez@amd.com {} 13311308Santhony.gutierrez@amd.com 13411308Santhony.gutierrez@amd.com#if FULL_SYSTEM 13511308Santhony.gutierrez@amd.com void invoke(ThreadContext * tc); 13611308Santhony.gutierrez@amd.com#endif 13711308Santhony.gutierrez@amd.com }; 13811308Santhony.gutierrez@amd.com 13911308Santhony.gutierrez@amd.com // Base class for x86 aborts which seem to be catastrophic failures. 14011308Santhony.gutierrez@amd.com class X86Abort : public X86FaultBase 14111308Santhony.gutierrez@amd.com { 14211308Santhony.gutierrez@amd.com protected: 14311308Santhony.gutierrez@amd.com X86Abort(const char * name, const char * mnem, 14411308Santhony.gutierrez@amd.com const uint8_t vector, uint64_t _errorCode = (uint64_t)-1) 14511308Santhony.gutierrez@amd.com : X86FaultBase(name, mnem, vector, _errorCode) 14611308Santhony.gutierrez@amd.com {} 14711308Santhony.gutierrez@amd.com 14811308Santhony.gutierrez@amd.com#if FULL_SYSTEM 14911308Santhony.gutierrez@amd.com void invoke(ThreadContext * tc); 15011308Santhony.gutierrez@amd.com#endif 15111308Santhony.gutierrez@amd.com }; 15211308Santhony.gutierrez@amd.com 15311308Santhony.gutierrez@amd.com // Base class for x86 interrupts. 15411308Santhony.gutierrez@amd.com class X86Interrupt : public X86FaultBase 15511308Santhony.gutierrez@amd.com { 15611308Santhony.gutierrez@amd.com protected: 15711308Santhony.gutierrez@amd.com X86Interrupt(const char * name, const char * mnem, 15811308Santhony.gutierrez@amd.com const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1) 15911308Santhony.gutierrez@amd.com : X86FaultBase(name, mnem, _vector, _errorCode) 16011308Santhony.gutierrez@amd.com {} 16111308Santhony.gutierrez@amd.com }; 16211308Santhony.gutierrez@amd.com 16311308Santhony.gutierrez@amd.com class UnimpInstFault : public FaultBase 16411308Santhony.gutierrez@amd.com { 16511308Santhony.gutierrez@amd.com public: 16611308Santhony.gutierrez@amd.com const char * name() const 16711308Santhony.gutierrez@amd.com { 16811308Santhony.gutierrez@amd.com return "unimplemented_micro"; 16911308Santhony.gutierrez@amd.com } 17011308Santhony.gutierrez@amd.com 17111308Santhony.gutierrez@amd.com void invoke(ThreadContext * tc) 17211308Santhony.gutierrez@amd.com { 17311308Santhony.gutierrez@amd.com panic("Unimplemented instruction!"); 17411308Santhony.gutierrez@amd.com } 17511308Santhony.gutierrez@amd.com }; 17611308Santhony.gutierrez@amd.com 17711308Santhony.gutierrez@amd.com static inline Fault genMachineCheckFault() 17811308Santhony.gutierrez@amd.com { 17911308Santhony.gutierrez@amd.com panic("Machine check fault not implemented in x86!\n"); 18011308Santhony.gutierrez@amd.com } 18111308Santhony.gutierrez@amd.com 18211308Santhony.gutierrez@amd.com // Below is a summary of the interrupt/exception information in the 18311308Santhony.gutierrez@amd.com // architecture manuals. 18411308Santhony.gutierrez@amd.com 18511308Santhony.gutierrez@amd.com // Class | Type | vector | Cause | mnem 18611308Santhony.gutierrez@amd.com //------------------------------------------------------------------------ 18711308Santhony.gutierrez@amd.com //Contrib Fault 0 Divide-by-Zero-Error #DE 18811308Santhony.gutierrez@amd.com //Benign Either 1 Debug #DB 18911308Santhony.gutierrez@amd.com //Benign Interrupt 2 Non-Maskable-Interrupt #NMI 19011308Santhony.gutierrez@amd.com //Benign Trap 3 Breakpoint #BP 19111308Santhony.gutierrez@amd.com //Benign Trap 4 Overflow #OF 19211308Santhony.gutierrez@amd.com //Benign Fault 5 Bound-Range #BR 19311308Santhony.gutierrez@amd.com //Benign Fault 6 Invalid-Opcode #UD 19411308Santhony.gutierrez@amd.com //Benign Fault 7 Device-Not-Available #NM 19511308Santhony.gutierrez@amd.com //Benign Abort 8 Double-Fault #DF 19611308Santhony.gutierrez@amd.com // 9 Coprocessor-Segment-Overrun 19711308Santhony.gutierrez@amd.com //Contrib Fault 10 Invalid-TSS #TS 19811308Santhony.gutierrez@amd.com //Contrib Fault 11 Segment-Not-Present #NP 19911308Santhony.gutierrez@amd.com //Contrib Fault 12 Stack #SS 20011308Santhony.gutierrez@amd.com //Contrib Fault 13 General-Protection #GP 20111308Santhony.gutierrez@amd.com //Either Fault 14 Page-Fault #PF 20211308Santhony.gutierrez@amd.com // 15 Reserved 20311308Santhony.gutierrez@amd.com //Benign Fault 16 x87 Floating-Point Exception Pending #MF 20411308Santhony.gutierrez@amd.com //Benign Fault 17 Alignment-Check #AC 20511308Santhony.gutierrez@amd.com //Benign Abort 18 Machine-Check #MC 20611308Santhony.gutierrez@amd.com //Benign Fault 19 SIMD Floating-Point #XF 20711308Santhony.gutierrez@amd.com // 20-29 Reserved 20811308Santhony.gutierrez@amd.com //Contrib ? 30 Security Exception #SX 20911308Santhony.gutierrez@amd.com // 31 Reserved 21011308Santhony.gutierrez@amd.com //Benign Interrupt 0-255 External Interrupts #INTR 21111308Santhony.gutierrez@amd.com //Benign Interrupt 0-255 Software Interrupts INTn 21211308Santhony.gutierrez@amd.com 21311308Santhony.gutierrez@amd.com class DivideByZero : public X86Fault 21411308Santhony.gutierrez@amd.com { 21511308Santhony.gutierrez@amd.com public: 21611308Santhony.gutierrez@amd.com DivideByZero() : 21711308Santhony.gutierrez@amd.com X86Fault("Divide-by-Zero-Error", "#DE", 0) 21811308Santhony.gutierrez@amd.com {} 21911308Santhony.gutierrez@amd.com }; 22011308Santhony.gutierrez@amd.com 22111308Santhony.gutierrez@amd.com class DebugException : public X86FaultBase 22211308Santhony.gutierrez@amd.com { 22311308Santhony.gutierrez@amd.com public: 22411308Santhony.gutierrez@amd.com DebugException() : 22511308Santhony.gutierrez@amd.com X86FaultBase("Debug", "#DB", 1) 22611308Santhony.gutierrez@amd.com {} 22711308Santhony.gutierrez@amd.com }; 22811308Santhony.gutierrez@amd.com 22911308Santhony.gutierrez@amd.com class NonMaskableInterrupt : public X86Interrupt 23011308Santhony.gutierrez@amd.com { 23111308Santhony.gutierrez@amd.com public: 23211308Santhony.gutierrez@amd.com NonMaskableInterrupt(uint8_t _vector) : 23311308Santhony.gutierrez@amd.com X86Interrupt("Non Maskable Interrupt", "#NMI", 2, _vector) 23411308Santhony.gutierrez@amd.com {} 23511308Santhony.gutierrez@amd.com }; 23611308Santhony.gutierrez@amd.com 23711308Santhony.gutierrez@amd.com class Breakpoint : public X86Trap 23811308Santhony.gutierrez@amd.com { 23911308Santhony.gutierrez@amd.com public: 24011308Santhony.gutierrez@amd.com Breakpoint() : 24111308Santhony.gutierrez@amd.com X86Trap("Breakpoint", "#BP", 3) 24211308Santhony.gutierrez@amd.com {} 24311308Santhony.gutierrez@amd.com }; 24411308Santhony.gutierrez@amd.com 24511308Santhony.gutierrez@amd.com class OverflowTrap : public X86Trap 24611308Santhony.gutierrez@amd.com { 24711308Santhony.gutierrez@amd.com public: 24811308Santhony.gutierrez@amd.com OverflowTrap() : 24911308Santhony.gutierrez@amd.com X86Trap("Overflow", "#OF", 4) 25011308Santhony.gutierrez@amd.com {} 25111308Santhony.gutierrez@amd.com }; 25211308Santhony.gutierrez@amd.com 25311308Santhony.gutierrez@amd.com class BoundRange : public X86Fault 25411308Santhony.gutierrez@amd.com { 25511308Santhony.gutierrez@amd.com public: 25611308Santhony.gutierrez@amd.com BoundRange() : 25711308Santhony.gutierrez@amd.com X86Fault("Bound-Range", "#BR", 5) 25811308Santhony.gutierrez@amd.com {} 25911308Santhony.gutierrez@amd.com }; 26011308Santhony.gutierrez@amd.com 26111308Santhony.gutierrez@amd.com class InvalidOpcode : public X86Fault 26211308Santhony.gutierrez@amd.com { 26311308Santhony.gutierrez@amd.com public: 26411308Santhony.gutierrez@amd.com InvalidOpcode() : 26511308Santhony.gutierrez@amd.com X86Fault("Invalid-Opcode", "#UD", 6) 26611308Santhony.gutierrez@amd.com {} 26711308Santhony.gutierrez@amd.com }; 26811308Santhony.gutierrez@amd.com 26911308Santhony.gutierrez@amd.com class DeviceNotAvailable : public X86Fault 27011308Santhony.gutierrez@amd.com { 27111308Santhony.gutierrez@amd.com public: 27211308Santhony.gutierrez@amd.com DeviceNotAvailable() : 27311308Santhony.gutierrez@amd.com X86Fault("Device-Not-Available", "#NM", 7) 27411308Santhony.gutierrez@amd.com {} 27511308Santhony.gutierrez@amd.com }; 27611308Santhony.gutierrez@amd.com 27711308Santhony.gutierrez@amd.com class DoubleFault : public X86Abort 27811308Santhony.gutierrez@amd.com { 27911308Santhony.gutierrez@amd.com public: 28011308Santhony.gutierrez@amd.com DoubleFault() : 28111308Santhony.gutierrez@amd.com X86Abort("Double-Fault", "#DF", 8, 0) 28211308Santhony.gutierrez@amd.com {} 28311308Santhony.gutierrez@amd.com }; 28411308Santhony.gutierrez@amd.com 28511308Santhony.gutierrez@amd.com class InvalidTSS : public X86Fault 28611308Santhony.gutierrez@amd.com { 28711308Santhony.gutierrez@amd.com public: 28811308Santhony.gutierrez@amd.com InvalidTSS(uint32_t _errorCode) : 28911308Santhony.gutierrez@amd.com X86Fault("Invalid-TSS", "#TS", 10, _errorCode) 29011308Santhony.gutierrez@amd.com {} 29111308Santhony.gutierrez@amd.com }; 29211308Santhony.gutierrez@amd.com 29311308Santhony.gutierrez@amd.com class SegmentNotPresent : public X86Fault 29411308Santhony.gutierrez@amd.com { 29511308Santhony.gutierrez@amd.com public: 29611308Santhony.gutierrez@amd.com SegmentNotPresent(uint32_t _errorCode) : 29711308Santhony.gutierrez@amd.com X86Fault("Segment-Not-Present", "#NP", 11, _errorCode) 29811308Santhony.gutierrez@amd.com {} 29911308Santhony.gutierrez@amd.com }; 30011308Santhony.gutierrez@amd.com 30111308Santhony.gutierrez@amd.com class StackFault : public X86Fault 30211308Santhony.gutierrez@amd.com { 30311308Santhony.gutierrez@amd.com public: 30411308Santhony.gutierrez@amd.com StackFault(uint32_t _errorCode) : 30511308Santhony.gutierrez@amd.com X86Fault("Stack", "#SS", 12, _errorCode) 30611308Santhony.gutierrez@amd.com {} 30711308Santhony.gutierrez@amd.com }; 30811308Santhony.gutierrez@amd.com 30911308Santhony.gutierrez@amd.com class GeneralProtection : public X86Fault 31011308Santhony.gutierrez@amd.com { 31111308Santhony.gutierrez@amd.com public: 31211308Santhony.gutierrez@amd.com GeneralProtection(uint32_t _errorCode) : 31311308Santhony.gutierrez@amd.com X86Fault("General-Protection", "#GP", 13, _errorCode) 31411308Santhony.gutierrez@amd.com {} 31511308Santhony.gutierrez@amd.com }; 31611308Santhony.gutierrez@amd.com 31711308Santhony.gutierrez@amd.com class PageFault : public X86Fault 31811308Santhony.gutierrez@amd.com { 31911308Santhony.gutierrez@amd.com protected: 32011308Santhony.gutierrez@amd.com BitUnion32(PageFaultErrorCode) 32111308Santhony.gutierrez@amd.com Bitfield<0> present; 32211308Santhony.gutierrez@amd.com Bitfield<1> write; 32311308Santhony.gutierrez@amd.com Bitfield<2> user; 32411308Santhony.gutierrez@amd.com Bitfield<3> reserved; 32511308Santhony.gutierrez@amd.com Bitfield<4> fetch; 32611308Santhony.gutierrez@amd.com EndBitUnion(PageFaultErrorCode) 32711308Santhony.gutierrez@amd.com 32811308Santhony.gutierrez@amd.com Addr addr; 32911308Santhony.gutierrez@amd.com 33011308Santhony.gutierrez@amd.com public: 33111308Santhony.gutierrez@amd.com PageFault(Addr _addr, uint32_t _errorCode) : 33211308Santhony.gutierrez@amd.com X86Fault("Page-Fault", "#PF", 14, _errorCode), addr(_addr) 33311308Santhony.gutierrez@amd.com {} 33411308Santhony.gutierrez@amd.com 33511308Santhony.gutierrez@amd.com PageFault(Addr _addr, bool present, BaseTLB::Mode mode, 33611308Santhony.gutierrez@amd.com bool user, bool reserved) : 33711308Santhony.gutierrez@amd.com X86Fault("Page-Fault", "#PF", 14, 0), addr(_addr) 33811308Santhony.gutierrez@amd.com { 33911308Santhony.gutierrez@amd.com PageFaultErrorCode code = 0; 34011308Santhony.gutierrez@amd.com code.present = present; 34111308Santhony.gutierrez@amd.com code.write = (mode == BaseTLB::Write); 34211308Santhony.gutierrez@amd.com code.user = user; 34311308Santhony.gutierrez@amd.com code.reserved = reserved; 34411308Santhony.gutierrez@amd.com code.fetch = (mode == BaseTLB::Execute); 34511308Santhony.gutierrez@amd.com errorCode = code; 34611308Santhony.gutierrez@amd.com } 34711308Santhony.gutierrez@amd.com 34811308Santhony.gutierrez@amd.com#if FULL_SYSTEM 34911308Santhony.gutierrez@amd.com void invoke(ThreadContext * tc); 35011308Santhony.gutierrez@amd.com 35111308Santhony.gutierrez@amd.com virtual std::string describe() const; 35211308Santhony.gutierrez@amd.com#endif 35311308Santhony.gutierrez@amd.com }; 35411308Santhony.gutierrez@amd.com 35511308Santhony.gutierrez@amd.com class X87FpExceptionPending : public X86Fault 35611308Santhony.gutierrez@amd.com { 35711308Santhony.gutierrez@amd.com public: 35811308Santhony.gutierrez@amd.com X87FpExceptionPending() : 35911308Santhony.gutierrez@amd.com X86Fault("x87 Floating-Point Exception Pending", "#MF", 16) 36011308Santhony.gutierrez@amd.com {} 36111308Santhony.gutierrez@amd.com }; 36211308Santhony.gutierrez@amd.com 36311308Santhony.gutierrez@amd.com class AlignmentCheck : public X86Fault 36411308Santhony.gutierrez@amd.com { 36511308Santhony.gutierrez@amd.com public: 36611308Santhony.gutierrez@amd.com AlignmentCheck() : 36711308Santhony.gutierrez@amd.com X86Fault("Alignment-Check", "#AC", 17, 0) 36811308Santhony.gutierrez@amd.com {} 36911308Santhony.gutierrez@amd.com }; 37011308Santhony.gutierrez@amd.com 37111308Santhony.gutierrez@amd.com class MachineCheck : public X86Abort 37211308Santhony.gutierrez@amd.com { 37311308Santhony.gutierrez@amd.com public: 37411308Santhony.gutierrez@amd.com MachineCheck() : 37511308Santhony.gutierrez@amd.com X86Abort("Machine-Check", "#MC", 18) 37611308Santhony.gutierrez@amd.com {} 37711308Santhony.gutierrez@amd.com }; 37811308Santhony.gutierrez@amd.com 37911308Santhony.gutierrez@amd.com class SIMDFloatingPointFault : public X86Fault 38011308Santhony.gutierrez@amd.com { 38111308Santhony.gutierrez@amd.com public: 38211308Santhony.gutierrez@amd.com SIMDFloatingPointFault() : 38311308Santhony.gutierrez@amd.com X86Fault("SIMD Floating-Point", "#XF", 19) 38411308Santhony.gutierrez@amd.com {} 38511308Santhony.gutierrez@amd.com }; 38611308Santhony.gutierrez@amd.com 38711308Santhony.gutierrez@amd.com class SecurityException : public X86FaultBase 38811308Santhony.gutierrez@amd.com { 38911308Santhony.gutierrez@amd.com public: 39011308Santhony.gutierrez@amd.com SecurityException() : 39111308Santhony.gutierrez@amd.com X86FaultBase("Security Exception", "#SX", 30) 39211308Santhony.gutierrez@amd.com {} 39311308Santhony.gutierrez@amd.com }; 39411308Santhony.gutierrez@amd.com 39511308Santhony.gutierrez@amd.com class ExternalInterrupt : public X86Interrupt 39611308Santhony.gutierrez@amd.com { 39711308Santhony.gutierrez@amd.com public: 39811308Santhony.gutierrez@amd.com ExternalInterrupt(uint8_t _vector) : 39911308Santhony.gutierrez@amd.com X86Interrupt("External Interrupt", "#INTR", _vector) 40011308Santhony.gutierrez@amd.com {} 40111308Santhony.gutierrez@amd.com }; 40211308Santhony.gutierrez@amd.com 40311308Santhony.gutierrez@amd.com class SystemManagementInterrupt : public X86Interrupt 40411308Santhony.gutierrez@amd.com { 40511308Santhony.gutierrez@amd.com public: 40611308Santhony.gutierrez@amd.com SystemManagementInterrupt() : 40711308Santhony.gutierrez@amd.com X86Interrupt("System Management Interrupt", "#SMI", 0) 40811308Santhony.gutierrez@amd.com {} 40911308Santhony.gutierrez@amd.com }; 41011308Santhony.gutierrez@amd.com 41111308Santhony.gutierrez@amd.com class InitInterrupt : public X86Interrupt 41211308Santhony.gutierrez@amd.com { 41311308Santhony.gutierrez@amd.com uint8_t vector; 41411308Santhony.gutierrez@amd.com public: 41511308Santhony.gutierrez@amd.com InitInterrupt(uint8_t _vector) : 41611308Santhony.gutierrez@amd.com X86Interrupt("INIT Interrupt", "#INIT", _vector) 41711308Santhony.gutierrez@amd.com {} 41811308Santhony.gutierrez@amd.com }; 41911308Santhony.gutierrez@amd.com 42011308Santhony.gutierrez@amd.com class SoftwareInterrupt : public X86Interrupt 42111308Santhony.gutierrez@amd.com { 42211308Santhony.gutierrez@amd.com public: 42311308Santhony.gutierrez@amd.com SoftwareInterrupt(uint8_t _vector) : 42411308Santhony.gutierrez@amd.com X86Interrupt("Software Interrupt", "#INTR", _vector) 42511308Santhony.gutierrez@amd.com {} 42611308Santhony.gutierrez@amd.com 42711308Santhony.gutierrez@amd.com bool isSoft() 42811308Santhony.gutierrez@amd.com { 42911308Santhony.gutierrez@amd.com return true; 43011308Santhony.gutierrez@amd.com } 43111308Santhony.gutierrez@amd.com }; 43211308Santhony.gutierrez@amd.com}; 43311308Santhony.gutierrez@amd.com 43411308Santhony.gutierrez@amd.com#endif // __ARCH_X86_FAULTS_HH__ 43511308Santhony.gutierrez@amd.com