summaryrefslogtreecommitdiff
path: root/src/sim/faults.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim/faults.hh')
-rw-r--r--src/sim/faults.hh16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/sim/faults.hh b/src/sim/faults.hh
index da0ea22fa..be7aab582 100644
--- a/src/sim/faults.hh
+++ b/src/sim/faults.hh
@@ -72,6 +72,22 @@ class ReExec : public FaultBase
StaticInst::nullStaticInstPtr);
};
+/*
+ * This class is needed to allow system call retries to occur for blocking
+ * system calls in SE mode. A retry fault will be generated by the system call
+ * emulation code if blocking conditions arise; the fault is passed up the
+ * function call chain into the CPU model where it is handled by retrying the
+ * syscall instruction on a later tick.
+ */
+class SyscallRetryFault : public FaultBase
+{
+ public:
+ virtual FaultName name() const { return "System call retry fault"; }
+ SyscallRetryFault() {}
+ void invoke(ThreadContext *tc, const StaticInstPtr &inst =
+ StaticInst::nullStaticInstPtr);
+};
+
class GenericPageTableFault : public FaultBase
{
private: