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