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