]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote-sim.c
Change "set debug symtab-create" to take a verbosity level.
[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 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 }