};
#if FULL_SYSTEM
- void invoke(ThreadContext *tc);
+ void invoke(ThreadContext *tc,
+ StaticInstPtr inst = StaticInst::nullStaticInstPtr);
#endif
virtual FaultStat& countStat() = 0;
virtual FaultOffset offset() = 0;
#if FULL_SYSTEM
{
public:
- void invoke(ThreadContext *tc);
+ void invoke(ThreadContext *tc,
+ StaticInstPtr inst = StaticInst::nullStaticInstPtr);
};
#else
{};
ExtMachInst machInst;
bool unknown;
const char *mnemonic;
+ bool disabled;
public:
UndefinedInstruction(ExtMachInst _machInst,
bool _unknown,
- const char *_mnemonic = NULL) :
- machInst(_machInst), unknown(_unknown), mnemonic(_mnemonic)
+ const char *_mnemonic = NULL,
+ bool _disabled = false) :
+ machInst(_machInst), unknown(_unknown),
+ mnemonic(_mnemonic), disabled(_disabled)
{
}
- void invoke(ThreadContext *tc);
+ void invoke(ThreadContext *tc,
+ StaticInstPtr inst = StaticInst::nullStaticInstPtr);
#endif
};
SupervisorCall(ExtMachInst _machInst) : machInst(_machInst)
{}
- void invoke(ThreadContext *tc);
+ void invoke(ThreadContext *tc,
+ StaticInstPtr inst = StaticInst::nullStaticInstPtr);
#endif
};
domain(_domain), status(_status)
{}
- void invoke(ThreadContext *tc);
+ void invoke(ThreadContext *tc,
+ StaticInstPtr inst = StaticInst::nullStaticInstPtr);
};
class PrefetchAbort : public AbortFault<PrefetchAbort>
class Interrupt : public ArmFaultVals<Interrupt> {};
class FastInterrupt : public ArmFaultVals<FastInterrupt> {};
+// A fault that flushes the pipe, excluding the faulting instructions
+class FlushPipe : public ArmFaultVals<FlushPipe>
+{
+ public:
+ FlushPipe() {}
+ void invoke(ThreadContext *tc,
+ StaticInstPtr inst = StaticInst::nullStaticInstPtr);
+};
+
static inline Fault genMachineCheckFault()
{
return new Reset();