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