faults.hh (4183:3d19c1d46946) faults.hh (4695:a63378aed062)
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 51 unchanged lines hidden (view full) ---

60 const TrapType trapType;
61 const FaultPriority priority;
62 const PrivilegeLevel nextPrivilegeLevel[NumLevels];
63 FaultStat count;
64 };
65#if FULL_SYSTEM
66 void invoke(ThreadContext * tc);
67#endif
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 51 unchanged lines hidden (view full) ---

60 const TrapType trapType;
61 const FaultPriority priority;
62 const PrivilegeLevel nextPrivilegeLevel[NumLevels];
63 FaultStat count;
64 };
65#if FULL_SYSTEM
66 void invoke(ThreadContext * tc);
67#endif
68 virtual FaultName name() = 0;
69 virtual TrapType trapType() = 0;
70 virtual FaultPriority priority() = 0;
71 virtual FaultStat & countStat() = 0;
72 virtual PrivilegeLevel getNextLevel(PrivilegeLevel current) = 0;
73};
74
75template<typename T>
76class SparcFault : public SparcFaultBase
77{
78 protected:
79 static FaultVals vals;
80 public:
68 virtual TrapType trapType() = 0;
69 virtual FaultPriority priority() = 0;
70 virtual FaultStat & countStat() = 0;
71 virtual PrivilegeLevel getNextLevel(PrivilegeLevel current) = 0;
72};
73
74template<typename T>
75class SparcFault : public SparcFaultBase
76{
77 protected:
78 static FaultVals vals;
79 public:
81 FaultName name() {return vals.name;}
80 FaultName name() const {return vals.name;}
82 TrapType trapType() {return vals.trapType;}
83 FaultPriority priority() {return vals.priority;}
84 FaultStat & countStat() {return vals.count;}
85 PrivilegeLevel getNextLevel(PrivilegeLevel current)
86 {
87 return vals.nextPrivilegeLevel[current];
88 }
89};

--- 38 unchanged lines hidden (view full) ---

128class CleanWindow : public SparcFault<CleanWindow> {};
129
130class DivisionByZero : public SparcFault<DivisionByZero> {};
131
132class InternalProcessorError :
133 public SparcFault<InternalProcessorError>
134{
135 public:
81 TrapType trapType() {return vals.trapType;}
82 FaultPriority priority() {return vals.priority;}
83 FaultStat & countStat() {return vals.count;}
84 PrivilegeLevel getNextLevel(PrivilegeLevel current)
85 {
86 return vals.nextPrivilegeLevel[current];
87 }
88};

--- 38 unchanged lines hidden (view full) ---

127class CleanWindow : public SparcFault<CleanWindow> {};
128
129class DivisionByZero : public SparcFault<DivisionByZero> {};
130
131class InternalProcessorError :
132 public SparcFault<InternalProcessorError>
133{
134 public:
136 bool isMachineCheckFault() {return true;}
135 bool isMachineCheckFault() const {return true;}
137};
138
139class InstructionInvalidTSBEntry : public SparcFault<InstructionInvalidTSBEntry> {};
140
141class DataInvalidTSBEntry : public SparcFault<DataInvalidTSBEntry> {};
142
143class DataAccessException : public SparcFault<DataAccessException> {};
144
145//class DataAccessMMUMiss : public SparcFault<DataAccessMMUMiss> {};
146
147class DataAccessError : public SparcFault<DataAccessError> {};
148
149class DataAccessProtection : public SparcFault<DataAccessProtection> {};
150
151class MemAddressNotAligned :
152 public SparcFault<MemAddressNotAligned>
153{
154 public:
136};
137
138class InstructionInvalidTSBEntry : public SparcFault<InstructionInvalidTSBEntry> {};
139
140class DataInvalidTSBEntry : public SparcFault<DataInvalidTSBEntry> {};
141
142class DataAccessException : public SparcFault<DataAccessException> {};
143
144//class DataAccessMMUMiss : public SparcFault<DataAccessMMUMiss> {};
145
146class DataAccessError : public SparcFault<DataAccessError> {};
147
148class DataAccessProtection : public SparcFault<DataAccessProtection> {};
149
150class MemAddressNotAligned :
151 public SparcFault<MemAddressNotAligned>
152{
153 public:
155 bool isAlignmentFault() {return true;}
154 bool isAlignmentFault() const {return true;}
156};
157
158class LDDFMemAddressNotAligned : public SparcFault<LDDFMemAddressNotAligned> {};
159
160class STDFMemAddressNotAligned : public SparcFault<STDFMemAddressNotAligned> {};
161
162class PrivilegedAction : public SparcFault<PrivilegedAction> {};
163

--- 109 unchanged lines hidden ---
155};
156
157class LDDFMemAddressNotAligned : public SparcFault<LDDFMemAddressNotAligned> {};
158
159class STDFMemAddressNotAligned : public SparcFault<STDFMemAddressNotAligned> {};
160
161class PrivilegedAction : public SparcFault<PrivilegedAction> {};
162

--- 109 unchanged lines hidden ---