/* Generic remote debugging interface for simulators.
- Copyright (C) 1993-2020 Free Software Foundation, Inc.
+ Copyright (C) 1993-2021 Free Software Foundation, Inc.
Contributed by Cygnus Support.
Steve Chamberlain (sac@cygnus.com).
#include "target.h"
#include "process-stratum-target.h"
#include "gdbcore.h"
-#include "gdb/callback.h"
-#include "gdb/remote-sim.h"
+#include "sim/callback.h"
+#include "sim/sim.h"
#include "command.h"
#include "regcache.h"
#include "sim-regno.h"
#include "readline/readline.h"
#include "gdbthread.h"
#include "gdbsupport/byte-vector.h"
+#include "memory-map.h"
+#include "remote.h"
/* Prototypes */
bool has_all_memory () override;
bool has_memory () override;
+ std::vector<mem_region> memory_map () override;
private:
sim_inferior_data *get_inferior_data_by_ptid (ptid_t ptid,
if (sim_instance_needed == SIM_INSTANCE_NEEDED
&& (sim_data == NULL || sim_data->gdbsim_desc == NULL))
{
- sim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
+ sim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback,
+ current_program_space->exec_bfd (), sim_argv);
if (sim_desc == NULL)
error (_("Unable to create simulator instance for inferior %d."),
inf->num);
char *arg_buf;
const char *args = allargs.c_str ();
- if (exec_file == 0 || exec_bfd == 0)
+ if (exec_file == 0 || current_program_space->exec_bfd () == 0)
warning (_("No executable file specified."));
if (!sim_data->program_loaded)
warning (_("No program loaded."));
built_argv.reset (arg_buf);
}
- if (sim_create_inferior (sim_data->gdbsim_desc, exec_bfd,
+ if (sim_create_inferior (sim_data->gdbsim_desc,
+ current_program_space->exec_bfd (),
built_argv.get (), env)
!= SIM_RC_OK)
error (_("Unable to create sim inferior."));
operation until after we complete those operations which could
error out. */
if (gdbsim_is_open)
- unpush_target (&gdbsim_ops);
+ current_inferior ()->unpush_target (&gdbsim_ops);
len = (7 + 1 /* gdbsim */
+ strlen (" -E little")
sim_argv = argv.release ();
init_callbacks ();
- gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
+ gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback,
+ current_program_space->exec_bfd (), sim_argv);
if (gdbsim_desc == 0)
{
sim_data->gdbsim_desc = gdbsim_desc;
- push_target (&gdbsim_ops);
+ current_inferior ()->push_target (&gdbsim_ops);
printf_filtered ("Connected to the simulator.\n");
/* There's nothing running after "target sim" or "load"; not until
if (remote_debug)
fprintf_unfiltered (gdb_stdlog, "gdbsim_detach\n");
- unpush_target (this); /* calls gdbsim_close to do the real work */
+ inf->unpush_target (this); /* calls gdbsim_close to do the real work */
if (from_tty)
- printf_filtered ("Ending simulator %s debugging\n", target_shortname);
+ printf_filtered ("Ending simulator %s debugging\n", target_shortname ());
}
/* Resume execution of the target process. STEP says whether to single-step
= get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
const char *file = "nothing";
- if (exec_bfd)
- file = bfd_get_filename (exec_bfd);
+ if (current_program_space->exec_bfd ())
+ file = bfd_get_filename (current_program_space->exec_bfd ());
if (remote_debug)
fprintf_unfiltered (gdb_stdlog, "gdbsim_files_info: file \"%s\"\n", file);
- if (exec_bfd)
+ if (current_program_space->exec_bfd ())
{
fprintf_unfiltered (gdb_stdlog, "\tAttached to %s running program %s\n",
- target_shortname, file);
+ target_shortname (), file);
sim_info (sim_data->gdbsim_desc, 0);
}
}
return true;
}
+/* Get memory map from the simulator. */
+
+std::vector<mem_region>
+gdbsim_target::memory_map ()
+{
+ struct sim_inferior_data *sim_data
+ = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
+ std::vector<mem_region> result;
+ gdb::unique_xmalloc_ptr<char> text (sim_memory_map (sim_data->gdbsim_desc));
+
+ if (text != nullptr)
+ result = parse_memory_map (text.get ());
+
+ return result;
+}
+
void _initialize_remote_sim ();
void
_initialize_remote_sim ()