1 /* Generic remote debugging interface for simulators.
3 Copyright (C) 1993-2013 Free Software Foundation, Inc.
5 Contributed by Cygnus Support.
6 Steve Chamberlain (sac@cygnus.com).
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26 #include "gdb_string.h"
35 #include "gdb/callback.h"
36 #include "gdb/remote-sim.h"
39 #include "gdb_assert.h"
40 #include "sim-regno.h"
41 #include "arch-utils.h"
42 #include "readline/readline.h"
43 #include "gdbthread.h"
47 extern void _initialize_remote_sim (void);
49 static void init_callbacks (void);
51 static void end_callbacks (void);
53 static int gdb_os_write_stdout (host_callback *, const char *, int);
55 static void gdb_os_flush_stdout (host_callback *);
57 static int gdb_os_write_stderr (host_callback *, const char *, int);
59 static void gdb_os_flush_stderr (host_callback *);
61 static int gdb_os_poll_quit (host_callback *);
63 /* printf_filtered is depreciated. */
64 static void gdb_os_printf_filtered (host_callback *, const char *, ...);
66 static void gdb_os_vprintf_filtered (host_callback *, const char *, va_list);
68 static void gdb_os_evprintf_filtered (host_callback *, const char *, va_list);
70 static void gdb_os_error (host_callback *, const char *, ...)
73 static void gdbsim_kill (struct target_ops *);
75 static void gdbsim_load (char *prog, int fromtty);
77 static void gdbsim_open (char *args, int from_tty);
79 static void gdbsim_close (void);
81 static void gdbsim_detach (struct target_ops *ops, char *args, int from_tty);
83 static void gdbsim_prepare_to_store (struct regcache *regcache);
85 static void gdbsim_files_info (struct target_ops *target);
87 static void gdbsim_mourn_inferior (struct target_ops *target);
89 static void gdbsim_stop (ptid_t ptid);
91 void simulator_command (char *args, int from_tty);
95 sim_* are the interface to the simulator (see remote-sim.h).
96 gdbsim_* are stuff which is internal to gdb. */
98 /* Forward data declarations */
99 extern struct target_ops gdbsim_ops;
101 static const struct inferior_data *sim_inferior_data_key;
103 /* Simulator-specific, per-inferior state. */
104 struct sim_inferior_data {
105 /* Flag which indicates whether or not the program has been loaded. */
108 /* Simulator descriptor for this inferior. */
109 SIM_DESC gdbsim_desc;
111 /* This is the ptid we use for this particular simulator instance. Its
112 value is somewhat arbitrary, as the simulator target don't have a
113 notion of tasks or threads, but we need something non-null to place
114 in inferior_ptid. For simulators which permit multiple instances,
115 we also need a unique identifier to use for each inferior. */
116 ptid_t remote_sim_ptid;
118 /* Signal with which to resume. */
119 enum gdb_signal resume_siggnal;
121 /* Flag which indicates whether resume should step or not. */
125 /* Flag indicating the "open" status of this module. It's set to 1
126 in gdbsim_open() and 0 in gdbsim_close(). */
127 static int gdbsim_is_open = 0;
129 /* Value of the next pid to allocate for an inferior. As indicated
130 elsewhere, its initial value is somewhat arbitrary; it's critical
131 though that it's not zero or negative. */
133 #define INITIAL_PID 42000
135 /* Argument list to pass to sim_open(). It is allocated in gdbsim_open()
136 and deallocated in gdbsim_close(). The lifetime needs to extend beyond
137 the call to gdbsim_open() due to the fact that other sim instances other
138 than the first will be allocated after the gdbsim_open() call. */
139 static char **sim_argv = NULL;
141 /* OS-level callback functions for write, flush, etc. */
142 static host_callback gdb_callback;
143 static int callbacks_initialized = 0;
145 /* Callback for iterate_over_inferiors. It checks to see if the sim
146 descriptor passed via ARG is the same as that for the inferior
147 designated by INF. Return true if so; false otherwise. */
150 check_for_duplicate_sim_descriptor (struct inferior *inf, void *arg)
152 struct sim_inferior_data *sim_data;
153 SIM_DESC new_sim_desc = arg;
155 sim_data = inferior_data (inf, sim_inferior_data_key);
157 return (sim_data != NULL && sim_data->gdbsim_desc == new_sim_desc);
160 /* Flags indicating whether or not a sim instance is needed. One of these
161 flags should be passed to get_sim_inferior_data(). */
163 enum {SIM_INSTANCE_NOT_NEEDED = 0, SIM_INSTANCE_NEEDED = 1};
165 /* Obtain pointer to per-inferior simulator data, allocating it if necessary.
166 Attempt to open the sim if SIM_INSTANCE_NEEDED is true. */
168 static struct sim_inferior_data *
169 get_sim_inferior_data (struct inferior *inf, int sim_instance_needed)
171 SIM_DESC sim_desc = NULL;
172 struct sim_inferior_data *sim_data
173 = inferior_data (inf, sim_inferior_data_key);
175 /* Try to allocate a new sim instance, if needed. We do this ahead of
176 a potential allocation of a sim_inferior_data struct in order to
177 avoid needlessly allocating that struct in the event that the sim
178 instance allocation fails. */
179 if (sim_instance_needed == SIM_INSTANCE_NEEDED
180 && (sim_data == NULL || sim_data->gdbsim_desc == NULL))
182 struct inferior *idup;
183 sim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
184 if (sim_desc == NULL)
185 error (_("Unable to create simulator instance for inferior %d."),
188 idup = iterate_over_inferiors (check_for_duplicate_sim_descriptor,
192 /* We don't close the descriptor due to the fact that it's
193 shared with some other inferior. If we were to close it,
194 that might needlessly muck up the other inferior. Of
195 course, it's possible that the damage has already been
196 done... Note that it *will* ultimately be closed during
197 cleanup of the other inferior. */
200 _("Inferior %d and inferior %d would have identical simulator state.\n"
201 "(This simulator does not support the running of more than one inferior.)"),
202 inf->num, idup->num);
206 if (sim_data == NULL)
208 sim_data = XZALLOC(struct sim_inferior_data);
209 set_inferior_data (inf, sim_inferior_data_key, sim_data);
211 /* Allocate a ptid for this inferior. */
212 sim_data->remote_sim_ptid = ptid_build (next_pid, 0, next_pid);
215 /* Initialize the other instance variables. */
216 sim_data->program_loaded = 0;
217 sim_data->gdbsim_desc = sim_desc;
218 sim_data->resume_siggnal = GDB_SIGNAL_0;
219 sim_data->resume_step = 0;
223 /* This handles the case where sim_data was allocated prior to
224 needing a sim instance. */
225 sim_data->gdbsim_desc = sim_desc;
232 /* Return pointer to per-inferior simulator data using PTID to find the
233 inferior in question. Return NULL when no inferior is found or
234 when ptid has a zero or negative pid component. */
236 static struct sim_inferior_data *
237 get_sim_inferior_data_by_ptid (ptid_t ptid, int sim_instance_needed)
239 struct inferior *inf;
240 int pid = ptid_get_pid (ptid);
245 inf = find_inferior_pid (pid);
248 return get_sim_inferior_data (inf, sim_instance_needed);
253 /* Free the per-inferior simulator data. */
256 sim_inferior_data_cleanup (struct inferior *inf, void *data)
258 struct sim_inferior_data *sim_data = data;
260 if (sim_data != NULL)
262 if (sim_data->gdbsim_desc)
264 sim_close (sim_data->gdbsim_desc, 0);
265 sim_data->gdbsim_desc = NULL;
272 dump_mem (const gdb_byte *buf, int len)
274 fputs_unfiltered ("\t", gdb_stdlog);
276 if (len == 8 || len == 4)
280 memcpy (l, buf, len);
281 fprintf_unfiltered (gdb_stdlog, "0x%08x", l[0]);
283 fprintf_unfiltered (gdb_stdlog, " 0x%08x", l[1]);
289 for (i = 0; i < len; i++)
290 fprintf_unfiltered (gdb_stdlog, "0x%02x ", buf[i]);
293 fputs_unfiltered ("\n", gdb_stdlog);
296 /* Initialize gdb_callback. */
299 init_callbacks (void)
301 if (!callbacks_initialized)
303 gdb_callback = default_callback;
304 gdb_callback.init (&gdb_callback);
305 gdb_callback.write_stdout = gdb_os_write_stdout;
306 gdb_callback.flush_stdout = gdb_os_flush_stdout;
307 gdb_callback.write_stderr = gdb_os_write_stderr;
308 gdb_callback.flush_stderr = gdb_os_flush_stderr;
309 gdb_callback.printf_filtered = gdb_os_printf_filtered;
310 gdb_callback.vprintf_filtered = gdb_os_vprintf_filtered;
311 gdb_callback.evprintf_filtered = gdb_os_evprintf_filtered;
312 gdb_callback.error = gdb_os_error;
313 gdb_callback.poll_quit = gdb_os_poll_quit;
314 gdb_callback.magic = HOST_CALLBACK_MAGIC;
315 callbacks_initialized = 1;
319 /* Release callbacks (free resources used by them). */
324 if (callbacks_initialized)
326 gdb_callback.shutdown (&gdb_callback);
327 callbacks_initialized = 0;
331 /* GDB version of os_write_stdout callback. */
334 gdb_os_write_stdout (host_callback *p, const char *buf, int len)
339 ui_file_write (gdb_stdtarg, buf, len);
343 /* GDB version of os_flush_stdout callback. */
346 gdb_os_flush_stdout (host_callback *p)
348 gdb_flush (gdb_stdtarg);
351 /* GDB version of os_write_stderr callback. */
354 gdb_os_write_stderr (host_callback *p, const char *buf, int len)
359 for (i = 0; i < len; i++)
363 fputs_unfiltered (b, gdb_stdtargerr);
368 /* GDB version of os_flush_stderr callback. */
371 gdb_os_flush_stderr (host_callback *p)
373 gdb_flush (gdb_stdtargerr);
376 /* GDB version of printf_filtered callback. */
379 gdb_os_printf_filtered (host_callback * p, const char *format,...)
383 va_start (args, format);
384 vfprintf_filtered (gdb_stdout, format, args);
388 /* GDB version of error vprintf_filtered. */
391 gdb_os_vprintf_filtered (host_callback * p, const char *format, va_list ap)
393 vfprintf_filtered (gdb_stdout, format, ap);
396 /* GDB version of error evprintf_filtered. */
399 gdb_os_evprintf_filtered (host_callback * p, const char *format, va_list ap)
401 vfprintf_filtered (gdb_stderr, format, ap);
404 /* GDB version of error callback. */
407 gdb_os_error (host_callback * p, const char *format, ...)
411 va_start (args, format);
412 verror (format, args);
417 one2one_register_sim_regno (struct gdbarch *gdbarch, int regnum)
419 /* Only makes sense to supply raw registers. */
420 gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
425 gdbsim_fetch_register (struct target_ops *ops,
426 struct regcache *regcache, int regno)
428 struct gdbarch *gdbarch = get_regcache_arch (regcache);
429 struct sim_inferior_data *sim_data
430 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
434 for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
435 gdbsim_fetch_register (ops, regcache, regno);
439 switch (gdbarch_register_sim_regno (gdbarch, regno))
441 case LEGACY_SIM_REGNO_IGNORE:
443 case SIM_REGNO_DOES_NOT_EXIST:
445 /* For moment treat a `does not exist' register the same way
446 as an ``unavailable'' register. */
447 gdb_byte buf[MAX_REGISTER_SIZE];
450 memset (buf, 0, MAX_REGISTER_SIZE);
451 regcache_raw_supply (regcache, regno, buf);
457 static int warn_user = 1;
458 gdb_byte buf[MAX_REGISTER_SIZE];
461 gdb_assert (regno >= 0 && regno < gdbarch_num_regs (gdbarch));
462 memset (buf, 0, MAX_REGISTER_SIZE);
463 nr_bytes = sim_fetch_register (sim_data->gdbsim_desc,
464 gdbarch_register_sim_regno
467 register_size (gdbarch, regno));
469 && nr_bytes != register_size (gdbarch, regno) && warn_user)
471 fprintf_unfiltered (gdb_stderr,
472 "Size of register %s (%d/%d) "
473 "incorrect (%d instead of %d))",
474 gdbarch_register_name (gdbarch, regno),
476 gdbarch_register_sim_regno
478 nr_bytes, register_size (gdbarch, regno));
481 /* FIXME: cagney/2002-05-27: Should check `nr_bytes == 0'
482 indicating that GDB and the SIM have different ideas about
483 which registers are fetchable. */
484 /* Else if (nr_bytes < 0): an old simulator, that doesn't
485 think to return the register size. Just assume all is ok. */
486 regcache_raw_supply (regcache, regno, buf);
489 fprintf_unfiltered (gdb_stdlog,
490 "gdbsim_fetch_register: %d", regno);
491 /* FIXME: We could print something more intelligible. */
492 dump_mem (buf, register_size (gdbarch, regno));
501 gdbsim_store_register (struct target_ops *ops,
502 struct regcache *regcache, int regno)
504 struct gdbarch *gdbarch = get_regcache_arch (regcache);
505 struct sim_inferior_data *sim_data
506 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
510 for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
511 gdbsim_store_register (ops, regcache, regno);
514 else if (gdbarch_register_sim_regno (gdbarch, regno) >= 0)
516 gdb_byte tmp[MAX_REGISTER_SIZE];
519 regcache_cooked_read (regcache, regno, tmp);
520 nr_bytes = sim_store_register (sim_data->gdbsim_desc,
521 gdbarch_register_sim_regno
523 tmp, register_size (gdbarch, regno));
524 if (nr_bytes > 0 && nr_bytes != register_size (gdbarch, regno))
525 internal_error (__FILE__, __LINE__,
526 _("Register size different to expected"));
528 internal_error (__FILE__, __LINE__,
529 _("Register %d not updated"), regno);
531 warning (_("Register %s not updated"),
532 gdbarch_register_name (gdbarch, regno));
536 fprintf_unfiltered (gdb_stdlog, "gdbsim_store_register: %d", regno);
537 /* FIXME: We could print something more intelligible. */
538 dump_mem (tmp, register_size (gdbarch, regno));
543 /* Kill the running program. This may involve closing any open files
544 and releasing other resources acquired by the simulated program. */
547 gdbsim_kill (struct target_ops *ops)
550 fprintf_unfiltered (gdb_stdlog, "gdbsim_kill\n");
552 /* There is no need to `kill' running simulator - the simulator is
553 not running. Mourning it is enough. */
554 target_mourn_inferior ();
557 /* Load an executable file into the target process. This is expected to
558 not only bring new code into the target process, but also to update
559 GDB's symbol tables to match. */
562 gdbsim_load (char *args, int fromtty)
566 struct sim_inferior_data *sim_data
567 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
570 error_no_arg (_("program to load"));
572 argv = gdb_buildargv (args);
573 make_cleanup_freeargv (argv);
575 prog = tilde_expand (argv[0]);
578 error (_("GDB sim does not yet support a load offset."));
581 fprintf_unfiltered (gdb_stdlog, "gdbsim_load: prog \"%s\"\n", prog);
583 /* FIXME: We will print two messages on error.
584 Need error to either not print anything if passed NULL or need
585 another routine that doesn't take any arguments. */
586 if (sim_load (sim_data->gdbsim_desc, prog, NULL, fromtty) == SIM_RC_FAIL)
587 error (_("unable to load program"));
589 /* FIXME: If a load command should reset the targets registers then
590 a call to sim_create_inferior() should go here. */
592 sim_data->program_loaded = 1;
596 /* Start an inferior process and set inferior_ptid to its pid.
597 EXEC_FILE is the file to run.
598 ARGS is a string containing the arguments to the program.
599 ENV is the environment vector to pass. Errors reported with error().
600 On VxWorks and various standalone systems, we ignore exec_file. */
601 /* This is called not only when we first attach, but also when the
602 user types "run" after having attached. */
605 gdbsim_create_inferior (struct target_ops *target, char *exec_file, char *args,
606 char **env, int from_tty)
608 struct sim_inferior_data *sim_data
609 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
611 char *arg_buf, **argv;
613 if (exec_file == 0 || exec_bfd == 0)
614 warning (_("No executable file specified."));
615 if (!sim_data->program_loaded)
616 warning (_("No program loaded."));
619 fprintf_unfiltered (gdb_stdlog,
620 "gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
621 (exec_file ? exec_file : "(NULL)"),
624 if (ptid_equal (inferior_ptid, sim_data->remote_sim_ptid))
625 gdbsim_kill (target);
626 remove_breakpoints ();
627 init_wait_for_inferior ();
629 if (exec_file != NULL)
631 len = strlen (exec_file) + 1 + strlen (args) + 1 + /*slop */ 10;
632 arg_buf = (char *) alloca (len);
634 strcat (arg_buf, exec_file);
635 strcat (arg_buf, " ");
636 strcat (arg_buf, args);
637 argv = gdb_buildargv (arg_buf);
638 make_cleanup_freeargv (argv);
643 if (!have_inferiors ())
646 if (sim_create_inferior (sim_data->gdbsim_desc, exec_bfd, argv, env)
648 error (_("Unable to create sim inferior."));
650 inferior_ptid = sim_data->remote_sim_ptid;
651 inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
652 add_thread_silent (inferior_ptid);
654 insert_breakpoints (); /* Needed to get correct instruction
657 clear_proceed_status ();
660 /* The open routine takes the rest of the parameters from the command,
661 and (if successful) pushes a new target onto the stack.
662 Targets should supply this routine, if only to provide an error message. */
663 /* Called when selecting the simulator. E.g. (gdb) target sim name. */
666 gdbsim_open (char *args, int from_tty)
670 struct sim_inferior_data *sim_data;
671 SIM_DESC gdbsim_desc;
674 fprintf_unfiltered (gdb_stdlog,
675 "gdbsim_open: args \"%s\"\n", args ? args : "(null)");
677 /* Ensure that the sim target is not on the target stack. This is
678 necessary, because if it is on the target stack, the call to
679 push_target below will invoke sim_close(), thus freeing various
680 state (including a sim instance) that we allocate prior to
681 invoking push_target(). We want to delay the push_target()
682 operation until after we complete those operations which could
685 unpush_target (&gdbsim_ops);
687 len = (7 + 1 /* gdbsim */
688 + strlen (" -E little")
689 + strlen (" --architecture=xxxxxxxxxx")
690 + strlen (" --sysroot=") + strlen (gdb_sysroot) +
691 + (args ? strlen (args) : 0)
693 arg_buf = (char *) alloca (len);
694 strcpy (arg_buf, "gdbsim"); /* 7 */
695 /* Specify the byte order for the target when it is explicitly
696 specified by the user (not auto detected). */
697 switch (selected_byte_order ())
700 strcat (arg_buf, " -E big");
702 case BFD_ENDIAN_LITTLE:
703 strcat (arg_buf, " -E little");
705 case BFD_ENDIAN_UNKNOWN:
708 /* Specify the architecture of the target when it has been
709 explicitly specified */
710 if (selected_architecture_name () != NULL)
712 strcat (arg_buf, " --architecture=");
713 strcat (arg_buf, selected_architecture_name ());
715 /* Pass along gdb's concept of the sysroot. */
716 strcat (arg_buf, " --sysroot=");
717 strcat (arg_buf, gdb_sysroot);
718 /* finally, any explicit args */
721 strcat (arg_buf, " "); /* 1 */
722 strcat (arg_buf, args);
724 sim_argv = gdb_buildargv (arg_buf);
727 gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
729 if (gdbsim_desc == 0)
733 error (_("unable to create simulator instance"));
736 /* Reset the pid numberings for this batch of sim instances. */
737 next_pid = INITIAL_PID;
739 /* Allocate the inferior data, but do not allocate a sim instance
740 since we've already just done that. */
741 sim_data = get_sim_inferior_data (current_inferior (),
742 SIM_INSTANCE_NOT_NEEDED);
744 sim_data->gdbsim_desc = gdbsim_desc;
746 push_target (&gdbsim_ops);
747 printf_filtered ("Connected to the simulator.\n");
749 /* There's nothing running after "target sim" or "load"; not until
751 inferior_ptid = null_ptid;
756 /* Callback for iterate_over_inferiors. Called (indirectly) by
760 gdbsim_close_inferior (struct inferior *inf, void *arg)
762 struct sim_inferior_data *sim_data = inferior_data (inf,
763 sim_inferior_data_key);
764 if (sim_data != NULL)
766 ptid_t ptid = sim_data->remote_sim_ptid;
768 sim_inferior_data_cleanup (inf, sim_data);
769 set_inferior_data (inf, sim_inferior_data_key, NULL);
771 /* Having a ptid allocated and stored in remote_sim_ptid does
772 not mean that a corresponding inferior was ever created.
773 Thus we need to verify the existence of an inferior using the
774 pid in question before setting inferior_ptid via
775 switch_to_thread() or mourning the inferior. */
776 if (find_inferior_pid (ptid_get_pid (ptid)) != NULL)
778 switch_to_thread (ptid);
779 generic_mourn_inferior ();
786 /* Close out all files and local state before this target loses control. */
791 struct sim_inferior_data *sim_data
792 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
795 fprintf_unfiltered (gdb_stdlog, "gdbsim_close\n");
797 iterate_over_inferiors (gdbsim_close_inferior, NULL);
799 if (sim_argv != NULL)
810 /* Takes a program previously attached to and detaches it.
811 The program may resume execution (some targets do, some don't) and will
812 no longer stop on signals, etc. We better not have left any breakpoints
813 in the program or it'll die when it hits one. ARGS is arguments
814 typed by the user (e.g. a signal to send the process). FROM_TTY
815 says whether to be verbose or not. */
816 /* Terminate the open connection to the remote debugger.
817 Use this when you want to detach and do something else with your gdb. */
820 gdbsim_detach (struct target_ops *ops, const char *args, int from_tty)
823 fprintf_unfiltered (gdb_stdlog, "gdbsim_detach: args \"%s\"\n", args);
825 unpush_target (ops); /* calls gdbsim_close to do the real work */
827 printf_filtered ("Ending simulator %s debugging\n", target_shortname);
830 /* Resume execution of the target process. STEP says whether to single-step
831 or to run free; SIGGNAL is the signal value (e.g. SIGINT) to be given
832 to the target, or zero for no signal. */
836 enum gdb_signal siggnal;
841 gdbsim_resume_inferior (struct inferior *inf, void *arg)
843 struct sim_inferior_data *sim_data
844 = get_sim_inferior_data (inf, SIM_INSTANCE_NOT_NEEDED);
845 struct resume_data *rd = arg;
849 sim_data->resume_siggnal = rd->siggnal;
850 sim_data->resume_step = rd->step;
853 fprintf_unfiltered (gdb_stdlog,
854 _("gdbsim_resume: pid %d, step %d, signal %d\n"),
855 inf->pid, rd->step, rd->siggnal);
858 /* When called from iterate_over_inferiors, a zero return causes the
859 iteration process to proceed until there are no more inferiors to
865 gdbsim_resume (struct target_ops *ops,
866 ptid_t ptid, int step, enum gdb_signal siggnal)
868 struct resume_data rd;
869 struct sim_inferior_data *sim_data
870 = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
872 rd.siggnal = siggnal;
875 /* We don't access any sim_data members within this function.
876 What's of interest is whether or not the call to
877 get_sim_inferior_data_by_ptid(), above, is able to obtain a
878 non-NULL pointer. If it managed to obtain a non-NULL pointer, we
879 know we have a single inferior to consider. If it's NULL, we
880 either have multiple inferiors to resume or an error condition. */
883 gdbsim_resume_inferior (find_inferior_pid (ptid_get_pid (ptid)), &rd);
884 else if (ptid_equal (ptid, minus_one_ptid))
885 iterate_over_inferiors (gdbsim_resume_inferior, &rd);
887 error (_("The program is not being run."));
890 /* Notify the simulator of an asynchronous request to stop.
892 The simulator shall ensure that the stop request is eventually
893 delivered to the simulator. If the call is made while the
894 simulator is not running then the stop request is processed when
895 the simulator is next resumed.
897 For simulators that do not support this operation, just abort. */
900 gdbsim_stop_inferior (struct inferior *inf, void *arg)
902 struct sim_inferior_data *sim_data
903 = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
907 if (!sim_stop (sim_data->gdbsim_desc))
913 /* When called from iterate_over_inferiors, a zero return causes the
914 iteration process to proceed until there are no more inferiors to
920 gdbsim_stop (ptid_t ptid)
922 struct sim_inferior_data *sim_data;
924 if (ptid_equal (ptid, minus_one_ptid))
926 iterate_over_inferiors (gdbsim_stop_inferior, NULL);
930 struct inferior *inf = find_inferior_pid (ptid_get_pid (ptid));
933 error (_("Can't stop pid %d. No inferior found."),
934 ptid_get_pid (ptid));
936 gdbsim_stop_inferior (inf, NULL);
940 /* GDB version of os_poll_quit callback.
941 Taken from gdb/util.c - should be in a library. */
944 gdb_os_poll_quit (host_callback *p)
946 if (deprecated_ui_loop_hook != NULL)
947 deprecated_ui_loop_hook (0);
949 if (check_quit_flag ()) /* gdb's idea of quit */
951 clear_quit_flag (); /* we've stolen it */
957 /* Wait for inferior process to do something. Return pid of child,
958 or -1 in case of error; store status through argument pointer STATUS,
959 just as `wait' would. */
962 gdbsim_cntrl_c (int signo)
964 gdbsim_stop (minus_one_ptid);
968 gdbsim_wait (struct target_ops *ops,
969 ptid_t ptid, struct target_waitstatus *status, int options)
971 struct sim_inferior_data *sim_data;
972 static RETSIGTYPE (*prev_sigint) ();
974 enum sim_stop reason = sim_running;
976 /* This target isn't able to (yet) resume more than one inferior at a time.
977 When ptid is minus_one_ptid, just use the current inferior. If we're
978 given an explicit pid, we'll try to find it and use that instead. */
979 if (ptid_equal (ptid, minus_one_ptid))
980 sim_data = get_sim_inferior_data (current_inferior (),
981 SIM_INSTANCE_NEEDED);
984 sim_data = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NEEDED);
985 if (sim_data == NULL)
986 error (_("Unable to wait for pid %d. Inferior not found."),
987 ptid_get_pid (ptid));
988 inferior_ptid = ptid;
992 fprintf_unfiltered (gdb_stdlog, "gdbsim_wait\n");
994 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
996 struct sigaction sa, osa;
997 sa.sa_handler = gdbsim_cntrl_c;
998 sigemptyset (&sa.sa_mask);
1000 sigaction (SIGINT, &sa, &osa);
1001 prev_sigint = osa.sa_handler;
1004 prev_sigint = signal (SIGINT, gdbsim_cntrl_c);
1006 sim_resume (sim_data->gdbsim_desc, sim_data->resume_step,
1007 sim_data->resume_siggnal);
1009 signal (SIGINT, prev_sigint);
1010 sim_data->resume_step = 0;
1012 sim_stop_reason (sim_data->gdbsim_desc, &reason, &sigrc);
1017 status->kind = TARGET_WAITKIND_EXITED;
1018 status->value.integer = sigrc;
1023 case GDB_SIGNAL_ABRT:
1026 case GDB_SIGNAL_INT:
1027 case GDB_SIGNAL_TRAP:
1029 status->kind = TARGET_WAITKIND_STOPPED;
1030 status->value.sig = sigrc;
1035 status->kind = TARGET_WAITKIND_SIGNALLED;
1036 status->value.sig = sigrc;
1040 /* FIXME: Is this correct? */
1044 return inferior_ptid;
1047 /* Get ready to modify the registers array. On machines which store
1048 individual registers, this doesn't need to do anything. On machines
1049 which store all the registers in one fell swoop, this makes sure
1050 that registers contains all the registers from the program being
1054 gdbsim_prepare_to_store (struct regcache *regcache)
1056 /* Do nothing, since we can store individual regs. */
1059 /* Helper for gdbsim_xfer_partial that handles memory transfers.
1060 Arguments are like target_xfer_partial. */
1063 gdbsim_xfer_memory (struct target_ops *target,
1064 gdb_byte *readbuf, const gdb_byte *writebuf,
1065 ULONGEST memaddr, LONGEST len)
1067 struct sim_inferior_data *sim_data
1068 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1070 /* If this target doesn't have memory yet, return 0 causing the
1071 request to be passed to a lower target, hopefully an exec
1073 if (!target->to_has_memory (target))
1076 if (!sim_data->program_loaded)
1077 error (_("No program loaded."));
1079 /* Note that we obtained the sim_data pointer above using
1080 SIM_INSTANCE_NOT_NEEDED. We do this so that we don't needlessly
1081 allocate a sim instance prior to loading a program. If we
1082 get to this point in the code though, gdbsim_desc should be
1083 non-NULL. (Note that a sim instance is needed in order to load
1085 gdb_assert (sim_data->gdbsim_desc != NULL);
1088 fprintf_unfiltered (gdb_stdlog,
1089 "gdbsim_xfer_memory: readbuf %s, writebuf %s, "
1090 "memaddr %s, len %s\n",
1091 host_address_to_string (readbuf),
1092 host_address_to_string (writebuf),
1093 paddress (target_gdbarch (), memaddr),
1098 if (remote_debug && len > 0)
1099 dump_mem (writebuf, len);
1100 len = sim_write (sim_data->gdbsim_desc, memaddr, writebuf, len);
1104 len = sim_read (sim_data->gdbsim_desc, memaddr, readbuf, len);
1105 if (remote_debug && len > 0)
1106 dump_mem (readbuf, len);
1111 /* Target to_xfer_partial implementation. */
1114 gdbsim_xfer_partial (struct target_ops *ops, enum target_object object,
1115 const char *annex, gdb_byte *readbuf,
1116 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1120 case TARGET_OBJECT_MEMORY:
1121 return gdbsim_xfer_memory (ops, readbuf, writebuf, offset, len);
1129 gdbsim_files_info (struct target_ops *target)
1131 struct sim_inferior_data *sim_data
1132 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
1133 const char *file = "nothing";
1136 file = bfd_get_filename (exec_bfd);
1139 fprintf_unfiltered (gdb_stdlog, "gdbsim_files_info: file \"%s\"\n", file);
1143 fprintf_unfiltered (gdb_stdlog, "\tAttached to %s running program %s\n",
1144 target_shortname, file);
1145 sim_info (sim_data->gdbsim_desc, 0);
1149 /* Clear the simulator's notion of what the break points are. */
1152 gdbsim_mourn_inferior (struct target_ops *target)
1154 struct sim_inferior_data *sim_data
1155 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1158 fprintf_unfiltered (gdb_stdlog, "gdbsim_mourn_inferior:\n");
1160 remove_breakpoints ();
1161 generic_mourn_inferior ();
1162 delete_thread_silent (sim_data->remote_sim_ptid);
1165 /* Pass the command argument through to the simulator verbatim. The
1166 simulator must do any command interpretation work. */
1169 simulator_command (char *args, int from_tty)
1171 struct sim_inferior_data *sim_data;
1173 /* We use inferior_data() instead of get_sim_inferior_data() here in
1174 order to avoid attaching a sim_inferior_data struct to an
1175 inferior unnecessarily. The reason we take such care here is due
1176 to the fact that this function, simulator_command(), may be called
1177 even when the sim target is not active. If we were to use
1178 get_sim_inferior_data() here, it is possible that this call would
1179 be made either prior to gdbsim_open() or after gdbsim_close(),
1180 thus allocating memory that would not be garbage collected until
1181 the ultimate destruction of the associated inferior. */
1183 sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
1184 if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1187 /* PREVIOUSLY: The user may give a command before the simulator
1188 is opened. [...] (??? assuming of course one wishes to
1189 continue to allow commands to be sent to unopened simulators,
1190 which isn't entirely unreasonable). */
1192 /* The simulator is a builtin abstraction of a remote target.
1193 Consistent with that model, access to the simulator, via sim
1194 commands, is restricted to the period when the channel to the
1195 simulator is open. */
1197 error (_("Not connected to the simulator target"));
1200 sim_do_command (sim_data->gdbsim_desc, args);
1202 /* Invalidate the register cache, in case the simulator command does
1204 registers_changed ();
1207 static VEC (char_ptr) *
1208 sim_command_completer (struct cmd_list_element *ignore, const char *text,
1211 struct sim_inferior_data *sim_data;
1214 VEC (char_ptr) *result = NULL;
1216 sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
1217 if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1220 tmp = sim_complete_command (sim_data->gdbsim_desc, text, word);
1224 /* Transform the array into a VEC, and then free the array. */
1225 for (i = 0; tmp[i] != NULL; i++)
1226 VEC_safe_push (char_ptr, result, tmp[i]);
1232 /* Check to see if a thread is still alive. */
1235 gdbsim_thread_alive (struct target_ops *ops, ptid_t ptid)
1237 struct sim_inferior_data *sim_data
1238 = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
1240 if (sim_data == NULL)
1243 if (ptid_equal (ptid, sim_data->remote_sim_ptid))
1244 /* The simulators' task is always alive. */
1250 /* Convert a thread ID to a string. Returns the string in a static
1254 gdbsim_pid_to_str (struct target_ops *ops, ptid_t ptid)
1256 return normal_pid_to_str (ptid);
1259 /* Simulator memory may be accessed after the program has been loaded. */
1262 gdbsim_has_all_memory (struct target_ops *ops)
1264 struct sim_inferior_data *sim_data
1265 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1267 if (!sim_data->program_loaded)
1274 gdbsim_has_memory (struct target_ops *ops)
1276 struct sim_inferior_data *sim_data
1277 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1279 if (!sim_data->program_loaded)
1285 /* Define the target subroutine names. */
1287 struct target_ops gdbsim_ops;
1290 init_gdbsim_ops (void)
1292 gdbsim_ops.to_shortname = "sim";
1293 gdbsim_ops.to_longname = "simulator";
1294 gdbsim_ops.to_doc = "Use the compiled-in simulator.";
1295 gdbsim_ops.to_open = gdbsim_open;
1296 gdbsim_ops.to_close = gdbsim_close;
1297 gdbsim_ops.to_detach = gdbsim_detach;
1298 gdbsim_ops.to_resume = gdbsim_resume;
1299 gdbsim_ops.to_wait = gdbsim_wait;
1300 gdbsim_ops.to_fetch_registers = gdbsim_fetch_register;
1301 gdbsim_ops.to_store_registers = gdbsim_store_register;
1302 gdbsim_ops.to_prepare_to_store = gdbsim_prepare_to_store;
1303 gdbsim_ops.to_xfer_partial = gdbsim_xfer_partial;
1304 gdbsim_ops.to_files_info = gdbsim_files_info;
1305 gdbsim_ops.to_insert_breakpoint = memory_insert_breakpoint;
1306 gdbsim_ops.to_remove_breakpoint = memory_remove_breakpoint;
1307 gdbsim_ops.to_kill = gdbsim_kill;
1308 gdbsim_ops.to_load = gdbsim_load;
1309 gdbsim_ops.to_create_inferior = gdbsim_create_inferior;
1310 gdbsim_ops.to_mourn_inferior = gdbsim_mourn_inferior;
1311 gdbsim_ops.to_stop = gdbsim_stop;
1312 gdbsim_ops.to_thread_alive = gdbsim_thread_alive;
1313 gdbsim_ops.to_pid_to_str = gdbsim_pid_to_str;
1314 gdbsim_ops.to_stratum = process_stratum;
1315 gdbsim_ops.to_has_all_memory = gdbsim_has_all_memory;
1316 gdbsim_ops.to_has_memory = gdbsim_has_memory;
1317 gdbsim_ops.to_has_stack = default_child_has_stack;
1318 gdbsim_ops.to_has_registers = default_child_has_registers;
1319 gdbsim_ops.to_has_execution = default_child_has_execution;
1320 gdbsim_ops.to_magic = OPS_MAGIC;
1324 _initialize_remote_sim (void)
1326 struct cmd_list_element *c;
1329 add_target (&gdbsim_ops);
1331 c = add_com ("sim", class_obscure, simulator_command,
1332 _("Send a command to the simulator."));
1333 set_cmd_completer (c, sim_command_completer);
1335 sim_inferior_data_key
1336 = register_inferior_data_with_cleanup (NULL, sim_inferior_data_cleanup);