summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Nikoleris <nikos.nikoleris@arm.com>2019-09-13 18:23:33 +0100
committerNikos Nikoleris <nikos.nikoleris@arm.com>2019-09-24 13:24:55 +0000
commit9235ae56c282d5a02ada3ed9b4e0fe2ee5738bde (patch)
tree0b52866017f533d8c5c7bd6154488b8aa6d53165
parente5a82da26e29560f3e7121b600a12f8acd6a5a3f (diff)
downloadgem5-9235ae56c282d5a02ada3ed9b4e0fe2ee5738bde.tar.xz
cpu: Fix checker cpu instantiation
This change uses the params as instantiated from the default constructor to create the checker cpu. If any of these parameters are invalid for the checker cpu, the simulation will exit with a warning. Change-Id: I0e58ed096c9ea5f413f2e9b64d8d184d9b0fc84e Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21079 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
-rw-r--r--src/cpu/dummy_checker.cc42
-rw-r--r--src/cpu/o3/checker.cc46
2 files changed, 16 insertions, 72 deletions
diff --git a/src/cpu/dummy_checker.cc b/src/cpu/dummy_checker.cc
index f9077bee0..c42c8b5d6 100644
--- a/src/cpu/dummy_checker.cc
+++ b/src/cpu/dummy_checker.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 ARM Limited
+ * Copyright (c) 2011, 2019 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -41,41 +41,15 @@
#include "params/DummyChecker.hh"
-////////////////////////////////////////////////////////////////////////
-//
-// DummyChecker Simulation Object
-//
DummyChecker *
DummyCheckerParams::create()
{
- DummyChecker::Params *params = new DummyChecker::Params();
- params->name = name;
- params->numThreads = numThreads;
- params->max_insts_any_thread = 0;
- params->max_insts_all_threads = 0;
- params->max_loads_any_thread = 0;
- params->max_loads_all_threads = 0;
- params->clk_domain = clk_domain;
- // Hack to touch all parameters. Consider not deriving Checker
- // from BaseCPU..it's not really a CPU in the end.
- Counter temp;
- temp = max_insts_any_thread;
- temp = max_insts_all_threads;
- temp = max_loads_any_thread;
- temp = max_loads_all_threads;
- temp++;
- Tick temp2 = progress_interval;
- params->progress_interval = 0;
- temp2++;
+ // The checker should check all instructions executed by the main
+ // cpu and therefore any parameters for early exit don't make much
+ // sense.
+ fatal_if(max_insts_any_thread || max_insts_all_threads ||
+ max_loads_any_thread || max_loads_all_threads ||
+ progress_interval, "Invalid checker parameters");
- params->itb = itb;
- params->dtb = dtb;
- params->isa = isa;
- params->system = system;
- params->cpu_id = cpu_id;
- params->profile = profile;
- params->workload = workload;
-
- DummyChecker *cpu = new DummyChecker(params);
- return cpu;
+ return new DummyChecker(this);
}
diff --git a/src/cpu/o3/checker.cc b/src/cpu/o3/checker.cc
index 16c5a8704..1713da7c1 100644
--- a/src/cpu/o3/checker.cc
+++ b/src/cpu/o3/checker.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 ARM Limited
+ * Copyright (c) 2011, 2019 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -48,45 +48,15 @@
template
class Checker<O3CPUImpl>;
-////////////////////////////////////////////////////////////////////////
-//
-// CheckerCPU Simulation Object
-//
O3Checker *
O3CheckerParams::create()
{
- O3Checker::Params *params = new O3Checker::Params();
- params->name = name;
- params->numThreads = numThreads;
- params->max_insts_any_thread = 0;
- params->max_insts_all_threads = 0;
- params->max_loads_any_thread = 0;
- params->max_loads_all_threads = 0;
- params->exitOnError = exitOnError;
- params->updateOnError = updateOnError;
- params->warnOnlyOnLoadError = warnOnlyOnLoadError;
- params->clk_domain = clk_domain;
- params->tracer = tracer;
- // Hack to touch all parameters. Consider not deriving Checker
- // from BaseCPU..it's not really a CPU in the end.
- Counter temp;
- temp = max_insts_any_thread;
- temp = max_insts_all_threads;
- temp = max_loads_any_thread;
- temp = max_loads_all_threads;
- temp++;
- Tick temp2 = progress_interval;
- params->progress_interval = 0;
- temp2++;
+ // The checker should check all instructions executed by the main
+ // cpu and therefore any parameters for early exit don't make much
+ // sense.
+ fatal_if(max_insts_any_thread || max_insts_all_threads ||
+ max_loads_any_thread || max_loads_all_threads ||
+ progress_interval, "Invalid checker parameters");
- params->itb = itb;
- params->dtb = dtb;
- params->isa = isa;
- params->system = system;
- params->cpu_id = cpu_id;
- params->profile = profile;
- params->workload = workload;
-
- O3Checker *cpu = new O3Checker(params);
- return cpu;
+ return new O3Checker(this);
}