gdb/
[deliverable/binutils-gdb.git] / gdb / target.c
1 /* Select target systems and architectures at runtime for GDB.
2
3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
5 Free Software Foundation, Inc.
6
7 Contributed by Cygnus Support.
8
9 This file is part of GDB.
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 Boston, MA 02110-1301, USA. */
25
26 #include "defs.h"
27 #include <errno.h>
28 #include "gdb_string.h"
29 #include "target.h"
30 #include "gdbcmd.h"
31 #include "symtab.h"
32 #include "inferior.h"
33 #include "bfd.h"
34 #include "symfile.h"
35 #include "objfiles.h"
36 #include "gdb_wait.h"
37 #include "dcache.h"
38 #include <signal.h>
39 #include "regcache.h"
40 #include "gdb_assert.h"
41 #include "gdbcore.h"
42
43 static void target_info (char *, int);
44
45 static void maybe_kill_then_attach (char *, int);
46
47 static void kill_or_be_killed (int);
48
49 static void default_terminal_info (char *, int);
50
51 static int default_region_ok_for_hw_watchpoint (CORE_ADDR, int);
52
53 static int nosymbol (char *, CORE_ADDR *);
54
55 static void tcomplain (void) ATTR_NORETURN;
56
57 static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
58
59 static int return_zero (void);
60
61 static int return_one (void);
62
63 static int return_minus_one (void);
64
65 void target_ignore (void);
66
67 static void target_command (char *, int);
68
69 static struct target_ops *find_default_run_target (char *);
70
71 static void nosupport_runtime (void);
72
73 static LONGEST default_xfer_partial (struct target_ops *ops,
74 enum target_object object,
75 const char *annex, gdb_byte *readbuf,
76 const gdb_byte *writebuf,
77 ULONGEST offset, LONGEST len);
78
79 static LONGEST current_xfer_partial (struct target_ops *ops,
80 enum target_object object,
81 const char *annex, gdb_byte *readbuf,
82 const gdb_byte *writebuf,
83 ULONGEST offset, LONGEST len);
84
85 static LONGEST target_xfer_partial (struct target_ops *ops,
86 enum target_object object,
87 const char *annex,
88 void *readbuf, const void *writebuf,
89 ULONGEST offset, LONGEST len);
90
91 static void init_dummy_target (void);
92
93 static struct target_ops debug_target;
94
95 static void debug_to_open (char *, int);
96
97 static void debug_to_close (int);
98
99 static void debug_to_attach (char *, int);
100
101 static void debug_to_detach (char *, int);
102
103 static void debug_to_resume (ptid_t, int, enum target_signal);
104
105 static ptid_t debug_to_wait (ptid_t, struct target_waitstatus *);
106
107 static void debug_to_fetch_registers (int);
108
109 static void debug_to_store_registers (int);
110
111 static void debug_to_prepare_to_store (void);
112
113 static void debug_to_files_info (struct target_ops *);
114
115 static int debug_to_insert_breakpoint (struct bp_target_info *);
116
117 static int debug_to_remove_breakpoint (struct bp_target_info *);
118
119 static int debug_to_can_use_hw_breakpoint (int, int, int);
120
121 static int debug_to_insert_hw_breakpoint (struct bp_target_info *);
122
123 static int debug_to_remove_hw_breakpoint (struct bp_target_info *);
124
125 static int debug_to_insert_watchpoint (CORE_ADDR, int, int);
126
127 static int debug_to_remove_watchpoint (CORE_ADDR, int, int);
128
129 static int debug_to_stopped_by_watchpoint (void);
130
131 static int debug_to_stopped_data_address (struct target_ops *, CORE_ADDR *);
132
133 static int debug_to_region_ok_for_hw_watchpoint (CORE_ADDR, int);
134
135 static void debug_to_terminal_init (void);
136
137 static void debug_to_terminal_inferior (void);
138
139 static void debug_to_terminal_ours_for_output (void);
140
141 static void debug_to_terminal_save_ours (void);
142
143 static void debug_to_terminal_ours (void);
144
145 static void debug_to_terminal_info (char *, int);
146
147 static void debug_to_kill (void);
148
149 static void debug_to_load (char *, int);
150
151 static int debug_to_lookup_symbol (char *, CORE_ADDR *);
152
153 static void debug_to_mourn_inferior (void);
154
155 static int debug_to_can_run (void);
156
157 static void debug_to_notice_signals (ptid_t);
158
159 static int debug_to_thread_alive (ptid_t);
160
161 static void debug_to_stop (void);
162
163 /* NOTE: cagney/2004-09-29: Many targets reference this variable in
164 wierd and mysterious ways. Putting the variable here lets those
165 wierd and mysterious ways keep building while they are being
166 converted to the inferior inheritance structure. */
167 struct target_ops deprecated_child_ops;
168
169 /* Pointer to array of target architecture structures; the size of the
170 array; the current index into the array; the allocated size of the
171 array. */
172 struct target_ops **target_structs;
173 unsigned target_struct_size;
174 unsigned target_struct_index;
175 unsigned target_struct_allocsize;
176 #define DEFAULT_ALLOCSIZE 10
177
178 /* The initial current target, so that there is always a semi-valid
179 current target. */
180
181 static struct target_ops dummy_target;
182
183 /* Top of target stack. */
184
185 static struct target_ops *target_stack;
186
187 /* The target structure we are currently using to talk to a process
188 or file or whatever "inferior" we have. */
189
190 struct target_ops current_target;
191
192 /* Command list for target. */
193
194 static struct cmd_list_element *targetlist = NULL;
195
196 /* Nonzero if we are debugging an attached outside process
197 rather than an inferior. */
198
199 int attach_flag;
200
201 /* Nonzero if we should trust readonly sections from the
202 executable when reading memory. */
203
204 static int trust_readonly = 0;
205
206 /* Non-zero if we want to see trace of target level stuff. */
207
208 static int targetdebug = 0;
209 static void
210 show_targetdebug (struct ui_file *file, int from_tty,
211 struct cmd_list_element *c, const char *value)
212 {
213 fprintf_filtered (file, _("Target debugging is %s.\n"), value);
214 }
215
216 static void setup_target_debug (void);
217
218 DCACHE *target_dcache;
219
220 /* The user just typed 'target' without the name of a target. */
221
222 static void
223 target_command (char *arg, int from_tty)
224 {
225 fputs_filtered ("Argument required (target name). Try `help target'\n",
226 gdb_stdout);
227 }
228
229 /* Add a possible target architecture to the list. */
230
231 void
232 add_target (struct target_ops *t)
233 {
234 /* Provide default values for all "must have" methods. */
235 if (t->to_xfer_partial == NULL)
236 t->to_xfer_partial = default_xfer_partial;
237
238 if (!target_structs)
239 {
240 target_struct_allocsize = DEFAULT_ALLOCSIZE;
241 target_structs = (struct target_ops **) xmalloc
242 (target_struct_allocsize * sizeof (*target_structs));
243 }
244 if (target_struct_size >= target_struct_allocsize)
245 {
246 target_struct_allocsize *= 2;
247 target_structs = (struct target_ops **)
248 xrealloc ((char *) target_structs,
249 target_struct_allocsize * sizeof (*target_structs));
250 }
251 target_structs[target_struct_size++] = t;
252
253 if (targetlist == NULL)
254 add_prefix_cmd ("target", class_run, target_command, _("\
255 Connect to a target machine or process.\n\
256 The first argument is the type or protocol of the target machine.\n\
257 Remaining arguments are interpreted by the target protocol. For more\n\
258 information on the arguments for a particular protocol, type\n\
259 `help target ' followed by the protocol name."),
260 &targetlist, "target ", 0, &cmdlist);
261 add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
262 }
263
264 /* Stub functions */
265
266 void
267 target_ignore (void)
268 {
269 }
270
271 void
272 target_load (char *arg, int from_tty)
273 {
274 dcache_invalidate (target_dcache);
275 (*current_target.to_load) (arg, from_tty);
276 }
277
278 static int
279 nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
280 struct target_ops *t)
281 {
282 errno = EIO; /* Can't read/write this location */
283 return 0; /* No bytes handled */
284 }
285
286 static void
287 tcomplain (void)
288 {
289 error (_("You can't do that when your target is `%s'"),
290 current_target.to_shortname);
291 }
292
293 void
294 noprocess (void)
295 {
296 error (_("You can't do that without a process to debug."));
297 }
298
299 static int
300 nosymbol (char *name, CORE_ADDR *addrp)
301 {
302 return 1; /* Symbol does not exist in target env */
303 }
304
305 static void
306 nosupport_runtime (void)
307 {
308 if (ptid_equal (inferior_ptid, null_ptid))
309 noprocess ();
310 else
311 error (_("No run-time support for this"));
312 }
313
314
315 static void
316 default_terminal_info (char *args, int from_tty)
317 {
318 printf_unfiltered (_("No saved terminal information.\n"));
319 }
320
321 /* This is the default target_create_inferior and target_attach function.
322 If the current target is executing, it asks whether to kill it off.
323 If this function returns without calling error(), it has killed off
324 the target, and the operation should be attempted. */
325
326 static void
327 kill_or_be_killed (int from_tty)
328 {
329 if (target_has_execution)
330 {
331 printf_unfiltered (_("You are already running a program:\n"));
332 target_files_info ();
333 if (query ("Kill it? "))
334 {
335 target_kill ();
336 if (target_has_execution)
337 error (_("Killing the program did not help."));
338 return;
339 }
340 else
341 {
342 error (_("Program not killed."));
343 }
344 }
345 tcomplain ();
346 }
347
348 static void
349 maybe_kill_then_attach (char *args, int from_tty)
350 {
351 kill_or_be_killed (from_tty);
352 target_attach (args, from_tty);
353 }
354
355 static void
356 maybe_kill_then_create_inferior (char *exec, char *args, char **env,
357 int from_tty)
358 {
359 kill_or_be_killed (0);
360 target_create_inferior (exec, args, env, from_tty);
361 }
362
363 /* Go through the target stack from top to bottom, copying over zero
364 entries in current_target, then filling in still empty entries. In
365 effect, we are doing class inheritance through the pushed target
366 vectors.
367
368 NOTE: cagney/2003-10-17: The problem with this inheritance, as it
369 is currently implemented, is that it discards any knowledge of
370 which target an inherited method originally belonged to.
371 Consequently, new new target methods should instead explicitly and
372 locally search the target stack for the target that can handle the
373 request. */
374
375 static void
376 update_current_target (void)
377 {
378 struct target_ops *t;
379
380 /* First, reset curren'ts contents. */
381 memset (&current_target, 0, sizeof (current_target));
382
383 #define INHERIT(FIELD, TARGET) \
384 if (!current_target.FIELD) \
385 current_target.FIELD = (TARGET)->FIELD
386
387 for (t = target_stack; t; t = t->beneath)
388 {
389 INHERIT (to_shortname, t);
390 INHERIT (to_longname, t);
391 INHERIT (to_doc, t);
392 INHERIT (to_open, t);
393 INHERIT (to_close, t);
394 INHERIT (to_attach, t);
395 INHERIT (to_post_attach, t);
396 INHERIT (to_detach, t);
397 /* Do not inherit to_disconnect. */
398 INHERIT (to_resume, t);
399 INHERIT (to_wait, t);
400 INHERIT (to_fetch_registers, t);
401 INHERIT (to_store_registers, t);
402 INHERIT (to_prepare_to_store, t);
403 INHERIT (deprecated_xfer_memory, t);
404 INHERIT (to_files_info, t);
405 INHERIT (to_insert_breakpoint, t);
406 INHERIT (to_remove_breakpoint, t);
407 INHERIT (to_can_use_hw_breakpoint, t);
408 INHERIT (to_insert_hw_breakpoint, t);
409 INHERIT (to_remove_hw_breakpoint, t);
410 INHERIT (to_insert_watchpoint, t);
411 INHERIT (to_remove_watchpoint, t);
412 INHERIT (to_stopped_data_address, t);
413 INHERIT (to_stopped_by_watchpoint, t);
414 INHERIT (to_have_continuable_watchpoint, t);
415 INHERIT (to_region_ok_for_hw_watchpoint, t);
416 INHERIT (to_terminal_init, t);
417 INHERIT (to_terminal_inferior, t);
418 INHERIT (to_terminal_ours_for_output, t);
419 INHERIT (to_terminal_ours, t);
420 INHERIT (to_terminal_save_ours, t);
421 INHERIT (to_terminal_info, t);
422 INHERIT (to_kill, t);
423 INHERIT (to_load, t);
424 INHERIT (to_lookup_symbol, t);
425 INHERIT (to_create_inferior, t);
426 INHERIT (to_post_startup_inferior, t);
427 INHERIT (to_acknowledge_created_inferior, t);
428 INHERIT (to_insert_fork_catchpoint, t);
429 INHERIT (to_remove_fork_catchpoint, t);
430 INHERIT (to_insert_vfork_catchpoint, t);
431 INHERIT (to_remove_vfork_catchpoint, t);
432 /* Do not inherit to_follow_fork. */
433 INHERIT (to_insert_exec_catchpoint, t);
434 INHERIT (to_remove_exec_catchpoint, t);
435 INHERIT (to_reported_exec_events_per_exec_call, t);
436 INHERIT (to_has_exited, t);
437 INHERIT (to_mourn_inferior, t);
438 INHERIT (to_can_run, t);
439 INHERIT (to_notice_signals, t);
440 INHERIT (to_thread_alive, t);
441 INHERIT (to_find_new_threads, t);
442 INHERIT (to_pid_to_str, t);
443 INHERIT (to_extra_thread_info, t);
444 INHERIT (to_stop, t);
445 /* Do not inherit to_xfer_partial. */
446 INHERIT (to_rcmd, t);
447 INHERIT (to_enable_exception_callback, t);
448 INHERIT (to_get_current_exception_event, t);
449 INHERIT (to_pid_to_exec_file, t);
450 INHERIT (to_stratum, t);
451 INHERIT (to_has_all_memory, t);
452 INHERIT (to_has_memory, t);
453 INHERIT (to_has_stack, t);
454 INHERIT (to_has_registers, t);
455 INHERIT (to_has_execution, t);
456 INHERIT (to_has_thread_control, t);
457 INHERIT (to_sections, t);
458 INHERIT (to_sections_end, t);
459 INHERIT (to_can_async_p, t);
460 INHERIT (to_is_async_p, t);
461 INHERIT (to_async, t);
462 INHERIT (to_async_mask_value, t);
463 INHERIT (to_find_memory_regions, t);
464 INHERIT (to_make_corefile_notes, t);
465 INHERIT (to_get_thread_local_address, t);
466 INHERIT (to_magic, t);
467 /* Do not inherit to_memory_map. */
468 }
469 #undef INHERIT
470
471 /* Clean up a target struct so it no longer has any zero pointers in
472 it. Some entries are defaulted to a method that print an error,
473 others are hard-wired to a standard recursive default. */
474
475 #define de_fault(field, value) \
476 if (!current_target.field) \
477 current_target.field = value
478
479 de_fault (to_open,
480 (void (*) (char *, int))
481 tcomplain);
482 de_fault (to_close,
483 (void (*) (int))
484 target_ignore);
485 de_fault (to_attach,
486 maybe_kill_then_attach);
487 de_fault (to_post_attach,
488 (void (*) (int))
489 target_ignore);
490 de_fault (to_detach,
491 (void (*) (char *, int))
492 target_ignore);
493 de_fault (to_resume,
494 (void (*) (ptid_t, int, enum target_signal))
495 noprocess);
496 de_fault (to_wait,
497 (ptid_t (*) (ptid_t, struct target_waitstatus *))
498 noprocess);
499 de_fault (to_fetch_registers,
500 (void (*) (int))
501 target_ignore);
502 de_fault (to_store_registers,
503 (void (*) (int))
504 noprocess);
505 de_fault (to_prepare_to_store,
506 (void (*) (void))
507 noprocess);
508 de_fault (deprecated_xfer_memory,
509 (int (*) (CORE_ADDR, gdb_byte *, int, int, struct mem_attrib *, struct target_ops *))
510 nomemory);
511 de_fault (to_files_info,
512 (void (*) (struct target_ops *))
513 target_ignore);
514 de_fault (to_insert_breakpoint,
515 memory_insert_breakpoint);
516 de_fault (to_remove_breakpoint,
517 memory_remove_breakpoint);
518 de_fault (to_can_use_hw_breakpoint,
519 (int (*) (int, int, int))
520 return_zero);
521 de_fault (to_insert_hw_breakpoint,
522 (int (*) (struct bp_target_info *))
523 return_minus_one);
524 de_fault (to_remove_hw_breakpoint,
525 (int (*) (struct bp_target_info *))
526 return_minus_one);
527 de_fault (to_insert_watchpoint,
528 (int (*) (CORE_ADDR, int, int))
529 return_minus_one);
530 de_fault (to_remove_watchpoint,
531 (int (*) (CORE_ADDR, int, int))
532 return_minus_one);
533 de_fault (to_stopped_by_watchpoint,
534 (int (*) (void))
535 return_zero);
536 de_fault (to_stopped_data_address,
537 (int (*) (struct target_ops *, CORE_ADDR *))
538 return_zero);
539 de_fault (to_region_ok_for_hw_watchpoint,
540 default_region_ok_for_hw_watchpoint);
541 de_fault (to_terminal_init,
542 (void (*) (void))
543 target_ignore);
544 de_fault (to_terminal_inferior,
545 (void (*) (void))
546 target_ignore);
547 de_fault (to_terminal_ours_for_output,
548 (void (*) (void))
549 target_ignore);
550 de_fault (to_terminal_ours,
551 (void (*) (void))
552 target_ignore);
553 de_fault (to_terminal_save_ours,
554 (void (*) (void))
555 target_ignore);
556 de_fault (to_terminal_info,
557 default_terminal_info);
558 de_fault (to_kill,
559 (void (*) (void))
560 noprocess);
561 de_fault (to_load,
562 (void (*) (char *, int))
563 tcomplain);
564 de_fault (to_lookup_symbol,
565 (int (*) (char *, CORE_ADDR *))
566 nosymbol);
567 de_fault (to_create_inferior,
568 maybe_kill_then_create_inferior);
569 de_fault (to_post_startup_inferior,
570 (void (*) (ptid_t))
571 target_ignore);
572 de_fault (to_acknowledge_created_inferior,
573 (void (*) (int))
574 target_ignore);
575 de_fault (to_insert_fork_catchpoint,
576 (void (*) (int))
577 tcomplain);
578 de_fault (to_remove_fork_catchpoint,
579 (int (*) (int))
580 tcomplain);
581 de_fault (to_insert_vfork_catchpoint,
582 (void (*) (int))
583 tcomplain);
584 de_fault (to_remove_vfork_catchpoint,
585 (int (*) (int))
586 tcomplain);
587 de_fault (to_insert_exec_catchpoint,
588 (void (*) (int))
589 tcomplain);
590 de_fault (to_remove_exec_catchpoint,
591 (int (*) (int))
592 tcomplain);
593 de_fault (to_reported_exec_events_per_exec_call,
594 (int (*) (void))
595 return_one);
596 de_fault (to_has_exited,
597 (int (*) (int, int, int *))
598 return_zero);
599 de_fault (to_mourn_inferior,
600 (void (*) (void))
601 noprocess);
602 de_fault (to_can_run,
603 return_zero);
604 de_fault (to_notice_signals,
605 (void (*) (ptid_t))
606 target_ignore);
607 de_fault (to_thread_alive,
608 (int (*) (ptid_t))
609 return_zero);
610 de_fault (to_find_new_threads,
611 (void (*) (void))
612 target_ignore);
613 de_fault (to_extra_thread_info,
614 (char *(*) (struct thread_info *))
615 return_zero);
616 de_fault (to_stop,
617 (void (*) (void))
618 target_ignore);
619 current_target.to_xfer_partial = current_xfer_partial;
620 de_fault (to_rcmd,
621 (void (*) (char *, struct ui_file *))
622 tcomplain);
623 de_fault (to_enable_exception_callback,
624 (struct symtab_and_line * (*) (enum exception_event_kind, int))
625 nosupport_runtime);
626 de_fault (to_get_current_exception_event,
627 (struct exception_event_record * (*) (void))
628 nosupport_runtime);
629 de_fault (to_pid_to_exec_file,
630 (char *(*) (int))
631 return_zero);
632 de_fault (to_can_async_p,
633 (int (*) (void))
634 return_zero);
635 de_fault (to_is_async_p,
636 (int (*) (void))
637 return_zero);
638 de_fault (to_async,
639 (void (*) (void (*) (enum inferior_event_type, void*), void*))
640 tcomplain);
641 #undef de_fault
642
643 /* Finally, position the target-stack beneath the squashed
644 "current_target". That way code looking for a non-inherited
645 target method can quickly and simply find it. */
646 current_target.beneath = target_stack;
647 }
648
649 /* Push a new target type into the stack of the existing target accessors,
650 possibly superseding some of the existing accessors.
651
652 Result is zero if the pushed target ended up on top of the stack,
653 nonzero if at least one target is on top of it.
654
655 Rather than allow an empty stack, we always have the dummy target at
656 the bottom stratum, so we can call the function vectors without
657 checking them. */
658
659 int
660 push_target (struct target_ops *t)
661 {
662 struct target_ops **cur;
663
664 /* Check magic number. If wrong, it probably means someone changed
665 the struct definition, but not all the places that initialize one. */
666 if (t->to_magic != OPS_MAGIC)
667 {
668 fprintf_unfiltered (gdb_stderr,
669 "Magic number of %s target struct wrong\n",
670 t->to_shortname);
671 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
672 }
673
674 /* Find the proper stratum to install this target in. */
675 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
676 {
677 if ((int) (t->to_stratum) >= (int) (*cur)->to_stratum)
678 break;
679 }
680
681 /* If there's already targets at this stratum, remove them. */
682 /* FIXME: cagney/2003-10-15: I think this should be popping all
683 targets to CUR, and not just those at this stratum level. */
684 while ((*cur) != NULL && t->to_stratum == (*cur)->to_stratum)
685 {
686 /* There's already something at this stratum level. Close it,
687 and un-hook it from the stack. */
688 struct target_ops *tmp = (*cur);
689 (*cur) = (*cur)->beneath;
690 tmp->beneath = NULL;
691 target_close (tmp, 0);
692 }
693
694 /* We have removed all targets in our stratum, now add the new one. */
695 t->beneath = (*cur);
696 (*cur) = t;
697
698 update_current_target ();
699
700 if (targetdebug)
701 setup_target_debug ();
702
703 /* Not on top? */
704 return (t != target_stack);
705 }
706
707 /* Remove a target_ops vector from the stack, wherever it may be.
708 Return how many times it was removed (0 or 1). */
709
710 int
711 unpush_target (struct target_ops *t)
712 {
713 struct target_ops **cur;
714 struct target_ops *tmp;
715
716 /* Look for the specified target. Note that we assume that a target
717 can only occur once in the target stack. */
718
719 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
720 {
721 if ((*cur) == t)
722 break;
723 }
724
725 if ((*cur) == NULL)
726 return 0; /* Didn't find target_ops, quit now */
727
728 /* NOTE: cagney/2003-12-06: In '94 the close call was made
729 unconditional by moving it to before the above check that the
730 target was in the target stack (something about "Change the way
731 pushing and popping of targets work to support target overlays
732 and inheritance"). This doesn't make much sense - only open
733 targets should be closed. */
734 target_close (t, 0);
735
736 /* Unchain the target */
737 tmp = (*cur);
738 (*cur) = (*cur)->beneath;
739 tmp->beneath = NULL;
740
741 update_current_target ();
742
743 return 1;
744 }
745
746 void
747 pop_target (void)
748 {
749 target_close (&current_target, 0); /* Let it clean up */
750 if (unpush_target (target_stack) == 1)
751 return;
752
753 fprintf_unfiltered (gdb_stderr,
754 "pop_target couldn't find target %s\n",
755 current_target.to_shortname);
756 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
757 }
758
759 #undef MIN
760 #define MIN(A, B) (((A) <= (B)) ? (A) : (B))
761
762 /* target_read_string -- read a null terminated string, up to LEN bytes,
763 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
764 Set *STRING to a pointer to malloc'd memory containing the data; the caller
765 is responsible for freeing it. Return the number of bytes successfully
766 read. */
767
768 int
769 target_read_string (CORE_ADDR memaddr, char **string, int len, int *errnop)
770 {
771 int tlen, origlen, offset, i;
772 gdb_byte buf[4];
773 int errcode = 0;
774 char *buffer;
775 int buffer_allocated;
776 char *bufptr;
777 unsigned int nbytes_read = 0;
778
779 /* Small for testing. */
780 buffer_allocated = 4;
781 buffer = xmalloc (buffer_allocated);
782 bufptr = buffer;
783
784 origlen = len;
785
786 while (len > 0)
787 {
788 tlen = MIN (len, 4 - (memaddr & 3));
789 offset = memaddr & 3;
790
791 errcode = target_read_memory (memaddr & ~3, buf, sizeof buf);
792 if (errcode != 0)
793 {
794 /* The transfer request might have crossed the boundary to an
795 unallocated region of memory. Retry the transfer, requesting
796 a single byte. */
797 tlen = 1;
798 offset = 0;
799 errcode = target_read_memory (memaddr, buf, 1);
800 if (errcode != 0)
801 goto done;
802 }
803
804 if (bufptr - buffer + tlen > buffer_allocated)
805 {
806 unsigned int bytes;
807 bytes = bufptr - buffer;
808 buffer_allocated *= 2;
809 buffer = xrealloc (buffer, buffer_allocated);
810 bufptr = buffer + bytes;
811 }
812
813 for (i = 0; i < tlen; i++)
814 {
815 *bufptr++ = buf[i + offset];
816 if (buf[i + offset] == '\000')
817 {
818 nbytes_read += i + 1;
819 goto done;
820 }
821 }
822
823 memaddr += tlen;
824 len -= tlen;
825 nbytes_read += tlen;
826 }
827 done:
828 if (errnop != NULL)
829 *errnop = errcode;
830 if (string != NULL)
831 *string = buffer;
832 return nbytes_read;
833 }
834
835 /* Find a section containing ADDR. */
836 struct section_table *
837 target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
838 {
839 struct section_table *secp;
840 for (secp = target->to_sections;
841 secp < target->to_sections_end;
842 secp++)
843 {
844 if (addr >= secp->addr && addr < secp->endaddr)
845 return secp;
846 }
847 return NULL;
848 }
849
850 /* Perform a partial memory transfer. The arguments and return
851 value are just as for target_xfer_partial. */
852
853 static LONGEST
854 memory_xfer_partial (struct target_ops *ops, void *readbuf, const void *writebuf,
855 ULONGEST memaddr, LONGEST len)
856 {
857 LONGEST res;
858 int reg_len;
859 struct mem_region *region;
860
861 /* Zero length requests are ok and require no work. */
862 if (len == 0)
863 return 0;
864
865 /* Try the executable file, if "trust-readonly-sections" is set. */
866 if (readbuf != NULL && trust_readonly)
867 {
868 struct section_table *secp;
869
870 secp = target_section_by_addr (ops, memaddr);
871 if (secp != NULL
872 && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
873 & SEC_READONLY))
874 return xfer_memory (memaddr, readbuf, len, 0, NULL, ops);
875 }
876
877 /* Try GDB's internal data cache. */
878 region = lookup_mem_region (memaddr);
879 if (memaddr + len < region->hi)
880 reg_len = len;
881 else
882 reg_len = region->hi - memaddr;
883
884 switch (region->attrib.mode)
885 {
886 case MEM_RO:
887 if (writebuf != NULL)
888 return -1;
889 break;
890
891 case MEM_WO:
892 if (readbuf != NULL)
893 return -1;
894 break;
895 }
896
897 if (region->attrib.cache)
898 {
899 /* FIXME drow/2006-08-09: This call discards OPS, so the raw
900 memory request will start back at current_target. */
901 if (readbuf != NULL)
902 res = dcache_xfer_memory (target_dcache, memaddr, readbuf,
903 reg_len, 0);
904 else
905 /* FIXME drow/2006-08-09: If we're going to preserve const
906 correctness dcache_xfer_memory should take readbuf and
907 writebuf. */
908 res = dcache_xfer_memory (target_dcache, memaddr,
909 (void *) writebuf,
910 reg_len, 1);
911 if (res <= 0)
912 return -1;
913 else
914 return res;
915 }
916
917 /* If none of those methods found the memory we wanted, fall back
918 to a target partial transfer. Normally a single call to
919 to_xfer_partial is enough; if it doesn't recognize an object
920 it will call the to_xfer_partial of the next target down.
921 But for memory this won't do. Memory is the only target
922 object which can be read from more than one valid target.
923 A core file, for instance, could have some of memory but
924 delegate other bits to the target below it. So, we must
925 manually try all targets. */
926
927 do
928 {
929 res = ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL,
930 readbuf, writebuf, memaddr, len);
931 if (res > 0)
932 return res;
933
934 ops = ops->beneath;
935 }
936 while (ops != NULL);
937
938 /* If we still haven't got anything, return the last error. We
939 give up. */
940 return res;
941 }
942
943 static LONGEST
944 target_xfer_partial (struct target_ops *ops,
945 enum target_object object, const char *annex,
946 void *readbuf, const void *writebuf,
947 ULONGEST offset, LONGEST len)
948 {
949 LONGEST retval;
950
951 gdb_assert (ops->to_xfer_partial != NULL);
952
953 /* If this is a memory transfer, let the memory-specific code
954 have a look at it instead. Memory transfers are more
955 complicated. */
956 if (object == TARGET_OBJECT_MEMORY)
957 retval = memory_xfer_partial (ops, readbuf, writebuf, offset, len);
958 else
959 {
960 enum target_object raw_object = object;
961
962 /* If this is a raw memory transfer, request the normal
963 memory object from other layers. */
964 if (raw_object == TARGET_OBJECT_RAW_MEMORY)
965 raw_object = TARGET_OBJECT_MEMORY;
966
967 retval = ops->to_xfer_partial (ops, raw_object, annex, readbuf,
968 writebuf, offset, len);
969 }
970
971 if (targetdebug)
972 {
973 const unsigned char *myaddr = NULL;
974
975 fprintf_unfiltered (gdb_stdlog,
976 "%s:target_xfer_partial (%d, %s, 0x%lx, 0x%lx, 0x%s, %s) = %s",
977 ops->to_shortname,
978 (int) object,
979 (annex ? annex : "(null)"),
980 (long) readbuf, (long) writebuf,
981 paddr_nz (offset), paddr_d (len), paddr_d (retval));
982
983 if (readbuf)
984 myaddr = readbuf;
985 if (writebuf)
986 myaddr = writebuf;
987 if (retval > 0 && myaddr != NULL)
988 {
989 int i;
990
991 fputs_unfiltered (", bytes =", gdb_stdlog);
992 for (i = 0; i < retval; i++)
993 {
994 if ((((long) &(myaddr[i])) & 0xf) == 0)
995 {
996 if (targetdebug < 2 && i > 0)
997 {
998 fprintf_unfiltered (gdb_stdlog, " ...");
999 break;
1000 }
1001 fprintf_unfiltered (gdb_stdlog, "\n");
1002 }
1003
1004 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
1005 }
1006 }
1007
1008 fputc_unfiltered ('\n', gdb_stdlog);
1009 }
1010 return retval;
1011 }
1012
1013 /* Read LEN bytes of target memory at address MEMADDR, placing the results in
1014 GDB's memory at MYADDR. Returns either 0 for success or an errno value
1015 if any error occurs.
1016
1017 If an error occurs, no guarantee is made about the contents of the data at
1018 MYADDR. In particular, the caller should not depend upon partial reads
1019 filling the buffer with good data. There is no way for the caller to know
1020 how much good data might have been transfered anyway. Callers that can
1021 deal with partial reads should call target_read (which will retry until
1022 it makes no progress, and then return how much was transferred). */
1023
1024 int
1025 target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
1026 {
1027 if (target_read (&current_target, TARGET_OBJECT_MEMORY, NULL,
1028 myaddr, memaddr, len) == len)
1029 return 0;
1030 else
1031 return EIO;
1032 }
1033
1034 int
1035 target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
1036 {
1037 if (target_write (&current_target, TARGET_OBJECT_MEMORY, NULL,
1038 myaddr, memaddr, len) == len)
1039 return 0;
1040 else
1041 return EIO;
1042 }
1043
1044 /* Fetch the target's memory map. */
1045
1046 VEC(mem_region_s) *
1047 target_memory_map (void)
1048 {
1049 VEC(mem_region_s) *result;
1050 struct mem_region *last_one, *this_one;
1051 int ix;
1052 struct target_ops *t;
1053
1054 if (targetdebug)
1055 fprintf_unfiltered (gdb_stdlog, "target_memory_map ()\n");
1056
1057 for (t = current_target.beneath; t != NULL; t = t->beneath)
1058 if (t->to_memory_map != NULL)
1059 break;
1060
1061 if (t == NULL)
1062 return NULL;
1063
1064 result = t->to_memory_map (t);
1065 if (result == NULL)
1066 return NULL;
1067
1068 qsort (VEC_address (mem_region_s, result),
1069 VEC_length (mem_region_s, result),
1070 sizeof (struct mem_region), mem_region_cmp);
1071
1072 /* Check that regions do not overlap. Simultaneously assign
1073 a numbering for the "mem" commands to use to refer to
1074 each region. */
1075 last_one = NULL;
1076 for (ix = 0; VEC_iterate (mem_region_s, result, ix, this_one); ix++)
1077 {
1078 this_one->number = ix;
1079
1080 if (last_one && last_one->hi > this_one->lo)
1081 {
1082 warning (_("Overlapping regions in memory map: ignoring"));
1083 VEC_free (mem_region_s, result);
1084 return NULL;
1085 }
1086 last_one = this_one;
1087 }
1088
1089 return result;
1090 }
1091
1092 #ifndef target_stopped_data_address_p
1093 int
1094 target_stopped_data_address_p (struct target_ops *target)
1095 {
1096 if (target->to_stopped_data_address
1097 == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero)
1098 return 0;
1099 if (target->to_stopped_data_address == debug_to_stopped_data_address
1100 && (debug_target.to_stopped_data_address
1101 == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero))
1102 return 0;
1103 return 1;
1104 }
1105 #endif
1106
1107 static void
1108 show_trust_readonly (struct ui_file *file, int from_tty,
1109 struct cmd_list_element *c, const char *value)
1110 {
1111 fprintf_filtered (file, _("\
1112 Mode for reading from readonly sections is %s.\n"),
1113 value);
1114 }
1115
1116 /* More generic transfers. */
1117
1118 static LONGEST
1119 default_xfer_partial (struct target_ops *ops, enum target_object object,
1120 const char *annex, gdb_byte *readbuf,
1121 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1122 {
1123 if (object == TARGET_OBJECT_MEMORY
1124 && ops->deprecated_xfer_memory != NULL)
1125 /* If available, fall back to the target's
1126 "deprecated_xfer_memory" method. */
1127 {
1128 int xfered = -1;
1129 errno = 0;
1130 if (writebuf != NULL)
1131 {
1132 void *buffer = xmalloc (len);
1133 struct cleanup *cleanup = make_cleanup (xfree, buffer);
1134 memcpy (buffer, writebuf, len);
1135 xfered = ops->deprecated_xfer_memory (offset, buffer, len,
1136 1/*write*/, NULL, ops);
1137 do_cleanups (cleanup);
1138 }
1139 if (readbuf != NULL)
1140 xfered = ops->deprecated_xfer_memory (offset, readbuf, len, 0/*read*/,
1141 NULL, ops);
1142 if (xfered > 0)
1143 return xfered;
1144 else if (xfered == 0 && errno == 0)
1145 /* "deprecated_xfer_memory" uses 0, cross checked against
1146 ERRNO as one indication of an error. */
1147 return 0;
1148 else
1149 return -1;
1150 }
1151 else if (ops->beneath != NULL)
1152 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
1153 readbuf, writebuf, offset, len);
1154 else
1155 return -1;
1156 }
1157
1158 /* The xfer_partial handler for the topmost target. Unlike the default,
1159 it does not need to handle memory specially; it just passes all
1160 requests down the stack. */
1161
1162 static LONGEST
1163 current_xfer_partial (struct target_ops *ops, enum target_object object,
1164 const char *annex, gdb_byte *readbuf,
1165 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1166 {
1167 if (ops->beneath != NULL)
1168 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
1169 readbuf, writebuf, offset, len);
1170 else
1171 return -1;
1172 }
1173
1174 /* Target vector read/write partial wrapper functions.
1175
1176 NOTE: cagney/2003-10-21: I wonder if having "to_xfer_partial
1177 (inbuf, outbuf)", instead of separate read/write methods, make life
1178 easier. */
1179
1180 static LONGEST
1181 target_read_partial (struct target_ops *ops,
1182 enum target_object object,
1183 const char *annex, gdb_byte *buf,
1184 ULONGEST offset, LONGEST len)
1185 {
1186 return target_xfer_partial (ops, object, annex, buf, NULL, offset, len);
1187 }
1188
1189 static LONGEST
1190 target_write_partial (struct target_ops *ops,
1191 enum target_object object,
1192 const char *annex, const gdb_byte *buf,
1193 ULONGEST offset, LONGEST len)
1194 {
1195 return target_xfer_partial (ops, object, annex, NULL, buf, offset, len);
1196 }
1197
1198 /* Wrappers to perform the full transfer. */
1199 LONGEST
1200 target_read (struct target_ops *ops,
1201 enum target_object object,
1202 const char *annex, gdb_byte *buf,
1203 ULONGEST offset, LONGEST len)
1204 {
1205 LONGEST xfered = 0;
1206 while (xfered < len)
1207 {
1208 LONGEST xfer = target_read_partial (ops, object, annex,
1209 (gdb_byte *) buf + xfered,
1210 offset + xfered, len - xfered);
1211 /* Call an observer, notifying them of the xfer progress? */
1212 if (xfer == 0)
1213 return xfered;
1214 if (xfer < 0)
1215 return -1;
1216 xfered += xfer;
1217 QUIT;
1218 }
1219 return len;
1220 }
1221
1222 /* An alternative to target_write with progress callbacks. */
1223
1224 LONGEST
1225 target_write_with_progress (struct target_ops *ops,
1226 enum target_object object,
1227 const char *annex, const gdb_byte *buf,
1228 ULONGEST offset, LONGEST len,
1229 void (*progress) (ULONGEST, void *), void *baton)
1230 {
1231 LONGEST xfered = 0;
1232 while (xfered < len)
1233 {
1234 LONGEST xfer = target_write_partial (ops, object, annex,
1235 (gdb_byte *) buf + xfered,
1236 offset + xfered, len - xfered);
1237
1238 if (xfer == 0)
1239 return xfered;
1240 if (xfer < 0)
1241 return -1;
1242
1243 if (progress)
1244 (*progress) (xfer, baton);
1245
1246 xfered += xfer;
1247 QUIT;
1248 }
1249 return len;
1250 }
1251
1252 LONGEST
1253 target_write (struct target_ops *ops,
1254 enum target_object object,
1255 const char *annex, const gdb_byte *buf,
1256 ULONGEST offset, LONGEST len)
1257 {
1258 return target_write_with_progress (ops, object, annex, buf, offset, len,
1259 NULL, NULL);
1260 }
1261
1262 /* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
1263 the size of the transferred data. PADDING additional bytes are
1264 available in *BUF_P. This is a helper function for
1265 target_read_alloc; see the declaration of that function for more
1266 information. */
1267
1268 static LONGEST
1269 target_read_alloc_1 (struct target_ops *ops, enum target_object object,
1270 const char *annex, gdb_byte **buf_p, int padding)
1271 {
1272 size_t buf_alloc, buf_pos;
1273 gdb_byte *buf;
1274 LONGEST n;
1275
1276 /* This function does not have a length parameter; it reads the
1277 entire OBJECT). Also, it doesn't support objects fetched partly
1278 from one target and partly from another (in a different stratum,
1279 e.g. a core file and an executable). Both reasons make it
1280 unsuitable for reading memory. */
1281 gdb_assert (object != TARGET_OBJECT_MEMORY);
1282
1283 /* Start by reading up to 4K at a time. The target will throttle
1284 this number down if necessary. */
1285 buf_alloc = 4096;
1286 buf = xmalloc (buf_alloc);
1287 buf_pos = 0;
1288 while (1)
1289 {
1290 n = target_read_partial (ops, object, annex, &buf[buf_pos],
1291 buf_pos, buf_alloc - buf_pos - padding);
1292 if (n < 0)
1293 {
1294 /* An error occurred. */
1295 xfree (buf);
1296 return -1;
1297 }
1298 else if (n == 0)
1299 {
1300 /* Read all there was. */
1301 if (buf_pos == 0)
1302 xfree (buf);
1303 else
1304 *buf_p = buf;
1305 return buf_pos;
1306 }
1307
1308 buf_pos += n;
1309
1310 /* If the buffer is filling up, expand it. */
1311 if (buf_alloc < buf_pos * 2)
1312 {
1313 buf_alloc *= 2;
1314 buf = xrealloc (buf, buf_alloc);
1315 }
1316
1317 QUIT;
1318 }
1319 }
1320
1321 /* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
1322 the size of the transferred data. See the declaration in "target.h"
1323 function for more information about the return value. */
1324
1325 LONGEST
1326 target_read_alloc (struct target_ops *ops, enum target_object object,
1327 const char *annex, gdb_byte **buf_p)
1328 {
1329 return target_read_alloc_1 (ops, object, annex, buf_p, 0);
1330 }
1331
1332 /* Read OBJECT/ANNEX using OPS. The result is NUL-terminated and
1333 returned as a string, allocated using xmalloc. If an error occurs
1334 or the transfer is unsupported, NULL is returned. Empty objects
1335 are returned as allocated but empty strings. A warning is issued
1336 if the result contains any embedded NUL bytes. */
1337
1338 char *
1339 target_read_stralloc (struct target_ops *ops, enum target_object object,
1340 const char *annex)
1341 {
1342 gdb_byte *buffer;
1343 LONGEST transferred;
1344
1345 transferred = target_read_alloc_1 (ops, object, annex, &buffer, 1);
1346
1347 if (transferred < 0)
1348 return NULL;
1349
1350 if (transferred == 0)
1351 return xstrdup ("");
1352
1353 buffer[transferred] = 0;
1354 if (strlen (buffer) < transferred)
1355 warning (_("target object %d, annex %s, "
1356 "contained unexpected null characters"),
1357 (int) object, annex ? annex : "(none)");
1358
1359 return (char *) buffer;
1360 }
1361
1362 /* Memory transfer methods. */
1363
1364 void
1365 get_target_memory (struct target_ops *ops, CORE_ADDR addr, gdb_byte *buf,
1366 LONGEST len)
1367 {
1368 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL, buf, addr, len)
1369 != len)
1370 memory_error (EIO, addr);
1371 }
1372
1373 ULONGEST
1374 get_target_memory_unsigned (struct target_ops *ops,
1375 CORE_ADDR addr, int len)
1376 {
1377 gdb_byte buf[sizeof (ULONGEST)];
1378
1379 gdb_assert (len <= sizeof (buf));
1380 get_target_memory (ops, addr, buf, len);
1381 return extract_unsigned_integer (buf, len);
1382 }
1383
1384 static void
1385 target_info (char *args, int from_tty)
1386 {
1387 struct target_ops *t;
1388 int has_all_mem = 0;
1389
1390 if (symfile_objfile != NULL)
1391 printf_unfiltered (_("Symbols from \"%s\".\n"), symfile_objfile->name);
1392
1393 for (t = target_stack; t != NULL; t = t->beneath)
1394 {
1395 if (!t->to_has_memory)
1396 continue;
1397
1398 if ((int) (t->to_stratum) <= (int) dummy_stratum)
1399 continue;
1400 if (has_all_mem)
1401 printf_unfiltered (_("\tWhile running this, GDB does not access memory from...\n"));
1402 printf_unfiltered ("%s:\n", t->to_longname);
1403 (t->to_files_info) (t);
1404 has_all_mem = t->to_has_all_memory;
1405 }
1406 }
1407
1408 /* This function is called before any new inferior is created, e.g.
1409 by running a program, attaching, or connecting to a target.
1410 It cleans up any state from previous invocations which might
1411 change between runs. This is a subset of what target_preopen
1412 resets (things which might change between targets). */
1413
1414 void
1415 target_pre_inferior (int from_tty)
1416 {
1417 invalidate_target_mem_regions ();
1418 }
1419
1420 /* This is to be called by the open routine before it does
1421 anything. */
1422
1423 void
1424 target_preopen (int from_tty)
1425 {
1426 dont_repeat ();
1427
1428 if (target_has_execution)
1429 {
1430 if (!from_tty
1431 || query (_("A program is being debugged already. Kill it? ")))
1432 target_kill ();
1433 else
1434 error (_("Program not killed."));
1435 }
1436
1437 /* Calling target_kill may remove the target from the stack. But if
1438 it doesn't (which seems like a win for UDI), remove it now. */
1439
1440 if (target_has_execution)
1441 pop_target ();
1442
1443 target_pre_inferior (from_tty);
1444 }
1445
1446 /* Detach a target after doing deferred register stores. */
1447
1448 void
1449 target_detach (char *args, int from_tty)
1450 {
1451 (current_target.to_detach) (args, from_tty);
1452 }
1453
1454 void
1455 target_disconnect (char *args, int from_tty)
1456 {
1457 struct target_ops *t;
1458
1459 for (t = current_target.beneath; t != NULL; t = t->beneath)
1460 if (t->to_disconnect != NULL)
1461 {
1462 if (targetdebug)
1463 fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
1464 args, from_tty);
1465 t->to_disconnect (t, args, from_tty);
1466 return;
1467 }
1468
1469 tcomplain ();
1470 }
1471
1472 int
1473 target_async_mask (int mask)
1474 {
1475 int saved_async_masked_status = target_async_mask_value;
1476 target_async_mask_value = mask;
1477 return saved_async_masked_status;
1478 }
1479
1480 /* Look through the list of possible targets for a target that can
1481 follow forks. */
1482
1483 int
1484 target_follow_fork (int follow_child)
1485 {
1486 struct target_ops *t;
1487
1488 for (t = current_target.beneath; t != NULL; t = t->beneath)
1489 {
1490 if (t->to_follow_fork != NULL)
1491 {
1492 int retval = t->to_follow_fork (t, follow_child);
1493 if (targetdebug)
1494 fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
1495 follow_child, retval);
1496 return retval;
1497 }
1498 }
1499
1500 /* Some target returned a fork event, but did not know how to follow it. */
1501 internal_error (__FILE__, __LINE__,
1502 "could not find a target to follow fork");
1503 }
1504
1505 /* Look through the list of possible targets for a target that can
1506 execute a run or attach command without any other data. This is
1507 used to locate the default process stratum.
1508
1509 Result is always valid (error() is called for errors). */
1510
1511 static struct target_ops *
1512 find_default_run_target (char *do_mesg)
1513 {
1514 struct target_ops **t;
1515 struct target_ops *runable = NULL;
1516 int count;
1517
1518 count = 0;
1519
1520 for (t = target_structs; t < target_structs + target_struct_size;
1521 ++t)
1522 {
1523 if ((*t)->to_can_run && target_can_run (*t))
1524 {
1525 runable = *t;
1526 ++count;
1527 }
1528 }
1529
1530 if (count != 1)
1531 error (_("Don't know how to %s. Try \"help target\"."), do_mesg);
1532
1533 return runable;
1534 }
1535
1536 void
1537 find_default_attach (char *args, int from_tty)
1538 {
1539 struct target_ops *t;
1540
1541 t = find_default_run_target ("attach");
1542 (t->to_attach) (args, from_tty);
1543 return;
1544 }
1545
1546 void
1547 find_default_create_inferior (char *exec_file, char *allargs, char **env,
1548 int from_tty)
1549 {
1550 struct target_ops *t;
1551
1552 t = find_default_run_target ("run");
1553 (t->to_create_inferior) (exec_file, allargs, env, from_tty);
1554 return;
1555 }
1556
1557 static int
1558 default_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
1559 {
1560 return (len <= TYPE_LENGTH (builtin_type_void_data_ptr));
1561 }
1562
1563 static int
1564 return_zero (void)
1565 {
1566 return 0;
1567 }
1568
1569 static int
1570 return_one (void)
1571 {
1572 return 1;
1573 }
1574
1575 static int
1576 return_minus_one (void)
1577 {
1578 return -1;
1579 }
1580
1581 /*
1582 * Resize the to_sections pointer. Also make sure that anyone that
1583 * was holding on to an old value of it gets updated.
1584 * Returns the old size.
1585 */
1586
1587 int
1588 target_resize_to_sections (struct target_ops *target, int num_added)
1589 {
1590 struct target_ops **t;
1591 struct section_table *old_value;
1592 int old_count;
1593
1594 old_value = target->to_sections;
1595
1596 if (target->to_sections)
1597 {
1598 old_count = target->to_sections_end - target->to_sections;
1599 target->to_sections = (struct section_table *)
1600 xrealloc ((char *) target->to_sections,
1601 (sizeof (struct section_table)) * (num_added + old_count));
1602 }
1603 else
1604 {
1605 old_count = 0;
1606 target->to_sections = (struct section_table *)
1607 xmalloc ((sizeof (struct section_table)) * num_added);
1608 }
1609 target->to_sections_end = target->to_sections + (num_added + old_count);
1610
1611 /* Check to see if anyone else was pointing to this structure.
1612 If old_value was null, then no one was. */
1613
1614 if (old_value)
1615 {
1616 for (t = target_structs; t < target_structs + target_struct_size;
1617 ++t)
1618 {
1619 if ((*t)->to_sections == old_value)
1620 {
1621 (*t)->to_sections = target->to_sections;
1622 (*t)->to_sections_end = target->to_sections_end;
1623 }
1624 }
1625 /* There is a flattened view of the target stack in current_target,
1626 so its to_sections pointer might also need updating. */
1627 if (current_target.to_sections == old_value)
1628 {
1629 current_target.to_sections = target->to_sections;
1630 current_target.to_sections_end = target->to_sections_end;
1631 }
1632 }
1633
1634 return old_count;
1635
1636 }
1637
1638 /* Remove all target sections taken from ABFD.
1639
1640 Scan the current target stack for targets whose section tables
1641 refer to sections from BFD, and remove those sections. We use this
1642 when we notice that the inferior has unloaded a shared object, for
1643 example. */
1644 void
1645 remove_target_sections (bfd *abfd)
1646 {
1647 struct target_ops **t;
1648
1649 for (t = target_structs; t < target_structs + target_struct_size; t++)
1650 {
1651 struct section_table *src, *dest;
1652
1653 dest = (*t)->to_sections;
1654 for (src = (*t)->to_sections; src < (*t)->to_sections_end; src++)
1655 if (src->bfd != abfd)
1656 {
1657 /* Keep this section. */
1658 if (dest < src) *dest = *src;
1659 dest++;
1660 }
1661
1662 /* If we've dropped any sections, resize the section table. */
1663 if (dest < src)
1664 target_resize_to_sections (*t, dest - src);
1665 }
1666 }
1667
1668
1669
1670
1671 /* Find a single runnable target in the stack and return it. If for
1672 some reason there is more than one, return NULL. */
1673
1674 struct target_ops *
1675 find_run_target (void)
1676 {
1677 struct target_ops **t;
1678 struct target_ops *runable = NULL;
1679 int count;
1680
1681 count = 0;
1682
1683 for (t = target_structs; t < target_structs + target_struct_size; ++t)
1684 {
1685 if ((*t)->to_can_run && target_can_run (*t))
1686 {
1687 runable = *t;
1688 ++count;
1689 }
1690 }
1691
1692 return (count == 1 ? runable : NULL);
1693 }
1694
1695 /* Find a single core_stratum target in the list of targets and return it.
1696 If for some reason there is more than one, return NULL. */
1697
1698 struct target_ops *
1699 find_core_target (void)
1700 {
1701 struct target_ops **t;
1702 struct target_ops *runable = NULL;
1703 int count;
1704
1705 count = 0;
1706
1707 for (t = target_structs; t < target_structs + target_struct_size;
1708 ++t)
1709 {
1710 if ((*t)->to_stratum == core_stratum)
1711 {
1712 runable = *t;
1713 ++count;
1714 }
1715 }
1716
1717 return (count == 1 ? runable : NULL);
1718 }
1719
1720 /*
1721 * Find the next target down the stack from the specified target.
1722 */
1723
1724 struct target_ops *
1725 find_target_beneath (struct target_ops *t)
1726 {
1727 return t->beneath;
1728 }
1729
1730 \f
1731 /* The inferior process has died. Long live the inferior! */
1732
1733 void
1734 generic_mourn_inferior (void)
1735 {
1736 extern int show_breakpoint_hit_counts;
1737
1738 inferior_ptid = null_ptid;
1739 attach_flag = 0;
1740 breakpoint_init_inferior (inf_exited);
1741 registers_changed ();
1742
1743 reopen_exec_file ();
1744 reinit_frame_cache ();
1745
1746 /* It is confusing to the user for ignore counts to stick around
1747 from previous runs of the inferior. So clear them. */
1748 /* However, it is more confusing for the ignore counts to disappear when
1749 using hit counts. So don't clear them if we're counting hits. */
1750 if (!show_breakpoint_hit_counts)
1751 breakpoint_clear_ignore_counts ();
1752
1753 if (deprecated_detach_hook)
1754 deprecated_detach_hook ();
1755 }
1756 \f
1757 /* Helper function for child_wait and the Lynx derivatives of child_wait.
1758 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1759 translation of that in OURSTATUS. */
1760 void
1761 store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
1762 {
1763 #ifdef CHILD_SPECIAL_WAITSTATUS
1764 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
1765 if it wants to deal with hoststatus. */
1766 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
1767 return;
1768 #endif
1769
1770 if (WIFEXITED (hoststatus))
1771 {
1772 ourstatus->kind = TARGET_WAITKIND_EXITED;
1773 ourstatus->value.integer = WEXITSTATUS (hoststatus);
1774 }
1775 else if (!WIFSTOPPED (hoststatus))
1776 {
1777 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1778 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1779 }
1780 else
1781 {
1782 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1783 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1784 }
1785 }
1786 \f
1787 /* Returns zero to leave the inferior alone, one to interrupt it. */
1788 int (*target_activity_function) (void);
1789 int target_activity_fd;
1790 \f
1791 /* Convert a normal process ID to a string. Returns the string in a
1792 static buffer. */
1793
1794 char *
1795 normal_pid_to_str (ptid_t ptid)
1796 {
1797 static char buf[32];
1798
1799 xsnprintf (buf, sizeof buf, "process %d", ptid_get_pid (ptid));
1800 return buf;
1801 }
1802
1803 /* Error-catcher for target_find_memory_regions */
1804 static int dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
1805 {
1806 error (_("No target."));
1807 return 0;
1808 }
1809
1810 /* Error-catcher for target_make_corefile_notes */
1811 static char * dummy_make_corefile_notes (bfd *ignore1, int *ignore2)
1812 {
1813 error (_("No target."));
1814 return NULL;
1815 }
1816
1817 /* Set up the handful of non-empty slots needed by the dummy target
1818 vector. */
1819
1820 static void
1821 init_dummy_target (void)
1822 {
1823 dummy_target.to_shortname = "None";
1824 dummy_target.to_longname = "None";
1825 dummy_target.to_doc = "";
1826 dummy_target.to_attach = find_default_attach;
1827 dummy_target.to_create_inferior = find_default_create_inferior;
1828 dummy_target.to_pid_to_str = normal_pid_to_str;
1829 dummy_target.to_stratum = dummy_stratum;
1830 dummy_target.to_find_memory_regions = dummy_find_memory_regions;
1831 dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
1832 dummy_target.to_xfer_partial = default_xfer_partial;
1833 dummy_target.to_magic = OPS_MAGIC;
1834 }
1835 \f
1836 static void
1837 debug_to_open (char *args, int from_tty)
1838 {
1839 debug_target.to_open (args, from_tty);
1840
1841 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
1842 }
1843
1844 static void
1845 debug_to_close (int quitting)
1846 {
1847 target_close (&debug_target, quitting);
1848 fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
1849 }
1850
1851 void
1852 target_close (struct target_ops *targ, int quitting)
1853 {
1854 if (targ->to_xclose != NULL)
1855 targ->to_xclose (targ, quitting);
1856 else if (targ->to_close != NULL)
1857 targ->to_close (quitting);
1858 }
1859
1860 static void
1861 debug_to_attach (char *args, int from_tty)
1862 {
1863 debug_target.to_attach (args, from_tty);
1864
1865 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n", args, from_tty);
1866 }
1867
1868
1869 static void
1870 debug_to_post_attach (int pid)
1871 {
1872 debug_target.to_post_attach (pid);
1873
1874 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
1875 }
1876
1877 static void
1878 debug_to_detach (char *args, int from_tty)
1879 {
1880 debug_target.to_detach (args, from_tty);
1881
1882 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n", args, from_tty);
1883 }
1884
1885 static void
1886 debug_to_resume (ptid_t ptid, int step, enum target_signal siggnal)
1887 {
1888 debug_target.to_resume (ptid, step, siggnal);
1889
1890 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n", PIDGET (ptid),
1891 step ? "step" : "continue",
1892 target_signal_to_name (siggnal));
1893 }
1894
1895 static ptid_t
1896 debug_to_wait (ptid_t ptid, struct target_waitstatus *status)
1897 {
1898 ptid_t retval;
1899
1900 retval = debug_target.to_wait (ptid, status);
1901
1902 fprintf_unfiltered (gdb_stdlog,
1903 "target_wait (%d, status) = %d, ", PIDGET (ptid),
1904 PIDGET (retval));
1905 fprintf_unfiltered (gdb_stdlog, "status->kind = ");
1906 switch (status->kind)
1907 {
1908 case TARGET_WAITKIND_EXITED:
1909 fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n",
1910 status->value.integer);
1911 break;
1912 case TARGET_WAITKIND_STOPPED:
1913 fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n",
1914 target_signal_to_name (status->value.sig));
1915 break;
1916 case TARGET_WAITKIND_SIGNALLED:
1917 fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n",
1918 target_signal_to_name (status->value.sig));
1919 break;
1920 case TARGET_WAITKIND_LOADED:
1921 fprintf_unfiltered (gdb_stdlog, "loaded\n");
1922 break;
1923 case TARGET_WAITKIND_FORKED:
1924 fprintf_unfiltered (gdb_stdlog, "forked\n");
1925 break;
1926 case TARGET_WAITKIND_VFORKED:
1927 fprintf_unfiltered (gdb_stdlog, "vforked\n");
1928 break;
1929 case TARGET_WAITKIND_EXECD:
1930 fprintf_unfiltered (gdb_stdlog, "execd\n");
1931 break;
1932 case TARGET_WAITKIND_SPURIOUS:
1933 fprintf_unfiltered (gdb_stdlog, "spurious\n");
1934 break;
1935 default:
1936 fprintf_unfiltered (gdb_stdlog, "unknown???\n");
1937 break;
1938 }
1939
1940 return retval;
1941 }
1942
1943 static void
1944 debug_print_register (const char * func, int regno)
1945 {
1946 fprintf_unfiltered (gdb_stdlog, "%s ", func);
1947 if (regno >= 0 && regno < NUM_REGS + NUM_PSEUDO_REGS
1948 && REGISTER_NAME (regno) != NULL && REGISTER_NAME (regno)[0] != '\0')
1949 fprintf_unfiltered (gdb_stdlog, "(%s)", REGISTER_NAME (regno));
1950 else
1951 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1952 if (regno >= 0)
1953 {
1954 int i;
1955 unsigned char buf[MAX_REGISTER_SIZE];
1956 deprecated_read_register_gen (regno, buf);
1957 fprintf_unfiltered (gdb_stdlog, " = ");
1958 for (i = 0; i < register_size (current_gdbarch, regno); i++)
1959 {
1960 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1961 }
1962 if (register_size (current_gdbarch, regno) <= sizeof (LONGEST))
1963 {
1964 fprintf_unfiltered (gdb_stdlog, " 0x%s %s",
1965 paddr_nz (read_register (regno)),
1966 paddr_d (read_register (regno)));
1967 }
1968 }
1969 fprintf_unfiltered (gdb_stdlog, "\n");
1970 }
1971
1972 static void
1973 debug_to_fetch_registers (int regno)
1974 {
1975 debug_target.to_fetch_registers (regno);
1976 debug_print_register ("target_fetch_registers", regno);
1977 }
1978
1979 static void
1980 debug_to_store_registers (int regno)
1981 {
1982 debug_target.to_store_registers (regno);
1983 debug_print_register ("target_store_registers", regno);
1984 fprintf_unfiltered (gdb_stdlog, "\n");
1985 }
1986
1987 static void
1988 debug_to_prepare_to_store (void)
1989 {
1990 debug_target.to_prepare_to_store ();
1991
1992 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
1993 }
1994
1995 static int
1996 deprecated_debug_xfer_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len,
1997 int write, struct mem_attrib *attrib,
1998 struct target_ops *target)
1999 {
2000 int retval;
2001
2002 retval = debug_target.deprecated_xfer_memory (memaddr, myaddr, len, write,
2003 attrib, target);
2004
2005 fprintf_unfiltered (gdb_stdlog,
2006 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
2007 (unsigned int) memaddr, /* possable truncate long long */
2008 len, write ? "write" : "read", retval);
2009
2010 if (retval > 0)
2011 {
2012 int i;
2013
2014 fputs_unfiltered (", bytes =", gdb_stdlog);
2015 for (i = 0; i < retval; i++)
2016 {
2017 if ((((long) &(myaddr[i])) & 0xf) == 0)
2018 {
2019 if (targetdebug < 2 && i > 0)
2020 {
2021 fprintf_unfiltered (gdb_stdlog, " ...");
2022 break;
2023 }
2024 fprintf_unfiltered (gdb_stdlog, "\n");
2025 }
2026
2027 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
2028 }
2029 }
2030
2031 fputc_unfiltered ('\n', gdb_stdlog);
2032
2033 return retval;
2034 }
2035
2036 static void
2037 debug_to_files_info (struct target_ops *target)
2038 {
2039 debug_target.to_files_info (target);
2040
2041 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
2042 }
2043
2044 static int
2045 debug_to_insert_breakpoint (struct bp_target_info *bp_tgt)
2046 {
2047 int retval;
2048
2049 retval = debug_target.to_insert_breakpoint (bp_tgt);
2050
2051 fprintf_unfiltered (gdb_stdlog,
2052 "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
2053 (unsigned long) bp_tgt->placed_address,
2054 (unsigned long) retval);
2055 return retval;
2056 }
2057
2058 static int
2059 debug_to_remove_breakpoint (struct bp_target_info *bp_tgt)
2060 {
2061 int retval;
2062
2063 retval = debug_target.to_remove_breakpoint (bp_tgt);
2064
2065 fprintf_unfiltered (gdb_stdlog,
2066 "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
2067 (unsigned long) bp_tgt->placed_address,
2068 (unsigned long) retval);
2069 return retval;
2070 }
2071
2072 static int
2073 debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
2074 {
2075 int retval;
2076
2077 retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
2078
2079 fprintf_unfiltered (gdb_stdlog,
2080 "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
2081 (unsigned long) type,
2082 (unsigned long) cnt,
2083 (unsigned long) from_tty,
2084 (unsigned long) retval);
2085 return retval;
2086 }
2087
2088 static int
2089 debug_to_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
2090 {
2091 CORE_ADDR retval;
2092
2093 retval = debug_target.to_region_ok_for_hw_watchpoint (addr, len);
2094
2095 fprintf_unfiltered (gdb_stdlog,
2096 "TARGET_REGION_OK_FOR_HW_WATCHPOINT (%ld, %ld) = 0x%lx\n",
2097 (unsigned long) addr,
2098 (unsigned long) len,
2099 (unsigned long) retval);
2100 return retval;
2101 }
2102
2103 static int
2104 debug_to_stopped_by_watchpoint (void)
2105 {
2106 int retval;
2107
2108 retval = debug_target.to_stopped_by_watchpoint ();
2109
2110 fprintf_unfiltered (gdb_stdlog,
2111 "STOPPED_BY_WATCHPOINT () = %ld\n",
2112 (unsigned long) retval);
2113 return retval;
2114 }
2115
2116 static int
2117 debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
2118 {
2119 int retval;
2120
2121 retval = debug_target.to_stopped_data_address (target, addr);
2122
2123 fprintf_unfiltered (gdb_stdlog,
2124 "target_stopped_data_address ([0x%lx]) = %ld\n",
2125 (unsigned long)*addr,
2126 (unsigned long)retval);
2127 return retval;
2128 }
2129
2130 static int
2131 debug_to_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
2132 {
2133 int retval;
2134
2135 retval = debug_target.to_insert_hw_breakpoint (bp_tgt);
2136
2137 fprintf_unfiltered (gdb_stdlog,
2138 "target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
2139 (unsigned long) bp_tgt->placed_address,
2140 (unsigned long) retval);
2141 return retval;
2142 }
2143
2144 static int
2145 debug_to_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
2146 {
2147 int retval;
2148
2149 retval = debug_target.to_remove_hw_breakpoint (bp_tgt);
2150
2151 fprintf_unfiltered (gdb_stdlog,
2152 "target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
2153 (unsigned long) bp_tgt->placed_address,
2154 (unsigned long) retval);
2155 return retval;
2156 }
2157
2158 static int
2159 debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type)
2160 {
2161 int retval;
2162
2163 retval = debug_target.to_insert_watchpoint (addr, len, type);
2164
2165 fprintf_unfiltered (gdb_stdlog,
2166 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2167 (unsigned long) addr, len, type, (unsigned long) retval);
2168 return retval;
2169 }
2170
2171 static int
2172 debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type)
2173 {
2174 int retval;
2175
2176 retval = debug_target.to_insert_watchpoint (addr, len, type);
2177
2178 fprintf_unfiltered (gdb_stdlog,
2179 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2180 (unsigned long) addr, len, type, (unsigned long) retval);
2181 return retval;
2182 }
2183
2184 static void
2185 debug_to_terminal_init (void)
2186 {
2187 debug_target.to_terminal_init ();
2188
2189 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
2190 }
2191
2192 static void
2193 debug_to_terminal_inferior (void)
2194 {
2195 debug_target.to_terminal_inferior ();
2196
2197 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
2198 }
2199
2200 static void
2201 debug_to_terminal_ours_for_output (void)
2202 {
2203 debug_target.to_terminal_ours_for_output ();
2204
2205 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
2206 }
2207
2208 static void
2209 debug_to_terminal_ours (void)
2210 {
2211 debug_target.to_terminal_ours ();
2212
2213 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
2214 }
2215
2216 static void
2217 debug_to_terminal_save_ours (void)
2218 {
2219 debug_target.to_terminal_save_ours ();
2220
2221 fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
2222 }
2223
2224 static void
2225 debug_to_terminal_info (char *arg, int from_tty)
2226 {
2227 debug_target.to_terminal_info (arg, from_tty);
2228
2229 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
2230 from_tty);
2231 }
2232
2233 static void
2234 debug_to_kill (void)
2235 {
2236 debug_target.to_kill ();
2237
2238 fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
2239 }
2240
2241 static void
2242 debug_to_load (char *args, int from_tty)
2243 {
2244 debug_target.to_load (args, from_tty);
2245
2246 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
2247 }
2248
2249 static int
2250 debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
2251 {
2252 int retval;
2253
2254 retval = debug_target.to_lookup_symbol (name, addrp);
2255
2256 fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
2257
2258 return retval;
2259 }
2260
2261 static void
2262 debug_to_create_inferior (char *exec_file, char *args, char **env,
2263 int from_tty)
2264 {
2265 debug_target.to_create_inferior (exec_file, args, env, from_tty);
2266
2267 fprintf_unfiltered (gdb_stdlog, "target_create_inferior (%s, %s, xxx, %d)\n",
2268 exec_file, args, from_tty);
2269 }
2270
2271 static void
2272 debug_to_post_startup_inferior (ptid_t ptid)
2273 {
2274 debug_target.to_post_startup_inferior (ptid);
2275
2276 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
2277 PIDGET (ptid));
2278 }
2279
2280 static void
2281 debug_to_acknowledge_created_inferior (int pid)
2282 {
2283 debug_target.to_acknowledge_created_inferior (pid);
2284
2285 fprintf_unfiltered (gdb_stdlog, "target_acknowledge_created_inferior (%d)\n",
2286 pid);
2287 }
2288
2289 static void
2290 debug_to_insert_fork_catchpoint (int pid)
2291 {
2292 debug_target.to_insert_fork_catchpoint (pid);
2293
2294 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d)\n",
2295 pid);
2296 }
2297
2298 static int
2299 debug_to_remove_fork_catchpoint (int pid)
2300 {
2301 int retval;
2302
2303 retval = debug_target.to_remove_fork_catchpoint (pid);
2304
2305 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
2306 pid, retval);
2307
2308 return retval;
2309 }
2310
2311 static void
2312 debug_to_insert_vfork_catchpoint (int pid)
2313 {
2314 debug_target.to_insert_vfork_catchpoint (pid);
2315
2316 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d)\n",
2317 pid);
2318 }
2319
2320 static int
2321 debug_to_remove_vfork_catchpoint (int pid)
2322 {
2323 int retval;
2324
2325 retval = debug_target.to_remove_vfork_catchpoint (pid);
2326
2327 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
2328 pid, retval);
2329
2330 return retval;
2331 }
2332
2333 static void
2334 debug_to_insert_exec_catchpoint (int pid)
2335 {
2336 debug_target.to_insert_exec_catchpoint (pid);
2337
2338 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d)\n",
2339 pid);
2340 }
2341
2342 static int
2343 debug_to_remove_exec_catchpoint (int pid)
2344 {
2345 int retval;
2346
2347 retval = debug_target.to_remove_exec_catchpoint (pid);
2348
2349 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
2350 pid, retval);
2351
2352 return retval;
2353 }
2354
2355 static int
2356 debug_to_reported_exec_events_per_exec_call (void)
2357 {
2358 int reported_exec_events;
2359
2360 reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2361
2362 fprintf_unfiltered (gdb_stdlog,
2363 "target_reported_exec_events_per_exec_call () = %d\n",
2364 reported_exec_events);
2365
2366 return reported_exec_events;
2367 }
2368
2369 static int
2370 debug_to_has_exited (int pid, int wait_status, int *exit_status)
2371 {
2372 int has_exited;
2373
2374 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2375
2376 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
2377 pid, wait_status, *exit_status, has_exited);
2378
2379 return has_exited;
2380 }
2381
2382 static void
2383 debug_to_mourn_inferior (void)
2384 {
2385 debug_target.to_mourn_inferior ();
2386
2387 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
2388 }
2389
2390 static int
2391 debug_to_can_run (void)
2392 {
2393 int retval;
2394
2395 retval = debug_target.to_can_run ();
2396
2397 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
2398
2399 return retval;
2400 }
2401
2402 static void
2403 debug_to_notice_signals (ptid_t ptid)
2404 {
2405 debug_target.to_notice_signals (ptid);
2406
2407 fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n",
2408 PIDGET (ptid));
2409 }
2410
2411 static int
2412 debug_to_thread_alive (ptid_t ptid)
2413 {
2414 int retval;
2415
2416 retval = debug_target.to_thread_alive (ptid);
2417
2418 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
2419 PIDGET (ptid), retval);
2420
2421 return retval;
2422 }
2423
2424 static void
2425 debug_to_find_new_threads (void)
2426 {
2427 debug_target.to_find_new_threads ();
2428
2429 fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
2430 }
2431
2432 static void
2433 debug_to_stop (void)
2434 {
2435 debug_target.to_stop ();
2436
2437 fprintf_unfiltered (gdb_stdlog, "target_stop ()\n");
2438 }
2439
2440 static void
2441 debug_to_rcmd (char *command,
2442 struct ui_file *outbuf)
2443 {
2444 debug_target.to_rcmd (command, outbuf);
2445 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
2446 }
2447
2448 static struct symtab_and_line *
2449 debug_to_enable_exception_callback (enum exception_event_kind kind, int enable)
2450 {
2451 struct symtab_and_line *result;
2452 result = debug_target.to_enable_exception_callback (kind, enable);
2453 fprintf_unfiltered (gdb_stdlog,
2454 "target get_exception_callback_sal (%d, %d)\n",
2455 kind, enable);
2456 return result;
2457 }
2458
2459 static struct exception_event_record *
2460 debug_to_get_current_exception_event (void)
2461 {
2462 struct exception_event_record *result;
2463 result = debug_target.to_get_current_exception_event ();
2464 fprintf_unfiltered (gdb_stdlog, "target get_current_exception_event ()\n");
2465 return result;
2466 }
2467
2468 static char *
2469 debug_to_pid_to_exec_file (int pid)
2470 {
2471 char *exec_file;
2472
2473 exec_file = debug_target.to_pid_to_exec_file (pid);
2474
2475 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
2476 pid, exec_file);
2477
2478 return exec_file;
2479 }
2480
2481 static void
2482 setup_target_debug (void)
2483 {
2484 memcpy (&debug_target, &current_target, sizeof debug_target);
2485
2486 current_target.to_open = debug_to_open;
2487 current_target.to_close = debug_to_close;
2488 current_target.to_attach = debug_to_attach;
2489 current_target.to_post_attach = debug_to_post_attach;
2490 current_target.to_detach = debug_to_detach;
2491 current_target.to_resume = debug_to_resume;
2492 current_target.to_wait = debug_to_wait;
2493 current_target.to_fetch_registers = debug_to_fetch_registers;
2494 current_target.to_store_registers = debug_to_store_registers;
2495 current_target.to_prepare_to_store = debug_to_prepare_to_store;
2496 current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory;
2497 current_target.to_files_info = debug_to_files_info;
2498 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2499 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
2500 current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
2501 current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
2502 current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
2503 current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
2504 current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
2505 current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
2506 current_target.to_stopped_data_address = debug_to_stopped_data_address;
2507 current_target.to_region_ok_for_hw_watchpoint = debug_to_region_ok_for_hw_watchpoint;
2508 current_target.to_terminal_init = debug_to_terminal_init;
2509 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2510 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2511 current_target.to_terminal_ours = debug_to_terminal_ours;
2512 current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
2513 current_target.to_terminal_info = debug_to_terminal_info;
2514 current_target.to_kill = debug_to_kill;
2515 current_target.to_load = debug_to_load;
2516 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2517 current_target.to_create_inferior = debug_to_create_inferior;
2518 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2519 current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
2520 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2521 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2522 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2523 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
2524 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2525 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
2526 current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
2527 current_target.to_has_exited = debug_to_has_exited;
2528 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2529 current_target.to_can_run = debug_to_can_run;
2530 current_target.to_notice_signals = debug_to_notice_signals;
2531 current_target.to_thread_alive = debug_to_thread_alive;
2532 current_target.to_find_new_threads = debug_to_find_new_threads;
2533 current_target.to_stop = debug_to_stop;
2534 current_target.to_rcmd = debug_to_rcmd;
2535 current_target.to_enable_exception_callback = debug_to_enable_exception_callback;
2536 current_target.to_get_current_exception_event = debug_to_get_current_exception_event;
2537 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
2538 }
2539 \f
2540
2541 static char targ_desc[] =
2542 "Names of targets and files being debugged.\n\
2543 Shows the entire stack of targets currently in use (including the exec-file,\n\
2544 core-file, and process, if any), as well as the symbol file name.";
2545
2546 static void
2547 do_monitor_command (char *cmd,
2548 int from_tty)
2549 {
2550 if ((current_target.to_rcmd
2551 == (void (*) (char *, struct ui_file *)) tcomplain)
2552 || (current_target.to_rcmd == debug_to_rcmd
2553 && (debug_target.to_rcmd
2554 == (void (*) (char *, struct ui_file *)) tcomplain)))
2555 error (_("\"monitor\" command not supported by this target."));
2556 target_rcmd (cmd, gdb_stdtarg);
2557 }
2558
2559 void
2560 initialize_targets (void)
2561 {
2562 init_dummy_target ();
2563 push_target (&dummy_target);
2564
2565 add_info ("target", target_info, targ_desc);
2566 add_info ("files", target_info, targ_desc);
2567
2568 add_setshow_zinteger_cmd ("target", class_maintenance, &targetdebug, _("\
2569 Set target debugging."), _("\
2570 Show target debugging."), _("\
2571 When non-zero, target debugging is enabled. Higher numbers are more\n\
2572 verbose. Changes do not take effect until the next \"run\" or \"target\"\n\
2573 command."),
2574 NULL,
2575 show_targetdebug,
2576 &setdebuglist, &showdebuglist);
2577
2578 add_setshow_boolean_cmd ("trust-readonly-sections", class_support,
2579 &trust_readonly, _("\
2580 Set mode for reading from readonly sections."), _("\
2581 Show mode for reading from readonly sections."), _("\
2582 When this mode is on, memory reads from readonly sections (such as .text)\n\
2583 will be read from the object file instead of from the target. This will\n\
2584 result in significant performance improvement for remote targets."),
2585 NULL,
2586 show_trust_readonly,
2587 &setlist, &showlist);
2588
2589 add_com ("monitor", class_obscure, do_monitor_command,
2590 _("Send a command to the remote monitor (remote targets only)."));
2591
2592 target_dcache = dcache_init ();
2593 }
This page took 0.090386 seconds and 4 git commands to generate.