40 #ifndef __ARCH_X86_FAULTS_HH__ 41 #define __ARCH_X86_FAULTS_HH__ 62 const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1)
63 : faultName(_faultName), mnem(_mnem),
64 vector(_vector), errorCode(_errorCode)
91 virtual std::string
describe()
const;
108 const uint8_t vector, uint64_t _errorCode = (uint64_t)-1)
119 const uint8_t vector, uint64_t _errorCode = (uint64_t)-1)
132 const uint8_t vector, uint64_t _errorCode = (uint64_t)-1)
145 const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1)
155 return "unimplemented_micro";
161 panic(
"Unimplemented instruction!");
217 X86Interrupt(
"Non Maskable Interrupt",
"#NMI", 2, _vector)
225 X86Trap(
"Breakpoint",
"#BP", 3)
249 X86Fault(
"Invalid-Opcode",
"#UD", 6)
260 X86Fault(
"Device-Not-Available",
"#NM", 7)
268 X86Abort(
"Double-Fault",
"#DF", 8, 0)
276 X86Fault(
"Invalid-TSS",
"#TS", 10, _errorCode)
284 X86Fault(
"Segment-Not-Present",
"#NP", 11, _errorCode)
292 X86Fault(
"Stack",
"#SS", 12, _errorCode)
300 X86Fault(
"General-Protection",
"#GP", 13, _errorCode)
319 X86Fault(
"Page-Fault",
"#PF", 14, _errorCode), addr(_addr)
323 bool user,
bool reserved) :
324 X86Fault(
"Page-Fault",
"#PF", 14, 0), addr(_addr)
326 PageFaultErrorCode code = 0;
330 code.reserved = reserved;
338 virtual std::string
describe()
const;
345 X86Fault(
"x87 Floating-Point Exception Pending",
"#MF", 16)
353 X86Fault(
"Alignment-Check",
"#AC", 17, 0)
361 X86Abort(
"Machine-Check",
"#MC", 18)
369 X86Fault(
"SIMD Floating-Point",
"#XF", 19)
433 #endif // __ARCH_X86_FAULTS_HH__ #define panic(...)
This implements a cprintf based panic() function.
PageFault(Addr _addr, bool present, BaseTLB::Mode mode, bool user, bool reserved)
GeneralProtection(uint32_t _errorCode)
virtual uint8_t getVector() const
Get the vector of an interrupt.
X86Interrupt(const char *name, const char *mnem, const uint8_t _vector, uint64_t _errorCode=(uint64_t) -1)
SystemManagementInterrupt()
X86Fault(const char *name, const char *mnem, const uint8_t vector, uint64_t _errorCode=(uint64_t) -1)
EndBitUnion(TriggerIntMessage) namespace DeliveryMode
InitInterrupt(uint8_t _vector)
X86Abort(const char *name, const char *mnem, const uint8_t vector, uint64_t _errorCode=(uint64_t) -1)
PageFault(Addr _addr, uint32_t _errorCode)
ThreadContext is the external interface to all thread state for anything outside of the CPU...
BitUnion32(TriggerIntMessage) Bitfield< 7
NonMaskableInterrupt(uint8_t _vector)
X86FaultBase(const char *_faultName, const char *_mnem, const uint8_t _vector, uint64_t _errorCode=(uint64_t) -1)
InvalidTSS(uint32_t _errorCode)
const char * name() const
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
virtual std::string describe() const
virtual const char * mnemonic() const
This is exposed globally, independent of the ISA.
X86Trap(const char *name, const char *mnem, const uint8_t vector, uint64_t _errorCode=(uint64_t) -1)
SegmentNotPresent(uint32_t _errorCode)
ExternalInterrupt(uint8_t _vector)
SoftwareInterrupt(uint8_t _vector)
StackFault(uint32_t _errorCode)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
static StaticInstPtr nullStaticInstPtr
Pointer to a statically allocated "null" instruction object.
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
const char * name() const
StartupInterrupt(uint8_t _vector)