]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote-sim.c
remote-sim.c: Don't install a deprecated_xfer_memory method.
[thirdparty/binutils-gdb.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 printf_filtered ("\t");
275
276 if (len == 8 || len == 4)
277 {
278 uint32_t l[2];
279
280 memcpy (l, buf, len);
281 printf_filtered ("0x%08x", l[0]);
282 if (len == 8)
283 printf_filtered (" 0x%08x", l[1]);
284 }
285 else
286 {
287 int i;
288
289 for (i = 0; i < len; i++)
290 printf_filtered ("0x%02x ", buf[i]);
291 }
292
293 printf_filtered ("\n");
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 printf_filtered ("gdbsim_fetch_register: %d", regno);
490 /* FIXME: We could print something more intelligible. */
491 dump_mem (buf, register_size (gdbarch, regno));
492 }
493 break;
494 }
495 }
496 }
497
498
499 static void
500 gdbsim_store_register (struct target_ops *ops,
501 struct regcache *regcache, int regno)
502 {
503 struct gdbarch *gdbarch = get_regcache_arch (regcache);
504 struct sim_inferior_data *sim_data
505 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
506
507 if (regno == -1)
508 {
509 for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++)
510 gdbsim_store_register (ops, regcache, regno);
511 return;
512 }
513 else if (gdbarch_register_sim_regno (gdbarch, regno) >= 0)
514 {
515 gdb_byte tmp[MAX_REGISTER_SIZE];
516 int nr_bytes;
517
518 regcache_cooked_read (regcache, regno, tmp);
519 nr_bytes = sim_store_register (sim_data->gdbsim_desc,
520 gdbarch_register_sim_regno
521 (gdbarch, regno),
522 tmp, register_size (gdbarch, regno));
523 if (nr_bytes > 0 && nr_bytes != register_size (gdbarch, regno))
524 internal_error (__FILE__, __LINE__,
525 _("Register size different to expected"));
526 if (nr_bytes < 0)
527 internal_error (__FILE__, __LINE__,
528 _("Register %d not updated"), regno);
529 if (nr_bytes == 0)
530 warning (_("Register %s not updated"),
531 gdbarch_register_name (gdbarch, regno));
532
533 if (remote_debug)
534 {
535 printf_filtered ("gdbsim_store_register: %d", regno);
536 /* FIXME: We could print something more intelligible. */
537 dump_mem (tmp, register_size (gdbarch, regno));
538 }
539 }
540 }
541
542 /* Kill the running program. This may involve closing any open files
543 and releasing other resources acquired by the simulated program. */
544
545 static void
546 gdbsim_kill (struct target_ops *ops)
547 {
548 if (remote_debug)
549 printf_filtered ("gdbsim_kill\n");
550
551 /* There is no need to `kill' running simulator - the simulator is
552 not running. Mourning it is enough. */
553 target_mourn_inferior ();
554 }
555
556 /* Load an executable file into the target process. This is expected to
557 not only bring new code into the target process, but also to update
558 GDB's symbol tables to match. */
559
560 static void
561 gdbsim_load (char *args, int fromtty)
562 {
563 char **argv;
564 char *prog;
565 struct sim_inferior_data *sim_data
566 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
567
568 if (args == NULL)
569 error_no_arg (_("program to load"));
570
571 argv = gdb_buildargv (args);
572 make_cleanup_freeargv (argv);
573
574 prog = tilde_expand (argv[0]);
575
576 if (argv[1] != NULL)
577 error (_("GDB sim does not yet support a load offset."));
578
579 if (remote_debug)
580 printf_filtered ("gdbsim_load: prog \"%s\"\n", prog);
581
582 /* FIXME: We will print two messages on error.
583 Need error to either not print anything if passed NULL or need
584 another routine that doesn't take any arguments. */
585 if (sim_load (sim_data->gdbsim_desc, prog, NULL, fromtty) == SIM_RC_FAIL)
586 error (_("unable to load program"));
587
588 /* FIXME: If a load command should reset the targets registers then
589 a call to sim_create_inferior() should go here. */
590
591 sim_data->program_loaded = 1;
592 }
593
594
595 /* Start an inferior process and set inferior_ptid to its pid.
596 EXEC_FILE is the file to run.
597 ARGS is a string containing the arguments to the program.
598 ENV is the environment vector to pass. Errors reported with error().
599 On VxWorks and various standalone systems, we ignore exec_file. */
600 /* This is called not only when we first attach, but also when the
601 user types "run" after having attached. */
602
603 static void
604 gdbsim_create_inferior (struct target_ops *target, char *exec_file, char *args,
605 char **env, int from_tty)
606 {
607 struct sim_inferior_data *sim_data
608 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
609 int len;
610 char *arg_buf, **argv;
611
612 if (exec_file == 0 || exec_bfd == 0)
613 warning (_("No executable file specified."));
614 if (!sim_data->program_loaded)
615 warning (_("No program loaded."));
616
617 if (remote_debug)
618 printf_filtered ("gdbsim_create_inferior: exec_file \"%s\", args \"%s\"\n",
619 (exec_file ? exec_file : "(NULL)"),
620 args);
621
622 if (ptid_equal (inferior_ptid, sim_data->remote_sim_ptid))
623 gdbsim_kill (target);
624 remove_breakpoints ();
625 init_wait_for_inferior ();
626
627 if (exec_file != NULL)
628 {
629 len = strlen (exec_file) + 1 + strlen (args) + 1 + /*slop */ 10;
630 arg_buf = (char *) alloca (len);
631 arg_buf[0] = '\0';
632 strcat (arg_buf, exec_file);
633 strcat (arg_buf, " ");
634 strcat (arg_buf, args);
635 argv = gdb_buildargv (arg_buf);
636 make_cleanup_freeargv (argv);
637 }
638 else
639 argv = NULL;
640
641 if (!have_inferiors ())
642 init_thread_list ();
643
644 if (sim_create_inferior (sim_data->gdbsim_desc, exec_bfd, argv, env)
645 != SIM_RC_OK)
646 error (_("Unable to create sim inferior."));
647
648 inferior_ptid = sim_data->remote_sim_ptid;
649 inferior_appeared (current_inferior (), ptid_get_pid (inferior_ptid));
650 add_thread_silent (inferior_ptid);
651
652 insert_breakpoints (); /* Needed to get correct instruction
653 in cache. */
654
655 clear_proceed_status ();
656 }
657
658 /* The open routine takes the rest of the parameters from the command,
659 and (if successful) pushes a new target onto the stack.
660 Targets should supply this routine, if only to provide an error message. */
661 /* Called when selecting the simulator. E.g. (gdb) target sim name. */
662
663 static void
664 gdbsim_open (char *args, int from_tty)
665 {
666 int len;
667 char *arg_buf;
668 struct sim_inferior_data *sim_data;
669 SIM_DESC gdbsim_desc;
670
671 if (remote_debug)
672 printf_filtered ("gdbsim_open: args \"%s\"\n", args ? args : "(null)");
673
674 /* Ensure that the sim target is not on the target stack. This is
675 necessary, because if it is on the target stack, the call to
676 push_target below will invoke sim_close(), thus freeing various
677 state (including a sim instance) that we allocate prior to
678 invoking push_target(). We want to delay the push_target()
679 operation until after we complete those operations which could
680 error out. */
681 if (gdbsim_is_open)
682 unpush_target (&gdbsim_ops);
683
684 len = (7 + 1 /* gdbsim */
685 + strlen (" -E little")
686 + strlen (" --architecture=xxxxxxxxxx")
687 + strlen (" --sysroot=") + strlen (gdb_sysroot) +
688 + (args ? strlen (args) : 0)
689 + 50) /* slack */ ;
690 arg_buf = (char *) alloca (len);
691 strcpy (arg_buf, "gdbsim"); /* 7 */
692 /* Specify the byte order for the target when it is explicitly
693 specified by the user (not auto detected). */
694 switch (selected_byte_order ())
695 {
696 case BFD_ENDIAN_BIG:
697 strcat (arg_buf, " -E big");
698 break;
699 case BFD_ENDIAN_LITTLE:
700 strcat (arg_buf, " -E little");
701 break;
702 case BFD_ENDIAN_UNKNOWN:
703 break;
704 }
705 /* Specify the architecture of the target when it has been
706 explicitly specified */
707 if (selected_architecture_name () != NULL)
708 {
709 strcat (arg_buf, " --architecture=");
710 strcat (arg_buf, selected_architecture_name ());
711 }
712 /* Pass along gdb's concept of the sysroot. */
713 strcat (arg_buf, " --sysroot=");
714 strcat (arg_buf, gdb_sysroot);
715 /* finally, any explicit args */
716 if (args)
717 {
718 strcat (arg_buf, " "); /* 1 */
719 strcat (arg_buf, args);
720 }
721 sim_argv = gdb_buildargv (arg_buf);
722
723 init_callbacks ();
724 gdbsim_desc = sim_open (SIM_OPEN_DEBUG, &gdb_callback, exec_bfd, sim_argv);
725
726 if (gdbsim_desc == 0)
727 {
728 freeargv (sim_argv);
729 sim_argv = NULL;
730 error (_("unable to create simulator instance"));
731 }
732
733 /* Reset the pid numberings for this batch of sim instances. */
734 next_pid = INITIAL_PID;
735
736 /* Allocate the inferior data, but do not allocate a sim instance
737 since we've already just done that. */
738 sim_data = get_sim_inferior_data (current_inferior (),
739 SIM_INSTANCE_NOT_NEEDED);
740
741 sim_data->gdbsim_desc = gdbsim_desc;
742
743 push_target (&gdbsim_ops);
744 printf_filtered ("Connected to the simulator.\n");
745
746 /* There's nothing running after "target sim" or "load"; not until
747 "run". */
748 inferior_ptid = null_ptid;
749
750 gdbsim_is_open = 1;
751 }
752
753 /* Callback for iterate_over_inferiors. Called (indirectly) by
754 gdbsim_close(). */
755
756 static int
757 gdbsim_close_inferior (struct inferior *inf, void *arg)
758 {
759 struct sim_inferior_data *sim_data = inferior_data (inf,
760 sim_inferior_data_key);
761 if (sim_data != NULL)
762 {
763 ptid_t ptid = sim_data->remote_sim_ptid;
764
765 sim_inferior_data_cleanup (inf, sim_data);
766 set_inferior_data (inf, sim_inferior_data_key, NULL);
767
768 /* Having a ptid allocated and stored in remote_sim_ptid does
769 not mean that a corresponding inferior was ever created.
770 Thus we need to verify the existence of an inferior using the
771 pid in question before setting inferior_ptid via
772 switch_to_thread() or mourning the inferior. */
773 if (find_inferior_pid (ptid_get_pid (ptid)) != NULL)
774 {
775 switch_to_thread (ptid);
776 generic_mourn_inferior ();
777 }
778 }
779
780 return 0;
781 }
782
783 /* Close out all files and local state before this target loses control. */
784
785 static void
786 gdbsim_close (void)
787 {
788 struct sim_inferior_data *sim_data
789 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
790
791 if (remote_debug)
792 printf_filtered ("gdbsim_close\n");
793
794 iterate_over_inferiors (gdbsim_close_inferior, NULL);
795
796 if (sim_argv != NULL)
797 {
798 freeargv (sim_argv);
799 sim_argv = NULL;
800 }
801
802 end_callbacks ();
803
804 gdbsim_is_open = 0;
805 }
806
807 /* Takes a program previously attached to and detaches it.
808 The program may resume execution (some targets do, some don't) and will
809 no longer stop on signals, etc. We better not have left any breakpoints
810 in the program or it'll die when it hits one. ARGS is arguments
811 typed by the user (e.g. a signal to send the process). FROM_TTY
812 says whether to be verbose or not. */
813 /* Terminate the open connection to the remote debugger.
814 Use this when you want to detach and do something else with your gdb. */
815
816 static void
817 gdbsim_detach (struct target_ops *ops, char *args, int from_tty)
818 {
819 if (remote_debug)
820 printf_filtered ("gdbsim_detach: args \"%s\"\n", args);
821
822 unpush_target (ops); /* calls gdbsim_close to do the real work */
823 if (from_tty)
824 printf_filtered ("Ending simulator %s debugging\n", target_shortname);
825 }
826
827 /* Resume execution of the target process. STEP says whether to single-step
828 or to run free; SIGGNAL is the signal value (e.g. SIGINT) to be given
829 to the target, or zero for no signal. */
830
831 struct resume_data
832 {
833 enum gdb_signal siggnal;
834 int step;
835 };
836
837 static int
838 gdbsim_resume_inferior (struct inferior *inf, void *arg)
839 {
840 struct sim_inferior_data *sim_data
841 = get_sim_inferior_data (inf, SIM_INSTANCE_NOT_NEEDED);
842 struct resume_data *rd = arg;
843
844 if (sim_data)
845 {
846 sim_data->resume_siggnal = rd->siggnal;
847 sim_data->resume_step = rd->step;
848
849 if (remote_debug)
850 printf_filtered (_("gdbsim_resume: pid %d, step %d, signal %d\n"),
851 inf->pid, rd->step, rd->siggnal);
852 }
853
854 /* When called from iterate_over_inferiors, a zero return causes the
855 iteration process to proceed until there are no more inferiors to
856 consider. */
857 return 0;
858 }
859
860 static void
861 gdbsim_resume (struct target_ops *ops,
862 ptid_t ptid, int step, enum gdb_signal siggnal)
863 {
864 struct resume_data rd;
865 struct sim_inferior_data *sim_data
866 = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
867
868 rd.siggnal = siggnal;
869 rd.step = step;
870
871 /* We don't access any sim_data members within this function.
872 What's of interest is whether or not the call to
873 get_sim_inferior_data_by_ptid(), above, is able to obtain a
874 non-NULL pointer. If it managed to obtain a non-NULL pointer, we
875 know we have a single inferior to consider. If it's NULL, we
876 either have multiple inferiors to resume or an error condition. */
877
878 if (sim_data)
879 gdbsim_resume_inferior (find_inferior_pid (ptid_get_pid (ptid)), &rd);
880 else if (ptid_equal (ptid, minus_one_ptid))
881 iterate_over_inferiors (gdbsim_resume_inferior, &rd);
882 else
883 error (_("The program is not being run."));
884 }
885
886 /* Notify the simulator of an asynchronous request to stop.
887
888 The simulator shall ensure that the stop request is eventually
889 delivered to the simulator. If the call is made while the
890 simulator is not running then the stop request is processed when
891 the simulator is next resumed.
892
893 For simulators that do not support this operation, just abort. */
894
895 static int
896 gdbsim_stop_inferior (struct inferior *inf, void *arg)
897 {
898 struct sim_inferior_data *sim_data
899 = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED);
900
901 if (sim_data)
902 {
903 if (!sim_stop (sim_data->gdbsim_desc))
904 {
905 quit ();
906 }
907 }
908
909 /* When called from iterate_over_inferiors, a zero return causes the
910 iteration process to proceed until there are no more inferiors to
911 consider. */
912 return 0;
913 }
914
915 static void
916 gdbsim_stop (ptid_t ptid)
917 {
918 struct sim_inferior_data *sim_data;
919
920 if (ptid_equal (ptid, minus_one_ptid))
921 {
922 iterate_over_inferiors (gdbsim_stop_inferior, NULL);
923 }
924 else
925 {
926 struct inferior *inf = find_inferior_pid (ptid_get_pid (ptid));
927
928 if (inf == NULL)
929 error (_("Can't stop pid %d. No inferior found."),
930 ptid_get_pid (ptid));
931
932 gdbsim_stop_inferior (inf, NULL);
933 }
934 }
935
936 /* GDB version of os_poll_quit callback.
937 Taken from gdb/util.c - should be in a library. */
938
939 static int
940 gdb_os_poll_quit (host_callback *p)
941 {
942 if (deprecated_ui_loop_hook != NULL)
943 deprecated_ui_loop_hook (0);
944
945 if (check_quit_flag ()) /* gdb's idea of quit */
946 {
947 clear_quit_flag (); /* we've stolen it */
948 return 1;
949 }
950 return 0;
951 }
952
953 /* Wait for inferior process to do something. Return pid of child,
954 or -1 in case of error; store status through argument pointer STATUS,
955 just as `wait' would. */
956
957 static void
958 gdbsim_cntrl_c (int signo)
959 {
960 gdbsim_stop (minus_one_ptid);
961 }
962
963 static ptid_t
964 gdbsim_wait (struct target_ops *ops,
965 ptid_t ptid, struct target_waitstatus *status, int options)
966 {
967 struct sim_inferior_data *sim_data;
968 static RETSIGTYPE (*prev_sigint) ();
969 int sigrc = 0;
970 enum sim_stop reason = sim_running;
971
972 /* This target isn't able to (yet) resume more than one inferior at a time.
973 When ptid is minus_one_ptid, just use the current inferior. If we're
974 given an explicit pid, we'll try to find it and use that instead. */
975 if (ptid_equal (ptid, minus_one_ptid))
976 sim_data = get_sim_inferior_data (current_inferior (),
977 SIM_INSTANCE_NEEDED);
978 else
979 {
980 sim_data = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NEEDED);
981 if (sim_data == NULL)
982 error (_("Unable to wait for pid %d. Inferior not found."),
983 ptid_get_pid (ptid));
984 inferior_ptid = ptid;
985 }
986
987 if (remote_debug)
988 printf_filtered ("gdbsim_wait\n");
989
990 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
991 {
992 struct sigaction sa, osa;
993 sa.sa_handler = gdbsim_cntrl_c;
994 sigemptyset (&sa.sa_mask);
995 sa.sa_flags = 0;
996 sigaction (SIGINT, &sa, &osa);
997 prev_sigint = osa.sa_handler;
998 }
999 #else
1000 prev_sigint = signal (SIGINT, gdbsim_cntrl_c);
1001 #endif
1002 sim_resume (sim_data->gdbsim_desc, sim_data->resume_step,
1003 sim_data->resume_siggnal);
1004
1005 signal (SIGINT, prev_sigint);
1006 sim_data->resume_step = 0;
1007
1008 sim_stop_reason (sim_data->gdbsim_desc, &reason, &sigrc);
1009
1010 switch (reason)
1011 {
1012 case sim_exited:
1013 status->kind = TARGET_WAITKIND_EXITED;
1014 status->value.integer = sigrc;
1015 break;
1016 case sim_stopped:
1017 switch (sigrc)
1018 {
1019 case GDB_SIGNAL_ABRT:
1020 quit ();
1021 break;
1022 case GDB_SIGNAL_INT:
1023 case GDB_SIGNAL_TRAP:
1024 default:
1025 status->kind = TARGET_WAITKIND_STOPPED;
1026 status->value.sig = sigrc;
1027 break;
1028 }
1029 break;
1030 case sim_signalled:
1031 status->kind = TARGET_WAITKIND_SIGNALLED;
1032 status->value.sig = sigrc;
1033 break;
1034 case sim_running:
1035 case sim_polling:
1036 /* FIXME: Is this correct? */
1037 break;
1038 }
1039
1040 return inferior_ptid;
1041 }
1042
1043 /* Get ready to modify the registers array. On machines which store
1044 individual registers, this doesn't need to do anything. On machines
1045 which store all the registers in one fell swoop, this makes sure
1046 that registers contains all the registers from the program being
1047 debugged. */
1048
1049 static void
1050 gdbsim_prepare_to_store (struct regcache *regcache)
1051 {
1052 /* Do nothing, since we can store individual regs. */
1053 }
1054
1055 /* Helper for gdbsim_xfer_partial that handles memory transfers.
1056 Arguments are like target_xfer_partial. */
1057
1058 static LONGEST
1059 gdbsim_xfer_memory (struct target_ops *target,
1060 gdb_byte *readbuf, const gdb_byte *writebuf,
1061 ULONGEST memaddr, LONGEST len)
1062 {
1063 struct sim_inferior_data *sim_data
1064 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1065
1066 /* If this target doesn't have memory yet, return 0 causing the
1067 request to be passed to a lower target, hopefully an exec
1068 file. */
1069 if (!target->to_has_memory (target))
1070 return 0;
1071
1072 if (!sim_data->program_loaded)
1073 error (_("No program loaded."));
1074
1075 /* Note that we obtained the sim_data pointer above using
1076 SIM_INSTANCE_NOT_NEEDED. We do this so that we don't needlessly
1077 allocate a sim instance prior to loading a program. If we
1078 get to this point in the code though, gdbsim_desc should be
1079 non-NULL. (Note that a sim instance is needed in order to load
1080 the program...) */
1081 gdb_assert (sim_data->gdbsim_desc != NULL);
1082
1083 if (remote_debug)
1084 fprintf_unfiltered (gdb_stdlog,
1085 "gdbsim_xfer_memory: readbuf %s, writebuf %s, "
1086 "memaddr %s, len %s\n",
1087 host_address_to_string (readbuf),
1088 host_address_to_string (writebuf),
1089 paddress (target_gdbarch (), memaddr),
1090 plongest (len));
1091
1092 if (writebuf)
1093 {
1094 if (remote_debug && len > 0)
1095 dump_mem (writebuf, len);
1096 len = sim_write (sim_data->gdbsim_desc, memaddr, writebuf, len);
1097 }
1098 else
1099 {
1100 len = sim_read (sim_data->gdbsim_desc, memaddr, readbuf, len);
1101 if (remote_debug && len > 0)
1102 dump_mem (readbuf, len);
1103 }
1104 return len;
1105 }
1106
1107 /* Target to_xfer_partial implementation. */
1108
1109 static LONGEST
1110 gdbsim_xfer_partial (struct target_ops *ops, enum target_object object,
1111 const char *annex, gdb_byte *readbuf,
1112 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1113 {
1114 switch (object)
1115 {
1116 case TARGET_OBJECT_MEMORY:
1117 return gdbsim_xfer_memory (ops, readbuf, writebuf, offset, len);
1118
1119 default:
1120 return -1;
1121 }
1122 }
1123
1124 static void
1125 gdbsim_files_info (struct target_ops *target)
1126 {
1127 struct sim_inferior_data *sim_data
1128 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED);
1129 const char *file = "nothing";
1130
1131 if (exec_bfd)
1132 file = bfd_get_filename (exec_bfd);
1133
1134 if (remote_debug)
1135 printf_filtered ("gdbsim_files_info: file \"%s\"\n", file);
1136
1137 if (exec_bfd)
1138 {
1139 printf_filtered ("\tAttached to %s running program %s\n",
1140 target_shortname, file);
1141 sim_info (sim_data->gdbsim_desc, 0);
1142 }
1143 }
1144
1145 /* Clear the simulator's notion of what the break points are. */
1146
1147 static void
1148 gdbsim_mourn_inferior (struct target_ops *target)
1149 {
1150 struct sim_inferior_data *sim_data
1151 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1152
1153 if (remote_debug)
1154 printf_filtered ("gdbsim_mourn_inferior:\n");
1155
1156 remove_breakpoints ();
1157 generic_mourn_inferior ();
1158 delete_thread_silent (sim_data->remote_sim_ptid);
1159 }
1160
1161 /* Pass the command argument through to the simulator verbatim. The
1162 simulator must do any command interpretation work. */
1163
1164 void
1165 simulator_command (char *args, int from_tty)
1166 {
1167 struct sim_inferior_data *sim_data;
1168
1169 /* We use inferior_data() instead of get_sim_inferior_data() here in
1170 order to avoid attaching a sim_inferior_data struct to an
1171 inferior unnecessarily. The reason we take such care here is due
1172 to the fact that this function, simulator_command(), may be called
1173 even when the sim target is not active. If we were to use
1174 get_sim_inferior_data() here, it is possible that this call would
1175 be made either prior to gdbsim_open() or after gdbsim_close(),
1176 thus allocating memory that would not be garbage collected until
1177 the ultimate destruction of the associated inferior. */
1178
1179 sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
1180 if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1181 {
1182
1183 /* PREVIOUSLY: The user may give a command before the simulator
1184 is opened. [...] (??? assuming of course one wishes to
1185 continue to allow commands to be sent to unopened simulators,
1186 which isn't entirely unreasonable). */
1187
1188 /* The simulator is a builtin abstraction of a remote target.
1189 Consistent with that model, access to the simulator, via sim
1190 commands, is restricted to the period when the channel to the
1191 simulator is open. */
1192
1193 error (_("Not connected to the simulator target"));
1194 }
1195
1196 sim_do_command (sim_data->gdbsim_desc, args);
1197
1198 /* Invalidate the register cache, in case the simulator command does
1199 something funny. */
1200 registers_changed ();
1201 }
1202
1203 static VEC (char_ptr) *
1204 sim_command_completer (struct cmd_list_element *ignore, const char *text,
1205 const char *word)
1206 {
1207 struct sim_inferior_data *sim_data;
1208 char **tmp;
1209 int i;
1210 VEC (char_ptr) *result = NULL;
1211
1212 sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
1213 if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
1214 return NULL;
1215
1216 tmp = sim_complete_command (sim_data->gdbsim_desc, text, word);
1217 if (tmp == NULL)
1218 return NULL;
1219
1220 /* Transform the array into a VEC, and then free the array. */
1221 for (i = 0; tmp[i] != NULL; i++)
1222 VEC_safe_push (char_ptr, result, tmp[i]);
1223 xfree (tmp);
1224
1225 return result;
1226 }
1227
1228 /* Check to see if a thread is still alive. */
1229
1230 static int
1231 gdbsim_thread_alive (struct target_ops *ops, ptid_t ptid)
1232 {
1233 struct sim_inferior_data *sim_data
1234 = get_sim_inferior_data_by_ptid (ptid, SIM_INSTANCE_NOT_NEEDED);
1235
1236 if (sim_data == NULL)
1237 return 0;
1238
1239 if (ptid_equal (ptid, sim_data->remote_sim_ptid))
1240 /* The simulators' task is always alive. */
1241 return 1;
1242
1243 return 0;
1244 }
1245
1246 /* Convert a thread ID to a string. Returns the string in a static
1247 buffer. */
1248
1249 static char *
1250 gdbsim_pid_to_str (struct target_ops *ops, ptid_t ptid)
1251 {
1252 return normal_pid_to_str (ptid);
1253 }
1254
1255 /* Simulator memory may be accessed after the program has been loaded. */
1256
1257 static int
1258 gdbsim_has_all_memory (struct target_ops *ops)
1259 {
1260 struct sim_inferior_data *sim_data
1261 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1262
1263 if (!sim_data->program_loaded)
1264 return 0;
1265
1266 return 1;
1267 }
1268
1269 static int
1270 gdbsim_has_memory (struct target_ops *ops)
1271 {
1272 struct sim_inferior_data *sim_data
1273 = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
1274
1275 if (!sim_data->program_loaded)
1276 return 0;
1277
1278 return 1;
1279 }
1280
1281 /* Define the target subroutine names. */
1282
1283 struct target_ops gdbsim_ops;
1284
1285 static void
1286 init_gdbsim_ops (void)
1287 {
1288 gdbsim_ops.to_shortname = "sim";
1289 gdbsim_ops.to_longname = "simulator";
1290 gdbsim_ops.to_doc = "Use the compiled-in simulator.";
1291 gdbsim_ops.to_open = gdbsim_open;
1292 gdbsim_ops.to_close = gdbsim_close;
1293 gdbsim_ops.to_detach = gdbsim_detach;
1294 gdbsim_ops.to_resume = gdbsim_resume;
1295 gdbsim_ops.to_wait = gdbsim_wait;
1296 gdbsim_ops.to_fetch_registers = gdbsim_fetch_register;
1297 gdbsim_ops.to_store_registers = gdbsim_store_register;
1298 gdbsim_ops.to_prepare_to_store = gdbsim_prepare_to_store;
1299 gdbsim_ops.to_xfer_partial = gdbsim_xfer_partial;
1300 gdbsim_ops.to_files_info = gdbsim_files_info;
1301 gdbsim_ops.to_insert_breakpoint = memory_insert_breakpoint;
1302 gdbsim_ops.to_remove_breakpoint = memory_remove_breakpoint;
1303 gdbsim_ops.to_kill = gdbsim_kill;
1304 gdbsim_ops.to_load = gdbsim_load;
1305 gdbsim_ops.to_create_inferior = gdbsim_create_inferior;
1306 gdbsim_ops.to_mourn_inferior = gdbsim_mourn_inferior;
1307 gdbsim_ops.to_stop = gdbsim_stop;
1308 gdbsim_ops.to_thread_alive = gdbsim_thread_alive;
1309 gdbsim_ops.to_pid_to_str = gdbsim_pid_to_str;
1310 gdbsim_ops.to_stratum = process_stratum;
1311 gdbsim_ops.to_has_all_memory = gdbsim_has_all_memory;
1312 gdbsim_ops.to_has_memory = gdbsim_has_memory;
1313 gdbsim_ops.to_has_stack = default_child_has_stack;
1314 gdbsim_ops.to_has_registers = default_child_has_registers;
1315 gdbsim_ops.to_has_execution = default_child_has_execution;
1316 gdbsim_ops.to_magic = OPS_MAGIC;
1317 }
1318
1319 void
1320 _initialize_remote_sim (void)
1321 {
1322 struct cmd_list_element *c;
1323
1324 init_gdbsim_ops ();
1325 add_target (&gdbsim_ops);
1326
1327 c = add_com ("sim", class_obscure, simulator_command,
1328 _("Send a command to the simulator."));
1329 set_cmd_completer (c, sim_command_completer);
1330
1331 sim_inferior_data_key
1332 = register_inferior_data_with_cleanup (NULL, sim_inferior_data_cleanup);
1333 }