Replace calls to abort() with calls to internal_error().
[deliverable/binutils-gdb.git] / gdb / target.c
1 /* Select target systems and architectures at runtime for GDB.
2 Copyright 1990, 1992-1995, 1998-2000, 2001 Free Software Foundation, Inc.
3 Contributed by Cygnus Support.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 #include "defs.h"
23 #include <errno.h>
24 #include <ctype.h>
25 #include "gdb_string.h"
26 #include "target.h"
27 #include "gdbcmd.h"
28 #include "symtab.h"
29 #include "inferior.h"
30 #include "bfd.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "gdb_wait.h"
34 #include "dcache.h"
35 #include <signal.h>
36
37 extern int errno;
38
39 static void target_info (char *, int);
40
41 static void cleanup_target (struct target_ops *);
42
43 static void maybe_kill_then_create_inferior (char *, char *, char **);
44
45 static void default_clone_and_follow_inferior (int, int *);
46
47 static void maybe_kill_then_attach (char *, int);
48
49 static void kill_or_be_killed (int);
50
51 static void default_terminal_info (char *, int);
52
53 static int nosymbol (char *, CORE_ADDR *);
54
55 static void tcomplain (void);
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 void target_ignore (void);
64
65 static void target_command (char *, int);
66
67 static struct target_ops *find_default_run_target (char *);
68
69 static void update_current_target (void);
70
71 static void nosupport_runtime (void);
72
73 static void normal_target_post_startup_inferior (int pid);
74
75 /* Transfer LEN bytes between target address MEMADDR and GDB address
76 MYADDR. Returns 0 for success, errno code for failure (which
77 includes partial transfers -- if you want a more useful response to
78 partial transfers, try either target_read_memory_partial or
79 target_write_memory_partial). */
80
81 static int
82 target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write);
83
84 static void init_dummy_target (void);
85
86 static void debug_to_open (char *, int);
87
88 static void debug_to_close (int);
89
90 static void debug_to_attach (char *, int);
91
92 static void debug_to_detach (char *, int);
93
94 static void debug_to_resume (int, int, enum target_signal);
95
96 static int debug_to_wait (int, struct target_waitstatus *);
97
98 static void debug_to_fetch_registers (int);
99
100 static void debug_to_store_registers (int);
101
102 static void debug_to_prepare_to_store (void);
103
104 static int
105 debug_to_xfer_memory (CORE_ADDR, char *, int, int, struct mem_attrib *,
106 struct target_ops *);
107
108 static void debug_to_files_info (struct target_ops *);
109
110 static int debug_to_insert_breakpoint (CORE_ADDR, char *);
111
112 static int debug_to_remove_breakpoint (CORE_ADDR, char *);
113
114 static void debug_to_terminal_init (void);
115
116 static void debug_to_terminal_inferior (void);
117
118 static void debug_to_terminal_ours_for_output (void);
119
120 static void debug_to_terminal_ours (void);
121
122 static void debug_to_terminal_info (char *, int);
123
124 static void debug_to_kill (void);
125
126 static void debug_to_load (char *, int);
127
128 static int debug_to_lookup_symbol (char *, CORE_ADDR *);
129
130 static void debug_to_create_inferior (char *, char *, char **);
131
132 static void debug_to_mourn_inferior (void);
133
134 static int debug_to_can_run (void);
135
136 static void debug_to_notice_signals (int);
137
138 static int debug_to_thread_alive (int);
139
140 static void debug_to_stop (void);
141
142 static int debug_to_query (int /*char */ , char *, char *, int *);
143
144 /* Pointer to array of target architecture structures; the size of the
145 array; the current index into the array; the allocated size of the
146 array. */
147 struct target_ops **target_structs;
148 unsigned target_struct_size;
149 unsigned target_struct_index;
150 unsigned target_struct_allocsize;
151 #define DEFAULT_ALLOCSIZE 10
152
153 /* The initial current target, so that there is always a semi-valid
154 current target. */
155
156 static struct target_ops dummy_target;
157
158 /* Top of target stack. */
159
160 struct target_stack_item *target_stack;
161
162 /* The target structure we are currently using to talk to a process
163 or file or whatever "inferior" we have. */
164
165 struct target_ops current_target;
166
167 /* Command list for target. */
168
169 static struct cmd_list_element *targetlist = NULL;
170
171 /* Nonzero if we are debugging an attached outside process
172 rather than an inferior. */
173
174 int attach_flag;
175
176 /* Non-zero if we want to see trace of target level stuff. */
177
178 static int targetdebug = 0;
179
180 static void setup_target_debug (void);
181
182 DCACHE *target_dcache;
183
184 /* The user just typed 'target' without the name of a target. */
185
186 /* ARGSUSED */
187 static void
188 target_command (char *arg, int from_tty)
189 {
190 fputs_filtered ("Argument required (target name). Try `help target'\n",
191 gdb_stdout);
192 }
193
194 /* Add a possible target architecture to the list. */
195
196 void
197 add_target (struct target_ops *t)
198 {
199 if (!target_structs)
200 {
201 target_struct_allocsize = DEFAULT_ALLOCSIZE;
202 target_structs = (struct target_ops **) xmalloc
203 (target_struct_allocsize * sizeof (*target_structs));
204 }
205 if (target_struct_size >= target_struct_allocsize)
206 {
207 target_struct_allocsize *= 2;
208 target_structs = (struct target_ops **)
209 xrealloc ((char *) target_structs,
210 target_struct_allocsize * sizeof (*target_structs));
211 }
212 target_structs[target_struct_size++] = t;
213 /* cleanup_target (t); */
214
215 if (targetlist == NULL)
216 add_prefix_cmd ("target", class_run, target_command,
217 "Connect to a target machine or process.\n\
218 The first argument is the type or protocol of the target machine.\n\
219 Remaining arguments are interpreted by the target protocol. For more\n\
220 information on the arguments for a particular protocol, type\n\
221 `help target ' followed by the protocol name.",
222 &targetlist, "target ", 0, &cmdlist);
223 add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
224 }
225
226 /* Stub functions */
227
228 void
229 target_ignore (void)
230 {
231 }
232
233 void
234 target_load (char *arg, int from_tty)
235 {
236 dcache_invalidate (target_dcache);
237 (*current_target.to_load) (arg, from_tty);
238 }
239
240 /* ARGSUSED */
241 static int
242 nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
243 struct target_ops *t)
244 {
245 errno = EIO; /* Can't read/write this location */
246 return 0; /* No bytes handled */
247 }
248
249 static void
250 tcomplain (void)
251 {
252 error ("You can't do that when your target is `%s'",
253 current_target.to_shortname);
254 }
255
256 void
257 noprocess (void)
258 {
259 error ("You can't do that without a process to debug.");
260 }
261
262 /* ARGSUSED */
263 static int
264 nosymbol (char *name, CORE_ADDR *addrp)
265 {
266 return 1; /* Symbol does not exist in target env */
267 }
268
269 /* ARGSUSED */
270 static void
271 nosupport_runtime (void)
272 {
273 if (!inferior_pid)
274 noprocess ();
275 else
276 error ("No run-time support for this");
277 }
278
279
280 /* ARGSUSED */
281 static void
282 default_terminal_info (char *args, int from_tty)
283 {
284 printf_unfiltered ("No saved terminal information.\n");
285 }
286
287 /* This is the default target_create_inferior and target_attach function.
288 If the current target is executing, it asks whether to kill it off.
289 If this function returns without calling error(), it has killed off
290 the target, and the operation should be attempted. */
291
292 static void
293 kill_or_be_killed (int from_tty)
294 {
295 if (target_has_execution)
296 {
297 printf_unfiltered ("You are already running a program:\n");
298 target_files_info ();
299 if (query ("Kill it? "))
300 {
301 target_kill ();
302 if (target_has_execution)
303 error ("Killing the program did not help.");
304 return;
305 }
306 else
307 {
308 error ("Program not killed.");
309 }
310 }
311 tcomplain ();
312 }
313
314 static void
315 maybe_kill_then_attach (char *args, int from_tty)
316 {
317 kill_or_be_killed (from_tty);
318 target_attach (args, from_tty);
319 }
320
321 static void
322 maybe_kill_then_create_inferior (char *exec, char *args, char **env)
323 {
324 kill_or_be_killed (0);
325 target_create_inferior (exec, args, env);
326 }
327
328 static void
329 default_clone_and_follow_inferior (int child_pid, int *followed_child)
330 {
331 target_clone_and_follow_inferior (child_pid, followed_child);
332 }
333
334 /* Clean up a target struct so it no longer has any zero pointers in it.
335 We default entries, at least to stubs that print error messages. */
336
337 static void
338 cleanup_target (struct target_ops *t)
339 {
340
341 #define de_fault(field, value) \
342 if (!t->field) \
343 t->field = value
344
345 de_fault (to_open,
346 (void (*) (char *, int))
347 tcomplain);
348 de_fault (to_close,
349 (void (*) (int))
350 target_ignore);
351 de_fault (to_attach,
352 maybe_kill_then_attach);
353 de_fault (to_post_attach,
354 (void (*) (int))
355 target_ignore);
356 de_fault (to_require_attach,
357 maybe_kill_then_attach);
358 de_fault (to_detach,
359 (void (*) (char *, int))
360 target_ignore);
361 de_fault (to_require_detach,
362 (void (*) (int, char *, int))
363 target_ignore);
364 de_fault (to_resume,
365 (void (*) (int, int, enum target_signal))
366 noprocess);
367 de_fault (to_wait,
368 (int (*) (int, struct target_waitstatus *))
369 noprocess);
370 de_fault (to_post_wait,
371 (void (*) (int, int))
372 target_ignore);
373 de_fault (to_fetch_registers,
374 (void (*) (int))
375 target_ignore);
376 de_fault (to_store_registers,
377 (void (*) (int))
378 noprocess);
379 de_fault (to_prepare_to_store,
380 (void (*) (void))
381 noprocess);
382 de_fault (to_xfer_memory,
383 (int (*) (CORE_ADDR, char *, int, int, struct mem_attrib *, struct target_ops *))
384 nomemory);
385 de_fault (to_files_info,
386 (void (*) (struct target_ops *))
387 target_ignore);
388 de_fault (to_insert_breakpoint,
389 memory_insert_breakpoint);
390 de_fault (to_remove_breakpoint,
391 memory_remove_breakpoint);
392 de_fault (to_terminal_init,
393 (void (*) (void))
394 target_ignore);
395 de_fault (to_terminal_inferior,
396 (void (*) (void))
397 target_ignore);
398 de_fault (to_terminal_ours_for_output,
399 (void (*) (void))
400 target_ignore);
401 de_fault (to_terminal_ours,
402 (void (*) (void))
403 target_ignore);
404 de_fault (to_terminal_info,
405 default_terminal_info);
406 de_fault (to_kill,
407 (void (*) (void))
408 noprocess);
409 de_fault (to_load,
410 (void (*) (char *, int))
411 tcomplain);
412 de_fault (to_lookup_symbol,
413 (int (*) (char *, CORE_ADDR *))
414 nosymbol);
415 de_fault (to_create_inferior,
416 maybe_kill_then_create_inferior);
417 de_fault (to_post_startup_inferior,
418 (void (*) (int))
419 target_ignore);
420 de_fault (to_acknowledge_created_inferior,
421 (void (*) (int))
422 target_ignore);
423 de_fault (to_clone_and_follow_inferior,
424 default_clone_and_follow_inferior);
425 de_fault (to_post_follow_inferior_by_clone,
426 (void (*) (void))
427 target_ignore);
428 de_fault (to_insert_fork_catchpoint,
429 (int (*) (int))
430 tcomplain);
431 de_fault (to_remove_fork_catchpoint,
432 (int (*) (int))
433 tcomplain);
434 de_fault (to_insert_vfork_catchpoint,
435 (int (*) (int))
436 tcomplain);
437 de_fault (to_remove_vfork_catchpoint,
438 (int (*) (int))
439 tcomplain);
440 de_fault (to_has_forked,
441 (int (*) (int, int *))
442 return_zero);
443 de_fault (to_has_vforked,
444 (int (*) (int, int *))
445 return_zero);
446 de_fault (to_can_follow_vfork_prior_to_exec,
447 (int (*) (void))
448 return_zero);
449 de_fault (to_post_follow_vfork,
450 (void (*) (int, int, int, int))
451 target_ignore);
452 de_fault (to_insert_exec_catchpoint,
453 (int (*) (int))
454 tcomplain);
455 de_fault (to_remove_exec_catchpoint,
456 (int (*) (int))
457 tcomplain);
458 de_fault (to_has_execd,
459 (int (*) (int, char **))
460 return_zero);
461 de_fault (to_reported_exec_events_per_exec_call,
462 (int (*) (void))
463 return_one);
464 de_fault (to_has_syscall_event,
465 (int (*) (int, enum target_waitkind *, int *))
466 return_zero);
467 de_fault (to_has_exited,
468 (int (*) (int, int, int *))
469 return_zero);
470 de_fault (to_mourn_inferior,
471 (void (*) (void))
472 noprocess);
473 de_fault (to_can_run,
474 return_zero);
475 de_fault (to_notice_signals,
476 (void (*) (int))
477 target_ignore);
478 de_fault (to_thread_alive,
479 (int (*) (int))
480 return_zero);
481 de_fault (to_find_new_threads,
482 (void (*) (void))
483 target_ignore);
484 de_fault (to_extra_thread_info,
485 (char *(*) (struct thread_info *))
486 return_zero);
487 de_fault (to_stop,
488 (void (*) (void))
489 target_ignore);
490 de_fault (to_query,
491 (int (*) (int, char *, char *, int *))
492 return_zero);
493 de_fault (to_rcmd,
494 (void (*) (char *, struct ui_file *))
495 tcomplain);
496 de_fault (to_enable_exception_callback,
497 (struct symtab_and_line * (*) (enum exception_event_kind, int))
498 nosupport_runtime);
499 de_fault (to_get_current_exception_event,
500 (struct exception_event_record * (*) (void))
501 nosupport_runtime);
502 de_fault (to_pid_to_exec_file,
503 (char *(*) (int))
504 return_zero);
505 de_fault (to_core_file_to_sym_file,
506 (char *(*) (char *))
507 return_zero);
508 de_fault (to_can_async_p,
509 (int (*) (void))
510 return_zero);
511 de_fault (to_is_async_p,
512 (int (*) (void))
513 return_zero);
514 de_fault (to_async,
515 (void (*) (void (*) (enum inferior_event_type, void*), void*))
516 tcomplain);
517 #undef de_fault
518 }
519
520 /* Go through the target stack from top to bottom, copying over zero entries in
521 current_target. In effect, we are doing class inheritance through the
522 pushed target vectors. */
523
524 static void
525 update_current_target (void)
526 {
527 struct target_stack_item *item;
528 struct target_ops *t;
529
530 /* First, reset current_target */
531 memset (&current_target, 0, sizeof current_target);
532
533 for (item = target_stack; item; item = item->next)
534 {
535 t = item->target_ops;
536
537 #define INHERIT(FIELD, TARGET) \
538 if (!current_target.FIELD) \
539 current_target.FIELD = TARGET->FIELD
540
541 INHERIT (to_shortname, t);
542 INHERIT (to_longname, t);
543 INHERIT (to_doc, t);
544 INHERIT (to_open, t);
545 INHERIT (to_close, t);
546 INHERIT (to_attach, t);
547 INHERIT (to_post_attach, t);
548 INHERIT (to_require_attach, t);
549 INHERIT (to_detach, t);
550 INHERIT (to_require_detach, t);
551 INHERIT (to_resume, t);
552 INHERIT (to_wait, t);
553 INHERIT (to_post_wait, t);
554 INHERIT (to_fetch_registers, t);
555 INHERIT (to_store_registers, t);
556 INHERIT (to_prepare_to_store, t);
557 INHERIT (to_xfer_memory, t);
558 INHERIT (to_files_info, t);
559 INHERIT (to_insert_breakpoint, t);
560 INHERIT (to_remove_breakpoint, t);
561 INHERIT (to_terminal_init, t);
562 INHERIT (to_terminal_inferior, t);
563 INHERIT (to_terminal_ours_for_output, t);
564 INHERIT (to_terminal_ours, t);
565 INHERIT (to_terminal_info, t);
566 INHERIT (to_kill, t);
567 INHERIT (to_load, t);
568 INHERIT (to_lookup_symbol, t);
569 INHERIT (to_create_inferior, t);
570 INHERIT (to_post_startup_inferior, t);
571 INHERIT (to_acknowledge_created_inferior, t);
572 INHERIT (to_clone_and_follow_inferior, t);
573 INHERIT (to_post_follow_inferior_by_clone, t);
574 INHERIT (to_insert_fork_catchpoint, t);
575 INHERIT (to_remove_fork_catchpoint, t);
576 INHERIT (to_insert_vfork_catchpoint, t);
577 INHERIT (to_remove_vfork_catchpoint, t);
578 INHERIT (to_has_forked, t);
579 INHERIT (to_has_vforked, t);
580 INHERIT (to_can_follow_vfork_prior_to_exec, t);
581 INHERIT (to_post_follow_vfork, t);
582 INHERIT (to_insert_exec_catchpoint, t);
583 INHERIT (to_remove_exec_catchpoint, t);
584 INHERIT (to_has_execd, t);
585 INHERIT (to_reported_exec_events_per_exec_call, t);
586 INHERIT (to_has_syscall_event, t);
587 INHERIT (to_has_exited, t);
588 INHERIT (to_mourn_inferior, t);
589 INHERIT (to_can_run, t);
590 INHERIT (to_notice_signals, t);
591 INHERIT (to_thread_alive, t);
592 INHERIT (to_find_new_threads, t);
593 INHERIT (to_pid_to_str, t);
594 INHERIT (to_extra_thread_info, t);
595 INHERIT (to_stop, t);
596 INHERIT (to_query, t);
597 INHERIT (to_rcmd, t);
598 INHERIT (to_enable_exception_callback, t);
599 INHERIT (to_get_current_exception_event, t);
600 INHERIT (to_pid_to_exec_file, t);
601 INHERIT (to_core_file_to_sym_file, t);
602 INHERIT (to_stratum, t);
603 INHERIT (DONT_USE, t);
604 INHERIT (to_has_all_memory, t);
605 INHERIT (to_has_memory, t);
606 INHERIT (to_has_stack, t);
607 INHERIT (to_has_registers, t);
608 INHERIT (to_has_execution, t);
609 INHERIT (to_has_thread_control, t);
610 INHERIT (to_sections, t);
611 INHERIT (to_sections_end, t);
612 INHERIT (to_can_async_p, t);
613 INHERIT (to_is_async_p, t);
614 INHERIT (to_async, t);
615 INHERIT (to_async_mask_value, t);
616 INHERIT (to_magic, t);
617
618 #undef INHERIT
619 }
620 }
621
622 /* Push a new target type into the stack of the existing target accessors,
623 possibly superseding some of the existing accessors.
624
625 Result is zero if the pushed target ended up on top of the stack,
626 nonzero if at least one target is on top of it.
627
628 Rather than allow an empty stack, we always have the dummy target at
629 the bottom stratum, so we can call the function vectors without
630 checking them. */
631
632 int
633 push_target (struct target_ops *t)
634 {
635 struct target_stack_item *cur, *prev, *tmp;
636
637 /* Check magic number. If wrong, it probably means someone changed
638 the struct definition, but not all the places that initialize one. */
639 if (t->to_magic != OPS_MAGIC)
640 {
641 fprintf_unfiltered (gdb_stderr,
642 "Magic number of %s target struct wrong\n",
643 t->to_shortname);
644 internal_error (__FILE__, __LINE__, "failed internal consistency check");
645 }
646
647 /* Find the proper stratum to install this target in. */
648
649 for (prev = NULL, cur = target_stack; cur; prev = cur, cur = cur->next)
650 {
651 if ((int) (t->to_stratum) >= (int) (cur->target_ops->to_stratum))
652 break;
653 }
654
655 /* If there's already targets at this stratum, remove them. */
656
657 if (cur)
658 while (t->to_stratum == cur->target_ops->to_stratum)
659 {
660 /* There's already something on this stratum. Close it off. */
661 if (cur->target_ops->to_close)
662 (cur->target_ops->to_close) (0);
663 if (prev)
664 prev->next = cur->next; /* Unchain old target_ops */
665 else
666 target_stack = cur->next; /* Unchain first on list */
667 tmp = cur->next;
668 xfree (cur);
669 cur = tmp;
670 }
671
672 /* We have removed all targets in our stratum, now add the new one. */
673
674 tmp = (struct target_stack_item *)
675 xmalloc (sizeof (struct target_stack_item));
676 tmp->next = cur;
677 tmp->target_ops = t;
678
679 if (prev)
680 prev->next = tmp;
681 else
682 target_stack = tmp;
683
684 update_current_target ();
685
686 cleanup_target (&current_target); /* Fill in the gaps */
687
688 if (targetdebug)
689 setup_target_debug ();
690
691 return prev != 0;
692 }
693
694 /* Remove a target_ops vector from the stack, wherever it may be.
695 Return how many times it was removed (0 or 1). */
696
697 int
698 unpush_target (struct target_ops *t)
699 {
700 struct target_stack_item *cur, *prev;
701
702 if (t->to_close)
703 t->to_close (0); /* Let it clean up */
704
705 /* Look for the specified target. Note that we assume that a target
706 can only occur once in the target stack. */
707
708 for (cur = target_stack, prev = NULL; cur; prev = cur, cur = cur->next)
709 if (cur->target_ops == t)
710 break;
711
712 if (!cur)
713 return 0; /* Didn't find target_ops, quit now */
714
715 /* Unchain the target */
716
717 if (!prev)
718 target_stack = cur->next;
719 else
720 prev->next = cur->next;
721
722 xfree (cur); /* Release the target_stack_item */
723
724 update_current_target ();
725 cleanup_target (&current_target);
726
727 return 1;
728 }
729
730 void
731 pop_target (void)
732 {
733 (current_target.to_close) (0); /* Let it clean up */
734 if (unpush_target (target_stack->target_ops) == 1)
735 return;
736
737 fprintf_unfiltered (gdb_stderr,
738 "pop_target couldn't find target %s\n",
739 current_target.to_shortname);
740 internal_error (__FILE__, __LINE__, "failed internal consistency check");
741 }
742
743 #undef MIN
744 #define MIN(A, B) (((A) <= (B)) ? (A) : (B))
745
746 /* target_read_string -- read a null terminated string, up to LEN bytes,
747 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
748 Set *STRING to a pointer to malloc'd memory containing the data; the caller
749 is responsible for freeing it. Return the number of bytes successfully
750 read. */
751
752 int
753 target_read_string (CORE_ADDR memaddr, char **string, int len, int *errnop)
754 {
755 int tlen, origlen, offset, i;
756 char buf[4];
757 int errcode = 0;
758 char *buffer;
759 int buffer_allocated;
760 char *bufptr;
761 unsigned int nbytes_read = 0;
762
763 /* Small for testing. */
764 buffer_allocated = 4;
765 buffer = xmalloc (buffer_allocated);
766 bufptr = buffer;
767
768 origlen = len;
769
770 while (len > 0)
771 {
772 tlen = MIN (len, 4 - (memaddr & 3));
773 offset = memaddr & 3;
774
775 errcode = target_xfer_memory (memaddr & ~3, buf, 4, 0);
776 if (errcode != 0)
777 {
778 /* The transfer request might have crossed the boundary to an
779 unallocated region of memory. Retry the transfer, requesting
780 a single byte. */
781 tlen = 1;
782 offset = 0;
783 errcode = target_xfer_memory (memaddr, buf, 1, 0);
784 if (errcode != 0)
785 goto done;
786 }
787
788 if (bufptr - buffer + tlen > buffer_allocated)
789 {
790 unsigned int bytes;
791 bytes = bufptr - buffer;
792 buffer_allocated *= 2;
793 buffer = xrealloc (buffer, buffer_allocated);
794 bufptr = buffer + bytes;
795 }
796
797 for (i = 0; i < tlen; i++)
798 {
799 *bufptr++ = buf[i + offset];
800 if (buf[i + offset] == '\000')
801 {
802 nbytes_read += i + 1;
803 goto done;
804 }
805 }
806
807 memaddr += tlen;
808 len -= tlen;
809 nbytes_read += tlen;
810 }
811 done:
812 if (errnop != NULL)
813 *errnop = errcode;
814 if (string != NULL)
815 *string = buffer;
816 return nbytes_read;
817 }
818
819 /* Read LEN bytes of target memory at address MEMADDR, placing the results in
820 GDB's memory at MYADDR. Returns either 0 for success or an errno value
821 if any error occurs.
822
823 If an error occurs, no guarantee is made about the contents of the data at
824 MYADDR. In particular, the caller should not depend upon partial reads
825 filling the buffer with good data. There is no way for the caller to know
826 how much good data might have been transfered anyway. Callers that can
827 deal with partial reads should call target_read_memory_partial. */
828
829 int
830 target_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
831 {
832 return target_xfer_memory (memaddr, myaddr, len, 0);
833 }
834
835 int
836 target_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
837 {
838 return target_xfer_memory (memaddr, myaddr, len, 1);
839 }
840
841 /* Move memory to or from the targets. The top target gets priority;
842 if it cannot handle it, it is offered to the next one down, etc.
843
844 Result is -1 on error, or the number of bytes transfered. */
845
846 int
847 do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
848 struct mem_attrib *attrib)
849 {
850 int res;
851 int done = 0;
852 struct target_ops *t;
853 struct target_stack_item *item;
854
855 /* Zero length requests are ok and require no work. */
856 if (len == 0)
857 return 0;
858
859 /* to_xfer_memory is not guaranteed to set errno, even when it returns
860 0. */
861 errno = 0;
862
863 /* The quick case is that the top target can handle the transfer. */
864 res = current_target.to_xfer_memory
865 (memaddr, myaddr, len, write, attrib, &current_target);
866
867 /* If res <= 0 then we call it again in the loop. Ah well. */
868 if (res <= 0)
869 {
870 for (item = target_stack; item; item = item->next)
871 {
872 t = item->target_ops;
873 if (!t->to_has_memory)
874 continue;
875
876 res = t->to_xfer_memory (memaddr, myaddr, len, write, attrib, t);
877 if (res > 0)
878 break; /* Handled all or part of xfer */
879 if (t->to_has_all_memory)
880 break;
881 }
882
883 if (res <= 0)
884 return -1;
885 }
886
887 return res;
888 }
889
890
891 /* Perform a memory transfer. Iterate until the entire region has
892 been transfered.
893
894 Result is 0 or errno value. */
895
896 static int
897 target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
898 {
899 int res;
900 int reg_len;
901 struct mem_region *region;
902
903 /* Zero length requests are ok and require no work. */
904 if (len == 0)
905 {
906 return 0;
907 }
908
909 while (len > 0)
910 {
911 region = lookup_mem_region(memaddr);
912 if (memaddr + len < region->hi)
913 reg_len = len;
914 else
915 reg_len = region->hi - memaddr;
916
917 switch (region->attrib.mode)
918 {
919 case MEM_RO:
920 if (write)
921 return EIO;
922 break;
923
924 case MEM_WO:
925 if (!write)
926 return EIO;
927 break;
928 }
929
930 while (reg_len > 0)
931 {
932 if (region->attrib.cache)
933 res = dcache_xfer_memory(target_dcache, memaddr, myaddr,
934 reg_len, write);
935 else
936 res = do_xfer_memory(memaddr, myaddr, reg_len, write,
937 &region->attrib);
938
939 if (res <= 0)
940 {
941 /* If this address is for nonexistent memory, read zeros
942 if reading, or do nothing if writing. Return
943 error. */
944 if (!write)
945 memset (myaddr, 0, len);
946 if (errno == 0)
947 return EIO;
948 else
949 return errno;
950 }
951
952 memaddr += res;
953 myaddr += res;
954 len -= res;
955 reg_len -= res;
956 }
957 }
958
959 return 0; /* We managed to cover it all somehow. */
960 }
961
962
963 /* Perform a partial memory transfer.
964
965 Result is -1 on error, or the number of bytes transfered. */
966
967 static int
968 target_xfer_memory_partial (CORE_ADDR memaddr, char *myaddr, int len,
969 int write_p, int *err)
970 {
971 int res;
972 int reg_len;
973 struct mem_region *region;
974
975 /* Zero length requests are ok and require no work. */
976 if (len == 0)
977 {
978 *err = 0;
979 return 0;
980 }
981
982 region = lookup_mem_region(memaddr);
983 if (memaddr + len < region->hi)
984 reg_len = len;
985 else
986 reg_len = region->hi - memaddr;
987
988 switch (region->attrib.mode)
989 {
990 case MEM_RO:
991 if (write_p)
992 {
993 *err = EIO;
994 return -1;
995 }
996 break;
997
998 case MEM_WO:
999 if (write_p)
1000 {
1001 *err = EIO;
1002 return -1;
1003 }
1004 break;
1005 }
1006
1007 if (region->attrib.cache)
1008 res = dcache_xfer_memory (target_dcache, memaddr, myaddr,
1009 reg_len, write_p);
1010 else
1011 res = do_xfer_memory (memaddr, myaddr, reg_len, write_p,
1012 &region->attrib);
1013
1014 if (res <= 0)
1015 {
1016 if (errno != 0)
1017 *err = errno;
1018 else
1019 *err = EIO;
1020
1021 return -1;
1022 }
1023
1024 *err = 0;
1025 return res;
1026 }
1027
1028 int
1029 target_read_memory_partial (CORE_ADDR memaddr, char *buf, int len, int *err)
1030 {
1031 return target_xfer_memory_partial (memaddr, buf, len, 0, err);
1032 }
1033
1034 int
1035 target_write_memory_partial (CORE_ADDR memaddr, char *buf, int len, int *err)
1036 {
1037 return target_xfer_memory_partial (memaddr, buf, len, 1, err);
1038 }
1039
1040 /* ARGSUSED */
1041 static void
1042 target_info (char *args, int from_tty)
1043 {
1044 struct target_ops *t;
1045 struct target_stack_item *item;
1046 int has_all_mem = 0;
1047
1048 if (symfile_objfile != NULL)
1049 printf_unfiltered ("Symbols from \"%s\".\n", symfile_objfile->name);
1050
1051 #ifdef FILES_INFO_HOOK
1052 if (FILES_INFO_HOOK ())
1053 return;
1054 #endif
1055
1056 for (item = target_stack; item; item = item->next)
1057 {
1058 t = item->target_ops;
1059
1060 if (!t->to_has_memory)
1061 continue;
1062
1063 if ((int) (t->to_stratum) <= (int) dummy_stratum)
1064 continue;
1065 if (has_all_mem)
1066 printf_unfiltered ("\tWhile running this, GDB does not access memory from...\n");
1067 printf_unfiltered ("%s:\n", t->to_longname);
1068 (t->to_files_info) (t);
1069 has_all_mem = t->to_has_all_memory;
1070 }
1071 }
1072
1073 /* This is to be called by the open routine before it does
1074 anything. */
1075
1076 void
1077 target_preopen (int from_tty)
1078 {
1079 dont_repeat ();
1080
1081 if (target_has_execution)
1082 {
1083 if (!from_tty
1084 || query ("A program is being debugged already. Kill it? "))
1085 target_kill ();
1086 else
1087 error ("Program not killed.");
1088 }
1089
1090 /* Calling target_kill may remove the target from the stack. But if
1091 it doesn't (which seems like a win for UDI), remove it now. */
1092
1093 if (target_has_execution)
1094 pop_target ();
1095 }
1096
1097 /* Detach a target after doing deferred register stores. */
1098
1099 void
1100 target_detach (char *args, int from_tty)
1101 {
1102 /* Handle any optimized stores to the inferior. */
1103 #ifdef DO_DEFERRED_STORES
1104 DO_DEFERRED_STORES;
1105 #endif
1106 (current_target.to_detach) (args, from_tty);
1107 }
1108
1109 void
1110 target_link (char *modname, CORE_ADDR *t_reloc)
1111 {
1112 if (STREQ (current_target.to_shortname, "rombug"))
1113 {
1114 (current_target.to_lookup_symbol) (modname, t_reloc);
1115 if (*t_reloc == 0)
1116 error ("Unable to link to %s and get relocation in rombug", modname);
1117 }
1118 else
1119 *t_reloc = (CORE_ADDR) -1;
1120 }
1121
1122 int
1123 target_async_mask (int mask)
1124 {
1125 int saved_async_masked_status = target_async_mask_value;
1126 target_async_mask_value = mask;
1127 return saved_async_masked_status;
1128 }
1129
1130 /* Look through the list of possible targets for a target that can
1131 execute a run or attach command without any other data. This is
1132 used to locate the default process stratum.
1133
1134 Result is always valid (error() is called for errors). */
1135
1136 static struct target_ops *
1137 find_default_run_target (char *do_mesg)
1138 {
1139 struct target_ops **t;
1140 struct target_ops *runable = NULL;
1141 int count;
1142
1143 count = 0;
1144
1145 for (t = target_structs; t < target_structs + target_struct_size;
1146 ++t)
1147 {
1148 if ((*t)->to_can_run && target_can_run (*t))
1149 {
1150 runable = *t;
1151 ++count;
1152 }
1153 }
1154
1155 if (count != 1)
1156 error ("Don't know how to %s. Try \"help target\".", do_mesg);
1157
1158 return runable;
1159 }
1160
1161 void
1162 find_default_attach (char *args, int from_tty)
1163 {
1164 struct target_ops *t;
1165
1166 t = find_default_run_target ("attach");
1167 (t->to_attach) (args, from_tty);
1168 return;
1169 }
1170
1171 void
1172 find_default_require_attach (char *args, int from_tty)
1173 {
1174 struct target_ops *t;
1175
1176 t = find_default_run_target ("require_attach");
1177 (t->to_require_attach) (args, from_tty);
1178 return;
1179 }
1180
1181 void
1182 find_default_require_detach (int pid, char *args, int from_tty)
1183 {
1184 struct target_ops *t;
1185
1186 t = find_default_run_target ("require_detach");
1187 (t->to_require_detach) (pid, args, from_tty);
1188 return;
1189 }
1190
1191 void
1192 find_default_create_inferior (char *exec_file, char *allargs, char **env)
1193 {
1194 struct target_ops *t;
1195
1196 t = find_default_run_target ("run");
1197 (t->to_create_inferior) (exec_file, allargs, env);
1198 return;
1199 }
1200
1201 void
1202 find_default_clone_and_follow_inferior (int child_pid, int *followed_child)
1203 {
1204 struct target_ops *t;
1205
1206 t = find_default_run_target ("run");
1207 (t->to_clone_and_follow_inferior) (child_pid, followed_child);
1208 return;
1209 }
1210
1211 static int
1212 return_zero (void)
1213 {
1214 return 0;
1215 }
1216
1217 static int
1218 return_one (void)
1219 {
1220 return 1;
1221 }
1222
1223 /*
1224 * Resize the to_sections pointer. Also make sure that anyone that
1225 * was holding on to an old value of it gets updated.
1226 * Returns the old size.
1227 */
1228
1229 int
1230 target_resize_to_sections (struct target_ops *target, int num_added)
1231 {
1232 struct target_ops **t;
1233 struct section_table *old_value;
1234 int old_count;
1235
1236 old_value = target->to_sections;
1237
1238 if (target->to_sections)
1239 {
1240 old_count = target->to_sections_end - target->to_sections;
1241 target->to_sections = (struct section_table *)
1242 xrealloc ((char *) target->to_sections,
1243 (sizeof (struct section_table)) * (num_added + old_count));
1244 }
1245 else
1246 {
1247 old_count = 0;
1248 target->to_sections = (struct section_table *)
1249 xmalloc ((sizeof (struct section_table)) * num_added);
1250 }
1251 target->to_sections_end = target->to_sections + (num_added + old_count);
1252
1253 /* Check to see if anyone else was pointing to this structure.
1254 If old_value was null, then no one was. */
1255
1256 if (old_value)
1257 {
1258 for (t = target_structs; t < target_structs + target_struct_size;
1259 ++t)
1260 {
1261 if ((*t)->to_sections == old_value)
1262 {
1263 (*t)->to_sections = target->to_sections;
1264 (*t)->to_sections_end = target->to_sections_end;
1265 }
1266 }
1267 }
1268
1269 return old_count;
1270
1271 }
1272
1273 /* Remove all target sections taken from ABFD.
1274
1275 Scan the current target stack for targets whose section tables
1276 refer to sections from BFD, and remove those sections. We use this
1277 when we notice that the inferior has unloaded a shared object, for
1278 example. */
1279 void
1280 remove_target_sections (bfd *abfd)
1281 {
1282 struct target_ops **t;
1283
1284 for (t = target_structs; t < target_structs + target_struct_size; t++)
1285 {
1286 struct section_table *src, *dest;
1287
1288 dest = (*t)->to_sections;
1289 for (src = (*t)->to_sections; src < (*t)->to_sections_end; src++)
1290 if (src->bfd != abfd)
1291 {
1292 /* Keep this section. */
1293 if (dest < src) *dest = *src;
1294 dest++;
1295 }
1296
1297 /* If we've dropped any sections, resize the section table. */
1298 if (dest < src)
1299 target_resize_to_sections (*t, dest - src);
1300 }
1301 }
1302
1303
1304
1305
1306 /* Find a single runnable target in the stack and return it. If for
1307 some reason there is more than one, return NULL. */
1308
1309 struct target_ops *
1310 find_run_target (void)
1311 {
1312 struct target_ops **t;
1313 struct target_ops *runable = NULL;
1314 int count;
1315
1316 count = 0;
1317
1318 for (t = target_structs; t < target_structs + target_struct_size; ++t)
1319 {
1320 if ((*t)->to_can_run && target_can_run (*t))
1321 {
1322 runable = *t;
1323 ++count;
1324 }
1325 }
1326
1327 return (count == 1 ? runable : NULL);
1328 }
1329
1330 /* Find a single core_stratum target in the list of targets and return it.
1331 If for some reason there is more than one, return NULL. */
1332
1333 struct target_ops *
1334 find_core_target (void)
1335 {
1336 struct target_ops **t;
1337 struct target_ops *runable = NULL;
1338 int count;
1339
1340 count = 0;
1341
1342 for (t = target_structs; t < target_structs + target_struct_size;
1343 ++t)
1344 {
1345 if ((*t)->to_stratum == core_stratum)
1346 {
1347 runable = *t;
1348 ++count;
1349 }
1350 }
1351
1352 return (count == 1 ? runable : NULL);
1353 }
1354
1355 /*
1356 * Find the next target down the stack from the specified target.
1357 */
1358
1359 struct target_ops *
1360 find_target_beneath (struct target_ops *t)
1361 {
1362 struct target_stack_item *cur;
1363
1364 for (cur = target_stack; cur; cur = cur->next)
1365 if (cur->target_ops == t)
1366 break;
1367
1368 if (cur == NULL || cur->next == NULL)
1369 return NULL;
1370 else
1371 return cur->next->target_ops;
1372 }
1373
1374 \f
1375 /* The inferior process has died. Long live the inferior! */
1376
1377 void
1378 generic_mourn_inferior (void)
1379 {
1380 extern int show_breakpoint_hit_counts;
1381
1382 inferior_pid = 0;
1383 attach_flag = 0;
1384 breakpoint_init_inferior (inf_exited);
1385 registers_changed ();
1386
1387 #ifdef CLEAR_DEFERRED_STORES
1388 /* Delete any pending stores to the inferior... */
1389 CLEAR_DEFERRED_STORES;
1390 #endif
1391
1392 reopen_exec_file ();
1393 reinit_frame_cache ();
1394
1395 /* It is confusing to the user for ignore counts to stick around
1396 from previous runs of the inferior. So clear them. */
1397 /* However, it is more confusing for the ignore counts to disappear when
1398 using hit counts. So don't clear them if we're counting hits. */
1399 if (!show_breakpoint_hit_counts)
1400 breakpoint_clear_ignore_counts ();
1401
1402 if (detach_hook)
1403 detach_hook ();
1404 }
1405 \f
1406 /* This table must match in order and size the signals in enum target_signal
1407 in target.h. */
1408 /* *INDENT-OFF* */
1409 static struct {
1410 char *name;
1411 char *string;
1412 } signals [] =
1413 {
1414 {"0", "Signal 0"},
1415 {"SIGHUP", "Hangup"},
1416 {"SIGINT", "Interrupt"},
1417 {"SIGQUIT", "Quit"},
1418 {"SIGILL", "Illegal instruction"},
1419 {"SIGTRAP", "Trace/breakpoint trap"},
1420 {"SIGABRT", "Aborted"},
1421 {"SIGEMT", "Emulation trap"},
1422 {"SIGFPE", "Arithmetic exception"},
1423 {"SIGKILL", "Killed"},
1424 {"SIGBUS", "Bus error"},
1425 {"SIGSEGV", "Segmentation fault"},
1426 {"SIGSYS", "Bad system call"},
1427 {"SIGPIPE", "Broken pipe"},
1428 {"SIGALRM", "Alarm clock"},
1429 {"SIGTERM", "Terminated"},
1430 {"SIGURG", "Urgent I/O condition"},
1431 {"SIGSTOP", "Stopped (signal)"},
1432 {"SIGTSTP", "Stopped (user)"},
1433 {"SIGCONT", "Continued"},
1434 {"SIGCHLD", "Child status changed"},
1435 {"SIGTTIN", "Stopped (tty input)"},
1436 {"SIGTTOU", "Stopped (tty output)"},
1437 {"SIGIO", "I/O possible"},
1438 {"SIGXCPU", "CPU time limit exceeded"},
1439 {"SIGXFSZ", "File size limit exceeded"},
1440 {"SIGVTALRM", "Virtual timer expired"},
1441 {"SIGPROF", "Profiling timer expired"},
1442 {"SIGWINCH", "Window size changed"},
1443 {"SIGLOST", "Resource lost"},
1444 {"SIGUSR1", "User defined signal 1"},
1445 {"SIGUSR2", "User defined signal 2"},
1446 {"SIGPWR", "Power fail/restart"},
1447 {"SIGPOLL", "Pollable event occurred"},
1448 {"SIGWIND", "SIGWIND"},
1449 {"SIGPHONE", "SIGPHONE"},
1450 {"SIGWAITING", "Process's LWPs are blocked"},
1451 {"SIGLWP", "Signal LWP"},
1452 {"SIGDANGER", "Swap space dangerously low"},
1453 {"SIGGRANT", "Monitor mode granted"},
1454 {"SIGRETRACT", "Need to relinquish monitor mode"},
1455 {"SIGMSG", "Monitor mode data available"},
1456 {"SIGSOUND", "Sound completed"},
1457 {"SIGSAK", "Secure attention"},
1458 {"SIGPRIO", "SIGPRIO"},
1459 {"SIG33", "Real-time event 33"},
1460 {"SIG34", "Real-time event 34"},
1461 {"SIG35", "Real-time event 35"},
1462 {"SIG36", "Real-time event 36"},
1463 {"SIG37", "Real-time event 37"},
1464 {"SIG38", "Real-time event 38"},
1465 {"SIG39", "Real-time event 39"},
1466 {"SIG40", "Real-time event 40"},
1467 {"SIG41", "Real-time event 41"},
1468 {"SIG42", "Real-time event 42"},
1469 {"SIG43", "Real-time event 43"},
1470 {"SIG44", "Real-time event 44"},
1471 {"SIG45", "Real-time event 45"},
1472 {"SIG46", "Real-time event 46"},
1473 {"SIG47", "Real-time event 47"},
1474 {"SIG48", "Real-time event 48"},
1475 {"SIG49", "Real-time event 49"},
1476 {"SIG50", "Real-time event 50"},
1477 {"SIG51", "Real-time event 51"},
1478 {"SIG52", "Real-time event 52"},
1479 {"SIG53", "Real-time event 53"},
1480 {"SIG54", "Real-time event 54"},
1481 {"SIG55", "Real-time event 55"},
1482 {"SIG56", "Real-time event 56"},
1483 {"SIG57", "Real-time event 57"},
1484 {"SIG58", "Real-time event 58"},
1485 {"SIG59", "Real-time event 59"},
1486 {"SIG60", "Real-time event 60"},
1487 {"SIG61", "Real-time event 61"},
1488 {"SIG62", "Real-time event 62"},
1489 {"SIG63", "Real-time event 63"},
1490 {"SIGCANCEL", "LWP internal signal"},
1491 {"SIG32", "Real-time event 32"},
1492 {"SIG64", "Real-time event 64"},
1493
1494 #if defined(MACH) || defined(__MACH__)
1495 /* Mach exceptions */
1496 {"EXC_BAD_ACCESS", "Could not access memory"},
1497 {"EXC_BAD_INSTRUCTION", "Illegal instruction/operand"},
1498 {"EXC_ARITHMETIC", "Arithmetic exception"},
1499 {"EXC_EMULATION", "Emulation instruction"},
1500 {"EXC_SOFTWARE", "Software generated exception"},
1501 {"EXC_BREAKPOINT", "Breakpoint"},
1502 #endif
1503 {"SIGINFO", "Information request"},
1504
1505 {NULL, "Unknown signal"},
1506 {NULL, "Internal error: printing TARGET_SIGNAL_DEFAULT"},
1507
1508 /* Last entry, used to check whether the table is the right size. */
1509 {NULL, "TARGET_SIGNAL_MAGIC"}
1510 };
1511 /* *INDENT-ON* */
1512
1513
1514
1515 /* Return the string for a signal. */
1516 char *
1517 target_signal_to_string (enum target_signal sig)
1518 {
1519 if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
1520 return signals[sig].string;
1521 else
1522 return signals[TARGET_SIGNAL_UNKNOWN].string;
1523 }
1524
1525 /* Return the name for a signal. */
1526 char *
1527 target_signal_to_name (enum target_signal sig)
1528 {
1529 if (sig == TARGET_SIGNAL_UNKNOWN)
1530 /* I think the code which prints this will always print it along with
1531 the string, so no need to be verbose. */
1532 return "?";
1533 return signals[sig].name;
1534 }
1535
1536 /* Given a name, return its signal. */
1537 enum target_signal
1538 target_signal_from_name (char *name)
1539 {
1540 enum target_signal sig;
1541
1542 /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
1543 for TARGET_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
1544 questionable; seems like by now people should call it SIGABRT
1545 instead. */
1546
1547 /* This ugly cast brought to you by the native VAX compiler. */
1548 for (sig = TARGET_SIGNAL_HUP;
1549 signals[sig].name != NULL;
1550 sig = (enum target_signal) ((int) sig + 1))
1551 if (STREQ (name, signals[sig].name))
1552 return sig;
1553 return TARGET_SIGNAL_UNKNOWN;
1554 }
1555 \f
1556 /* The following functions are to help certain targets deal
1557 with the signal/waitstatus stuff. They could just as well be in
1558 a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
1559
1560 /* Convert host signal to our signals. */
1561 enum target_signal
1562 target_signal_from_host (int hostsig)
1563 {
1564 /* A switch statement would make sense but would require special kludges
1565 to deal with the cases where more than one signal has the same number. */
1566
1567 if (hostsig == 0)
1568 return TARGET_SIGNAL_0;
1569
1570 #if defined (SIGHUP)
1571 if (hostsig == SIGHUP)
1572 return TARGET_SIGNAL_HUP;
1573 #endif
1574 #if defined (SIGINT)
1575 if (hostsig == SIGINT)
1576 return TARGET_SIGNAL_INT;
1577 #endif
1578 #if defined (SIGQUIT)
1579 if (hostsig == SIGQUIT)
1580 return TARGET_SIGNAL_QUIT;
1581 #endif
1582 #if defined (SIGILL)
1583 if (hostsig == SIGILL)
1584 return TARGET_SIGNAL_ILL;
1585 #endif
1586 #if defined (SIGTRAP)
1587 if (hostsig == SIGTRAP)
1588 return TARGET_SIGNAL_TRAP;
1589 #endif
1590 #if defined (SIGABRT)
1591 if (hostsig == SIGABRT)
1592 return TARGET_SIGNAL_ABRT;
1593 #endif
1594 #if defined (SIGEMT)
1595 if (hostsig == SIGEMT)
1596 return TARGET_SIGNAL_EMT;
1597 #endif
1598 #if defined (SIGFPE)
1599 if (hostsig == SIGFPE)
1600 return TARGET_SIGNAL_FPE;
1601 #endif
1602 #if defined (SIGKILL)
1603 if (hostsig == SIGKILL)
1604 return TARGET_SIGNAL_KILL;
1605 #endif
1606 #if defined (SIGBUS)
1607 if (hostsig == SIGBUS)
1608 return TARGET_SIGNAL_BUS;
1609 #endif
1610 #if defined (SIGSEGV)
1611 if (hostsig == SIGSEGV)
1612 return TARGET_SIGNAL_SEGV;
1613 #endif
1614 #if defined (SIGSYS)
1615 if (hostsig == SIGSYS)
1616 return TARGET_SIGNAL_SYS;
1617 #endif
1618 #if defined (SIGPIPE)
1619 if (hostsig == SIGPIPE)
1620 return TARGET_SIGNAL_PIPE;
1621 #endif
1622 #if defined (SIGALRM)
1623 if (hostsig == SIGALRM)
1624 return TARGET_SIGNAL_ALRM;
1625 #endif
1626 #if defined (SIGTERM)
1627 if (hostsig == SIGTERM)
1628 return TARGET_SIGNAL_TERM;
1629 #endif
1630 #if defined (SIGUSR1)
1631 if (hostsig == SIGUSR1)
1632 return TARGET_SIGNAL_USR1;
1633 #endif
1634 #if defined (SIGUSR2)
1635 if (hostsig == SIGUSR2)
1636 return TARGET_SIGNAL_USR2;
1637 #endif
1638 #if defined (SIGCLD)
1639 if (hostsig == SIGCLD)
1640 return TARGET_SIGNAL_CHLD;
1641 #endif
1642 #if defined (SIGCHLD)
1643 if (hostsig == SIGCHLD)
1644 return TARGET_SIGNAL_CHLD;
1645 #endif
1646 #if defined (SIGPWR)
1647 if (hostsig == SIGPWR)
1648 return TARGET_SIGNAL_PWR;
1649 #endif
1650 #if defined (SIGWINCH)
1651 if (hostsig == SIGWINCH)
1652 return TARGET_SIGNAL_WINCH;
1653 #endif
1654 #if defined (SIGURG)
1655 if (hostsig == SIGURG)
1656 return TARGET_SIGNAL_URG;
1657 #endif
1658 #if defined (SIGIO)
1659 if (hostsig == SIGIO)
1660 return TARGET_SIGNAL_IO;
1661 #endif
1662 #if defined (SIGPOLL)
1663 if (hostsig == SIGPOLL)
1664 return TARGET_SIGNAL_POLL;
1665 #endif
1666 #if defined (SIGSTOP)
1667 if (hostsig == SIGSTOP)
1668 return TARGET_SIGNAL_STOP;
1669 #endif
1670 #if defined (SIGTSTP)
1671 if (hostsig == SIGTSTP)
1672 return TARGET_SIGNAL_TSTP;
1673 #endif
1674 #if defined (SIGCONT)
1675 if (hostsig == SIGCONT)
1676 return TARGET_SIGNAL_CONT;
1677 #endif
1678 #if defined (SIGTTIN)
1679 if (hostsig == SIGTTIN)
1680 return TARGET_SIGNAL_TTIN;
1681 #endif
1682 #if defined (SIGTTOU)
1683 if (hostsig == SIGTTOU)
1684 return TARGET_SIGNAL_TTOU;
1685 #endif
1686 #if defined (SIGVTALRM)
1687 if (hostsig == SIGVTALRM)
1688 return TARGET_SIGNAL_VTALRM;
1689 #endif
1690 #if defined (SIGPROF)
1691 if (hostsig == SIGPROF)
1692 return TARGET_SIGNAL_PROF;
1693 #endif
1694 #if defined (SIGXCPU)
1695 if (hostsig == SIGXCPU)
1696 return TARGET_SIGNAL_XCPU;
1697 #endif
1698 #if defined (SIGXFSZ)
1699 if (hostsig == SIGXFSZ)
1700 return TARGET_SIGNAL_XFSZ;
1701 #endif
1702 #if defined (SIGWIND)
1703 if (hostsig == SIGWIND)
1704 return TARGET_SIGNAL_WIND;
1705 #endif
1706 #if defined (SIGPHONE)
1707 if (hostsig == SIGPHONE)
1708 return TARGET_SIGNAL_PHONE;
1709 #endif
1710 #if defined (SIGLOST)
1711 if (hostsig == SIGLOST)
1712 return TARGET_SIGNAL_LOST;
1713 #endif
1714 #if defined (SIGWAITING)
1715 if (hostsig == SIGWAITING)
1716 return TARGET_SIGNAL_WAITING;
1717 #endif
1718 #if defined (SIGCANCEL)
1719 if (hostsig == SIGCANCEL)
1720 return TARGET_SIGNAL_CANCEL;
1721 #endif
1722 #if defined (SIGLWP)
1723 if (hostsig == SIGLWP)
1724 return TARGET_SIGNAL_LWP;
1725 #endif
1726 #if defined (SIGDANGER)
1727 if (hostsig == SIGDANGER)
1728 return TARGET_SIGNAL_DANGER;
1729 #endif
1730 #if defined (SIGGRANT)
1731 if (hostsig == SIGGRANT)
1732 return TARGET_SIGNAL_GRANT;
1733 #endif
1734 #if defined (SIGRETRACT)
1735 if (hostsig == SIGRETRACT)
1736 return TARGET_SIGNAL_RETRACT;
1737 #endif
1738 #if defined (SIGMSG)
1739 if (hostsig == SIGMSG)
1740 return TARGET_SIGNAL_MSG;
1741 #endif
1742 #if defined (SIGSOUND)
1743 if (hostsig == SIGSOUND)
1744 return TARGET_SIGNAL_SOUND;
1745 #endif
1746 #if defined (SIGSAK)
1747 if (hostsig == SIGSAK)
1748 return TARGET_SIGNAL_SAK;
1749 #endif
1750 #if defined (SIGPRIO)
1751 if (hostsig == SIGPRIO)
1752 return TARGET_SIGNAL_PRIO;
1753 #endif
1754
1755 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
1756 #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
1757 if (hostsig == _NSIG + EXC_BAD_ACCESS)
1758 return TARGET_EXC_BAD_ACCESS;
1759 #endif
1760 #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
1761 if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
1762 return TARGET_EXC_BAD_INSTRUCTION;
1763 #endif
1764 #if defined (EXC_ARITHMETIC) && defined (_NSIG)
1765 if (hostsig == _NSIG + EXC_ARITHMETIC)
1766 return TARGET_EXC_ARITHMETIC;
1767 #endif
1768 #if defined (EXC_EMULATION) && defined (_NSIG)
1769 if (hostsig == _NSIG + EXC_EMULATION)
1770 return TARGET_EXC_EMULATION;
1771 #endif
1772 #if defined (EXC_SOFTWARE) && defined (_NSIG)
1773 if (hostsig == _NSIG + EXC_SOFTWARE)
1774 return TARGET_EXC_SOFTWARE;
1775 #endif
1776 #if defined (EXC_BREAKPOINT) && defined (_NSIG)
1777 if (hostsig == _NSIG + EXC_BREAKPOINT)
1778 return TARGET_EXC_BREAKPOINT;
1779 #endif
1780
1781 #if defined (SIGINFO)
1782 if (hostsig == SIGINFO)
1783 return TARGET_SIGNAL_INFO;
1784 #endif
1785
1786 #if defined (REALTIME_LO)
1787 if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
1788 {
1789 /* This block of TARGET_SIGNAL_REALTIME value is in order. */
1790 if (33 <= hostsig && hostsig <= 63)
1791 return (enum target_signal)
1792 (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
1793 else if (hostsig == 32)
1794 return TARGET_SIGNAL_REALTIME_32;
1795 else
1796 error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
1797 }
1798 #endif
1799
1800 #if defined (SIGRTMIN)
1801 if (hostsig >= SIGRTMIN && hostsig <= SIGRTMAX)
1802 {
1803 /* This block of TARGET_SIGNAL_REALTIME value is in order. */
1804 if (33 <= hostsig && hostsig <= 63)
1805 return (enum target_signal)
1806 (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
1807 else if (hostsig == 64)
1808 return TARGET_SIGNAL_REALTIME_64;
1809 else
1810 error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
1811 }
1812 #endif
1813 return TARGET_SIGNAL_UNKNOWN;
1814 }
1815
1816 /* Convert a OURSIG (an enum target_signal) to the form used by the
1817 target operating system (refered to as the ``host'') or zero if the
1818 equivalent host signal is not available. Set/clear OURSIG_OK
1819 accordingly. */
1820
1821 static int
1822 do_target_signal_to_host (enum target_signal oursig,
1823 int *oursig_ok)
1824 {
1825 *oursig_ok = 1;
1826 switch (oursig)
1827 {
1828 case TARGET_SIGNAL_0:
1829 return 0;
1830
1831 #if defined (SIGHUP)
1832 case TARGET_SIGNAL_HUP:
1833 return SIGHUP;
1834 #endif
1835 #if defined (SIGINT)
1836 case TARGET_SIGNAL_INT:
1837 return SIGINT;
1838 #endif
1839 #if defined (SIGQUIT)
1840 case TARGET_SIGNAL_QUIT:
1841 return SIGQUIT;
1842 #endif
1843 #if defined (SIGILL)
1844 case TARGET_SIGNAL_ILL:
1845 return SIGILL;
1846 #endif
1847 #if defined (SIGTRAP)
1848 case TARGET_SIGNAL_TRAP:
1849 return SIGTRAP;
1850 #endif
1851 #if defined (SIGABRT)
1852 case TARGET_SIGNAL_ABRT:
1853 return SIGABRT;
1854 #endif
1855 #if defined (SIGEMT)
1856 case TARGET_SIGNAL_EMT:
1857 return SIGEMT;
1858 #endif
1859 #if defined (SIGFPE)
1860 case TARGET_SIGNAL_FPE:
1861 return SIGFPE;
1862 #endif
1863 #if defined (SIGKILL)
1864 case TARGET_SIGNAL_KILL:
1865 return SIGKILL;
1866 #endif
1867 #if defined (SIGBUS)
1868 case TARGET_SIGNAL_BUS:
1869 return SIGBUS;
1870 #endif
1871 #if defined (SIGSEGV)
1872 case TARGET_SIGNAL_SEGV:
1873 return SIGSEGV;
1874 #endif
1875 #if defined (SIGSYS)
1876 case TARGET_SIGNAL_SYS:
1877 return SIGSYS;
1878 #endif
1879 #if defined (SIGPIPE)
1880 case TARGET_SIGNAL_PIPE:
1881 return SIGPIPE;
1882 #endif
1883 #if defined (SIGALRM)
1884 case TARGET_SIGNAL_ALRM:
1885 return SIGALRM;
1886 #endif
1887 #if defined (SIGTERM)
1888 case TARGET_SIGNAL_TERM:
1889 return SIGTERM;
1890 #endif
1891 #if defined (SIGUSR1)
1892 case TARGET_SIGNAL_USR1:
1893 return SIGUSR1;
1894 #endif
1895 #if defined (SIGUSR2)
1896 case TARGET_SIGNAL_USR2:
1897 return SIGUSR2;
1898 #endif
1899 #if defined (SIGCHLD) || defined (SIGCLD)
1900 case TARGET_SIGNAL_CHLD:
1901 #if defined (SIGCHLD)
1902 return SIGCHLD;
1903 #else
1904 return SIGCLD;
1905 #endif
1906 #endif /* SIGCLD or SIGCHLD */
1907 #if defined (SIGPWR)
1908 case TARGET_SIGNAL_PWR:
1909 return SIGPWR;
1910 #endif
1911 #if defined (SIGWINCH)
1912 case TARGET_SIGNAL_WINCH:
1913 return SIGWINCH;
1914 #endif
1915 #if defined (SIGURG)
1916 case TARGET_SIGNAL_URG:
1917 return SIGURG;
1918 #endif
1919 #if defined (SIGIO)
1920 case TARGET_SIGNAL_IO:
1921 return SIGIO;
1922 #endif
1923 #if defined (SIGPOLL)
1924 case TARGET_SIGNAL_POLL:
1925 return SIGPOLL;
1926 #endif
1927 #if defined (SIGSTOP)
1928 case TARGET_SIGNAL_STOP:
1929 return SIGSTOP;
1930 #endif
1931 #if defined (SIGTSTP)
1932 case TARGET_SIGNAL_TSTP:
1933 return SIGTSTP;
1934 #endif
1935 #if defined (SIGCONT)
1936 case TARGET_SIGNAL_CONT:
1937 return SIGCONT;
1938 #endif
1939 #if defined (SIGTTIN)
1940 case TARGET_SIGNAL_TTIN:
1941 return SIGTTIN;
1942 #endif
1943 #if defined (SIGTTOU)
1944 case TARGET_SIGNAL_TTOU:
1945 return SIGTTOU;
1946 #endif
1947 #if defined (SIGVTALRM)
1948 case TARGET_SIGNAL_VTALRM:
1949 return SIGVTALRM;
1950 #endif
1951 #if defined (SIGPROF)
1952 case TARGET_SIGNAL_PROF:
1953 return SIGPROF;
1954 #endif
1955 #if defined (SIGXCPU)
1956 case TARGET_SIGNAL_XCPU:
1957 return SIGXCPU;
1958 #endif
1959 #if defined (SIGXFSZ)
1960 case TARGET_SIGNAL_XFSZ:
1961 return SIGXFSZ;
1962 #endif
1963 #if defined (SIGWIND)
1964 case TARGET_SIGNAL_WIND:
1965 return SIGWIND;
1966 #endif
1967 #if defined (SIGPHONE)
1968 case TARGET_SIGNAL_PHONE:
1969 return SIGPHONE;
1970 #endif
1971 #if defined (SIGLOST)
1972 case TARGET_SIGNAL_LOST:
1973 return SIGLOST;
1974 #endif
1975 #if defined (SIGWAITING)
1976 case TARGET_SIGNAL_WAITING:
1977 return SIGWAITING;
1978 #endif
1979 #if defined (SIGCANCEL)
1980 case TARGET_SIGNAL_CANCEL:
1981 return SIGCANCEL;
1982 #endif
1983 #if defined (SIGLWP)
1984 case TARGET_SIGNAL_LWP:
1985 return SIGLWP;
1986 #endif
1987 #if defined (SIGDANGER)
1988 case TARGET_SIGNAL_DANGER:
1989 return SIGDANGER;
1990 #endif
1991 #if defined (SIGGRANT)
1992 case TARGET_SIGNAL_GRANT:
1993 return SIGGRANT;
1994 #endif
1995 #if defined (SIGRETRACT)
1996 case TARGET_SIGNAL_RETRACT:
1997 return SIGRETRACT;
1998 #endif
1999 #if defined (SIGMSG)
2000 case TARGET_SIGNAL_MSG:
2001 return SIGMSG;
2002 #endif
2003 #if defined (SIGSOUND)
2004 case TARGET_SIGNAL_SOUND:
2005 return SIGSOUND;
2006 #endif
2007 #if defined (SIGSAK)
2008 case TARGET_SIGNAL_SAK:
2009 return SIGSAK;
2010 #endif
2011 #if defined (SIGPRIO)
2012 case TARGET_SIGNAL_PRIO:
2013 return SIGPRIO;
2014 #endif
2015
2016 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
2017 #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
2018 case TARGET_EXC_BAD_ACCESS:
2019 return _NSIG + EXC_BAD_ACCESS;
2020 #endif
2021 #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
2022 case TARGET_EXC_BAD_INSTRUCTION:
2023 return _NSIG + EXC_BAD_INSTRUCTION;
2024 #endif
2025 #if defined (EXC_ARITHMETIC) && defined (_NSIG)
2026 case TARGET_EXC_ARITHMETIC:
2027 return _NSIG + EXC_ARITHMETIC;
2028 #endif
2029 #if defined (EXC_EMULATION) && defined (_NSIG)
2030 case TARGET_EXC_EMULATION:
2031 return _NSIG + EXC_EMULATION;
2032 #endif
2033 #if defined (EXC_SOFTWARE) && defined (_NSIG)
2034 case TARGET_EXC_SOFTWARE:
2035 return _NSIG + EXC_SOFTWARE;
2036 #endif
2037 #if defined (EXC_BREAKPOINT) && defined (_NSIG)
2038 case TARGET_EXC_BREAKPOINT:
2039 return _NSIG + EXC_BREAKPOINT;
2040 #endif
2041
2042 #if defined (SIGINFO)
2043 case TARGET_SIGNAL_INFO:
2044 return SIGINFO;
2045 #endif
2046
2047 default:
2048 #if defined (REALTIME_LO)
2049 if (oursig >= TARGET_SIGNAL_REALTIME_33
2050 && oursig <= TARGET_SIGNAL_REALTIME_63)
2051 {
2052 /* This block of signals is continuous, and
2053 TARGET_SIGNAL_REALTIME_33 is 33 by definition. */
2054 int retsig =
2055 (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
2056 if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
2057 return retsig;
2058 }
2059 #if (REALTIME_LO < 33)
2060 else if (oursig == TARGET_SIGNAL_REALTIME_32)
2061 {
2062 /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
2063 TARGET_SIGNAL_REALTIME_33. It is 32 by definition. */
2064 return 32;
2065 }
2066 #endif
2067 #endif
2068
2069 #if defined (SIGRTMIN)
2070 if (oursig >= TARGET_SIGNAL_REALTIME_33
2071 && oursig <= TARGET_SIGNAL_REALTIME_63)
2072 {
2073 /* This block of signals is continuous, and
2074 TARGET_SIGNAL_REALTIME_33 is 33 by definition. */
2075 int retsig =
2076 (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
2077 if (retsig >= SIGRTMIN && retsig <= SIGRTMAX)
2078 return retsig;
2079 }
2080 else if (oursig == TARGET_SIGNAL_REALTIME_64)
2081 return 64;
2082 #endif
2083 *oursig_ok = 0;
2084 return 0;
2085 }
2086 }
2087
2088 int
2089 target_signal_to_host_p (enum target_signal oursig)
2090 {
2091 int oursig_ok;
2092 do_target_signal_to_host (oursig, &oursig_ok);
2093 return oursig_ok;
2094 }
2095
2096 int
2097 target_signal_to_host (enum target_signal oursig)
2098 {
2099 int oursig_ok;
2100 int targ_signo = do_target_signal_to_host (oursig, &oursig_ok);
2101 if (!oursig_ok)
2102 {
2103 /* The user might be trying to do "signal SIGSAK" where this system
2104 doesn't have SIGSAK. */
2105 warning ("Signal %s does not exist on this system.\n",
2106 target_signal_to_name (oursig));
2107 return 0;
2108 }
2109 else
2110 return targ_signo;
2111 }
2112
2113 /* Helper function for child_wait and the Lynx derivatives of child_wait.
2114 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
2115 translation of that in OURSTATUS. */
2116 void
2117 store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
2118 {
2119 #ifdef CHILD_SPECIAL_WAITSTATUS
2120 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
2121 if it wants to deal with hoststatus. */
2122 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
2123 return;
2124 #endif
2125
2126 if (WIFEXITED (hoststatus))
2127 {
2128 ourstatus->kind = TARGET_WAITKIND_EXITED;
2129 ourstatus->value.integer = WEXITSTATUS (hoststatus);
2130 }
2131 else if (!WIFSTOPPED (hoststatus))
2132 {
2133 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
2134 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
2135 }
2136 else
2137 {
2138 ourstatus->kind = TARGET_WAITKIND_STOPPED;
2139 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
2140 }
2141 }
2142 \f
2143 /* In some circumstances we allow a command to specify a numeric
2144 signal. The idea is to keep these circumstances limited so that
2145 users (and scripts) develop portable habits. For comparison,
2146 POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
2147 numeric signal at all is obsolescent. We are slightly more
2148 lenient and allow 1-15 which should match host signal numbers on
2149 most systems. Use of symbolic signal names is strongly encouraged. */
2150
2151 enum target_signal
2152 target_signal_from_command (int num)
2153 {
2154 if (num >= 1 && num <= 15)
2155 return (enum target_signal) num;
2156 error ("Only signals 1-15 are valid as numeric signals.\n\
2157 Use \"info signals\" for a list of symbolic signals.");
2158 }
2159 \f
2160 /* Returns zero to leave the inferior alone, one to interrupt it. */
2161 int (*target_activity_function) (void);
2162 int target_activity_fd;
2163 \f
2164 /* Convert a normal process ID to a string. Returns the string in a static
2165 buffer. */
2166
2167 char *
2168 normal_pid_to_str (int pid)
2169 {
2170 static char buf[30];
2171
2172 if (STREQ (current_target.to_shortname, "remote"))
2173 sprintf (buf, "thread %d", pid);
2174 else
2175 sprintf (buf, "process %d", pid);
2176
2177 return buf;
2178 }
2179
2180 /* Some targets (such as ttrace-based HPUX) don't allow us to request
2181 notification of inferior events such as fork and vork immediately
2182 after the inferior is created. (This because of how gdb gets an
2183 inferior created via invoking a shell to do it. In such a scenario,
2184 if the shell init file has commands in it, the shell will fork and
2185 exec for each of those commands, and we will see each such fork
2186 event. Very bad.)
2187
2188 This function is used by all targets that allow us to request
2189 notification of forks, etc at inferior creation time; e.g., in
2190 target_acknowledge_forked_child.
2191 */
2192 static void
2193 normal_target_post_startup_inferior (int pid)
2194 {
2195 /* This space intentionally left blank. */
2196 }
2197
2198 /* Set up the handful of non-empty slots needed by the dummy target
2199 vector. */
2200
2201 static void
2202 init_dummy_target (void)
2203 {
2204 dummy_target.to_shortname = "None";
2205 dummy_target.to_longname = "None";
2206 dummy_target.to_doc = "";
2207 dummy_target.to_attach = find_default_attach;
2208 dummy_target.to_require_attach = find_default_require_attach;
2209 dummy_target.to_require_detach = find_default_require_detach;
2210 dummy_target.to_create_inferior = find_default_create_inferior;
2211 dummy_target.to_clone_and_follow_inferior = find_default_clone_and_follow_inferior;
2212 dummy_target.to_pid_to_str = normal_pid_to_str;
2213 dummy_target.to_stratum = dummy_stratum;
2214 dummy_target.to_magic = OPS_MAGIC;
2215 }
2216 \f
2217
2218 static struct target_ops debug_target;
2219
2220 static void
2221 debug_to_open (char *args, int from_tty)
2222 {
2223 debug_target.to_open (args, from_tty);
2224
2225 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
2226 }
2227
2228 static void
2229 debug_to_close (int quitting)
2230 {
2231 debug_target.to_close (quitting);
2232
2233 fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
2234 }
2235
2236 static void
2237 debug_to_attach (char *args, int from_tty)
2238 {
2239 debug_target.to_attach (args, from_tty);
2240
2241 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n", args, from_tty);
2242 }
2243
2244
2245 static void
2246 debug_to_post_attach (int pid)
2247 {
2248 debug_target.to_post_attach (pid);
2249
2250 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
2251 }
2252
2253 static void
2254 debug_to_require_attach (char *args, int from_tty)
2255 {
2256 debug_target.to_require_attach (args, from_tty);
2257
2258 fprintf_unfiltered (gdb_stdlog,
2259 "target_require_attach (%s, %d)\n", args, from_tty);
2260 }
2261
2262 static void
2263 debug_to_detach (char *args, int from_tty)
2264 {
2265 debug_target.to_detach (args, from_tty);
2266
2267 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n", args, from_tty);
2268 }
2269
2270 static void
2271 debug_to_require_detach (int pid, char *args, int from_tty)
2272 {
2273 debug_target.to_require_detach (pid, args, from_tty);
2274
2275 fprintf_unfiltered (gdb_stdlog,
2276 "target_require_detach (%d, %s, %d)\n", pid, args, from_tty);
2277 }
2278
2279 static void
2280 debug_to_resume (int pid, int step, enum target_signal siggnal)
2281 {
2282 debug_target.to_resume (pid, step, siggnal);
2283
2284 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n", pid,
2285 step ? "step" : "continue",
2286 target_signal_to_name (siggnal));
2287 }
2288
2289 static int
2290 debug_to_wait (int pid, struct target_waitstatus *status)
2291 {
2292 int retval;
2293
2294 retval = debug_target.to_wait (pid, status);
2295
2296 fprintf_unfiltered (gdb_stdlog,
2297 "target_wait (%d, status) = %d, ", pid, retval);
2298 fprintf_unfiltered (gdb_stdlog, "status->kind = ");
2299 switch (status->kind)
2300 {
2301 case TARGET_WAITKIND_EXITED:
2302 fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n",
2303 status->value.integer);
2304 break;
2305 case TARGET_WAITKIND_STOPPED:
2306 fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n",
2307 target_signal_to_name (status->value.sig));
2308 break;
2309 case TARGET_WAITKIND_SIGNALLED:
2310 fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n",
2311 target_signal_to_name (status->value.sig));
2312 break;
2313 case TARGET_WAITKIND_LOADED:
2314 fprintf_unfiltered (gdb_stdlog, "loaded\n");
2315 break;
2316 case TARGET_WAITKIND_FORKED:
2317 fprintf_unfiltered (gdb_stdlog, "forked\n");
2318 break;
2319 case TARGET_WAITKIND_VFORKED:
2320 fprintf_unfiltered (gdb_stdlog, "vforked\n");
2321 break;
2322 case TARGET_WAITKIND_EXECD:
2323 fprintf_unfiltered (gdb_stdlog, "execd\n");
2324 break;
2325 case TARGET_WAITKIND_SPURIOUS:
2326 fprintf_unfiltered (gdb_stdlog, "spurious\n");
2327 break;
2328 default:
2329 fprintf_unfiltered (gdb_stdlog, "unknown???\n");
2330 break;
2331 }
2332
2333 return retval;
2334 }
2335
2336 static void
2337 debug_to_post_wait (int pid, int status)
2338 {
2339 debug_target.to_post_wait (pid, status);
2340
2341 fprintf_unfiltered (gdb_stdlog, "target_post_wait (%d, %d)\n",
2342 pid, status);
2343 }
2344
2345 static void
2346 debug_to_fetch_registers (int regno)
2347 {
2348 debug_target.to_fetch_registers (regno);
2349
2350 fprintf_unfiltered (gdb_stdlog, "target_fetch_registers (%s)",
2351 regno != -1 ? REGISTER_NAME (regno) : "-1");
2352 if (regno != -1)
2353 fprintf_unfiltered (gdb_stdlog, " = 0x%lx %ld",
2354 (unsigned long) read_register (regno),
2355 (unsigned long) read_register (regno));
2356 fprintf_unfiltered (gdb_stdlog, "\n");
2357 }
2358
2359 static void
2360 debug_to_store_registers (int regno)
2361 {
2362 debug_target.to_store_registers (regno);
2363
2364 if (regno >= 0 && regno < NUM_REGS)
2365 fprintf_unfiltered (gdb_stdlog, "target_store_registers (%s) = 0x%lx %ld\n",
2366 REGISTER_NAME (regno),
2367 (unsigned long) read_register (regno),
2368 (unsigned long) read_register (regno));
2369 else
2370 fprintf_unfiltered (gdb_stdlog, "target_store_registers (%d)\n", regno);
2371 }
2372
2373 static void
2374 debug_to_prepare_to_store (void)
2375 {
2376 debug_target.to_prepare_to_store ();
2377
2378 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
2379 }
2380
2381 static int
2382 debug_to_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
2383 struct mem_attrib *attrib,
2384 struct target_ops *target)
2385 {
2386 int retval;
2387
2388 retval = debug_target.to_xfer_memory (memaddr, myaddr, len, write,
2389 attrib, target);
2390
2391 fprintf_unfiltered (gdb_stdlog,
2392 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
2393 (unsigned int) memaddr, /* possable truncate long long */
2394 len, write ? "write" : "read", retval);
2395
2396
2397
2398 if (retval > 0)
2399 {
2400 int i;
2401
2402 fputs_unfiltered (", bytes =", gdb_stdlog);
2403 for (i = 0; i < retval; i++)
2404 {
2405 if ((((long) &(myaddr[i])) & 0xf) == 0)
2406 fprintf_unfiltered (gdb_stdlog, "\n");
2407 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
2408 }
2409 }
2410
2411 fputc_unfiltered ('\n', gdb_stdlog);
2412
2413 return retval;
2414 }
2415
2416 static void
2417 debug_to_files_info (struct target_ops *target)
2418 {
2419 debug_target.to_files_info (target);
2420
2421 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
2422 }
2423
2424 static int
2425 debug_to_insert_breakpoint (CORE_ADDR addr, char *save)
2426 {
2427 int retval;
2428
2429 retval = debug_target.to_insert_breakpoint (addr, save);
2430
2431 fprintf_unfiltered (gdb_stdlog,
2432 "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
2433 (unsigned long) addr,
2434 (unsigned long) retval);
2435 return retval;
2436 }
2437
2438 static int
2439 debug_to_remove_breakpoint (CORE_ADDR addr, char *save)
2440 {
2441 int retval;
2442
2443 retval = debug_target.to_remove_breakpoint (addr, save);
2444
2445 fprintf_unfiltered (gdb_stdlog,
2446 "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
2447 (unsigned long) addr,
2448 (unsigned long) retval);
2449 return retval;
2450 }
2451
2452 static void
2453 debug_to_terminal_init (void)
2454 {
2455 debug_target.to_terminal_init ();
2456
2457 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
2458 }
2459
2460 static void
2461 debug_to_terminal_inferior (void)
2462 {
2463 debug_target.to_terminal_inferior ();
2464
2465 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
2466 }
2467
2468 static void
2469 debug_to_terminal_ours_for_output (void)
2470 {
2471 debug_target.to_terminal_ours_for_output ();
2472
2473 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
2474 }
2475
2476 static void
2477 debug_to_terminal_ours (void)
2478 {
2479 debug_target.to_terminal_ours ();
2480
2481 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
2482 }
2483
2484 static void
2485 debug_to_terminal_info (char *arg, int from_tty)
2486 {
2487 debug_target.to_terminal_info (arg, from_tty);
2488
2489 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
2490 from_tty);
2491 }
2492
2493 static void
2494 debug_to_kill (void)
2495 {
2496 debug_target.to_kill ();
2497
2498 fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
2499 }
2500
2501 static void
2502 debug_to_load (char *args, int from_tty)
2503 {
2504 debug_target.to_load (args, from_tty);
2505
2506 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
2507 }
2508
2509 static int
2510 debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
2511 {
2512 int retval;
2513
2514 retval = debug_target.to_lookup_symbol (name, addrp);
2515
2516 fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
2517
2518 return retval;
2519 }
2520
2521 static void
2522 debug_to_create_inferior (char *exec_file, char *args, char **env)
2523 {
2524 debug_target.to_create_inferior (exec_file, args, env);
2525
2526 fprintf_unfiltered (gdb_stdlog, "target_create_inferior (%s, %s, xxx)\n",
2527 exec_file, args);
2528 }
2529
2530 static void
2531 debug_to_post_startup_inferior (int pid)
2532 {
2533 debug_target.to_post_startup_inferior (pid);
2534
2535 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
2536 pid);
2537 }
2538
2539 static void
2540 debug_to_acknowledge_created_inferior (int pid)
2541 {
2542 debug_target.to_acknowledge_created_inferior (pid);
2543
2544 fprintf_unfiltered (gdb_stdlog, "target_acknowledge_created_inferior (%d)\n",
2545 pid);
2546 }
2547
2548 static void
2549 debug_to_clone_and_follow_inferior (int child_pid, int *followed_child)
2550 {
2551 debug_target.to_clone_and_follow_inferior (child_pid, followed_child);
2552
2553 fprintf_unfiltered (gdb_stdlog,
2554 "target_clone_and_follow_inferior (%d, %d)\n",
2555 child_pid, *followed_child);
2556 }
2557
2558 static void
2559 debug_to_post_follow_inferior_by_clone (void)
2560 {
2561 debug_target.to_post_follow_inferior_by_clone ();
2562
2563 fprintf_unfiltered (gdb_stdlog, "target_post_follow_inferior_by_clone ()\n");
2564 }
2565
2566 static int
2567 debug_to_insert_fork_catchpoint (int pid)
2568 {
2569 int retval;
2570
2571 retval = debug_target.to_insert_fork_catchpoint (pid);
2572
2573 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d) = %d\n",
2574 pid, retval);
2575
2576 return retval;
2577 }
2578
2579 static int
2580 debug_to_remove_fork_catchpoint (int pid)
2581 {
2582 int retval;
2583
2584 retval = debug_target.to_remove_fork_catchpoint (pid);
2585
2586 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
2587 pid, retval);
2588
2589 return retval;
2590 }
2591
2592 static int
2593 debug_to_insert_vfork_catchpoint (int pid)
2594 {
2595 int retval;
2596
2597 retval = debug_target.to_insert_vfork_catchpoint (pid);
2598
2599 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d)= %d\n",
2600 pid, retval);
2601
2602 return retval;
2603 }
2604
2605 static int
2606 debug_to_remove_vfork_catchpoint (int pid)
2607 {
2608 int retval;
2609
2610 retval = debug_target.to_remove_vfork_catchpoint (pid);
2611
2612 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
2613 pid, retval);
2614
2615 return retval;
2616 }
2617
2618 static int
2619 debug_to_has_forked (int pid, int *child_pid)
2620 {
2621 int has_forked;
2622
2623 has_forked = debug_target.to_has_forked (pid, child_pid);
2624
2625 fprintf_unfiltered (gdb_stdlog, "target_has_forked (%d, %d) = %d\n",
2626 pid, *child_pid, has_forked);
2627
2628 return has_forked;
2629 }
2630
2631 static int
2632 debug_to_has_vforked (int pid, int *child_pid)
2633 {
2634 int has_vforked;
2635
2636 has_vforked = debug_target.to_has_vforked (pid, child_pid);
2637
2638 fprintf_unfiltered (gdb_stdlog, "target_has_vforked (%d, %d) = %d\n",
2639 pid, *child_pid, has_vforked);
2640
2641 return has_vforked;
2642 }
2643
2644 static int
2645 debug_to_can_follow_vfork_prior_to_exec (void)
2646 {
2647 int can_immediately_follow_vfork;
2648
2649 can_immediately_follow_vfork = debug_target.to_can_follow_vfork_prior_to_exec ();
2650
2651 fprintf_unfiltered (gdb_stdlog, "target_can_follow_vfork_prior_to_exec () = %d\n",
2652 can_immediately_follow_vfork);
2653
2654 return can_immediately_follow_vfork;
2655 }
2656
2657 static void
2658 debug_to_post_follow_vfork (int parent_pid, int followed_parent, int child_pid,
2659 int followed_child)
2660 {
2661 debug_target.to_post_follow_vfork (parent_pid, followed_parent, child_pid, followed_child);
2662
2663 fprintf_unfiltered (gdb_stdlog,
2664 "target_post_follow_vfork (%d, %d, %d, %d)\n",
2665 parent_pid, followed_parent, child_pid, followed_child);
2666 }
2667
2668 static int
2669 debug_to_insert_exec_catchpoint (int pid)
2670 {
2671 int retval;
2672
2673 retval = debug_target.to_insert_exec_catchpoint (pid);
2674
2675 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d) = %d\n",
2676 pid, retval);
2677
2678 return retval;
2679 }
2680
2681 static int
2682 debug_to_remove_exec_catchpoint (int pid)
2683 {
2684 int retval;
2685
2686 retval = debug_target.to_remove_exec_catchpoint (pid);
2687
2688 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
2689 pid, retval);
2690
2691 return retval;
2692 }
2693
2694 static int
2695 debug_to_has_execd (int pid, char **execd_pathname)
2696 {
2697 int has_execd;
2698
2699 has_execd = debug_target.to_has_execd (pid, execd_pathname);
2700
2701 fprintf_unfiltered (gdb_stdlog, "target_has_execd (%d, %s) = %d\n",
2702 pid, (*execd_pathname ? *execd_pathname : "<NULL>"),
2703 has_execd);
2704
2705 return has_execd;
2706 }
2707
2708 static int
2709 debug_to_reported_exec_events_per_exec_call (void)
2710 {
2711 int reported_exec_events;
2712
2713 reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2714
2715 fprintf_unfiltered (gdb_stdlog,
2716 "target_reported_exec_events_per_exec_call () = %d\n",
2717 reported_exec_events);
2718
2719 return reported_exec_events;
2720 }
2721
2722 static int
2723 debug_to_has_syscall_event (int pid, enum target_waitkind *kind,
2724 int *syscall_id)
2725 {
2726 int has_syscall_event;
2727 char *kind_spelling = "??";
2728
2729 has_syscall_event = debug_target.to_has_syscall_event (pid, kind, syscall_id);
2730 if (has_syscall_event)
2731 {
2732 switch (*kind)
2733 {
2734 case TARGET_WAITKIND_SYSCALL_ENTRY:
2735 kind_spelling = "SYSCALL_ENTRY";
2736 break;
2737 case TARGET_WAITKIND_SYSCALL_RETURN:
2738 kind_spelling = "SYSCALL_RETURN";
2739 break;
2740 default:
2741 break;
2742 }
2743 }
2744
2745 fprintf_unfiltered (gdb_stdlog,
2746 "target_has_syscall_event (%d, %s, %d) = %d\n",
2747 pid, kind_spelling, *syscall_id, has_syscall_event);
2748
2749 return has_syscall_event;
2750 }
2751
2752 static int
2753 debug_to_has_exited (int pid, int wait_status, int *exit_status)
2754 {
2755 int has_exited;
2756
2757 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2758
2759 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
2760 pid, wait_status, *exit_status, has_exited);
2761
2762 return has_exited;
2763 }
2764
2765 static void
2766 debug_to_mourn_inferior (void)
2767 {
2768 debug_target.to_mourn_inferior ();
2769
2770 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
2771 }
2772
2773 static int
2774 debug_to_can_run (void)
2775 {
2776 int retval;
2777
2778 retval = debug_target.to_can_run ();
2779
2780 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
2781
2782 return retval;
2783 }
2784
2785 static void
2786 debug_to_notice_signals (int pid)
2787 {
2788 debug_target.to_notice_signals (pid);
2789
2790 fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n", pid);
2791 }
2792
2793 static int
2794 debug_to_thread_alive (int pid)
2795 {
2796 int retval;
2797
2798 retval = debug_target.to_thread_alive (pid);
2799
2800 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
2801 pid, retval);
2802
2803 return retval;
2804 }
2805
2806 static void
2807 debug_to_find_new_threads (void)
2808 {
2809 debug_target.to_find_new_threads ();
2810
2811 fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
2812 }
2813
2814 static void
2815 debug_to_stop (void)
2816 {
2817 debug_target.to_stop ();
2818
2819 fprintf_unfiltered (gdb_stdlog, "target_stop ()\n");
2820 }
2821
2822 static int
2823 debug_to_query (int type, char *req, char *resp, int *siz)
2824 {
2825 int retval;
2826
2827 retval = debug_target.to_query (type, req, resp, siz);
2828
2829 fprintf_unfiltered (gdb_stdlog, "target_query (%c, %s, %s, %d) = %d\n", type, req, resp, *siz, retval);
2830
2831 return retval;
2832 }
2833
2834 static void
2835 debug_to_rcmd (char *command,
2836 struct ui_file *outbuf)
2837 {
2838 debug_target.to_rcmd (command, outbuf);
2839 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
2840 }
2841
2842 static struct symtab_and_line *
2843 debug_to_enable_exception_callback (enum exception_event_kind kind, int enable)
2844 {
2845 struct symtab_and_line *result;
2846 result = debug_target.to_enable_exception_callback (kind, enable);
2847 fprintf_unfiltered (gdb_stdlog,
2848 "target get_exception_callback_sal (%d, %d)\n",
2849 kind, enable);
2850 return result;
2851 }
2852
2853 static struct exception_event_record *
2854 debug_to_get_current_exception_event (void)
2855 {
2856 struct exception_event_record *result;
2857 result = debug_target.to_get_current_exception_event ();
2858 fprintf_unfiltered (gdb_stdlog, "target get_current_exception_event ()\n");
2859 return result;
2860 }
2861
2862 static char *
2863 debug_to_pid_to_exec_file (int pid)
2864 {
2865 char *exec_file;
2866
2867 exec_file = debug_target.to_pid_to_exec_file (pid);
2868
2869 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
2870 pid, exec_file);
2871
2872 return exec_file;
2873 }
2874
2875 static char *
2876 debug_to_core_file_to_sym_file (char *core)
2877 {
2878 char *sym_file;
2879
2880 sym_file = debug_target.to_core_file_to_sym_file (core);
2881
2882 fprintf_unfiltered (gdb_stdlog, "target_core_file_to_sym_file (%s) = %s\n",
2883 core, sym_file);
2884
2885 return sym_file;
2886 }
2887
2888 static void
2889 setup_target_debug (void)
2890 {
2891 memcpy (&debug_target, &current_target, sizeof debug_target);
2892
2893 current_target.to_open = debug_to_open;
2894 current_target.to_close = debug_to_close;
2895 current_target.to_attach = debug_to_attach;
2896 current_target.to_post_attach = debug_to_post_attach;
2897 current_target.to_require_attach = debug_to_require_attach;
2898 current_target.to_detach = debug_to_detach;
2899 current_target.to_require_detach = debug_to_require_detach;
2900 current_target.to_resume = debug_to_resume;
2901 current_target.to_wait = debug_to_wait;
2902 current_target.to_post_wait = debug_to_post_wait;
2903 current_target.to_fetch_registers = debug_to_fetch_registers;
2904 current_target.to_store_registers = debug_to_store_registers;
2905 current_target.to_prepare_to_store = debug_to_prepare_to_store;
2906 current_target.to_xfer_memory = debug_to_xfer_memory;
2907 current_target.to_files_info = debug_to_files_info;
2908 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2909 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
2910 current_target.to_terminal_init = debug_to_terminal_init;
2911 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2912 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2913 current_target.to_terminal_ours = debug_to_terminal_ours;
2914 current_target.to_terminal_info = debug_to_terminal_info;
2915 current_target.to_kill = debug_to_kill;
2916 current_target.to_load = debug_to_load;
2917 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2918 current_target.to_create_inferior = debug_to_create_inferior;
2919 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2920 current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
2921 current_target.to_clone_and_follow_inferior = debug_to_clone_and_follow_inferior;
2922 current_target.to_post_follow_inferior_by_clone = debug_to_post_follow_inferior_by_clone;
2923 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2924 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2925 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2926 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
2927 current_target.to_has_forked = debug_to_has_forked;
2928 current_target.to_has_vforked = debug_to_has_vforked;
2929 current_target.to_can_follow_vfork_prior_to_exec = debug_to_can_follow_vfork_prior_to_exec;
2930 current_target.to_post_follow_vfork = debug_to_post_follow_vfork;
2931 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2932 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
2933 current_target.to_has_execd = debug_to_has_execd;
2934 current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
2935 current_target.to_has_syscall_event = debug_to_has_syscall_event;
2936 current_target.to_has_exited = debug_to_has_exited;
2937 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2938 current_target.to_can_run = debug_to_can_run;
2939 current_target.to_notice_signals = debug_to_notice_signals;
2940 current_target.to_thread_alive = debug_to_thread_alive;
2941 current_target.to_find_new_threads = debug_to_find_new_threads;
2942 current_target.to_stop = debug_to_stop;
2943 current_target.to_query = debug_to_query;
2944 current_target.to_rcmd = debug_to_rcmd;
2945 current_target.to_enable_exception_callback = debug_to_enable_exception_callback;
2946 current_target.to_get_current_exception_event = debug_to_get_current_exception_event;
2947 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
2948 current_target.to_core_file_to_sym_file = debug_to_core_file_to_sym_file;
2949
2950 }
2951 \f
2952
2953 static char targ_desc[] =
2954 "Names of targets and files being debugged.\n\
2955 Shows the entire stack of targets currently in use (including the exec-file,\n\
2956 core-file, and process, if any), as well as the symbol file name.";
2957
2958 static void
2959 do_monitor_command (char *cmd,
2960 int from_tty)
2961 {
2962 if ((current_target.to_rcmd
2963 == (void (*) (char *, struct ui_file *)) tcomplain)
2964 || (current_target.to_rcmd == debug_to_rcmd
2965 && (debug_target.to_rcmd
2966 == (void (*) (char *, struct ui_file *)) tcomplain)))
2967 {
2968 error ("\"monitor\" command not supported by this target.\n");
2969 }
2970 target_rcmd (cmd, gdb_stdtarg);
2971 }
2972
2973 void
2974 initialize_targets (void)
2975 {
2976 init_dummy_target ();
2977 push_target (&dummy_target);
2978
2979 add_info ("target", target_info, targ_desc);
2980 add_info ("files", target_info, targ_desc);
2981
2982 add_show_from_set (
2983 add_set_cmd ("target", class_maintenance, var_zinteger,
2984 (char *) &targetdebug,
2985 "Set target debugging.\n\
2986 When non-zero, target debugging is enabled.", &setdebuglist),
2987 &showdebuglist);
2988
2989
2990 add_com ("monitor", class_obscure, do_monitor_command,
2991 "Send a command to the remote monitor (remote targets only).");
2992
2993 target_dcache = dcache_init();
2994
2995 if (!STREQ (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC"))
2996 internal_error (__FILE__, __LINE__, "failed internal consistency check");
2997 }
This page took 0.100845 seconds and 4 git commands to generate.