38 #ifndef __ARCH_X86_FAULTS_HH__ 39 #define __ARCH_X86_FAULTS_HH__ 60 const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1)
61 : faultName(_faultName), mnem(_mnem),
62 vector(_vector), errorCode(_errorCode)
89 virtual std::string
describe()
const;
106 const uint8_t vector, uint64_t _errorCode = (uint64_t)-1)
117 const uint8_t vector, uint64_t _errorCode = (uint64_t)-1)
130 const uint8_t vector, uint64_t _errorCode = (uint64_t)-1)
143 const uint8_t _vector, uint64_t _errorCode = (uint64_t)-1)
153 return "unimplemented_micro";
159 panic(
"Unimplemented instruction!");
215 X86Interrupt(
"Non Maskable Interrupt",
"#NMI", 2, _vector)
223 X86Trap(
"Breakpoint",
"#BP", 3)
247 X86Fault(
"Invalid-Opcode",
"#UD", 6)
258 X86Fault(
"Device-Not-Available",
"#NM", 7)
266 X86Abort(
"Double-Fault",
"#DF", 8, 0)
274 X86Fault(
"Invalid-TSS",
"#TS", 10, _errorCode)
282 X86Fault(
"Segment-Not-Present",
"#NP", 11, _errorCode)
290 X86Fault(
"Stack",
"#SS", 12, _errorCode)
298 X86Fault(
"General-Protection",
"#GP", 13, _errorCode)
317 X86Fault(
"Page-Fault",
"#PF", 14, _errorCode), addr(_addr)
321 bool user,
bool reserved) :
322 X86Fault(
"Page-Fault",
"#PF", 14, 0), addr(_addr)
324 PageFaultErrorCode code = 0;
328 code.reserved = reserved;
336 virtual std::string
describe()
const;
343 X86Fault(
"x87 Floating-Point Exception Pending",
"#MF", 16)
351 X86Fault(
"Alignment-Check",
"#AC", 17, 0)
359 X86Abort(
"Machine-Check",
"#MC", 18)
367 X86Fault(
"SIMD Floating-Point",
"#XF", 19)
431 #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)