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