* remote-sim.c (gdbsim_xfer_inferior_memory): Replace
[external/binutils.git] / gdb / remote-sim.c
1 /* Generic remote debugging interface for simulators.
2
3    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
4    2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5
6    Contributed by Cygnus Support.
7    Steve Chamberlain (sac@cygnus.com).
8
9    This file is part of GDB.
10
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 3 of the License, or
14    (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
23
24 #include "defs.h"
25 #include "inferior.h"
26 #include "value.h"
27 #include "gdb_string.h"
28 #include <ctype.h>
29 #include <fcntl.h>
30 #include <signal.h>
31 #include <setjmp.h>
32 #include <errno.h>
33 #include "terminal.h"
34 #include "target.h"
35 #include "gdbcore.h"
36 #include "gdb/callback.h"
37 #include "gdb/remote-sim.h"
38 #include "command.h"
39 #include "regcache.h"
40 #include "gdb_assert.h"
41 #include "sim-regno.h"
42 #include "arch-utils.h"
43 #include "readline/readline.h"
44 #include "gdbthread.h"
45
46 /* Prototypes */
47
48 extern void _initialize_remote_sim (void);
49
50 static void dump_mem (char *buf, int len);
51
52 static void init_callbacks (void);
53
54 static void end_callbacks (void);
55
56 static int gdb_os_write_stdout (host_callback *, const char *, int);
57
58 static void gdb_os_flush_stdout (host_callback *);
59
60 static int gdb_os_write_stderr (host_callback *, const char *, int);
61
62 static void gdb_os_flush_stderr (host_callback *);
63
64 static int gdb_os_poll_quit (host_callback *);
65
66 /* printf_filtered is depreciated */
67 static void gdb_os_printf_filtered (host_callback *, const char *, ...);
68
69 static void gdb_os_vprintf_filtered (host_callback *, const char *, va_list);
70
71 static void gdb_os_evprintf_filtered (host_callback *, const char *, va_list);
72
73 static void gdb_os_error (host_callback *, const char *, ...)
74      ATTRIBUTE_NORETURN;
75
76 static void gdbsim_kill (struct target_ops *);
77
78 static void gdbsim_load (char *prog, int fromtty);
79
80 static void gdbsim_open (char *args, int from_tty);
81
82 static void gdbsim_close (int quitting);
83
84 static void gdbsim_detach (struct target_ops *ops, char *args, int from_tty);
85
86 static void gdbsim_prepare_to_store (struct regcache *regcache);
87
88 static void gdbsim_files_info (struct target_ops *target);
89
90 static void gdbsim_mourn_inferior (struct target_ops *target);
91
92 static void gdbsim_stop (ptid_t ptid);
93
94 void simulator_command (char *args, int from_tty);
95
96 /* Naming convention:
97
98    sim_* are the interface to the simulator (see remote-sim.h).
99    gdbsim_* are stuff which is internal to gdb.  */
100
101 /* Forward data declarations */
102 extern struct target_ops gdbsim_ops;
103
104 static const struct inferior_data *sim_inferior_data_key;
105
106 /* Simulator-specific, per-inferior state.  */
107 struct sim_inferior_data {
108   /* Flag which indicates whether or not the program has been loaded.  */
109   int program_loaded;
110
111   /* Simulator descriptor for this inferior.  */
112   SIM_DESC gdbsim_desc;
113
114   /* This is the ptid we use for this particular simulator instance.  Its
115      value is somewhat arbitrary, as the simulator target don't have a
116      notion of tasks or threads, but we need something non-null to place
117      in inferior_ptid.  For simulators which permit multiple instances,
118      we also need a unique identifier to use for each inferior.  */
119   ptid_t remote_sim_ptid;
120
121   /* Signal with which to resume.  */
122   enum target_signal resume_siggnal;
123
124   /* Flag which indicates whether resume should step or not.  */
125   int resume_step;
126 };
127
128 /* Flag indicating the "open" status of this module.  It's set to 1
129    in gdbsim_open() and 0 in gdbsim_close().  */
130 static int gdbsim_is_open = 0;
131
132 /* Value of the next pid to allocate for an inferior.  As indicated
133    elsewhere, its initial value is somewhat arbitrary; it's critical
134    though that it's not zero or negative.  */
135 static int next_pid;
136 #define INITIAL_PID 42000
137
138 /* Argument list to pass to sim_open().  It is allocated in gdbsim_open()
139    and deallocated in gdbsim_close().  The lifetime needs to extend beyond
140    the call to gdbsim_open() due to the fact that other sim instances other
141    than the first will be allocated after the gdbsim_open() call.  */
142 static char **sim_argv = NULL;
143
144 /* OS-level callback functions for write, flush, etc.  */
145 static host_callback gdb_callback;
146 static int callbacks_initialized = 0;
147
148 /* Callback for iterate_over_inferiors.  It checks to see if the sim
149    descriptor passed via ARG is the same as that for the inferior
150    designated by INF.  Return true if so; false otherwise.  */
151
152 static int
153 check_for_duplicate_sim_descriptor (struct inferior *inf, void *arg)
154 {
155   struct sim_inferior_data *sim_data;
156   SIM_DESC new_sim_desc = arg;
157
158   sim_data = inferior_data (inf, sim_inferior_data_key);
159
160   return (sim_data != NULL && sim_data->gdbsim_desc == new_sim_desc);
161 }
162
163 /* Flags indicating whether or not a sim instance is needed.  One of these
164    flags should be passed to get_sim_inferior_data().  */
165
166 enum {SIM_INSTANCE_NOT_NEEDED = 0, SIM_INSTANCE_NEEDED = 1};
167
168 /* Obtain pointer to per-inferior simulator data, allocating it if necessary.
169    Attempt to open the sim if SIM_INSTANCE_NEEDED is true.  */
170
171 static struct sim_inferior_data *
172 get_sim_inferior_data (struct inferior *inf, int sim_instance_needed)
173 {
174   SIM_DESC sim_desc = NULL;
175   struct sim_inferior_data *sim_data
176     = inferior_data (inf, sim_inferior_data_key);
177
178   /* Try to allocate a new sim instance, if needed.  We do this ahead of
179      a potential allocation of a sim_inferior_data struct in order to
180      avoid needlessly allocating that struct in the event that the sim
181      instance allocation fails.  */
182   if (sim_instance_needed == SIM_INSTANCE_NEEDED 
183       && (sim_data == NULL || sim_data->gdbsim_desc == NULL))
184     {
185       struct inferior *idup;
186       sim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
187       if (sim_desc == NULL)
188         error (_("Unable to create simulator instance for inferior %d."),
189                inf->num);
190
191       idup = iterate_over_inferiors (check_for_duplicate_sim_descriptor,
192                                      sim_desc);
193       if (idup != NULL)
194         {
195           /* We don't close the descriptor due to the fact that it's
196              shared with some other inferior.  If we were to close it,
197              that might needlessly muck up the other inferior.  Of
198              course, it's possible that the damage has already been
199              done...  Note that it *will* ultimately be closed during
200              cleanup of the other inferior.  */
201           sim_desc = NULL;
202           error (
203  _("Inferior %d and inferior %d would have identical simulator state.\n"
204    "(This simulator does not support the running of more than one inferior.)"),
205                  inf->num, idup->num); 
206         }
207     }
208
209   if (sim_data == NULL)
210     {
211       sim_data = XZALLOC(struct sim_inferior_data);
212       set_inferior_data (inf, sim_inferior_data_key, sim_data);
213
214       /* Allocate a ptid for this inferior.  */
215       sim_data->remote_sim_ptid = ptid_build (next_pid, 0, next_pid);
216       next_pid++;
217
218       /* Initialize the other instance variables.  */
219       sim_data->program_loaded = 0;
220       sim_data->gdbsim_desc = sim_desc;
221       sim_data->resume_siggnal = TARGET_SIGNAL_0;
222       sim_data->resume_step = 0;
223     }
224   else if (sim_desc)
225     {
226       /* This handles the case where sim_data was allocated prior to
227          needing a sim instance.  */
228       sim_data->gdbsim_desc = sim_desc;
229     }
230
231
232   return sim_data;
233 }
234
235 /* Return pointer to per-inferior simulator data using PTID to find the
236    inferior in question.  Return NULL when no inferior is found or
237    when ptid has a zero or negative pid component.  */
238
239 static struct sim_inferior_data *
240 get_sim_inferior_data_by_ptid (ptid_t ptid, int sim_instance_needed)
241 {
242   struct inferior *inf;
243   int pid = ptid_get_pid (ptid);
244
245   if (pid <= 0)
246     return NULL;
247   
248   inf = find_inferior_pid (pid);
249
250   if (inf)
251     return get_sim_inferior_data (inf, sim_instance_needed);
252   else
253     return NULL;
254 }
255
256 /* Free the per-inferior simulator data.  */
257
258 static void
259 sim_inferior_data_cleanup (struct inferior *inf, void *data)
260 {
261   struct sim_inferior_data *sim_data = data;
262
263   if (sim_data != NULL)
264     {
265       if (sim_data->gdbsim_desc)
266         {
267           sim_close (sim_data->gdbsim_desc, 0);
268           sim_data->gdbsim_desc = NULL;
269         }
270       xfree (sim_data);
271     }
272 }
273
274 static void
275 dump_mem (char *buf, int len)
276 {
277   if (len <= 8)
278     {
279       if (len == 8 || len == 4)
280         {
281           long l[2];
282
283           memcpy (l, buf, len);
284           printf_filtered ("\t0x%lx", l[0]);
285           if (len == 8)
286             printf_filtered (" 0x%lx", l[1]);
287           printf_filtered ("\n");
288         }
289       else
290         {
291           int i;
292
293           printf_filtered ("\t");
294           for (i = 0; i < len; i++)
295             printf_filtered ("0x%x ", buf[i]);
296           printf_filtered ("\n");
297         }
298     }
299 }
300
301 /* Initialize gdb_callback.  */
302
303 static void
304 init_callbacks (void)
305 {
306   if (!callbacks_initialized)
307     {
308       gdb_callback = default_callback;
309       gdb_callback.init (&gdb_callback);
310       gdb_callback.write_stdout = gdb_os_write_stdout;
311       gdb_callback.flush_stdout = gdb_os_flush_stdout;
312       gdb_callback.write_stderr = gdb_os_write_stderr;
313       gdb_callback.flush_stderr = gdb_os_flush_stderr;
314       gdb_callback.printf_filtered = gdb_os_printf_filtered;
315       gdb_callback.vprintf_filtered = gdb_os_vprintf_filtered;
316       gdb_callback.evprintf_filtered = gdb_os_evprintf_filtered;
317       gdb_callback.error = gdb_os_error;
318       gdb_callback.poll_quit = gdb_os_poll_quit;
319       gdb_callback.magic = HOST_CALLBACK_MAGIC;
320       callbacks_initialized = 1;
321     }
322 }
323
324 /* Release callbacks (free resources used by them).  */
325
326 static void
327 end_callbacks (void)
328 {
329   if (callbacks_initialized)
330     {
331       gdb_callback.shutdown (&gdb_callback);
332       callbacks_initialized = 0;
333     }
334 }
335
336 /* GDB version of os_write_stdout callback.  */
337
338 static int
339 gdb_os_write_stdout (host_callback *p, const char *buf, int len)
340 {
341   int i;
342   char b[2];
343
344   ui_file_write (gdb_stdtarg, buf, len);
345   return len;
346 }
347
348 /* GDB version of os_flush_stdout callback.  */
349
350 static void
351 gdb_os_flush_stdout (host_callback *p)
352 {
353   gdb_flush (gdb_stdtarg);
354 }
355
356 /* GDB version of os_write_stderr callback.  */
357
358 static int
359 gdb_os_write_stderr (host_callback *p, const char *buf, int len)
360 {
361   int i;
362   char b[2];
363
364   for (i = 0; i < len; i++)
365     {
366       b[0] = buf[i];
367       b[1] = 0;
368       fputs_unfiltered (b, gdb_stdtargerr);
369     }
370   return len;
371 }
372
373 /* GDB version of os_flush_stderr callback.  */
374
375 static void
376 gdb_os_flush_stderr (host_callback *p)
377 {
378   gdb_flush (gdb_stdtargerr);
379 }
380
381 /* GDB version of printf_filtered callback.  */
382
383 static void
384 gdb_os_printf_filtered (host_callback * p, const char *format,...)
385 {
386   va_list args;
387
388   va_start (args, format);
389   vfprintf_filtered (gdb_stdout, format, args);
390   va_end (args);
391 }
392
393 /* GDB version of error vprintf_filtered.  */
394
395 static void
396 gdb_os_vprintf_filtered (host_callback * p, const char *format, va_list ap)
397 {
398   vfprintf_filtered (gdb_stdout, format, ap);
399 }
400
401 /* GDB version of error evprintf_filtered.  */
402
403 static void
404 gdb_os_evprintf_filtered (host_callback * p, const char *format, va_list ap)
405 {
406   vfprintf_filtered (gdb_stderr, format, ap);
407 }
408
409 /* GDB version of error callback.  */
410
411 static void
412 gdb_os_error (host_callback * p, const char *format, ...)
413 {
414   va_list args;
415
416   va_start (args, format);
417   verror (format, args);
418   va_end (args);
419 }
420
421 int
422 one2one_register_sim_regno (struct gdbarch *gdbarch, int regnum)
423 {
424   /* Only makes sense to supply raw registers.  */
425   gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
426   return regnum;
427 }
428
429 static void
430 gdbsim_fetch_register (struct target_ops *ops,
431                        struct regcache *regcache, int regno)
432 {
433   struct gdbarch *gdbarch = get_regcache_arch (regcache);
434   struct sim_inferior_data *sim_data
435     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
436
437   if (regno == -1)
438     {
439       for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
440         gdbsim_fetch_register (ops, regcache, regno);
441       return;
442     }
443
444   switch (gdbarch_register_sim_regno (gdbarch, regno))
445     {
446     case LEGACY_SIM_REGNO_IGNORE:
447       break;
448     case SIM_REGNO_DOES_NOT_EXIST:
449       {
450         /* For moment treat a `does not exist' register the same way
451            as an ``unavailable'' register.  */
452         char buf[MAX_REGISTER_SIZE];
453         int nr_bytes;
454
455         memset (buf, 0, MAX_REGISTER_SIZE);
456         regcache_raw_supply (regcache, regno, buf);
457         break;
458       }
459       
460     default:
461       {
462         static int warn_user = 1;
463         char buf[MAX_REGISTER_SIZE];
464         int nr_bytes;
465
466         gdb_assert (regno >= 0 && regno < gdbarch_num_regs (gdbarch));
467         memset (buf, 0, MAX_REGISTER_SIZE);
468         nr_bytes = sim_fetch_register (sim_data->gdbsim_desc,
469                                        gdbarch_register_sim_regno
470                                          (gdbarch, regno),
471                                        buf,
472                                        register_size (gdbarch, regno));
473         if (nr_bytes > 0
474             && nr_bytes != register_size (gdbarch, regno) && warn_user)
475           {
476             fprintf_unfiltered (gdb_stderr,
477                                 "Size of register %s (%d/%d) incorrect (%d instead of %d))",
478                                 gdbarch_register_name (gdbarch, regno),
479                                 regno,
480                                 gdbarch_register_sim_regno
481                                   (gdbarch, regno),
482                                 nr_bytes, register_size (gdbarch, regno));
483             warn_user = 0;
484           }
485         /* FIXME: cagney/2002-05-27: Should check `nr_bytes == 0'
486            indicating that GDB and the SIM have different ideas about
487            which registers are fetchable.  */
488         /* Else if (nr_bytes < 0): an old simulator, that doesn't
489            think to return the register size.  Just assume all is ok.  */
490         regcache_raw_supply (regcache, regno, buf);
491         if (remote_debug)
492           {
493             printf_filtered ("gdbsim_fetch_register: %d", regno);
494             /* FIXME: We could print something more intelligible.  */
495             dump_mem (buf, register_size (gdbarch, regno));
496           }
497         break;
498       }
499     }
500 }
501
502
503 static void
504 gdbsim_store_register (struct target_ops *ops,
505                        struct regcache *regcache, int regno)
506 {
507   struct gdbarch *gdbarch = get_regcache_arch (regcache);
508   struct sim_inferior_data *sim_data
509     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
510
511   if (regno == -1)
512     {
513       for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
514         gdbsim_store_register (ops, regcache, regno);
515       return;
516     }
517   else if (gdbarch_register_sim_regno (gdbarch, regno) >= 0)
518     {
519       char tmp[MAX_REGISTER_SIZE];
520       int nr_bytes;
521
522       regcache_cooked_read (regcache, regno, tmp);
523       nr_bytes = sim_store_register (sim_data->gdbsim_desc,
524                                      gdbarch_register_sim_regno
525                                        (gdbarch, regno),
526                                      tmp, register_size (gdbarch, regno));
527       if (nr_bytes > 0 && nr_bytes != register_size (gdbarch, regno))
528         internal_error (__FILE__, __LINE__,
529                         _("Register size different to expected"));
530       /* FIXME: cagney/2002-05-27: Should check `nr_bytes == 0'
531          indicating that GDB and the SIM have different ideas about
532          which registers are fetchable.  */
533       if (remote_debug)
534         {
535           printf_filtered ("gdbsim_store_register: %d", regno);
536           /* FIXME: We could print something more intelligible.  */
537           dump_mem (tmp, register_size (gdbarch, regno));
538         }
539     }
540 }
541
542 /* Kill the running program.  This may involve closing any open files
543    and releasing other resources acquired by the simulated program.  */
544
545 static void
546 gdbsim_kill (struct target_ops *ops)
547 {
548   if (remote_debug)
549     printf_filtered ("gdbsim_kill\n");
550
551   /* There is no need to `kill' running simulator - the simulator is
552      not running.  Mourning it is enough.  */
553   target_mourn_inferior ();
554 }
555
556 /* Load an executable file into the target process.  This is expected to
557    not only bring new code into the target process, but also to update
558    GDB's symbol tables to match.  */
559
560 static void
561 gdbsim_load (char *args, int fromtty)
562 {
563   char **argv;
564   char *prog;
565   struct sim_inferior_data *sim_data
566     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
567
568   if (args == NULL)
569       error_no_arg (_("program to load"));
570
571   argv = gdb_buildargv (args);
572   make_cleanup_freeargv (argv);
573
574   prog = tilde_expand (argv[0]);
575
576   if (argv[1] != NULL)
577     error (_("GDB sim does not yet support a load offset."));
578
579   if (remote_debug)
580     printf_filtered ("gdbsim_load: prog \"%s\"\n", prog);
581
582   /* FIXME: We will print two messages on error.
583      Need error to either not print anything if passed NULL or need
584      another routine that doesn't take any arguments.  */
585   if (sim_load (sim_data->gdbsim_desc, prog, NULL, fromtty) == SIM_RC_FAIL)
586     error (_("unable to load program"));
587
588   /* FIXME: If a load command should reset the targets registers then
589      a call to sim_create_inferior() should go here. */
590
591   sim_data->program_loaded = 1;
592 }
593
594
595 /* Start an inferior process and set inferior_ptid to its pid.
596    EXEC_FILE is the file to run.
597    ARGS is a string containing the arguments to the program.
598    ENV is the environment vector to pass.  Errors reported with error().
599    On VxWorks and various standalone systems, we ignore exec_file.  */
600 /* This is called not only when we first attach, but also when the
601    user types "run" after having attached.  */
602
603 static void
604 gdbsim_create_inferior (struct target_ops *target, char *exec_file, char *args,
605                         char **env, int from_tty)
606 {
607   struct sim_inferior_data *sim_data
608     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
609   int len;
610   char *arg_buf, **argv;
611
612   if (exec_file == 0 || exec_bfd == 0)
613     warning (_("No executable file specified."));
614   if (!sim_data->program_loaded)
615     warning (_("No program loaded."));
616
617   if (remote_debug)
618     printf_filtered ("gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
619                      (exec_file ? exec_file : "(NULL)"),
620                      args);
621
622   if (ptid_equal (inferior_ptid, sim_data->remote_sim_ptid))
623     gdbsim_kill (target);
624   remove_breakpoints ();
625   init_wait_for_inferior ();
626
627   if (exec_file != NULL)
628     {
629       len = strlen (exec_file) + 1 + strlen (args) + 1 + /*slop */ 10;
630       arg_buf = (char *) alloca (len);
631       arg_buf[0] = '\0';
632       strcat (arg_buf, exec_file);
633       strcat (arg_buf, " ");
634       strcat (arg_buf, args);
635       argv = gdb_buildargv (arg_buf);
636       make_cleanup_freeargv (argv);
637     }
638   else
639     argv = NULL;
640   sim_create_inferior (sim_data->gdbsim_desc, exec_bfd, argv, env);
641
642   inferior_ptid = sim_data->remote_sim_ptid;
643   inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
644   add_thread_silent (inferior_ptid);
645
646   insert_breakpoints ();        /* Needed to get correct instruction in cache */
647
648   clear_proceed_status ();
649 }
650
651 /* The open routine takes the rest of the parameters from the command,
652    and (if successful) pushes a new target onto the stack.
653    Targets should supply this routine, if only to provide an error message.  */
654 /* Called when selecting the simulator. EG: (gdb) target sim name.  */
655
656 static void
657 gdbsim_open (char *args, int from_tty)
658 {
659   int len;
660   char *arg_buf;
661   struct sim_inferior_data *sim_data;
662   SIM_DESC gdbsim_desc;
663
664   if (remote_debug)
665     printf_filtered ("gdbsim_open: args \"%s\"\n", args ? args : "(null)");
666
667   /* Ensure that the sim target is not on the target stack.  This is
668      necessary, because if it is on the target stack, the call to
669      push_target below will invoke sim_close(), thus freeing various
670      state (including a sim instance) that we allocate prior to
671      invoking push_target().  We want to delay the push_target()
672      operation until after we complete those operations which could
673      error out.  */
674   if (gdbsim_is_open)
675     unpush_target (&gdbsim_ops);
676
677   len = (7 + 1                  /* gdbsim */
678          + strlen (" -E little")
679          + strlen (" --architecture=xxxxxxxxxx")
680          + (args ? strlen (args) : 0)
681          + 50) /* slack */ ;
682   arg_buf = (char *) alloca (len);
683   strcpy (arg_buf, "gdbsim");   /* 7 */
684   /* Specify the byte order for the target when it is explicitly
685      specified by the user (not auto detected). */
686   switch (selected_byte_order ())
687     {
688     case BFD_ENDIAN_BIG:
689       strcat (arg_buf, " -E big");
690       break;
691     case BFD_ENDIAN_LITTLE:
692       strcat (arg_buf, " -E little");
693       break;
694     case BFD_ENDIAN_UNKNOWN:
695       break;
696     }
697   /* Specify the architecture of the target when it has been
698      explicitly specified */
699   if (selected_architecture_name () != NULL)
700     {
701       strcat (arg_buf, " --architecture=");
702       strcat (arg_buf, selected_architecture_name ());
703     }
704   /* finally, any explicit args */
705   if (args)
706     {
707       strcat (arg_buf, " ");    /* 1 */
708       strcat (arg_buf, args);
709     }
710   sim_argv = gdb_buildargv (arg_buf);
711
712   init_callbacks ();
713   gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
714
715   if (gdbsim_desc == 0)
716     {
717       freeargv (sim_argv);
718       sim_argv = NULL;
719       error (_("unable to create simulator instance"));
720     }
721
722   /* Reset the pid numberings for this batch of sim instances.  */
723   next_pid = INITIAL_PID;
724
725   /* Allocate the inferior data, but do not allocate a sim instance
726      since we've already just done that.  */
727   sim_data = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
728
729   sim_data->gdbsim_desc = gdbsim_desc;
730
731   push_target (&gdbsim_ops);
732   printf_filtered ("Connected to the simulator.\n");
733
734   /* There's nothing running after "target sim" or "load"; not until
735      "run".  */
736   inferior_ptid = null_ptid;
737
738   gdbsim_is_open = 1;
739 }
740
741 /* Callback for iterate_over_inferiors.  Called (indirectly) by
742    gdbsim_close().  */
743
744 static int
745 gdbsim_close_inferior (struct inferior *inf, void *arg)
746 {
747   struct sim_inferior_data *sim_data = inferior_data (inf,
748                                                       sim_inferior_data_key);
749   if (sim_data != NULL)
750     {
751       ptid_t ptid = sim_data->remote_sim_ptid;
752
753       sim_inferior_data_cleanup (inf, sim_data);
754       set_inferior_data (inf, sim_inferior_data_key, NULL);
755
756       /* Having a ptid allocated and stored in remote_sim_ptid does
757          not mean that a corresponding inferior was ever created. 
758          Thus we need to verify the existence of an inferior using the
759          pid in question before setting inferior_ptid via
760          switch_to_thread() or mourning the inferior.  */
761       if (find_inferior_pid (ptid_get_pid (ptid)) != NULL)
762         {
763           switch_to_thread (ptid);
764           generic_mourn_inferior ();
765         }
766     }
767
768   return 0;
769 }
770
771 /* Does whatever cleanup is required for a target that we are no longer
772    going to be calling.  Argument says whether we are quitting gdb and
773    should not get hung in case of errors, or whether we want a clean
774    termination even if it takes a while.  This routine is automatically
775    always called just before a routine is popped off the target stack.
776    Closing file descriptors and freeing memory are typical things it should
777    do.  */
778 /* Close out all files and local state before this target loses control. */
779
780 static void
781 gdbsim_close (int quitting)
782 {
783   struct sim_inferior_data *sim_data
784     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
785
786   if (remote_debug)
787     printf_filtered ("gdbsim_close: quitting %d\n", quitting);
788
789   iterate_over_inferiors (gdbsim_close_inferior, NULL);
790
791   if (sim_argv != NULL)
792     {
793       freeargv (sim_argv);
794       sim_argv = NULL;
795     }
796
797   end_callbacks ();
798
799   gdbsim_is_open = 0;
800 }
801
802 /* Takes a program previously attached to and detaches it.
803    The program may resume execution (some targets do, some don't) and will
804    no longer stop on signals, etc.  We better not have left any breakpoints
805    in the program or it'll die when it hits one.  ARGS is arguments
806    typed by the user (e.g. a signal to send the process).  FROM_TTY
807    says whether to be verbose or not.  */
808 /* Terminate the open connection to the remote debugger.
809    Use this when you want to detach and do something else with your gdb.  */
810
811 static void
812 gdbsim_detach (struct target_ops *ops, char *args, int from_tty)
813 {
814   if (remote_debug)
815     printf_filtered ("gdbsim_detach: args \"%s\"\n", args);
816
817   pop_target ();                /* calls gdbsim_close to do the real work */
818   if (from_tty)
819     printf_filtered ("Ending simulator %s debugging\n", target_shortname);
820 }
821
822 /* Resume execution of the target process.  STEP says whether to single-step
823    or to run free; SIGGNAL is the signal value (e.g. SIGINT) to be given
824    to the target, or zero for no signal.  */
825
826 struct resume_data
827 {
828   enum target_signal siggnal;
829   int step;
830 };
831
832 static int
833 gdbsim_resume_inferior (struct inferior *inf, void *arg)
834 {
835   struct sim_inferior_data *sim_data
836     = get_sim_inferior_data (inf, SIM_INSTANCE_NOT_NEEDED);
837   struct resume_data *rd = arg;
838
839   if (sim_data)
840     {
841       sim_data->resume_siggnal = rd->siggnal;
842       sim_data->resume_step = rd->step;
843
844       if (remote_debug)
845         printf_filtered (_("gdbsim_resume: pid %d, step %d, signal %d\n"),
846                          inf->pid, rd->step, rd->siggnal);
847     }
848
849   /* When called from iterate_over_inferiors, a zero return causes the
850      iteration process to proceed until there are no more inferiors to
851      consider.  */
852   return 0;
853 }
854
855 static void
856 gdbsim_resume (struct target_ops *ops,
857                ptid_t ptid, int step, enum target_signal siggnal)
858 {
859   struct resume_data rd;
860   struct sim_inferior_data *sim_data
861     = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
862
863   rd.siggnal = siggnal;
864   rd.step = step;
865
866   /* We don't access any sim_data members within this function. 
867      What's of interest is whether or not the call to
868      get_sim_inferior_data_by_ptid(), above, is able to obtain a
869      non-NULL pointer.  If it managed to obtain a non-NULL pointer, we
870      know we have a single inferior to consider.  If it's NULL, we
871      either have multiple inferiors to resume or an error condition.  */
872
873   if (sim_data)
874     gdbsim_resume_inferior (find_inferior_pid (ptid_get_pid (ptid)), &rd);
875   else if (ptid_equal (ptid, minus_one_ptid))
876     iterate_over_inferiors (gdbsim_resume_inferior, &rd);
877   else
878     error (_("The program is not being run."));
879 }
880
881 /* Notify the simulator of an asynchronous request to stop.
882
883    The simulator shall ensure that the stop request is eventually
884    delivered to the simulator.  If the call is made while the
885    simulator is not running then the stop request is processed when
886    the simulator is next resumed.
887
888    For simulators that do not support this operation, just abort.  */
889
890 static int
891 gdbsim_stop_inferior (struct inferior *inf, void *arg)
892 {
893   struct sim_inferior_data *sim_data
894     = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
895
896   if (sim_data)
897     {
898       if (!sim_stop (sim_data->gdbsim_desc))
899         {
900           quit ();
901         }
902     }
903
904   /* When called from iterate_over_inferiors, a zero return causes the
905      iteration process to proceed until there are no more inferiors to
906      consider.  */
907   return 0;
908 }
909
910 static void
911 gdbsim_stop (ptid_t ptid)
912 {
913   struct sim_inferior_data *sim_data;
914
915   if (ptid_equal (ptid, minus_one_ptid))
916     {
917       iterate_over_inferiors (gdbsim_stop_inferior, NULL);
918     }
919   else
920     {
921       struct inferior *inf = find_inferior_pid (ptid_get_pid (ptid));
922
923       if (inf == NULL)
924         error (_("Can't stop pid %d.  No inferior found."), ptid_get_pid (ptid));
925
926       gdbsim_stop_inferior (inf, NULL);
927     }
928 }
929
930 /* GDB version of os_poll_quit callback.
931    Taken from gdb/util.c - should be in a library.  */
932
933 static int
934 gdb_os_poll_quit (host_callback *p)
935 {
936   if (deprecated_ui_loop_hook != NULL)
937     deprecated_ui_loop_hook (0);
938
939   if (quit_flag)                /* gdb's idea of quit */
940     {
941       quit_flag = 0;            /* we've stolen it */
942       return 1;
943     }
944   else if (immediate_quit)
945     {
946       return 1;
947     }
948   return 0;
949 }
950
951 /* Wait for inferior process to do something.  Return pid of child,
952    or -1 in case of error; store status through argument pointer STATUS,
953    just as `wait' would. */
954
955 static void
956 gdbsim_cntrl_c (int signo)
957 {
958   gdbsim_stop (minus_one_ptid);
959 }
960
961 static ptid_t
962 gdbsim_wait (struct target_ops *ops,
963              ptid_t ptid, struct target_waitstatus *status, int options)
964 {
965   struct sim_inferior_data *sim_data;
966   static RETSIGTYPE (*prev_sigint) ();
967   int sigrc = 0;
968   enum sim_stop reason = sim_running;
969
970   /* This target isn't able to (yet) resume more than one inferior at a time.
971      When ptid is minus_one_ptid, just use the current inferior.  If we're
972      given an explicit pid, we'll try to find it and use that instead.  */
973   if (ptid_equal (ptid, minus_one_ptid))
974     sim_data = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
975   else
976     {
977       sim_data = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NEEDED);
978       if (sim_data == NULL)
979         error (_("Unable to wait for pid %d.  Inferior not found."),
980                ptid_get_pid (ptid));
981       inferior_ptid = ptid;
982     }
983
984   if (remote_debug)
985     printf_filtered ("gdbsim_wait\n");
986
987 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
988   {
989     struct sigaction sa, osa;
990     sa.sa_handler = gdbsim_cntrl_c;
991     sigemptyset (&sa.sa_mask);
992     sa.sa_flags = 0;
993     sigaction (SIGINT, &sa, &osa);
994     prev_sigint = osa.sa_handler;
995   }
996 #else
997   prev_sigint = signal (SIGINT, gdbsim_cntrl_c);
998 #endif
999   sim_resume (sim_data->gdbsim_desc, sim_data->resume_step,
1000               sim_data->resume_siggnal);
1001
1002   signal (SIGINT, prev_sigint);
1003   sim_data->resume_step = 0;
1004
1005   sim_stop_reason (sim_data->gdbsim_desc, &reason, &sigrc);
1006
1007   switch (reason)
1008     {
1009     case sim_exited:
1010       status->kind = TARGET_WAITKIND_EXITED;
1011       status->value.integer = sigrc;
1012       break;
1013     case sim_stopped:
1014       switch (sigrc)
1015         {
1016         case TARGET_SIGNAL_ABRT:
1017           quit ();
1018           break;
1019         case TARGET_SIGNAL_INT:
1020         case TARGET_SIGNAL_TRAP:
1021         default:
1022           status->kind = TARGET_WAITKIND_STOPPED;
1023           status->value.sig = sigrc;
1024           break;
1025         }
1026       break;
1027     case sim_signalled:
1028       status->kind = TARGET_WAITKIND_SIGNALLED;
1029       status->value.sig = sigrc;
1030       break;
1031     case sim_running:
1032     case sim_polling:
1033       /* FIXME: Is this correct? */
1034       break;
1035     }
1036
1037   return inferior_ptid;
1038 }
1039
1040 /* Get ready to modify the registers array.  On machines which store
1041    individual registers, this doesn't need to do anything.  On machines
1042    which store all the registers in one fell swoop, this makes sure
1043    that registers contains all the registers from the program being
1044    debugged.  */
1045
1046 static void
1047 gdbsim_prepare_to_store (struct regcache *regcache)
1048 {
1049   /* Do nothing, since we can store individual regs */
1050 }
1051
1052 /* Transfer LEN bytes between GDB address MYADDR and target address
1053    MEMADDR.  If WRITE is non-zero, transfer them to the target,
1054    otherwise transfer them from the target.  TARGET is unused.
1055
1056    Returns the number of bytes transferred. */
1057
1058 static int
1059 gdbsim_xfer_inferior_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
1060                              int write, struct mem_attrib *attrib,
1061                              struct target_ops *target)
1062 {
1063   struct sim_inferior_data *sim_data
1064     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1065
1066   /* If this target doesn't have memory yet, return 0 causing the
1067      request to be passed to a lower target, hopefully an exec
1068      file.  */
1069   if (!target->to_has_memory (target))
1070     return 0;
1071
1072   if (!sim_data->program_loaded)
1073     error (_("No program loaded."));
1074
1075   /* Note that we obtained the sim_data pointer above using
1076      SIM_INSTANCE_NOT_NEEDED.  We do this so that we don't needlessly
1077      allocate a sim instance prior to loading a program.   If we
1078      get to this point in the code though, gdbsim_desc should be
1079      non-NULL.  (Note that a sim instance is needed in order to load
1080      the program...)  */
1081   gdb_assert (sim_data->gdbsim_desc != NULL);
1082
1083   if (remote_debug)
1084     {
1085       /* FIXME: Send to something other than STDOUT? */
1086       printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x");
1087       gdb_print_host_address (myaddr, gdb_stdout);
1088       printf_filtered (", memaddr %s, len %d, write %d\n",
1089                        paddress (target_gdbarch, memaddr), len, write);
1090       if (remote_debug && write)
1091         dump_mem (myaddr, len);
1092     }
1093
1094   if (write)
1095     {
1096       len = sim_write (sim_data->gdbsim_desc, memaddr, myaddr, len);
1097     }
1098   else
1099     {
1100       len = sim_read (sim_data->gdbsim_desc, memaddr, myaddr, len);
1101       if (remote_debug && len > 0)
1102         dump_mem (myaddr, len);
1103     }
1104   return len;
1105 }
1106
1107 static void
1108 gdbsim_files_info (struct target_ops *target)
1109 {
1110   struct sim_inferior_data *sim_data
1111     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
1112   const char *file = "nothing";
1113
1114   if (exec_bfd)
1115     file = bfd_get_filename (exec_bfd);
1116
1117   if (remote_debug)
1118     printf_filtered ("gdbsim_files_info: file \"%s\"\n", file);
1119
1120   if (exec_bfd)
1121     {
1122       printf_filtered ("\tAttached to %s running program %s\n",
1123                        target_shortname, file);
1124       sim_info (sim_data->gdbsim_desc, 0);
1125     }
1126 }
1127
1128 /* Clear the simulator's notion of what the break points are.  */
1129
1130 static void
1131 gdbsim_mourn_inferior (struct target_ops *target)
1132 {
1133   struct sim_inferior_data *sim_data
1134     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1135
1136   if (remote_debug)
1137     printf_filtered ("gdbsim_mourn_inferior:\n");
1138
1139   remove_breakpoints ();
1140   generic_mourn_inferior ();
1141   delete_thread_silent (sim_data->remote_sim_ptid);
1142 }
1143
1144 /* Pass the command argument through to the simulator verbatim.  The
1145    simulator must do any command interpretation work.  */
1146
1147 void
1148 simulator_command (char *args, int from_tty)
1149 {
1150   struct sim_inferior_data *sim_data;
1151
1152   /* We use inferior_data() instead of get_sim_inferior_data() here in
1153      order to avoid attaching a sim_inferior_data struct to an
1154      inferior unnecessarily.  The reason we take such care here is due
1155      to the fact that this function, simulator_command(), may be called
1156      even when the sim target is not active.  If we were to use
1157      get_sim_inferior_data() here, it is possible that this call would
1158      be made either prior to gdbsim_open() or after gdbsim_close(),
1159      thus allocating memory that would not be garbage collected until
1160      the ultimate destruction of the associated inferior.  */
1161
1162   sim_data  = inferior_data (current_inferior (), sim_inferior_data_key);
1163   if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1164     {
1165
1166       /* PREVIOUSLY: The user may give a command before the simulator
1167          is opened. [...] (??? assuming of course one wishes to
1168          continue to allow commands to be sent to unopened simulators,
1169          which isn't entirely unreasonable). */
1170
1171       /* The simulator is a builtin abstraction of a remote target.
1172          Consistent with that model, access to the simulator, via sim
1173          commands, is restricted to the period when the channel to the
1174          simulator is open. */
1175
1176       error (_("Not connected to the simulator target"));
1177     }
1178
1179   sim_do_command (sim_data->gdbsim_desc, args);
1180
1181   /* Invalidate the register cache, in case the simulator command does
1182      something funny. */
1183   registers_changed ();
1184 }
1185
1186 /* Check to see if a thread is still alive.  */
1187
1188 static int
1189 gdbsim_thread_alive (struct target_ops *ops, ptid_t ptid)
1190 {
1191   struct sim_inferior_data *sim_data
1192     = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
1193
1194   if (sim_data == NULL)
1195     return 0;
1196
1197   if (ptid_equal (ptid, sim_data->remote_sim_ptid))
1198     /* The simulators' task is always alive.  */
1199     return 1;
1200
1201   return 0;
1202 }
1203
1204 /* Convert a thread ID to a string.  Returns the string in a static
1205    buffer.  */
1206
1207 static char *
1208 gdbsim_pid_to_str (struct target_ops *ops, ptid_t ptid)
1209 {
1210   return normal_pid_to_str (ptid);
1211 }
1212
1213 /* Simulator memory may be accessed after the program has been loaded.  */
1214
1215 int
1216 gdbsim_has_all_memory (struct target_ops *ops)
1217 {
1218   struct sim_inferior_data *sim_data
1219     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1220
1221   if (!sim_data->program_loaded)
1222     return 0;
1223
1224   return 1;
1225 }
1226
1227 int
1228 gdbsim_has_memory (struct target_ops *ops)
1229 {
1230   struct sim_inferior_data *sim_data
1231     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1232
1233   if (!sim_data->program_loaded)
1234     return 0;
1235
1236   return 1;
1237 }
1238
1239 /* Define the target subroutine names */
1240
1241 struct target_ops gdbsim_ops;
1242
1243 static void
1244 init_gdbsim_ops (void)
1245 {
1246   gdbsim_ops.to_shortname = "sim";
1247   gdbsim_ops.to_longname = "simulator";
1248   gdbsim_ops.to_doc = "Use the compiled-in simulator.";
1249   gdbsim_ops.to_open = gdbsim_open;
1250   gdbsim_ops.to_close = gdbsim_close;
1251   gdbsim_ops.to_detach = gdbsim_detach;
1252   gdbsim_ops.to_resume = gdbsim_resume;
1253   gdbsim_ops.to_wait = gdbsim_wait;
1254   gdbsim_ops.to_fetch_registers = gdbsim_fetch_register;
1255   gdbsim_ops.to_store_registers = gdbsim_store_register;
1256   gdbsim_ops.to_prepare_to_store = gdbsim_prepare_to_store;
1257   gdbsim_ops.deprecated_xfer_memory = gdbsim_xfer_inferior_memory;
1258   gdbsim_ops.to_files_info = gdbsim_files_info;
1259   gdbsim_ops.to_insert_breakpoint = memory_insert_breakpoint;
1260   gdbsim_ops.to_remove_breakpoint = memory_remove_breakpoint;
1261   gdbsim_ops.to_kill = gdbsim_kill;
1262   gdbsim_ops.to_load = gdbsim_load;
1263   gdbsim_ops.to_create_inferior = gdbsim_create_inferior;
1264   gdbsim_ops.to_mourn_inferior = gdbsim_mourn_inferior;
1265   gdbsim_ops.to_stop = gdbsim_stop;
1266   gdbsim_ops.to_thread_alive = gdbsim_thread_alive;
1267   gdbsim_ops.to_pid_to_str = gdbsim_pid_to_str;
1268   gdbsim_ops.to_stratum = process_stratum;
1269   gdbsim_ops.to_has_all_memory = gdbsim_has_all_memory;
1270   gdbsim_ops.to_has_memory = gdbsim_has_memory;
1271   gdbsim_ops.to_has_stack = default_child_has_stack;
1272   gdbsim_ops.to_has_registers = default_child_has_registers;
1273   gdbsim_ops.to_has_execution = default_child_has_execution;
1274   gdbsim_ops.to_magic = OPS_MAGIC;
1275 }
1276
1277 void
1278 _initialize_remote_sim (void)
1279 {
1280   init_gdbsim_ops ();
1281   add_target (&gdbsim_ops);
1282
1283   add_com ("sim", class_obscure, simulator_command,
1284            _("Send a command to the simulator."));
1285
1286   sim_inferior_data_key
1287     = register_inferior_data_with_cleanup (sim_inferior_data_cleanup);
1288 }