constify to_detach
[external/binutils.git] / gdb / remote-sim.c
1 /* Generic remote debugging interface for simulators.
2
3    Copyright (C) 1993-2013 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 "value.h"
26 #include "gdb_string.h"
27 #include <ctype.h>
28 #include <fcntl.h>
29 #include <signal.h>
30 #include <setjmp.h>
31 #include <errno.h>
32 #include "terminal.h"
33 #include "target.h"
34 #include "gdbcore.h"
35 #include "gdb/callback.h"
36 #include "gdb/remote-sim.h"
37 #include "command.h"
38 #include "regcache.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"
44
45 /* Prototypes */
46
47 extern void _initialize_remote_sim (void);
48
49 static void init_callbacks (void);
50
51 static void end_callbacks (void);
52
53 static int gdb_os_write_stdout (host_callback *, const char *, int);
54
55 static void gdb_os_flush_stdout (host_callback *);
56
57 static int gdb_os_write_stderr (host_callback *, const char *, int);
58
59 static void gdb_os_flush_stderr (host_callback *);
60
61 static int gdb_os_poll_quit (host_callback *);
62
63 /* printf_filtered is depreciated.  */
64 static void gdb_os_printf_filtered (host_callback *, const char *, ...);
65
66 static void gdb_os_vprintf_filtered (host_callback *, const char *, va_list);
67
68 static void gdb_os_evprintf_filtered (host_callback *, const char *, va_list);
69
70 static void gdb_os_error (host_callback *, const char *, ...)
71      ATTRIBUTE_NORETURN;
72
73 static void gdbsim_kill (struct target_ops *);
74
75 static void gdbsim_load (char *prog, int fromtty);
76
77 static void gdbsim_open (char *args, int from_tty);
78
79 static void gdbsim_close (void);
80
81 static void gdbsim_detach (struct target_ops *ops, char *args, int from_tty);
82
83 static void gdbsim_prepare_to_store (struct regcache *regcache);
84
85 static void gdbsim_files_info (struct target_ops *target);
86
87 static void gdbsim_mourn_inferior (struct target_ops *target);
88
89 static void gdbsim_stop (ptid_t ptid);
90
91 void simulator_command (char *args, int from_tty);
92
93 /* Naming convention:
94
95    sim_* are the interface to the simulator (see remote-sim.h).
96    gdbsim_* are stuff which is internal to gdb.  */
97
98 /* Forward data declarations */
99 extern struct target_ops gdbsim_ops;
100
101 static const struct inferior_data *sim_inferior_data_key;
102
103 /* Simulator-specific, per-inferior state.  */
104 struct sim_inferior_data {
105   /* Flag which indicates whether or not the program has been loaded.  */
106   int program_loaded;
107
108   /* Simulator descriptor for this inferior.  */
109   SIM_DESC gdbsim_desc;
110
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;
117
118   /* Signal with which to resume.  */
119   enum gdb_signal resume_siggnal;
120
121   /* Flag which indicates whether resume should step or not.  */
122   int resume_step;
123 };
124
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;
128
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.  */
132 static int next_pid;
133 #define INITIAL_PID 42000
134
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;
140
141 /* OS-level callback functions for write, flush, etc.  */
142 static host_callback gdb_callback;
143 static int callbacks_initialized = 0;
144
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.  */
148
149 static int
150 check_for_duplicate_sim_descriptor (struct inferior *inf, void *arg)
151 {
152   struct sim_inferior_data *sim_data;
153   SIM_DESC new_sim_desc = arg;
154
155   sim_data = inferior_data (inf, sim_inferior_data_key);
156
157   return (sim_data != NULL && sim_data->gdbsim_desc == new_sim_desc);
158 }
159
160 /* Flags indicating whether or not a sim instance is needed.  One of these
161    flags should be passed to get_sim_inferior_data().  */
162
163 enum {SIM_INSTANCE_NOT_NEEDED = 0, SIM_INSTANCE_NEEDED = 1};
164
165 /* Obtain pointer to per-inferior simulator data, allocating it if necessary.
166    Attempt to open the sim if SIM_INSTANCE_NEEDED is true.  */
167
168 static struct sim_inferior_data *
169 get_sim_inferior_data (struct inferior *inf, int sim_instance_needed)
170 {
171   SIM_DESC sim_desc = NULL;
172   struct sim_inferior_data *sim_data
173     = inferior_data (inf, sim_inferior_data_key);
174
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))
181     {
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."),
186                inf->num);
187
188       idup = iterate_over_inferiors (check_for_duplicate_sim_descriptor,
189                                      sim_desc);
190       if (idup != NULL)
191         {
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.  */
198           sim_desc = NULL;
199           error (
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); 
203         }
204     }
205
206   if (sim_data == NULL)
207     {
208       sim_data = XZALLOC(struct sim_inferior_data);
209       set_inferior_data (inf, sim_inferior_data_key, sim_data);
210
211       /* Allocate a ptid for this inferior.  */
212       sim_data->remote_sim_ptid = ptid_build (next_pid, 0, next_pid);
213       next_pid++;
214
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;
220     }
221   else if (sim_desc)
222     {
223       /* This handles the case where sim_data was allocated prior to
224          needing a sim instance.  */
225       sim_data->gdbsim_desc = sim_desc;
226     }
227
228
229   return sim_data;
230 }
231
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.  */
235
236 static struct sim_inferior_data *
237 get_sim_inferior_data_by_ptid (ptid_t ptid, int sim_instance_needed)
238 {
239   struct inferior *inf;
240   int pid = ptid_get_pid (ptid);
241
242   if (pid <= 0)
243     return NULL;
244   
245   inf = find_inferior_pid (pid);
246
247   if (inf)
248     return get_sim_inferior_data (inf, sim_instance_needed);
249   else
250     return NULL;
251 }
252
253 /* Free the per-inferior simulator data.  */
254
255 static void
256 sim_inferior_data_cleanup (struct inferior *inf, void *data)
257 {
258   struct sim_inferior_data *sim_data = data;
259
260   if (sim_data != NULL)
261     {
262       if (sim_data->gdbsim_desc)
263         {
264           sim_close (sim_data->gdbsim_desc, 0);
265           sim_data->gdbsim_desc = NULL;
266         }
267       xfree (sim_data);
268     }
269 }
270
271 static void
272 dump_mem (const gdb_byte *buf, int len)
273 {
274   fputs_unfiltered ("\t", gdb_stdlog);
275
276   if (len == 8 || len == 4)
277     {
278       uint32_t l[2];
279
280       memcpy (l, buf, len);
281       fprintf_unfiltered (gdb_stdlog, "0x%08x", l[0]);
282       if (len == 8)
283         fprintf_unfiltered (gdb_stdlog, " 0x%08x", l[1]);
284     }
285   else
286     {
287       int i;
288
289       for (i = 0; i < len; i++)
290         fprintf_unfiltered (gdb_stdlog, "0x%02x ", buf[i]);
291     }
292
293   fputs_unfiltered ("\n", gdb_stdlog);
294 }
295
296 /* Initialize gdb_callback.  */
297
298 static void
299 init_callbacks (void)
300 {
301   if (!callbacks_initialized)
302     {
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;
316     }
317 }
318
319 /* Release callbacks (free resources used by them).  */
320
321 static void
322 end_callbacks (void)
323 {
324   if (callbacks_initialized)
325     {
326       gdb_callback.shutdown (&gdb_callback);
327       callbacks_initialized = 0;
328     }
329 }
330
331 /* GDB version of os_write_stdout callback.  */
332
333 static int
334 gdb_os_write_stdout (host_callback *p, const char *buf, int len)
335 {
336   int i;
337   char b[2];
338
339   ui_file_write (gdb_stdtarg, buf, len);
340   return len;
341 }
342
343 /* GDB version of os_flush_stdout callback.  */
344
345 static void
346 gdb_os_flush_stdout (host_callback *p)
347 {
348   gdb_flush (gdb_stdtarg);
349 }
350
351 /* GDB version of os_write_stderr callback.  */
352
353 static int
354 gdb_os_write_stderr (host_callback *p, const char *buf, int len)
355 {
356   int i;
357   char b[2];
358
359   for (i = 0; i < len; i++)
360     {
361       b[0] = buf[i];
362       b[1] = 0;
363       fputs_unfiltered (b, gdb_stdtargerr);
364     }
365   return len;
366 }
367
368 /* GDB version of os_flush_stderr callback.  */
369
370 static void
371 gdb_os_flush_stderr (host_callback *p)
372 {
373   gdb_flush (gdb_stdtargerr);
374 }
375
376 /* GDB version of printf_filtered callback.  */
377
378 static void
379 gdb_os_printf_filtered (host_callback * p, const char *format,...)
380 {
381   va_list args;
382
383   va_start (args, format);
384   vfprintf_filtered (gdb_stdout, format, args);
385   va_end (args);
386 }
387
388 /* GDB version of error vprintf_filtered.  */
389
390 static void
391 gdb_os_vprintf_filtered (host_callback * p, const char *format, va_list ap)
392 {
393   vfprintf_filtered (gdb_stdout, format, ap);
394 }
395
396 /* GDB version of error evprintf_filtered.  */
397
398 static void
399 gdb_os_evprintf_filtered (host_callback * p, const char *format, va_list ap)
400 {
401   vfprintf_filtered (gdb_stderr, format, ap);
402 }
403
404 /* GDB version of error callback.  */
405
406 static void
407 gdb_os_error (host_callback * p, const char *format, ...)
408 {
409   va_list args;
410
411   va_start (args, format);
412   verror (format, args);
413   va_end (args);
414 }
415
416 int
417 one2one_register_sim_regno (struct gdbarch *gdbarch, int regnum)
418 {
419   /* Only makes sense to supply raw registers.  */
420   gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
421   return regnum;
422 }
423
424 static void
425 gdbsim_fetch_register (struct target_ops *ops,
426                        struct regcache *regcache, int regno)
427 {
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);
431
432   if (regno == -1)
433     {
434       for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
435         gdbsim_fetch_register (ops, regcache, regno);
436       return;
437     }
438
439   switch (gdbarch_register_sim_regno (gdbarch, regno))
440     {
441     case LEGACY_SIM_REGNO_IGNORE:
442       break;
443     case SIM_REGNO_DOES_NOT_EXIST:
444       {
445         /* For moment treat a `does not exist' register the same way
446            as an ``unavailable'' register.  */
447         gdb_byte buf[MAX_REGISTER_SIZE];
448         int nr_bytes;
449
450         memset (buf, 0, MAX_REGISTER_SIZE);
451         regcache_raw_supply (regcache, regno, buf);
452         break;
453       }
454       
455     default:
456       {
457         static int warn_user = 1;
458         gdb_byte buf[MAX_REGISTER_SIZE];
459         int nr_bytes;
460
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
465                                          (gdbarch, regno),
466                                        buf,
467                                        register_size (gdbarch, regno));
468         if (nr_bytes > 0
469             && nr_bytes != register_size (gdbarch, regno) && warn_user)
470           {
471             fprintf_unfiltered (gdb_stderr,
472                                 "Size of register %s (%d/%d) "
473                                 "incorrect (%d instead of %d))",
474                                 gdbarch_register_name (gdbarch, regno),
475                                 regno,
476                                 gdbarch_register_sim_regno
477                                   (gdbarch, regno),
478                                 nr_bytes, register_size (gdbarch, regno));
479             warn_user = 0;
480           }
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);
487         if (remote_debug)
488           {
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));
493           }
494         break;
495       }
496     }
497 }
498
499
500 static void
501 gdbsim_store_register (struct target_ops *ops,
502                        struct regcache *regcache, int regno)
503 {
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);
507
508   if (regno == -1)
509     {
510       for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
511         gdbsim_store_register (ops, regcache, regno);
512       return;
513     }
514   else if (gdbarch_register_sim_regno (gdbarch, regno) >= 0)
515     {
516       gdb_byte tmp[MAX_REGISTER_SIZE];
517       int nr_bytes;
518
519       regcache_cooked_read (regcache, regno, tmp);
520       nr_bytes = sim_store_register (sim_data->gdbsim_desc,
521                                      gdbarch_register_sim_regno
522                                        (gdbarch, 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"));
527       if (nr_bytes < 0)
528         internal_error (__FILE__, __LINE__,
529                         _("Register %d not updated"), regno);
530       if (nr_bytes == 0)
531         warning (_("Register %s not updated"),
532                  gdbarch_register_name (gdbarch, regno));
533
534       if (remote_debug)
535         {
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));
539         }
540     }
541 }
542
543 /* Kill the running program.  This may involve closing any open files
544    and releasing other resources acquired by the simulated program.  */
545
546 static void
547 gdbsim_kill (struct target_ops *ops)
548 {
549   if (remote_debug)
550     fprintf_unfiltered (gdb_stdlog, "gdbsim_kill\n");
551
552   /* There is no need to `kill' running simulator - the simulator is
553      not running.  Mourning it is enough.  */
554   target_mourn_inferior ();
555 }
556
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.  */
560
561 static void
562 gdbsim_load (char *args, int fromtty)
563 {
564   char **argv;
565   char *prog;
566   struct sim_inferior_data *sim_data
567     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
568
569   if (args == NULL)
570       error_no_arg (_("program to load"));
571
572   argv = gdb_buildargv (args);
573   make_cleanup_freeargv (argv);
574
575   prog = tilde_expand (argv[0]);
576
577   if (argv[1] != NULL)
578     error (_("GDB sim does not yet support a load offset."));
579
580   if (remote_debug)
581     fprintf_unfiltered (gdb_stdlog, "gdbsim_load: prog \"%s\"\n", prog);
582
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"));
588
589   /* FIXME: If a load command should reset the targets registers then
590      a call to sim_create_inferior() should go here.  */
591
592   sim_data->program_loaded = 1;
593 }
594
595
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.  */
603
604 static void
605 gdbsim_create_inferior (struct target_ops *target, char *exec_file, char *args,
606                         char **env, int from_tty)
607 {
608   struct sim_inferior_data *sim_data
609     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
610   int len;
611   char *arg_buf, **argv;
612
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."));
617
618   if (remote_debug)
619     fprintf_unfiltered (gdb_stdlog,
620                         "gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
621                         (exec_file ? exec_file : "(NULL)"),
622                         args);
623
624   if (ptid_equal (inferior_ptid, sim_data->remote_sim_ptid))
625     gdbsim_kill (target);
626   remove_breakpoints ();
627   init_wait_for_inferior ();
628
629   if (exec_file != NULL)
630     {
631       len = strlen (exec_file) + 1 + strlen (args) + 1 + /*slop */ 10;
632       arg_buf = (char *) alloca (len);
633       arg_buf[0] = '\0';
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);
639     }
640   else
641     argv = NULL;
642
643   if (!have_inferiors ())
644     init_thread_list ();
645
646   if (sim_create_inferior (sim_data->gdbsim_desc, exec_bfd, argv, env)
647       != SIM_RC_OK)
648     error (_("Unable to create sim inferior."));
649
650   inferior_ptid = sim_data->remote_sim_ptid;
651   inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
652   add_thread_silent (inferior_ptid);
653
654   insert_breakpoints ();        /* Needed to get correct instruction
655                                    in cache.  */
656
657   clear_proceed_status ();
658 }
659
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.  */
664
665 static void
666 gdbsim_open (char *args, int from_tty)
667 {
668   int len;
669   char *arg_buf;
670   struct sim_inferior_data *sim_data;
671   SIM_DESC gdbsim_desc;
672
673   if (remote_debug)
674     fprintf_unfiltered (gdb_stdlog,
675                         "gdbsim_open: args \"%s\"\n", args ? args : "(null)");
676
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
683      error out.  */
684   if (gdbsim_is_open)
685     unpush_target (&gdbsim_ops);
686
687   len = (7 + 1                  /* gdbsim */
688          + strlen (" -E little")
689          + strlen (" --architecture=xxxxxxxxxx")
690          + strlen (" --sysroot=") + strlen (gdb_sysroot) +
691          + (args ? strlen (args) : 0)
692          + 50) /* slack */ ;
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 ())
698     {
699     case BFD_ENDIAN_BIG:
700       strcat (arg_buf, " -E big");
701       break;
702     case BFD_ENDIAN_LITTLE:
703       strcat (arg_buf, " -E little");
704       break;
705     case BFD_ENDIAN_UNKNOWN:
706       break;
707     }
708   /* Specify the architecture of the target when it has been
709      explicitly specified */
710   if (selected_architecture_name () != NULL)
711     {
712       strcat (arg_buf, " --architecture=");
713       strcat (arg_buf, selected_architecture_name ());
714     }
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 */
719   if (args)
720     {
721       strcat (arg_buf, " ");    /* 1 */
722       strcat (arg_buf, args);
723     }
724   sim_argv = gdb_buildargv (arg_buf);
725
726   init_callbacks ();
727   gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
728
729   if (gdbsim_desc == 0)
730     {
731       freeargv (sim_argv);
732       sim_argv = NULL;
733       error (_("unable to create simulator instance"));
734     }
735
736   /* Reset the pid numberings for this batch of sim instances.  */
737   next_pid = INITIAL_PID;
738
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);
743
744   sim_data->gdbsim_desc = gdbsim_desc;
745
746   push_target (&gdbsim_ops);
747   printf_filtered ("Connected to the simulator.\n");
748
749   /* There's nothing running after "target sim" or "load"; not until
750      "run".  */
751   inferior_ptid = null_ptid;
752
753   gdbsim_is_open = 1;
754 }
755
756 /* Callback for iterate_over_inferiors.  Called (indirectly) by
757    gdbsim_close().  */
758
759 static int
760 gdbsim_close_inferior (struct inferior *inf, void *arg)
761 {
762   struct sim_inferior_data *sim_data = inferior_data (inf,
763                                                       sim_inferior_data_key);
764   if (sim_data != NULL)
765     {
766       ptid_t ptid = sim_data->remote_sim_ptid;
767
768       sim_inferior_data_cleanup (inf, sim_data);
769       set_inferior_data (inf, sim_inferior_data_key, NULL);
770
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)
777         {
778           switch_to_thread (ptid);
779           generic_mourn_inferior ();
780         }
781     }
782
783   return 0;
784 }
785
786 /* Close out all files and local state before this target loses control.  */
787
788 static void
789 gdbsim_close (void)
790 {
791   struct sim_inferior_data *sim_data
792     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
793
794   if (remote_debug)
795     fprintf_unfiltered (gdb_stdlog, "gdbsim_close\n");
796
797   iterate_over_inferiors (gdbsim_close_inferior, NULL);
798
799   if (sim_argv != NULL)
800     {
801       freeargv (sim_argv);
802       sim_argv = NULL;
803     }
804
805   end_callbacks ();
806
807   gdbsim_is_open = 0;
808 }
809
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.  */
818
819 static void
820 gdbsim_detach (struct target_ops *ops, const char *args, int from_tty)
821 {
822   if (remote_debug)
823     fprintf_unfiltered (gdb_stdlog, "gdbsim_detach: args \"%s\"\n", args);
824
825   unpush_target (ops);          /* calls gdbsim_close to do the real work */
826   if (from_tty)
827     printf_filtered ("Ending simulator %s debugging\n", target_shortname);
828 }
829
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.  */
833
834 struct resume_data
835 {
836   enum gdb_signal siggnal;
837   int step;
838 };
839
840 static int
841 gdbsim_resume_inferior (struct inferior *inf, void *arg)
842 {
843   struct sim_inferior_data *sim_data
844     = get_sim_inferior_data (inf, SIM_INSTANCE_NOT_NEEDED);
845   struct resume_data *rd = arg;
846
847   if (sim_data)
848     {
849       sim_data->resume_siggnal = rd->siggnal;
850       sim_data->resume_step = rd->step;
851
852       if (remote_debug)
853         fprintf_unfiltered (gdb_stdlog,
854                             _("gdbsim_resume: pid %d, step %d, signal %d\n"),
855                             inf->pid, rd->step, rd->siggnal);
856     }
857
858   /* When called from iterate_over_inferiors, a zero return causes the
859      iteration process to proceed until there are no more inferiors to
860      consider.  */
861   return 0;
862 }
863
864 static void
865 gdbsim_resume (struct target_ops *ops,
866                ptid_t ptid, int step, enum gdb_signal siggnal)
867 {
868   struct resume_data rd;
869   struct sim_inferior_data *sim_data
870     = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
871
872   rd.siggnal = siggnal;
873   rd.step = step;
874
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.  */
881
882   if (sim_data)
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);
886   else
887     error (_("The program is not being run."));
888 }
889
890 /* Notify the simulator of an asynchronous request to stop.
891
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.
896
897    For simulators that do not support this operation, just abort.  */
898
899 static int
900 gdbsim_stop_inferior (struct inferior *inf, void *arg)
901 {
902   struct sim_inferior_data *sim_data
903     = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
904
905   if (sim_data)
906     {
907       if (!sim_stop (sim_data->gdbsim_desc))
908         {
909           quit ();
910         }
911     }
912
913   /* When called from iterate_over_inferiors, a zero return causes the
914      iteration process to proceed until there are no more inferiors to
915      consider.  */
916   return 0;
917 }
918
919 static void
920 gdbsim_stop (ptid_t ptid)
921 {
922   struct sim_inferior_data *sim_data;
923
924   if (ptid_equal (ptid, minus_one_ptid))
925     {
926       iterate_over_inferiors (gdbsim_stop_inferior, NULL);
927     }
928   else
929     {
930       struct inferior *inf = find_inferior_pid (ptid_get_pid (ptid));
931
932       if (inf == NULL)
933         error (_("Can't stop pid %d.  No inferior found."),
934                ptid_get_pid (ptid));
935
936       gdbsim_stop_inferior (inf, NULL);
937     }
938 }
939
940 /* GDB version of os_poll_quit callback.
941    Taken from gdb/util.c - should be in a library.  */
942
943 static int
944 gdb_os_poll_quit (host_callback *p)
945 {
946   if (deprecated_ui_loop_hook != NULL)
947     deprecated_ui_loop_hook (0);
948
949   if (check_quit_flag ())       /* gdb's idea of quit */
950     {
951       clear_quit_flag ();       /* we've stolen it */
952       return 1;
953     }
954   return 0;
955 }
956
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.  */
960
961 static void
962 gdbsim_cntrl_c (int signo)
963 {
964   gdbsim_stop (minus_one_ptid);
965 }
966
967 static ptid_t
968 gdbsim_wait (struct target_ops *ops,
969              ptid_t ptid, struct target_waitstatus *status, int options)
970 {
971   struct sim_inferior_data *sim_data;
972   static RETSIGTYPE (*prev_sigint) ();
973   int sigrc = 0;
974   enum sim_stop reason = sim_running;
975
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);
982   else
983     {
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;
989     }
990
991   if (remote_debug)
992     fprintf_unfiltered (gdb_stdlog, "gdbsim_wait\n");
993
994 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
995   {
996     struct sigaction sa, osa;
997     sa.sa_handler = gdbsim_cntrl_c;
998     sigemptyset (&sa.sa_mask);
999     sa.sa_flags = 0;
1000     sigaction (SIGINT, &sa, &osa);
1001     prev_sigint = osa.sa_handler;
1002   }
1003 #else
1004   prev_sigint = signal (SIGINT, gdbsim_cntrl_c);
1005 #endif
1006   sim_resume (sim_data->gdbsim_desc, sim_data->resume_step,
1007               sim_data->resume_siggnal);
1008
1009   signal (SIGINT, prev_sigint);
1010   sim_data->resume_step = 0;
1011
1012   sim_stop_reason (sim_data->gdbsim_desc, &reason, &sigrc);
1013
1014   switch (reason)
1015     {
1016     case sim_exited:
1017       status->kind = TARGET_WAITKIND_EXITED;
1018       status->value.integer = sigrc;
1019       break;
1020     case sim_stopped:
1021       switch (sigrc)
1022         {
1023         case GDB_SIGNAL_ABRT:
1024           quit ();
1025           break;
1026         case GDB_SIGNAL_INT:
1027         case GDB_SIGNAL_TRAP:
1028         default:
1029           status->kind = TARGET_WAITKIND_STOPPED;
1030           status->value.sig = sigrc;
1031           break;
1032         }
1033       break;
1034     case sim_signalled:
1035       status->kind = TARGET_WAITKIND_SIGNALLED;
1036       status->value.sig = sigrc;
1037       break;
1038     case sim_running:
1039     case sim_polling:
1040       /* FIXME: Is this correct?  */
1041       break;
1042     }
1043
1044   return inferior_ptid;
1045 }
1046
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
1051    debugged.  */
1052
1053 static void
1054 gdbsim_prepare_to_store (struct regcache *regcache)
1055 {
1056   /* Do nothing, since we can store individual regs.  */
1057 }
1058
1059 /* Helper for gdbsim_xfer_partial that handles memory transfers.
1060    Arguments are like target_xfer_partial.  */
1061
1062 static LONGEST
1063 gdbsim_xfer_memory (struct target_ops *target,
1064                     gdb_byte *readbuf, const gdb_byte *writebuf,
1065                     ULONGEST memaddr, LONGEST len)
1066 {
1067   struct sim_inferior_data *sim_data
1068     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1069
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
1072      file.  */
1073   if (!target->to_has_memory (target))
1074     return 0;
1075
1076   if (!sim_data->program_loaded)
1077     error (_("No program loaded."));
1078
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
1084      the program...)  */
1085   gdb_assert (sim_data->gdbsim_desc != NULL);
1086
1087   if (remote_debug)
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),
1094                         plongest (len));
1095
1096   if (writebuf)
1097     {
1098       if (remote_debug && len > 0)
1099         dump_mem (writebuf, len);
1100       len = sim_write (sim_data->gdbsim_desc, memaddr, writebuf, len);
1101     }
1102   else
1103     {
1104       len = sim_read (sim_data->gdbsim_desc, memaddr, readbuf, len);
1105       if (remote_debug && len > 0)
1106         dump_mem (readbuf, len);
1107     }
1108   return len;
1109 }
1110
1111 /* Target to_xfer_partial implementation.  */
1112
1113 static LONGEST
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)
1117 {
1118   switch (object)
1119     {
1120     case TARGET_OBJECT_MEMORY:
1121       return gdbsim_xfer_memory (ops, readbuf, writebuf, offset, len);
1122
1123     default:
1124       return -1;
1125     }
1126 }
1127
1128 static void
1129 gdbsim_files_info (struct target_ops *target)
1130 {
1131   struct sim_inferior_data *sim_data
1132     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
1133   const char *file = "nothing";
1134
1135   if (exec_bfd)
1136     file = bfd_get_filename (exec_bfd);
1137
1138   if (remote_debug)
1139     fprintf_unfiltered (gdb_stdlog, "gdbsim_files_info: file \"%s\"\n", file);
1140
1141   if (exec_bfd)
1142     {
1143       fprintf_unfiltered (gdb_stdlog, "\tAttached to %s running program %s\n",
1144                           target_shortname, file);
1145       sim_info (sim_data->gdbsim_desc, 0);
1146     }
1147 }
1148
1149 /* Clear the simulator's notion of what the break points are.  */
1150
1151 static void
1152 gdbsim_mourn_inferior (struct target_ops *target)
1153 {
1154   struct sim_inferior_data *sim_data
1155     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1156
1157   if (remote_debug)
1158     fprintf_unfiltered (gdb_stdlog, "gdbsim_mourn_inferior:\n");
1159
1160   remove_breakpoints ();
1161   generic_mourn_inferior ();
1162   delete_thread_silent (sim_data->remote_sim_ptid);
1163 }
1164
1165 /* Pass the command argument through to the simulator verbatim.  The
1166    simulator must do any command interpretation work.  */
1167
1168 void
1169 simulator_command (char *args, int from_tty)
1170 {
1171   struct sim_inferior_data *sim_data;
1172
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.  */
1182
1183   sim_data  = inferior_data (current_inferior (), sim_inferior_data_key);
1184   if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1185     {
1186
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).  */
1191
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.  */
1196
1197       error (_("Not connected to the simulator target"));
1198     }
1199
1200   sim_do_command (sim_data->gdbsim_desc, args);
1201
1202   /* Invalidate the register cache, in case the simulator command does
1203      something funny.  */
1204   registers_changed ();
1205 }
1206
1207 static VEC (char_ptr) *
1208 sim_command_completer (struct cmd_list_element *ignore, const char *text,
1209                        const char *word)
1210 {
1211   struct sim_inferior_data *sim_data;
1212   char **tmp;
1213   int i;
1214   VEC (char_ptr) *result = NULL;
1215
1216   sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
1217   if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1218     return NULL;
1219
1220   tmp = sim_complete_command (sim_data->gdbsim_desc, text, word);
1221   if (tmp == NULL)
1222     return NULL;
1223
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]);
1227   xfree (tmp);
1228
1229   return result;
1230 }
1231
1232 /* Check to see if a thread is still alive.  */
1233
1234 static int
1235 gdbsim_thread_alive (struct target_ops *ops, ptid_t ptid)
1236 {
1237   struct sim_inferior_data *sim_data
1238     = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
1239
1240   if (sim_data == NULL)
1241     return 0;
1242
1243   if (ptid_equal (ptid, sim_data->remote_sim_ptid))
1244     /* The simulators' task is always alive.  */
1245     return 1;
1246
1247   return 0;
1248 }
1249
1250 /* Convert a thread ID to a string.  Returns the string in a static
1251    buffer.  */
1252
1253 static char *
1254 gdbsim_pid_to_str (struct target_ops *ops, ptid_t ptid)
1255 {
1256   return normal_pid_to_str (ptid);
1257 }
1258
1259 /* Simulator memory may be accessed after the program has been loaded.  */
1260
1261 static int
1262 gdbsim_has_all_memory (struct target_ops *ops)
1263 {
1264   struct sim_inferior_data *sim_data
1265     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1266
1267   if (!sim_data->program_loaded)
1268     return 0;
1269
1270   return 1;
1271 }
1272
1273 static int
1274 gdbsim_has_memory (struct target_ops *ops)
1275 {
1276   struct sim_inferior_data *sim_data
1277     = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1278
1279   if (!sim_data->program_loaded)
1280     return 0;
1281
1282   return 1;
1283 }
1284
1285 /* Define the target subroutine names.  */
1286
1287 struct target_ops gdbsim_ops;
1288
1289 static void
1290 init_gdbsim_ops (void)
1291 {
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;
1321 }
1322
1323 void
1324 _initialize_remote_sim (void)
1325 {
1326   struct cmd_list_element *c;
1327
1328   init_gdbsim_ops ();
1329   add_target (&gdbsim_ops);
1330
1331   c = add_com ("sim", class_obscure, simulator_command,
1332                _("Send a command to the simulator."));
1333   set_cmd_completer (c, sim_command_completer);
1334
1335   sim_inferior_data_key
1336     = register_inferior_data_with_cleanup (NULL, sim_inferior_data_cleanup);
1337 }