aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote-sim.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2020-01-21 16:28:25 -0500
committerSimon Marchi <simon.marchi@efficios.com>2020-01-21 16:28:26 -0500
commitb3ee6dd9f205f1d4ff208dbc9575528dc6e1bce7 (patch)
treeb9b133948139c3c74d989ee18ffe40eee4d045fd /gdb/remote-sim.c
parentf9fac3c81b322a3c0d2e50d19769c06fdada7a94 (diff)
downloadgdb-b3ee6dd9f205f1d4ff208dbc9575528dc6e1bce7.zip
gdb-b3ee6dd9f205f1d4ff208dbc9575528dc6e1bce7.tar.gz
gdb-b3ee6dd9f205f1d4ff208dbc9575528dc6e1bce7.tar.bz2
gdb: remove uses of iterate_over_inferiors in remote-sim.c
This removes the two uses of iterate_over_inferiors, in favor of range-based loops. gdb/ChangeLog: * remote-sim.c (check_for_duplicate_sim_descriptor): Remove. (get_sim_inferior_data): Remove use of iterate_over_inferiors, replace with range-based for. (gdbsim_interrupt_inferior): Remove. (gdbsim_target::interrupt): Replace iterate_over_inferiors use with a range-based for. Inline code from gdbsim_interrupt_inferior.
Diffstat (limited to 'gdb/remote-sim.c')
-rw-r--r--gdb/remote-sim.c78
1 files changed, 28 insertions, 50 deletions
diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c
index caa9446..281232c 100644
--- a/gdb/remote-sim.c
+++ b/gdb/remote-sim.c
@@ -189,21 +189,6 @@ static char **sim_argv = NULL;
static host_callback gdb_callback;
static int callbacks_initialized = 0;
-/* Callback for iterate_over_inferiors. It checks to see if the sim
- descriptor passed via ARG is the same as that for the inferior
- designated by INF. Return true if so; false otherwise. */
-
-static int
-check_for_duplicate_sim_descriptor (struct inferior *inf, void *arg)
-{
- struct sim_inferior_data *sim_data;
- SIM_DESC new_sim_desc = (SIM_DESC) arg;
-
- sim_data = sim_inferior_data_key.get (inf);
-
- return (sim_data != NULL && sim_data->gdbsim_desc == new_sim_desc);
-}
-
/* Flags indicating whether or not a sim instance is needed. One of these
flags should be passed to get_sim_inferior_data(). */
@@ -225,27 +210,33 @@ get_sim_inferior_data (struct inferior *inf, int sim_instance_needed)
if (sim_instance_needed == SIM_INSTANCE_NEEDED
&& (sim_data == NULL || sim_data->gdbsim_desc == NULL))
{
- struct inferior *idup;
sim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
if (sim_desc == NULL)
error (_("Unable to create simulator instance for inferior %d."),
inf->num);
- idup = iterate_over_inferiors (check_for_duplicate_sim_descriptor,
- sim_desc);
- if (idup != NULL)
+ /* Check if the sim descriptor is the same as that of another
+ inferior. */
+ for (inferior *other_inf : all_inferiors ())
{
- /* We don't close the descriptor due to the fact that it's
- shared with some other inferior. If we were to close it,
- that might needlessly muck up the other inferior. Of
- course, it's possible that the damage has already been
- done... Note that it *will* ultimately be closed during
- cleanup of the other inferior. */
- sim_desc = NULL;
- error (
- _("Inferior %d and inferior %d would have identical simulator state.\n"
- "(This simulator does not support the running of more than one inferior.)"),
- inf->num, idup->num);
+ sim_inferior_data *other_sim_data
+ = sim_inferior_data_key.get (other_inf);
+
+ if (other_sim_data != NULL
+ && other_sim_data->gdbsim_desc == sim_desc)
+ {
+ /* We don't close the descriptor due to the fact that it's
+ shared with some other inferior. If we were to close it,
+ that might needlessly muck up the other inferior. Of
+ course, it's possible that the damage has already been
+ done... Note that it *will* ultimately be closed during
+ cleanup of the other inferior. */
+ sim_desc = NULL;
+ error (
+_("Inferior %d and inferior %d would have identical simulator state.\n"
+ "(This simulator does not support the running of more than one inferior.)"),
+ inf->num, other_inf->num);
+ }
}
}
@@ -896,30 +887,17 @@ gdbsim_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
For simulators that do not support this operation, just abort. */
-static int
-gdbsim_interrupt_inferior (struct inferior *inf, void *arg)
+void
+gdbsim_target::interrupt ()
{
- struct sim_inferior_data *sim_data
- = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
-
- if (sim_data)
+ for (inferior *inf : all_inferiors ())
{
- if (!sim_stop (sim_data->gdbsim_desc))
- {
+ sim_inferior_data *sim_data
+ = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
+
+ if (sim_data != nullptr && !sim_stop (sim_data->gdbsim_desc))
quit ();
- }
}
-
- /* When called from iterate_over_inferiors, a zero return causes the
- iteration process to proceed until there are no more inferiors to
- consider. */
- return 0;
-}
-
-void
-gdbsim_target::interrupt ()
-{
- iterate_over_inferiors (gdbsim_interrupt_inferior, NULL);
}
/* GDB version of os_poll_quit callback.