/* Generic remote debugging interface for simulators.
- Copyright (C) 1993-2018 Free Software Foundation, Inc.
+ Copyright (C) 1993-2019 Free Software Foundation, Inc.
Contributed by Cygnus Support.
Steve Chamberlain (sac@cygnus.com).
#include <setjmp.h>
#include "terminal.h"
#include "target.h"
+#include "process-stratum-target.h"
#include "gdbcore.h"
#include "gdb/callback.h"
#include "gdb/remote-sim.h"
};
struct gdbsim_target final
- : public memory_breakpoint_target<target_ops>
+ : public memory_breakpoint_target<process_stratum_target>
{
- gdbsim_target ()
- { to_stratum = process_stratum; }
+ gdbsim_target () = default;
const target_info &info () const override
{ return gdbsim_target_info; }
bool has_all_memory () override;
bool has_memory () override;
-
- bool has_stack () override
- { return default_child_has_stack (); }
-
- bool has_registers () override
- { return default_child_has_registers (); }
-
- bool has_execution (ptid_t ptid) override
- { return default_child_has_execution (ptid); }
};
static struct gdbsim_target gdbsim_ops;
set_inferior_data (inf, sim_inferior_data_key, sim_data);
/* Allocate a ptid for this inferior. */
- sim_data->remote_sim_ptid = ptid_build (next_pid, 0, next_pid);
+ sim_data->remote_sim_ptid = ptid_t (next_pid, 0, next_pid);
next_pid++;
/* Initialize the other instance variables. */
get_sim_inferior_data_by_ptid (ptid_t ptid, int sim_instance_needed)
{
struct inferior *inf;
- int pid = ptid_get_pid (ptid);
+ int pid = ptid.pid ();
if (pid <= 0)
return NULL;
static int
gdb_os_write_stdout (host_callback *p, const char *buf, int len)
{
- int i;
- char b[2];
-
ui_file_write (gdb_stdtarg, buf, len);
return len;
}
gdbsim_target::fetch_registers (struct regcache *regcache, int regno)
{
struct gdbarch *gdbarch = regcache->arch ();
- struct inferior *inf = find_inferior_ptid (regcache_get_ptid (regcache));
+ struct inferior *inf = find_inferior_ptid (regcache->ptid ());
struct sim_inferior_data *sim_data
= get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
gdbsim_target::store_registers (struct regcache *regcache, int regno)
{
struct gdbarch *gdbarch = regcache->arch ();
- struct inferior *inf = find_inferior_ptid (regcache_get_ptid (regcache));
+ struct inferior *inf = find_inferior_ptid (regcache->ptid ());
struct sim_inferior_data *sim_data
= get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
(exec_file ? exec_file : "(NULL)"),
args);
- if (ptid_equal (inferior_ptid, sim_data->remote_sim_ptid))
+ if (inferior_ptid == sim_data->remote_sim_ptid)
kill ();
remove_breakpoints ();
init_wait_for_inferior ();
built_argv.reset (arg_buf);
}
- if (!have_inferiors ())
- init_thread_list ();
-
if (sim_create_inferior (sim_data->gdbsim_desc, exec_bfd,
built_argv.get (), env)
!= SIM_RC_OK)
error (_("Unable to create sim inferior."));
inferior_ptid = sim_data->remote_sim_ptid;
- inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
+ inferior_appeared (current_inferior (), inferior_ptid.pid ());
add_thread_silent (inferior_ptid);
insert_breakpoints (); /* Needed to get correct instruction
void
gdbsim_target::close ()
{
- struct sim_inferior_data *sim_data
- = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
-
if (remote_debug)
fprintf_unfiltered (gdb_stdlog, "gdbsim_close\n");
if (sim_data)
gdbsim_resume_inferior (find_inferior_ptid (ptid), &rd);
- else if (ptid_equal (ptid, minus_one_ptid))
+ else if (ptid == minus_one_ptid)
iterate_over_inferiors (gdbsim_resume_inferior, &rd);
else
error (_("The program is not being run."));
/* This target isn't able to (yet) resume more than one inferior at a time.
When ptid is minus_one_ptid, just use the current inferior. If we're
given an explicit pid, we'll try to find it and use that instead. */
- if (ptid_equal (ptid, minus_one_ptid))
+ if (ptid == minus_one_ptid)
sim_data = get_sim_inferior_data (current_inferior (),
SIM_INSTANCE_NEEDED);
else
sim_data = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NEEDED);
if (sim_data == NULL)
error (_("Unable to wait for pid %d. Inferior not found."),
- ptid_get_pid (ptid));
+ ptid.pid ());
inferior_ptid = ptid;
}
void
gdbsim_target::mourn_inferior ()
{
- struct sim_inferior_data *sim_data
- = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
-
if (remote_debug)
fprintf_unfiltered (gdb_stdlog, "gdbsim_mourn_inferior:\n");
remove_breakpoints ();
generic_mourn_inferior ();
- delete_thread_silent (sim_data->remote_sim_ptid);
}
/* Pass the command argument through to the simulator verbatim. The
if (sim_data == NULL)
return false;
- if (ptid_equal (ptid, sim_data->remote_sim_ptid))
+ if (ptid == sim_data->remote_sim_ptid)
/* The simulators' task is always alive. */
return true;