aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2021-06-05 10:21:46 -0400
committerMike Frysinger <vapier@gentoo.org>2021-06-09 18:21:28 -0400
commit906192d7859f9e768fc73f330e10d3b3a4ddaba3 (patch)
treef55e6c1aad3a8083932ffd01027856078a0d6a28
parentc70fdc45f60845852f98eae3b8035de1a2df78de (diff)
downloadgdb-906192d7859f9e768fc73f330e10d3b3a4ddaba3.zip
gdb-906192d7859f9e768fc73f330e10d3b3a4ddaba3.tar.gz
gdb-906192d7859f9e768fc73f330e10d3b3a4ddaba3.tar.bz2
sim: cgen: inline cgen_init logic
This function has done only one thing: post-process command line settings to see if profiling or tracing has been enabled, and if so, set the run_fast_p flag in the simulator state. That flag is only used in one place: to select the fast or slow cgen engine. By inlining the run_fast_p logic to the one place it's used, we can delete a good amount of logic specific to cgen ports: both the call to cgen_init and the conditional simulator state. This in turn allows us to have a single simulator state struct across all ports so we can share objects more between them, and makes the sim_open calls look more consistent.
-rw-r--r--sim/bpf/ChangeLog4
-rw-r--r--sim/bpf/sim-if.c4
-rw-r--r--sim/common/ChangeLog9
-rw-r--r--sim/common/cgen-defs.h14
-rw-r--r--sim/common/cgen-run.c23
-rw-r--r--sim/common/cgen-utils.c35
-rw-r--r--sim/common/sim-base.h10
-rw-r--r--sim/cris/ChangeLog4
-rw-r--r--sim/cris/sim-if.c4
-rw-r--r--sim/frv/ChangeLog4
-rw-r--r--sim/frv/sim-if.c4
-rw-r--r--sim/iq2000/ChangeLog4
-rw-r--r--sim/iq2000/sim-if.c4
-rw-r--r--sim/lm32/ChangeLog4
-rw-r--r--sim/lm32/sim-if.c4
-rw-r--r--sim/m32r/ChangeLog4
-rw-r--r--sim/m32r/sim-if.c4
-rw-r--r--sim/or1k/ChangeLog6
-rw-r--r--sim/or1k/sim-if.c4
-rw-r--r--sim/or1k/traps.c2
20 files changed, 62 insertions, 89 deletions
diff --git a/sim/bpf/ChangeLog b/sim/bpf/ChangeLog
index f5f5716..42143db 100644
--- a/sim/bpf/ChangeLog
+++ b/sim/bpf/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (struct sim_state): Delete.
diff --git a/sim/bpf/sim-if.c b/sim/bpf/sim-if.c
index 185e96d..436cc86 100644
--- a/sim/bpf/sim-if.c
+++ b/sim/bpf/sim-if.c
@@ -175,10 +175,6 @@ sim_open (SIM_OPEN_KIND kind,
bpf_cgen_init_dis (cd);
}
- /* Initialize various cgen things not done by common framework.
- Must be done after bpf_cgen_cpu_open. */
- cgen_init (sd);
-
/* XXX do eBPF sim specific initializations. */
return sd;
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 576b02f..dbe9236 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,12 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * cgen-defs.h (STATE_RUN_FAST_P, CGEN_STATE, cgen_init): Delete.
+ * cgen-run.c (cgen_get_fast_p): New function.
+ (sim_resume): Move fast_p up and call cgen_get_fast_p.
+ * cgen-utils.c (cgen_init): Delete.
+ * sim-base.h: Delete cgen-sim.h include.
+ (struct sim_state): Delete cgen_state and STATE_CGEN_STATE.
+
2021-06-08 Mike Frysinger <vapier@gentoo.org>
* Make-common.in (IGEN_RUN): New variable.
diff --git a/sim/common/cgen-defs.h b/sim/common/cgen-defs.h
index dab2f9f..520c29c 100644
--- a/sim/common/cgen-defs.h
+++ b/sim/common/cgen-defs.h
@@ -138,22 +138,8 @@ typedef enum {
#define ENDSWITCH(N)
#endif
-/* Simulator state. */
-
-/* CGEN_STATE contains additional state information not present in
- sim_state_base. */
-
-typedef struct cgen_state {
- /* Non-zero if no tracing or profiling is selected. */
- int run_fast_p;
-#define STATE_RUN_FAST_P(sd) (STATE_CGEN_STATE (sd).run_fast_p)
-} CGEN_STATE;
-
/* Various utilities. */
-/* Called after sim_post_argv_init to do any cgen initialization. */
-extern void cgen_init (SIM_DESC);
-
/* Return the name of an insn. */
extern CPU_INSN_NAME_FN cgen_insn_name;
diff --git a/sim/common/cgen-run.c b/sim/common/cgen-run.c
index 443b62a..9420942 100644
--- a/sim/common/cgen-run.c
+++ b/sim/common/cgen-run.c
@@ -51,6 +51,24 @@ static void prime_cpu (SIM_CPU *, int);
static void engine_run_1 (SIM_DESC, int, int);
static void engine_run_n (SIM_DESC, int, int, int, int);
+/* If no profiling or tracing has been enabled, run in fast mode. */
+static int
+cgen_get_fast_p (SIM_DESC sd)
+{
+ int i, c;
+ int run_fast_p = 1;
+
+ for (c = 0; c < MAX_NR_PROCESSORS; ++c)
+ {
+ SIM_CPU *cpu = STATE_CPU (sd, c);
+
+ if (PROFILE_ANY_P (cpu) || TRACE_ANY_P (cpu))
+ return 0;
+ }
+
+ return 1;
+}
+
/* sim_resume for cgen */
void
@@ -59,9 +77,13 @@ sim_resume (SIM_DESC sd, int step, int siggnal)
sim_engine *engine = STATE_ENGINE (sd);
jmp_buf buf;
int jmpval;
+ static int fast_p = -1;
ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
+ if (fast_p == -1)
+ fast_p = cgen_get_fast_p (sd);
+
/* we only want to be single stepping the simulator once */
if (engine->stepper != NULL)
{
@@ -102,7 +124,6 @@ sim_resume (SIM_DESC sd, int step, int siggnal)
&& STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE)
? 0
: 8); /*FIXME: magic number*/
- int fast_p = STATE_RUN_FAST_P (sd);
sim_events_preprocess (sd, last_cpu_nr >= nr_cpus, next_cpu_nr >= nr_cpus);
if (next_cpu_nr >= nr_cpus)
diff --git a/sim/common/cgen-utils.c b/sim/common/cgen-utils.c
index 890ed02..1310790 100644
--- a/sim/common/cgen-utils.c
+++ b/sim/common/cgen-utils.c
@@ -89,41 +89,6 @@ const CGEN_INSN cgen_virtual_insn_table[] =
{ & virtual_insn_entries[5] }
};
-/* Initialize cgen things.
- This is called after sim_post_argv_init. */
-
-void
-cgen_init (SIM_DESC sd)
-{
- int i, c;
-
- /* If no profiling or tracing has been enabled, run in fast mode. */
- {
- int run_fast_p = 1;
-
- for (c = 0; c < MAX_NR_PROCESSORS; ++c)
- {
- SIM_CPU *cpu = STATE_CPU (sd, c);
-
- for (i = 0; i < MAX_PROFILE_VALUES; ++i)
- if (CPU_PROFILE_FLAGS (cpu) [i])
- {
- run_fast_p = 0;
- break;
- }
- for (i = 0; i < MAX_TRACE_VALUES; ++i)
- if (CPU_TRACE_FLAGS (cpu) [i])
- {
- run_fast_p = 0;
- break;
- }
- if (! run_fast_p)
- break;
- }
- STATE_RUN_FAST_P (sd) = run_fast_p;
- }
-}
-
/* Return the name of insn number I. */
const char *
diff --git a/sim/common/sim-base.h b/sim/common/sim-base.h
index 7dbf294..054b2ba 100644
--- a/sim/common/sim-base.h
+++ b/sim/common/sim-base.h
@@ -88,10 +88,6 @@ typedef struct _sim_cpu sim_cpu;
#include "sim-cpu.h"
#include "sim-assert.h"
-#ifdef CGEN_ARCH
-# include "cgen-sim.h"
-#endif
-
struct sim_state {
/* All the cpus for this instance. */
sim_cpu *cpu[MAX_NR_PROCESSORS];
@@ -217,12 +213,6 @@ struct sim_state {
void *arch_data;
#define STATE_ARCH_DATA(sd) ((sd)->arch_data)
-#ifdef CGEN_ARCH
- /* Various cgen runtime state. */
- CGEN_STATE cgen_state;
-#endif
-#define STATE_CGEN_STATE(sd) ((sd)->cgen_state)
-
/* Marker for those wanting to do sanity checks.
This should remain the last member of this struct to help catch
miscompilation errors. */
diff --git a/sim/cris/ChangeLog b/sim/cris/ChangeLog
index 5482e08..c0bb314 100644
--- a/sim/cris/ChangeLog
+++ b/sim/cris/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+
2021-05-24 Mike Frysinger <vapier@gentoo.org>
* cris-desc.c, cris-desc.h, cris-opc.h: Moved to opcodes/.
diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c
index 6613a93..c6dcc23 100644
--- a/sim/cris/sim-if.c
+++ b/sim/cris/sim-if.c
@@ -940,10 +940,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
#endif
}
- /* Initialize various cgen things not done by common framework.
- Must be done after cris_cgen_cpu_open. */
- cgen_init (sd);
-
cris_set_callbacks (callback);
return sd;
diff --git a/sim/frv/ChangeLog b/sim/frv/ChangeLog
index 4ca57d3..060b0a2 100644
--- a/sim/frv/ChangeLog
+++ b/sim/frv/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+
2021-05-29 Mike Frysinger <vapier@gentoo.org>
* cache.h (frv_cache_unlock): New prototype.
diff --git a/sim/frv/sim-if.c b/sim/frv/sim-if.c
index c5fd93f..8ac9665 100644
--- a/sim/frv/sim-if.c
+++ b/sim/frv/sim-if.c
@@ -147,10 +147,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, bfd *abfd,
frv_cgen_init_dis (cd);
}
- /* Initialize various cgen things not done by common framework.
- Must be done after frv_cgen_cpu_open. */
- cgen_init (sd);
-
/* CPU specific initialization. */
for (i = 0; i < MAX_NR_PROCESSORS; ++i)
{
diff --git a/sim/iq2000/ChangeLog b/sim/iq2000/ChangeLog
index d5805ed..2e80084 100644
--- a/sim/iq2000/ChangeLog
+++ b/sim/iq2000/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (struct sim_state): Delete.
diff --git a/sim/iq2000/sim-if.c b/sim/iq2000/sim-if.c
index b363eb0..679d516 100644
--- a/sim/iq2000/sim-if.c
+++ b/sim/iq2000/sim-if.c
@@ -122,10 +122,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
iq2000_cgen_init_dis (cd);
}
- /* Initialize various cgen things not done by common framework.
- Must be done after iq2000_cgen_cpu_open. */
- cgen_init (sd);
-
return sd;
}
diff --git a/sim/lm32/ChangeLog b/sim/lm32/ChangeLog
index c014a6d..9092063 100644
--- a/sim/lm32/ChangeLog
+++ b/sim/lm32/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (struct sim_state): Delete.
diff --git a/sim/lm32/sim-if.c b/sim/lm32/sim-if.c
index 1cccf62..3d4ee35 100644
--- a/sim/lm32/sim-if.c
+++ b/sim/lm32/sim-if.c
@@ -182,10 +182,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
lm32_cgen_init_dis (cd);
}
- /* Initialize various cgen things not done by common framework.
- Must be done after lm32_cgen_cpu_open. */
- cgen_init (sd);
-
return sd;
}
diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog
index 04d342d..f9d3079 100644
--- a/sim/m32r/ChangeLog
+++ b/sim/m32r/ChangeLog
@@ -1,3 +1,7 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h (struct sim_state): Delete.
diff --git a/sim/m32r/sim-if.c b/sim/m32r/sim-if.c
index a6d8c48..e08a5d4 100644
--- a/sim/m32r/sim-if.c
+++ b/sim/m32r/sim-if.c
@@ -124,10 +124,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
m32r_cgen_init_dis (cd);
}
- /* Initialize various cgen things not done by common framework.
- Must be done after m32r_cgen_cpu_open. */
- cgen_init (sd);
-
for (c = 0; c < MAX_NR_PROCESSORS; ++c)
{
/* Only needed for profiling, but the structure member is small. */
diff --git a/sim/or1k/ChangeLog b/sim/or1k/ChangeLog
index 3484c07..689f038 100644
--- a/sim/or1k/ChangeLog
+++ b/sim/or1k/ChangeLog
@@ -1,3 +1,9 @@
+2021-06-09 Mike Frysinger <vapier@gentoo.org>
+
+ * sim-if.c (sim_open): Delete cgen_init call.
+ * traps.c (or1k32bf_fpu_error): Replace STATE_RUN_FAST_P with
+ PROFILE_ANY_P and TRACE_ANY_P.
+
2021-05-17 Mike Frysinger <vapier@gentoo.org>
* sim-main.h: Move or1k-opc.h include.
diff --git a/sim/or1k/sim-if.c b/sim/or1k/sim-if.c
index 005124b..e6342ee 100644
--- a/sim/or1k/sim-if.c
+++ b/sim/or1k/sim-if.c
@@ -238,10 +238,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd,
or1k_cgen_init_dis (cd);
}
- /* Initialize various cgen things not done by common framework.
- Must be done after or1k_cgen_cpu_open. */
- cgen_init (sd);
-
/* Do some final OpenRISC sim specific initializations. */
for (c = 0; c < MAX_NR_PROCESSORS; ++c)
{
diff --git a/sim/or1k/traps.c b/sim/or1k/traps.c
index 7f5a38f..bb428fa 100644
--- a/sim/or1k/traps.c
+++ b/sim/or1k/traps.c
@@ -104,7 +104,7 @@ or1k32bf_fpu_error (CGEN_FPU* fpu, int status)
per-instruction callbacks are not triggered which would allow
us to track the PC. This means we cannot track which
instruction caused the FPU error. */
- if (STATE_RUN_FAST_P (sd) == 1)
+ if (!PROFILE_ANY_P (current_cpu) && !TRACE_ANY_P (current_cpu))
sim_io_eprintf
(sd, "WARNING: ignoring fpu error caught in fast mode.\n");
else