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.
This commit is contained in:
Simon Marchi
2020-01-21 16:28:25 -05:00
parent f9fac3c81b
commit b3ee6dd9f2
2 changed files with 39 additions and 51 deletions

View File

@@ -1,3 +1,13 @@
2020-01-21 Simon Marchi <simon.marchi@efficios.com>
* 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.
2020-01-21 Simon Marchi <simon.marchi@efficios.com>
* infrun.c (proceed): Fix indentation.

View File

@@ -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)
{
struct sim_inferior_data *sim_data
= get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
if (sim_data)
{
if (!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);
for (inferior *inf : all_inferiors ())
{
sim_inferior_data *sim_data
= get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
if (sim_data != nullptr && !sim_stop (sim_data->gdbsim_desc))
quit ();
}
}
/* GDB version of os_poll_quit callback.