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