summaryrefslogtreecommitdiff
path: root/src/arch/arm/faults.hh
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:05 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:05 -0500
commit34032f97d6861243a2338d02d6c7d071051c44c5 (patch)
treedb48b07ce2a3ce05273db23c285e7aa34f4052ec /src/arch/arm/faults.hh
parent52460938cbd156c7753deb18e3b2f7ded55335b0 (diff)
downloadgem5-34032f97d6861243a2338d02d6c7d071051c44c5.tar.xz
ARM: Trigger system calls from the SupervisorCall invoke method.
This simplifies the decoder slightly, and makes the system call mechanism very slightly more realistic.
Diffstat (limited to 'src/arch/arm/faults.hh')
-rw-r--r--src/arch/arm/faults.hh14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/arch/arm/faults.hh b/src/arch/arm/faults.hh
index 90a730507..64940dd26 100644
--- a/src/arch/arm/faults.hh
+++ b/src/arch/arm/faults.hh
@@ -125,7 +125,19 @@ class UndefinedInstruction : public ArmFault<UndefinedInstruction>
#endif
};
-class SupervisorCall : public ArmFault<SupervisorCall> {};
+class SupervisorCall : public ArmFault<SupervisorCall>
+{
+#if !FULL_SYSTEM
+ protected:
+ ExtMachInst machInst;
+
+ public:
+ SupervisorCall(ExtMachInst _machInst) : machInst(_machInst)
+ {}
+
+ void invoke(ThreadContext *tc);
+#endif
+};
class PrefetchAbort : public ArmFault<PrefetchAbort> {};
class DataAbort : public ArmFault<DataAbort> {};
class Interrupt : public ArmFault<Interrupt> {};