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