aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2021-06-26 23:03:53 -0400
committerMike Frysinger <vapier@gentoo.org>2021-06-27 10:48:07 -0400
commitb69bd9e723db53ce95c6ebb911d623b8f396b6ac (patch)
treed2cde494c0cee486772f3a692052c29a13b9918b /sim
parenta7ffa88dc665b09f774c4a8cce1ac31377c96a74 (diff)
downloadfsf-binutils-gdb-b69bd9e723db53ce95c6ebb911d623b8f396b6ac.zip
fsf-binutils-gdb-b69bd9e723db53ce95c6ebb911d623b8f396b6ac.tar.gz
fsf-binutils-gdb-b69bd9e723db53ce95c6ebb911d623b8f396b6ac.tar.bz2
sim: cgen: add asserts to fix unused engine warnings
If the user passed in values outside the range of [0, MAX_NR_PROCESSORS), it would cause the code to access out-of-bind engine function pointers. Add some asserts to catch that and to fix the related compiler warnings.
Diffstat (limited to 'sim')
-rw-r--r--sim/common/ChangeLog4
-rw-r--r--sim/common/cgen-run.c5
2 files changed, 8 insertions, 1 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 91e254c..8472b2b 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,5 +1,9 @@
2021-06-27 Mike Frysinger <vapier@gentoo.org>
+ * cgen-run.c (engine_run_n): Assert cpu arguments are valid.
+
+2021-06-27 Mike Frysinger <vapier@gentoo.org>
+
* cgen-trace.h (cgen_trace_printf): Add ATTRIBUTE_PRINTF_2.
(sim_disasm_sprintf): Likewise.
diff --git a/sim/common/cgen-run.c b/sim/common/cgen-run.c
index 1b097e1..0951c92 100644
--- a/sim/common/cgen-run.c
+++ b/sim/common/cgen-run.c
@@ -231,6 +231,9 @@ engine_run_n (SIM_DESC sd, int next_cpu_nr, int nr_cpus, int max_insns, int fast
int i;
ENGINE_FN *engine_fns[MAX_NR_PROCESSORS];
+ SIM_ASSERT (nr_cpus <= MAX_NR_PROCESSORS);
+ SIM_ASSERT (next_cpu_nr >= 0 && next_cpu_nr < nr_cpus);
+
for (i = 0; i < nr_cpus; ++i)
{
SIM_CPU *cpu = STATE_CPU (sd, i);
@@ -244,7 +247,7 @@ engine_run_n (SIM_DESC sd, int next_cpu_nr, int nr_cpus, int max_insns, int fast
SIM_ENGINE_PREFIX_HOOK (sd);
/* FIXME: proper cycling of all of them, blah blah blah. */
- while (next_cpu_nr != nr_cpus)
+ while (next_cpu_nr < nr_cpus)
{
SIM_CPU *cpu = STATE_CPU (sd, next_cpu_nr);