summaryrefslogtreecommitdiff
path: root/src/cpu/base.cc
diff options
context:
space:
mode:
authorAndreas Hansson <andreas.hansson@arm.com>2012-03-02 09:21:48 -0500
committerAndreas Hansson <andreas.hansson@arm.com>2012-03-02 09:21:48 -0500
commit32eae8094d8931f161784825ad013e9c6d995c17 (patch)
treeef3dc2b37cecd53d7bd1fcd5809b0ed251f30b3a /src/cpu/base.cc
parentc0b9f324bf2780b344bef04a4ce7ee063e172e40 (diff)
downloadgem5-32eae8094d8931f161784825ad013e9c6d995c17.tar.xz
CPU: Check that the interrupt controller is created when needed
This patch adds a creation-time check to the CPU to ensure that the interrupt controller is created for the cases where it is needed, i.e. if the CPU is not being switched in later and not a checker CPU. The patch also adds the "createInterruptController" call to a number of the regression scripts.
Diffstat (limited to 'src/cpu/base.cc')
-rw-r--r--src/cpu/base.cc17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/cpu/base.cc b/src/cpu/base.cc
index 86edf62cf..0722f319d 100644
--- a/src/cpu/base.cc
+++ b/src/cpu/base.cc
@@ -118,7 +118,7 @@ CPUProgressEvent::description() const
return "CPU Progress";
}
-BaseCPU::BaseCPU(Params *p)
+BaseCPU::BaseCPU(Params *p, bool is_checker)
: MemObject(p), clock(p->clock), instCnt(0), _cpuId(p->cpu_id),
_instMasterId(p->system->getMasterId(name() + ".inst")),
_dataMasterId(p->system->getMasterId(name() + ".data")),
@@ -219,10 +219,17 @@ BaseCPU::BaseCPU(Params *p)
schedule(event, p->function_trace_start);
}
}
- // Check if CPU model has interrupts connected. The CheckerCPU
- // cannot take interrupts directly for example.
- if (interrupts)
- interrupts->setCPU(this);
+
+ // The interrupts should always be present unless this CPU is
+ // switched in later or in case it is a checker CPU
+ if (!params()->defer_registration && !is_checker) {
+ if (interrupts) {
+ interrupts->setCPU(this);
+ } else {
+ fatal("CPU %s has no interrupt controller.\n"
+ "Ensure createInterruptController() is called.\n", name());
+ }
+ }
if (FullSystem) {
profileEvent = NULL;