summaryrefslogtreecommitdiff
path: root/src/arch/mips/faults.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/mips/faults.hh')
-rw-r--r--src/arch/mips/faults.hh42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/arch/mips/faults.hh b/src/arch/mips/faults.hh
index 049140229..055aa597e 100644
--- a/src/arch/mips/faults.hh
+++ b/src/arch/mips/faults.hh
@@ -100,6 +100,7 @@ class AlignmentFault : public MipsFault<AlignmentFault>
class AddressErrorFault : public MipsFault<AddressErrorFault>
{
public:
+ AddressErrorFault(Addr vaddr) { badVAddr = vaddr; }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInstPtr inst = StaticInst::nullStaticInstPtr);
@@ -110,6 +111,7 @@ class AddressErrorFault : public MipsFault<AddressErrorFault>
class StoreAddressErrorFault : public MipsFault<StoreAddressErrorFault>
{
public:
+ StoreAddressErrorFault(Addr vaddr) { badVAddr = vaddr; }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInstPtr inst = StaticInst::nullStaticInstPtr);
@@ -254,6 +256,14 @@ class BreakpointFault : public MipsFault<BreakpointFault>
class ItbRefillFault : public MipsFault<ItbRefillFault>
{
public:
+ ItbRefillFault(Addr asid, Addr vaddr, Addr vpn)
+ {
+ entryHiAsid = asid;
+ entryHiVPN2 = vpn >> 2;
+ entryHiVPN2X = vpn & 0x3;
+ badVAddr = vaddr;
+ contextBadVPN2 = vpn >> 2;
+ }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInstPtr inst = StaticInst::nullStaticInstPtr);
@@ -263,6 +273,14 @@ class ItbRefillFault : public MipsFault<ItbRefillFault>
class DtbRefillFault : public MipsFault<DtbRefillFault>
{
public:
+ DtbRefillFault(Addr asid, Addr vaddr, Addr vpn)
+ {
+ entryHiAsid = asid;
+ entryHiVPN2 = vpn >> 2;
+ entryHiVPN2X = vpn & 0x3;
+ badVAddr = vaddr;
+ contextBadVPN2 = vpn >> 2;
+ }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInstPtr inst = StaticInst::nullStaticInstPtr);
@@ -281,6 +299,14 @@ class ItbPageFault : public MipsFault<ItbPageFault>
class ItbInvalidFault : public MipsFault<ItbInvalidFault>
{
public:
+ ItbInvalidFault(Addr asid, Addr vaddr, Addr vpn)
+ {
+ entryHiAsid = asid;
+ entryHiVPN2 = vpn >> 2;
+ entryHiVPN2X = vpn & 0x3;
+ badVAddr = vaddr;
+ contextBadVPN2 = vpn >> 2;
+ }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInstPtr inst = StaticInst::nullStaticInstPtr);
@@ -290,6 +316,14 @@ class ItbInvalidFault : public MipsFault<ItbInvalidFault>
class TLBModifiedFault : public MipsFault<TLBModifiedFault>
{
public:
+ TLBModifiedFault(Addr asid, Addr vaddr, Addr vpn)
+ {
+ entryHiAsid = asid;
+ entryHiVPN2 = vpn >> 2;
+ entryHiVPN2X = vpn & 0x3;
+ badVAddr = vaddr;
+ contextBadVPN2 = vpn >> 2;
+ }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInstPtr inst = StaticInst::nullStaticInstPtr);
@@ -299,6 +333,14 @@ class TLBModifiedFault : public MipsFault<TLBModifiedFault>
class DtbInvalidFault : public MipsFault<DtbInvalidFault>
{
public:
+ DtbInvalidFault(Addr asid, Addr vaddr, Addr vpn)
+ {
+ entryHiAsid = asid;
+ entryHiVPN2 = vpn >> 2;
+ entryHiVPN2X = vpn & 0x3;
+ badVAddr = vaddr;
+ contextBadVPN2 = vpn >> 2;
+ }
#if FULL_SYSTEM
void invoke(ThreadContext * tc,
StaticInst::StaticInstPtr inst = nullStaticInstPtr);