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