1 /* Select target systems and architectures at runtime for GDB.
2 Copyright 1990, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
3 Contributed by Cygnus Support.
5 This file is part of GDB.
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.
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.
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, Boston, MA 02111-1307, USA. */
24 #include "gdb_string.h"
38 target_info PARAMS ((char *, int));
41 cleanup_target PARAMS ((struct target_ops *));
44 maybe_kill_then_create_inferior PARAMS ((char *, char *, char **));
47 default_clone_and_follow_inferior PARAMS ((int, int *));
50 maybe_kill_then_attach PARAMS ((char *, int));
53 kill_or_be_killed PARAMS ((int));
56 default_terminal_info PARAMS ((char *, int));
59 nosymbol PARAMS ((char *, CORE_ADDR *));
62 tcomplain PARAMS ((void));
65 nomemory PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
68 return_zero PARAMS ((void));
71 return_one PARAMS ((void));
74 target_ignore PARAMS ((void));
77 target_command PARAMS ((char *, int));
79 static struct target_ops *
80 find_default_run_target PARAMS ((char *));
83 update_current_target PARAMS ((void));
85 /* Transfer LEN bytes between target address MEMADDR and GDB address MYADDR.
86 Returns 0 for success, errno code for failure (which includes partial
87 transfers--if you want a more useful response to partial transfers, try
88 target_read_memory_partial). */
91 target_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len,
92 int write, asection *bfd_section));
95 debug_to_open PARAMS ((char *, int));
98 debug_to_close PARAMS ((int));
101 debug_to_attach PARAMS ((char *, int));
104 debug_to_detach PARAMS ((char *, int));
107 debug_to_resume PARAMS ((int, int, enum target_signal));
110 debug_to_wait PARAMS ((int, struct target_waitstatus *));
113 debug_to_fetch_registers PARAMS ((int));
116 debug_to_store_registers PARAMS ((int));
119 debug_to_prepare_to_store PARAMS ((void));
122 debug_to_xfer_memory PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
125 debug_to_files_info PARAMS ((struct target_ops *));
128 debug_to_insert_breakpoint PARAMS ((CORE_ADDR, char *));
131 debug_to_remove_breakpoint PARAMS ((CORE_ADDR, char *));
134 debug_to_terminal_init PARAMS ((void));
137 debug_to_terminal_inferior PARAMS ((void));
140 debug_to_terminal_ours_for_output PARAMS ((void));
143 debug_to_terminal_ours PARAMS ((void));
146 debug_to_terminal_info PARAMS ((char *, int));
149 debug_to_kill PARAMS ((void));
152 debug_to_load PARAMS ((char *, int));
155 debug_to_lookup_symbol PARAMS ((char *, CORE_ADDR *));
158 debug_to_create_inferior PARAMS ((char *, char *, char **));
161 debug_to_mourn_inferior PARAMS ((void));
164 debug_to_can_run PARAMS ((void));
167 debug_to_notice_signals PARAMS ((int));
170 debug_to_thread_alive PARAMS ((int));
173 debug_to_stop PARAMS ((void));
176 debug_to_query PARAMS ((char, char *, char *, int *));
178 /* Pointer to array of target architecture structures; the size of the
179 array; the current index into the array; the allocated size of the
181 struct target_ops **target_structs;
182 unsigned target_struct_size;
183 unsigned target_struct_index;
184 unsigned target_struct_allocsize;
185 #define DEFAULT_ALLOCSIZE 10
187 /* The initial current target, so that there is always a semi-valid
190 struct target_ops dummy_target = {
191 "None", /* to_shortname */
192 "None", /* to_longname */
196 find_default_attach, /* to_attach */
197 NULL, /* to_post_attach */
198 find_default_require_attach, /* to_require_attach */
200 find_default_require_detach, /* to_require_detach */
203 NULL, /* to_post_wait */
204 0, /* to_fetch_registers */
205 0, /* to_store_registers */
206 0, /* to_prepare_to_store */
207 0, /* to_xfer_memory */
208 0, /* to_files_info */
209 0, /* to_insert_breakpoint */
210 0, /* to_remove_breakpoint */
211 0, /* to_terminal_init */
212 0, /* to_terminal_inferior */
213 0, /* to_terminal_ours_for_output */
214 0, /* to_terminal_ours */
215 0, /* to_terminal_info */
218 0, /* to_lookup_symbol */
219 find_default_create_inferior, /* to_create_inferior */
220 NULL, /* to_post_startup_inferior */
221 NULL, /* to_acknowledge_created_inferior */
222 find_default_clone_and_follow_inferior, /* to_clone_and_follow_inferior */
223 NULL, /* to_post_follow_inferior_by_clone */
224 NULL, /* to_insert_fork_catchpoint */
225 NULL, /* to_remove_fork_catchpoint */
226 NULL, /* to_insert_vfork_catchpoint */
227 NULL, /* to_remove_vfork_catchpoint */
228 NULL, /* to_has_forked */
229 NULL, /* to_has_vforked */
230 NULL, /* to_can_follow_vfork_prior_to_exec */
231 NULL, /* to_post_follow_vfork */
232 NULL, /* to_insert_exec_catchpoint */
233 NULL, /* to_remove_exec_catchpoint */
234 NULL, /* to_has_execd */
235 NULL, /* to_reported_exec_events_per_exec_call */
236 NULL, /* to_has_syscall_event */
237 NULL, /* to_has_exited */
238 0, /* to_mourn_inferior */
240 0, /* to_notice_signals */
241 0, /* to_thread_alive */
244 NULL, /* to_enable_exception_callback */
245 NULL, /* to_get_current_exception_event */
246 NULL, /* to_pid_to_exec_file */
247 NULL, /* to_core_file_to_sym_file */
248 dummy_stratum, /* to_stratum */
250 0, /* to_has_all_memory */
251 0, /* to_has_memory */
252 0, /* to_has_stack */
253 0, /* to_has_registers */
254 0, /* to_has_execution */
255 tc_none, /* to_has_thread_control */
257 0, /* to_sections_end */
258 OPS_MAGIC, /* to_magic */
261 /* Top of target stack. */
263 struct target_stack_item *target_stack;
265 /* The target structure we are currently using to talk to a process
266 or file or whatever "inferior" we have. */
268 struct target_ops current_target;
270 /* Command list for target. */
272 static struct cmd_list_element *targetlist = NULL;
274 /* Nonzero if we are debugging an attached outside process
275 rather than an inferior. */
279 #ifdef MAINTENANCE_CMDS
280 /* Non-zero if we want to see trace of target level stuff. */
282 static int targetdebug = 0;
284 static void setup_target_debug PARAMS ((void));
288 /* The user just typed 'target' without the name of a target. */
292 target_command (arg, from_tty)
296 fputs_filtered ("Argument required (target name). Try `help target'\n",
300 /* Add a possible target architecture to the list. */
304 struct target_ops *t;
308 target_struct_allocsize = DEFAULT_ALLOCSIZE;
309 target_structs = (struct target_ops **) xmalloc
310 (target_struct_allocsize * sizeof (*target_structs));
312 if (target_struct_size >= target_struct_allocsize)
314 target_struct_allocsize *= 2;
315 target_structs = (struct target_ops **)
316 xrealloc ((char *) target_structs,
317 target_struct_allocsize * sizeof (*target_structs));
319 target_structs[target_struct_size++] = t;
320 /* cleanup_target (t);*/
322 if (targetlist == NULL)
323 add_prefix_cmd ("target", class_run, target_command,
324 "Connect to a target machine or process.\n\
325 The first argument is the type or protocol of the target machine.\n\
326 Remaining arguments are interpreted by the target protocol. For more\n\
327 information on the arguments for a particular protocol, type\n\
328 `help target ' followed by the protocol name.",
329 &targetlist, "target ", 0, &cmdlist);
330 add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
342 nomemory (memaddr, myaddr, len, write, t)
347 struct target_ops *t;
349 errno = EIO; /* Can't read/write this location */
350 return 0; /* No bytes handled */
356 error ("You can't do that when your target is `%s'",
357 current_target.to_shortname);
363 error ("You can't do that without a process to debug.");
368 nosymbol (name, addrp)
372 return 1; /* Symbol does not exist in target env */
382 error ("No run-time support for this");
388 default_terminal_info (args, from_tty)
392 printf_unfiltered("No saved terminal information.\n");
395 /* This is the default target_create_inferior and target_attach function.
396 If the current target is executing, it asks whether to kill it off.
397 If this function returns without calling error(), it has killed off
398 the target, and the operation should be attempted. */
401 kill_or_be_killed (from_tty)
404 if (target_has_execution)
406 printf_unfiltered ("You are already running a program:\n");
407 target_files_info ();
408 if (query ("Kill it? ")) {
410 if (target_has_execution)
411 error ("Killing the program did not help.");
414 error ("Program not killed.");
421 maybe_kill_then_attach (args, from_tty)
425 kill_or_be_killed (from_tty);
426 target_attach (args, from_tty);
430 maybe_kill_then_create_inferior (exec, args, env)
435 kill_or_be_killed (0);
436 target_create_inferior (exec, args, env);
440 default_clone_and_follow_inferior (child_pid, followed_child)
444 target_clone_and_follow_inferior (child_pid, followed_child);
447 /* Clean up a target struct so it no longer has any zero pointers in it.
448 We default entries, at least to stubs that print error messages. */
452 struct target_ops *t;
455 #define de_fault(field, value) \
456 if (!t->field) t->field = value
458 /* FIELD DEFAULT VALUE */
460 de_fault (to_open, (void (*) PARAMS((char *, int))) tcomplain);
461 de_fault (to_close, (void (*) PARAMS((int))) target_ignore);
462 de_fault (to_attach, maybe_kill_then_attach);
463 de_fault (to_post_attach, (void (*) PARAMS ((int))) target_ignore);
464 de_fault (to_require_attach, maybe_kill_then_attach);
465 de_fault (to_detach, (void (*) PARAMS((char *, int))) target_ignore);
466 de_fault (to_require_detach, (void (*) PARAMS((int, char *, int))) target_ignore);
467 de_fault (to_resume, (void (*) PARAMS((int, int, enum target_signal))) noprocess);
468 de_fault (to_wait, (int (*) PARAMS((int, struct target_waitstatus *))) noprocess);
469 de_fault (to_post_wait, (void (*) PARAMS ((int, int))) target_ignore);
470 de_fault (to_fetch_registers, (void (*) PARAMS((int))) target_ignore);
471 de_fault (to_store_registers, (void (*) PARAMS((int))) noprocess);
472 de_fault (to_prepare_to_store, (void (*) PARAMS((void))) noprocess);
473 de_fault (to_xfer_memory, (int (*) PARAMS((CORE_ADDR, char *, int, int, struct target_ops *))) nomemory);
474 de_fault (to_files_info, (void (*) PARAMS((struct target_ops *))) target_ignore);
475 de_fault (to_insert_breakpoint, memory_insert_breakpoint);
476 de_fault (to_remove_breakpoint, memory_remove_breakpoint);
477 de_fault (to_terminal_init, (void (*) PARAMS((void))) target_ignore);
478 de_fault (to_terminal_inferior, (void (*) PARAMS ((void))) target_ignore);
479 de_fault (to_terminal_ours_for_output,(void (*) PARAMS ((void))) target_ignore);
480 de_fault (to_terminal_ours, (void (*) PARAMS ((void))) target_ignore);
481 de_fault (to_terminal_info, default_terminal_info);
482 de_fault (to_kill, (void (*) PARAMS((void))) noprocess);
483 de_fault (to_load, (void (*) PARAMS((char *, int))) tcomplain);
484 de_fault (to_lookup_symbol, (int (*) PARAMS ((char *, CORE_ADDR *))) nosymbol);
485 de_fault (to_create_inferior, maybe_kill_then_create_inferior);
486 de_fault (to_post_startup_inferior, (void (*) PARAMS ((int))) target_ignore);
487 de_fault (to_acknowledge_created_inferior, (void (*) PARAMS((int))) target_ignore);
488 de_fault (to_clone_and_follow_inferior, default_clone_and_follow_inferior);
489 de_fault (to_post_follow_inferior_by_clone, (void (*) PARAMS ((void))) target_ignore);
490 de_fault (to_insert_fork_catchpoint, (int (*) PARAMS ((int))) tcomplain);
491 de_fault (to_remove_fork_catchpoint, (int (*) PARAMS ((int))) tcomplain);
492 de_fault (to_insert_vfork_catchpoint, (int (*) PARAMS ((int))) tcomplain);
493 de_fault (to_remove_vfork_catchpoint, (int (*) PARAMS ((int))) tcomplain);
494 de_fault (to_has_forked, (int (*) PARAMS ((int, int *))) return_zero);
495 de_fault (to_has_vforked, (int (*) PARAMS ((int, int *))) return_zero);
496 de_fault (to_can_follow_vfork_prior_to_exec, (int (*) PARAMS ((void ))) return_zero);
497 de_fault (to_post_follow_vfork, (void (*) PARAMS ((int, int, int, int))) target_ignore);
498 de_fault (to_insert_exec_catchpoint, (int (*) PARAMS ((int))) tcomplain);
499 de_fault (to_remove_exec_catchpoint, (int (*) PARAMS ((int))) tcomplain);
500 de_fault (to_has_execd, (int (*) PARAMS ((int, char **))) return_zero);
501 de_fault (to_reported_exec_events_per_exec_call, (int (*) PARAMS ((void))) return_one);
502 de_fault (to_has_syscall_event, (int (*) PARAMS ((int, enum target_waitkind *, int *))) return_zero);
503 de_fault (to_has_exited, (int (*) PARAMS ((int, int, int *))) return_zero);
504 de_fault (to_mourn_inferior, (void (*) PARAMS ((void))) noprocess);
505 de_fault (to_can_run, return_zero);
506 de_fault (to_notice_signals, (void (*) PARAMS((int))) target_ignore);
507 de_fault (to_thread_alive, (int (*) PARAMS((int))) target_ignore);
508 de_fault (to_stop, (void (*) PARAMS((void))) target_ignore);
509 de_fault (to_query, (int (*) PARAMS((char, char*, char *, int *))) target_ignore);
510 de_fault (to_enable_exception_callback, (struct symtab_and_line * (*) PARAMS((enum exception_event_kind, int))) nosupport_runtime);
511 de_fault (to_get_current_exception_event, (struct exception_event_record * (*) PARAMS((void))) nosupport_runtime);
513 de_fault (to_pid_to_exec_file, (char* (*) PARAMS((int))) return_zero);
514 de_fault (to_core_file_to_sym_file, (char* (*) PARAMS ((char *))) return_zero);
518 /* Go through the target stack from top to bottom, copying over zero entries in
519 current_target. In effect, we are doing class inheritance through the
520 pushed target vectors. */
523 update_current_target ()
525 struct target_stack_item *item;
526 struct target_ops *t;
528 /* First, reset current_target */
529 memset (¤t_target, 0, sizeof current_target);
531 for (item = target_stack; item; item = item->next)
533 t = item->target_ops;
535 #define INHERIT(FIELD, TARGET) \
536 if (!current_target.FIELD) \
537 current_target.FIELD = TARGET->FIELD
539 INHERIT (to_shortname, t);
540 INHERIT (to_longname, t);
542 INHERIT (to_open, t);
543 INHERIT (to_close, t);
544 INHERIT (to_attach, t);
545 INHERIT (to_post_attach, t);
546 INHERIT (to_require_attach, t);
547 INHERIT (to_detach, t);
548 INHERIT (to_require_detach, t);
549 INHERIT (to_resume, t);
550 INHERIT (to_wait, t);
551 INHERIT (to_post_wait, t);
552 INHERIT (to_fetch_registers, t);
553 INHERIT (to_store_registers, t);
554 INHERIT (to_prepare_to_store, t);
555 INHERIT (to_xfer_memory, t);
556 INHERIT (to_files_info, t);
557 INHERIT (to_insert_breakpoint, t);
558 INHERIT (to_remove_breakpoint, t);
559 INHERIT (to_terminal_init, t);
560 INHERIT (to_terminal_inferior, t);
561 INHERIT (to_terminal_ours_for_output, t);
562 INHERIT (to_terminal_ours, t);
563 INHERIT (to_terminal_info, t);
564 INHERIT (to_kill, t);
565 INHERIT (to_load, t);
566 INHERIT (to_lookup_symbol, t);
567 INHERIT (to_create_inferior, t);
568 INHERIT (to_post_startup_inferior, t);
569 INHERIT (to_acknowledge_created_inferior, t);
570 INHERIT (to_clone_and_follow_inferior, t);
571 INHERIT (to_post_follow_inferior_by_clone, t);
572 INHERIT (to_insert_fork_catchpoint, t);
573 INHERIT (to_remove_fork_catchpoint, t);
574 INHERIT (to_insert_vfork_catchpoint, t);
575 INHERIT (to_remove_vfork_catchpoint, t);
576 INHERIT (to_has_forked, t);
577 INHERIT (to_has_vforked, t);
578 INHERIT (to_can_follow_vfork_prior_to_exec, t);
579 INHERIT (to_post_follow_vfork, t);
580 INHERIT (to_insert_exec_catchpoint, t);
581 INHERIT (to_remove_exec_catchpoint, t);
582 INHERIT (to_has_execd, t);
583 INHERIT (to_reported_exec_events_per_exec_call, t);
584 INHERIT (to_has_syscall_event, t);
585 INHERIT (to_has_exited, t);
586 INHERIT (to_mourn_inferior, t);
587 INHERIT (to_can_run, t);
588 INHERIT (to_notice_signals, t);
589 INHERIT (to_thread_alive, t);
590 INHERIT (to_stop, t);
591 INHERIT (to_query, t);
592 INHERIT (to_enable_exception_callback, t);
593 INHERIT (to_get_current_exception_event, t);
594 INHERIT (to_pid_to_exec_file, t);
595 INHERIT (to_core_file_to_sym_file, t);
596 INHERIT (to_stratum, t);
597 INHERIT (DONT_USE, t);
598 INHERIT (to_has_all_memory, t);
599 INHERIT (to_has_memory, t);
600 INHERIT (to_has_stack, t);
601 INHERIT (to_has_registers, t);
602 INHERIT (to_has_execution, t);
603 INHERIT (to_has_thread_control, t);
604 INHERIT (to_sections, t);
605 INHERIT (to_sections_end, t);
606 INHERIT (to_magic, t);
612 /* Push a new target type into the stack of the existing target accessors,
613 possibly superseding some of the existing accessors.
615 Result is zero if the pushed target ended up on top of the stack,
616 nonzero if at least one target is on top of it.
618 Rather than allow an empty stack, we always have the dummy target at
619 the bottom stratum, so we can call the function vectors without
624 struct target_ops *t;
626 struct target_stack_item *cur, *prev, *tmp;
628 /* Check magic number. If wrong, it probably means someone changed
629 the struct definition, but not all the places that initialize one. */
630 if (t->to_magic != OPS_MAGIC)
632 fprintf_unfiltered(gdb_stderr,
633 "Magic number of %s target struct wrong\n",
638 /* Find the proper stratum to install this target in. */
640 for (prev = NULL, cur = target_stack; cur; prev = cur, cur = cur->next)
642 if ((int)(t->to_stratum) >= (int)(cur->target_ops->to_stratum))
646 /* If there's already targets at this stratum, remove them. */
649 while (t->to_stratum == cur->target_ops->to_stratum)
651 /* There's already something on this stratum. Close it off. */
652 if (cur->target_ops->to_close)
653 (cur->target_ops->to_close) (0);
655 prev->next = cur->next; /* Unchain old target_ops */
657 target_stack = cur->next; /* Unchain first on list */
663 /* We have removed all targets in our stratum, now add the new one. */
665 tmp = (struct target_stack_item *)
666 xmalloc (sizeof (struct target_stack_item));
675 update_current_target ();
677 cleanup_target (¤t_target); /* Fill in the gaps */
679 #ifdef MAINTENANCE_CMDS
681 setup_target_debug ();
687 /* Remove a target_ops vector from the stack, wherever it may be.
688 Return how many times it was removed (0 or 1). */
692 struct target_ops *t;
694 struct target_stack_item *cur, *prev;
697 t->to_close (0); /* Let it clean up */
699 /* Look for the specified target. Note that we assume that a target
700 can only occur once in the target stack. */
702 for (cur = target_stack, prev = NULL; cur; prev = cur, cur = cur->next)
703 if (cur->target_ops == t)
707 return 0; /* Didn't find target_ops, quit now */
709 /* Unchain the target */
712 target_stack = cur->next;
714 prev->next = cur->next;
716 free (cur); /* Release the target_stack_item */
718 update_current_target ();
719 cleanup_target (¤t_target);
727 (current_target.to_close)(0); /* Let it clean up */
728 if (unpush_target (target_stack->target_ops) == 1)
731 fprintf_unfiltered(gdb_stderr,
732 "pop_target couldn't find target %s\n",
733 current_target.to_shortname);
738 #define MIN(A, B) (((A) <= (B)) ? (A) : (B))
740 /* target_read_string -- read a null terminated string, up to LEN bytes,
741 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
742 Set *STRING to a pointer to malloc'd memory containing the data; the caller
743 is responsible for freeing it. Return the number of bytes successfully
747 target_read_string (memaddr, string, len, errnop)
753 int tlen, origlen, offset, i;
757 int buffer_allocated;
759 unsigned int nbytes_read = 0;
761 /* Small for testing. */
762 buffer_allocated = 4;
763 buffer = xmalloc (buffer_allocated);
770 tlen = MIN (len, 4 - (memaddr & 3));
771 offset = memaddr & 3;
773 errcode = target_xfer_memory (memaddr & ~3, buf, 4, 0, NULL);
776 /* The transfer request might have crossed the boundary to an
777 unallocated region of memory. Retry the transfer, requesting
781 errcode = target_xfer_memory (memaddr, buf, 1, 0, NULL);
786 if (bufptr - buffer + tlen > buffer_allocated)
789 bytes = bufptr - buffer;
790 buffer_allocated *= 2;
791 buffer = xrealloc (buffer, buffer_allocated);
792 bufptr = buffer + bytes;
795 for (i = 0; i < tlen; i++)
797 *bufptr++ = buf[i + offset];
798 if (buf[i + offset] == '\000')
800 nbytes_read += i + 1;
817 /* Read LEN bytes of target memory at address MEMADDR, placing the results in
818 GDB's memory at MYADDR. Returns either 0 for success or an errno value
821 If an error occurs, no guarantee is made about the contents of the data at
822 MYADDR. In particular, the caller should not depend upon partial reads
823 filling the buffer with good data. There is no way for the caller to know
824 how much good data might have been transfered anyway. Callers that can
825 deal with partial reads should call target_read_memory_partial. */
828 target_read_memory (memaddr, myaddr, len)
833 return target_xfer_memory (memaddr, myaddr, len, 0, NULL);
837 target_read_memory_section (memaddr, myaddr, len, bfd_section)
841 asection *bfd_section;
843 return target_xfer_memory (memaddr, myaddr, len, 0, bfd_section);
846 /* Read LEN bytes of target memory at address MEMADDR, placing the results
847 in GDB's memory at MYADDR. Returns a count of the bytes actually read,
848 and optionally an errno value in the location pointed to by ERRNOPTR
849 if ERRNOPTR is non-null. */
852 target_read_memory_partial (memaddr, myaddr, len, errnoptr)
858 int nread; /* Number of bytes actually read. */
859 int errcode; /* Error from last read. */
861 /* First try a complete read. */
862 errcode = target_xfer_memory (memaddr, myaddr, len, 0, NULL);
870 /* Loop, reading one byte at a time until we get as much as we can. */
871 for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
873 errcode = target_xfer_memory (memaddr++, myaddr++, 1, 0, NULL);
875 /* If an error, the last read was unsuccessful, so adjust count. */
881 if (errnoptr != NULL)
889 target_write_memory (memaddr, myaddr, len)
894 return target_xfer_memory (memaddr, myaddr, len, 1, NULL);
897 /* This variable is used to pass section information down to targets. This
898 *should* be done by adding an argument to the target_xfer_memory function
899 of all the targets, but I didn't feel like changing 50+ files. */
901 asection *target_memory_bfd_section = NULL;
903 /* Move memory to or from the targets. Iterate until all of it has
904 been moved, if necessary. The top target gets priority; anything
905 it doesn't want, is offered to the next one down, etc. Note the
906 business with curlen: if an early target says "no, but I have a
907 boundary overlapping this xfer" then we shorten what we offer to
908 the subsequent targets so the early guy will get a chance at the
909 tail before the subsequent ones do.
911 Result is 0 or errno value. */
914 target_xfer_memory (memaddr, myaddr, len, write, bfd_section)
919 asection *bfd_section;
923 struct target_ops *t;
924 struct target_stack_item *item;
926 /* Zero length requests are ok and require no work. */
930 target_memory_bfd_section = bfd_section;
932 /* to_xfer_memory is not guaranteed to set errno, even when it returns
936 /* The quick case is that the top target does it all. */
937 res = current_target.to_xfer_memory
938 (memaddr, myaddr, len, write, ¤t_target);
944 /* If res <= 0 then we call it again in the loop. Ah well. */
948 curlen = len; /* Want to do it all */
949 for (item = target_stack; item; item = item->next)
951 t = item->target_ops;
952 if (!t->to_has_memory)
955 res = t->to_xfer_memory (memaddr, myaddr, curlen, write, t);
957 break; /* Handled all or part of xfer */
958 if (t->to_has_all_memory)
964 /* If this address is for nonexistent memory,
965 read zeros if reading, or do nothing if writing. Return error. */
967 memset (myaddr, 0, len);
978 return 0; /* We managed to cover it all somehow. */
984 target_info (args, from_tty)
988 struct target_ops *t;
989 struct target_stack_item *item;
992 if (symfile_objfile != NULL)
993 printf_unfiltered ("Symbols from \"%s\".\n", symfile_objfile->name);
995 #ifdef FILES_INFO_HOOK
996 if (FILES_INFO_HOOK ())
1000 for (item = target_stack; item; item = item->next)
1002 t = item->target_ops;
1004 if (!t->to_has_memory)
1007 if ((int)(t->to_stratum) <= (int)dummy_stratum)
1010 printf_unfiltered("\tWhile running this, GDB does not access memory from...\n");
1011 printf_unfiltered("%s:\n", t->to_longname);
1012 (t->to_files_info)(t);
1013 has_all_mem = t->to_has_all_memory;
1017 /* This is to be called by the open routine before it does
1021 target_preopen (from_tty)
1026 if (target_has_execution)
1028 if (query ("A program is being debugged already. Kill it? "))
1031 error ("Program not killed.");
1034 /* Calling target_kill may remove the target from the stack. But if
1035 it doesn't (which seems like a win for UDI), remove it now. */
1037 if (target_has_execution)
1041 /* Detach a target after doing deferred register stores. */
1044 target_detach (args, from_tty)
1048 /* Handle any optimized stores to the inferior. */
1049 #ifdef DO_DEFERRED_STORES
1052 (current_target.to_detach) (args, from_tty);
1056 target_link (modname, t_reloc)
1060 if (STREQ(current_target.to_shortname, "rombug"))
1062 (current_target.to_lookup_symbol) (modname, t_reloc);
1064 error("Unable to link to %s and get relocation in rombug", modname);
1067 *t_reloc = (CORE_ADDR)-1;
1070 /* Look through the list of possible targets for a target that can
1071 execute a run or attach command without any other data. This is
1072 used to locate the default process stratum.
1074 Result is always valid (error() is called for errors). */
1076 static struct target_ops *
1077 find_default_run_target (do_mesg)
1080 struct target_ops **t;
1081 struct target_ops *runable = NULL;
1086 for (t = target_structs; t < target_structs + target_struct_size;
1089 if ((*t)->to_can_run && target_can_run(*t))
1097 error ("Don't know how to %s. Try \"help target\".", do_mesg);
1103 find_default_attach (args, from_tty)
1107 struct target_ops *t;
1109 t = find_default_run_target("attach");
1110 (t->to_attach) (args, from_tty);
1115 find_default_require_attach (args, from_tty)
1119 struct target_ops *t;
1121 t = find_default_run_target("require_attach");
1122 (t->to_require_attach) (args, from_tty);
1127 find_default_require_detach (pid, args, from_tty)
1132 struct target_ops *t;
1134 t = find_default_run_target("require_detach");
1135 (t->to_require_detach) (pid, args, from_tty);
1140 find_default_create_inferior (exec_file, allargs, env)
1145 struct target_ops *t;
1147 t = find_default_run_target("run");
1148 (t->to_create_inferior) (exec_file, allargs, env);
1153 find_default_clone_and_follow_inferior (child_pid, followed_child)
1155 int *followed_child;
1157 struct target_ops *t;
1159 t = find_default_run_target("run");
1160 (t->to_clone_and_follow_inferior) (child_pid, followed_child);
1179 struct target_ops **t;
1180 struct target_ops *runable = NULL;
1185 for (t = target_structs; t < target_structs + target_struct_size;
1188 if ((*t)->to_stratum == core_stratum)
1195 return(count == 1 ? runable : NULL);
1198 /* The inferior process has died. Long live the inferior! */
1201 generic_mourn_inferior ()
1203 extern int show_breakpoint_hit_counts;
1207 breakpoint_init_inferior (inf_exited);
1208 registers_changed ();
1210 #ifdef CLEAR_DEFERRED_STORES
1211 /* Delete any pending stores to the inferior... */
1212 CLEAR_DEFERRED_STORES;
1215 reopen_exec_file ();
1216 reinit_frame_cache ();
1218 /* It is confusing to the user for ignore counts to stick around
1219 from previous runs of the inferior. So clear them. */
1220 /* However, it is more confusing for the ignore counts to disappear when
1221 using hit counts. So don't clear them if we're counting hits. */
1222 if (!show_breakpoint_hit_counts)
1223 breakpoint_clear_ignore_counts ();
1226 /* This table must match in order and size the signals in enum target_signal
1234 {"SIGHUP", "Hangup"},
1235 {"SIGINT", "Interrupt"},
1236 {"SIGQUIT", "Quit"},
1237 {"SIGILL", "Illegal instruction"},
1238 {"SIGTRAP", "Trace/breakpoint trap"},
1239 {"SIGABRT", "Aborted"},
1240 {"SIGEMT", "Emulation trap"},
1241 {"SIGFPE", "Arithmetic exception"},
1242 {"SIGKILL", "Killed"},
1243 {"SIGBUS", "Bus error"},
1244 {"SIGSEGV", "Segmentation fault"},
1245 {"SIGSYS", "Bad system call"},
1246 {"SIGPIPE", "Broken pipe"},
1247 {"SIGALRM", "Alarm clock"},
1248 {"SIGTERM", "Terminated"},
1249 {"SIGURG", "Urgent I/O condition"},
1250 {"SIGSTOP", "Stopped (signal)"},
1251 {"SIGTSTP", "Stopped (user)"},
1252 {"SIGCONT", "Continued"},
1253 {"SIGCHLD", "Child status changed"},
1254 {"SIGTTIN", "Stopped (tty input)"},
1255 {"SIGTTOU", "Stopped (tty output)"},
1256 {"SIGIO", "I/O possible"},
1257 {"SIGXCPU", "CPU time limit exceeded"},
1258 {"SIGXFSZ", "File size limit exceeded"},
1259 {"SIGVTALRM", "Virtual timer expired"},
1260 {"SIGPROF", "Profiling timer expired"},
1261 {"SIGWINCH", "Window size changed"},
1262 {"SIGLOST", "Resource lost"},
1263 {"SIGUSR1", "User defined signal 1"},
1264 {"SIGUSR2", "User defined signal 2"},
1265 {"SIGPWR", "Power fail/restart"},
1266 {"SIGPOLL", "Pollable event occurred"},
1267 {"SIGWIND", "SIGWIND"},
1268 {"SIGPHONE", "SIGPHONE"},
1269 {"SIGWAITING", "Process's LWPs are blocked"},
1270 {"SIGLWP", "Signal LWP"},
1271 {"SIGDANGER", "Swap space dangerously low"},
1272 {"SIGGRANT", "Monitor mode granted"},
1273 {"SIGRETRACT", "Need to relinquish monitor mode"},
1274 {"SIGMSG", "Monitor mode data available"},
1275 {"SIGSOUND", "Sound completed"},
1276 {"SIGSAK", "Secure attention"},
1277 {"SIGPRIO", "SIGPRIO"},
1278 {"SIG33", "Real-time event 33"},
1279 {"SIG34", "Real-time event 34"},
1280 {"SIG35", "Real-time event 35"},
1281 {"SIG36", "Real-time event 36"},
1282 {"SIG37", "Real-time event 37"},
1283 {"SIG38", "Real-time event 38"},
1284 {"SIG39", "Real-time event 39"},
1285 {"SIG40", "Real-time event 40"},
1286 {"SIG41", "Real-time event 41"},
1287 {"SIG42", "Real-time event 42"},
1288 {"SIG43", "Real-time event 43"},
1289 {"SIG44", "Real-time event 44"},
1290 {"SIG45", "Real-time event 45"},
1291 {"SIG46", "Real-time event 46"},
1292 {"SIG47", "Real-time event 47"},
1293 {"SIG48", "Real-time event 48"},
1294 {"SIG49", "Real-time event 49"},
1295 {"SIG50", "Real-time event 50"},
1296 {"SIG51", "Real-time event 51"},
1297 {"SIG52", "Real-time event 52"},
1298 {"SIG53", "Real-time event 53"},
1299 {"SIG54", "Real-time event 54"},
1300 {"SIG55", "Real-time event 55"},
1301 {"SIG56", "Real-time event 56"},
1302 {"SIG57", "Real-time event 57"},
1303 {"SIG58", "Real-time event 58"},
1304 {"SIG59", "Real-time event 59"},
1305 {"SIG60", "Real-time event 60"},
1306 {"SIG61", "Real-time event 61"},
1307 {"SIG62", "Real-time event 62"},
1308 {"SIG63", "Real-time event 63"},
1310 #if defined(MACH) || defined(__MACH__)
1311 /* Mach exceptions */
1312 {"EXC_BAD_ACCESS", "Could not access memory"},
1313 {"EXC_BAD_INSTRUCTION", "Illegal instruction/operand"},
1314 {"EXC_ARITHMETIC", "Arithmetic exception"},
1315 {"EXC_EMULATION", "Emulation instruction"},
1316 {"EXC_SOFTWARE", "Software generated exception"},
1317 {"EXC_BREAKPOINT", "Breakpoint"},
1319 {NULL, "Unknown signal"},
1320 {NULL, "Internal error: printing TARGET_SIGNAL_DEFAULT"},
1322 /* Last entry, used to check whether the table is the right size. */
1323 {NULL, "TARGET_SIGNAL_MAGIC"}
1326 /* Return the string for a signal. */
1328 target_signal_to_string (sig)
1329 enum target_signal sig;
1331 return signals[sig].string;
1334 /* Return the name for a signal. */
1336 target_signal_to_name (sig)
1337 enum target_signal sig;
1339 if (sig == TARGET_SIGNAL_UNKNOWN)
1340 /* I think the code which prints this will always print it along with
1341 the string, so no need to be verbose. */
1343 return signals[sig].name;
1346 /* Given a name, return its signal. */
1348 target_signal_from_name (name)
1351 enum target_signal sig;
1353 /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
1354 for TARGET_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
1355 questionable; seems like by now people should call it SIGABRT
1358 /* This ugly cast brought to you by the native VAX compiler. */
1359 for (sig = TARGET_SIGNAL_HUP;
1360 signals[sig].name != NULL;
1361 sig = (enum target_signal)((int)sig + 1))
1362 if (STREQ (name, signals[sig].name))
1364 return TARGET_SIGNAL_UNKNOWN;
1367 /* The following functions are to help certain targets deal
1368 with the signal/waitstatus stuff. They could just as well be in
1369 a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
1371 /* Convert host signal to our signals. */
1373 target_signal_from_host (hostsig)
1376 /* A switch statement would make sense but would require special kludges
1377 to deal with the cases where more than one signal has the same number. */
1379 if (hostsig == 0) return TARGET_SIGNAL_0;
1381 #if defined (SIGHUP)
1382 if (hostsig == SIGHUP) return TARGET_SIGNAL_HUP;
1384 #if defined (SIGINT)
1385 if (hostsig == SIGINT) return TARGET_SIGNAL_INT;
1387 #if defined (SIGQUIT)
1388 if (hostsig == SIGQUIT) return TARGET_SIGNAL_QUIT;
1390 #if defined (SIGILL)
1391 if (hostsig == SIGILL) return TARGET_SIGNAL_ILL;
1393 #if defined (SIGTRAP)
1394 if (hostsig == SIGTRAP) return TARGET_SIGNAL_TRAP;
1396 #if defined (SIGABRT)
1397 if (hostsig == SIGABRT) return TARGET_SIGNAL_ABRT;
1399 #if defined (SIGEMT)
1400 if (hostsig == SIGEMT) return TARGET_SIGNAL_EMT;
1402 #if defined (SIGFPE)
1403 if (hostsig == SIGFPE) return TARGET_SIGNAL_FPE;
1405 #if defined (SIGKILL)
1406 if (hostsig == SIGKILL) return TARGET_SIGNAL_KILL;
1408 #if defined (SIGBUS)
1409 if (hostsig == SIGBUS) return TARGET_SIGNAL_BUS;
1411 #if defined (SIGSEGV)
1412 if (hostsig == SIGSEGV) return TARGET_SIGNAL_SEGV;
1414 #if defined (SIGSYS)
1415 if (hostsig == SIGSYS) return TARGET_SIGNAL_SYS;
1417 #if defined (SIGPIPE)
1418 if (hostsig == SIGPIPE) return TARGET_SIGNAL_PIPE;
1420 #if defined (SIGALRM)
1421 if (hostsig == SIGALRM) return TARGET_SIGNAL_ALRM;
1423 #if defined (SIGTERM)
1424 if (hostsig == SIGTERM) return TARGET_SIGNAL_TERM;
1426 #if defined (SIGUSR1)
1427 if (hostsig == SIGUSR1) return TARGET_SIGNAL_USR1;
1429 #if defined (SIGUSR2)
1430 if (hostsig == SIGUSR2) return TARGET_SIGNAL_USR2;
1432 #if defined (SIGCLD)
1433 if (hostsig == SIGCLD) return TARGET_SIGNAL_CHLD;
1435 #if defined (SIGCHLD)
1436 if (hostsig == SIGCHLD) return TARGET_SIGNAL_CHLD;
1438 #if defined (SIGPWR)
1439 if (hostsig == SIGPWR) return TARGET_SIGNAL_PWR;
1441 #if defined (SIGWINCH)
1442 if (hostsig == SIGWINCH) return TARGET_SIGNAL_WINCH;
1444 #if defined (SIGURG)
1445 if (hostsig == SIGURG) return TARGET_SIGNAL_URG;
1448 if (hostsig == SIGIO) return TARGET_SIGNAL_IO;
1450 #if defined (SIGPOLL)
1451 if (hostsig == SIGPOLL) return TARGET_SIGNAL_POLL;
1453 #if defined (SIGSTOP)
1454 if (hostsig == SIGSTOP) return TARGET_SIGNAL_STOP;
1456 #if defined (SIGTSTP)
1457 if (hostsig == SIGTSTP) return TARGET_SIGNAL_TSTP;
1459 #if defined (SIGCONT)
1460 if (hostsig == SIGCONT) return TARGET_SIGNAL_CONT;
1462 #if defined (SIGTTIN)
1463 if (hostsig == SIGTTIN) return TARGET_SIGNAL_TTIN;
1465 #if defined (SIGTTOU)
1466 if (hostsig == SIGTTOU) return TARGET_SIGNAL_TTOU;
1468 #if defined (SIGVTALRM)
1469 if (hostsig == SIGVTALRM) return TARGET_SIGNAL_VTALRM;
1471 #if defined (SIGPROF)
1472 if (hostsig == SIGPROF) return TARGET_SIGNAL_PROF;
1474 #if defined (SIGXCPU)
1475 if (hostsig == SIGXCPU) return TARGET_SIGNAL_XCPU;
1477 #if defined (SIGXFSZ)
1478 if (hostsig == SIGXFSZ) return TARGET_SIGNAL_XFSZ;
1480 #if defined (SIGWIND)
1481 if (hostsig == SIGWIND) return TARGET_SIGNAL_WIND;
1483 #if defined (SIGPHONE)
1484 if (hostsig == SIGPHONE) return TARGET_SIGNAL_PHONE;
1486 #if defined (SIGLOST)
1487 if (hostsig == SIGLOST) return TARGET_SIGNAL_LOST;
1489 #if defined (SIGWAITING)
1490 if (hostsig == SIGWAITING) return TARGET_SIGNAL_WAITING;
1492 #if defined (SIGLWP)
1493 if (hostsig == SIGLWP) return TARGET_SIGNAL_LWP;
1495 #if defined (SIGDANGER)
1496 if (hostsig == SIGDANGER) return TARGET_SIGNAL_DANGER;
1498 #if defined (SIGGRANT)
1499 if (hostsig == SIGGRANT) return TARGET_SIGNAL_GRANT;
1501 #if defined (SIGRETRACT)
1502 if (hostsig == SIGRETRACT) return TARGET_SIGNAL_RETRACT;
1504 #if defined (SIGMSG)
1505 if (hostsig == SIGMSG) return TARGET_SIGNAL_MSG;
1507 #if defined (SIGSOUND)
1508 if (hostsig == SIGSOUND) return TARGET_SIGNAL_SOUND;
1510 #if defined (SIGSAK)
1511 if (hostsig == SIGSAK) return TARGET_SIGNAL_SAK;
1513 #if defined (SIGPRIO)
1514 if (hostsig == SIGPRIO) return TARGET_SIGNAL_PRIO;
1517 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
1518 #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
1519 if (hostsig == _NSIG + EXC_BAD_ACCESS) return TARGET_EXC_BAD_ACCESS;
1521 #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
1522 if (hostsig == _NSIG + EXC_BAD_INSTRUCTION) return TARGET_EXC_BAD_INSTRUCTION;
1524 #if defined (EXC_ARITHMETIC) && defined (_NSIG)
1525 if (hostsig == _NSIG + EXC_ARITHMETIC) return TARGET_EXC_ARITHMETIC;
1527 #if defined (EXC_EMULATION) && defined (_NSIG)
1528 if (hostsig == _NSIG + EXC_EMULATION) return TARGET_EXC_EMULATION;
1530 #if defined (EXC_SOFTWARE) && defined (_NSIG)
1531 if (hostsig == _NSIG + EXC_SOFTWARE) return TARGET_EXC_SOFTWARE;
1533 #if defined (EXC_BREAKPOINT) && defined (_NSIG)
1534 if (hostsig == _NSIG + EXC_BREAKPOINT) return TARGET_EXC_BREAKPOINT;
1537 #if defined (REALTIME_LO)
1538 if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
1539 return (enum target_signal)
1540 (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
1542 return TARGET_SIGNAL_UNKNOWN;
1546 target_signal_to_host (oursig)
1547 enum target_signal oursig;
1551 case TARGET_SIGNAL_0: return 0;
1553 #if defined (SIGHUP)
1554 case TARGET_SIGNAL_HUP: return SIGHUP;
1556 #if defined (SIGINT)
1557 case TARGET_SIGNAL_INT: return SIGINT;
1559 #if defined (SIGQUIT)
1560 case TARGET_SIGNAL_QUIT: return SIGQUIT;
1562 #if defined (SIGILL)
1563 case TARGET_SIGNAL_ILL: return SIGILL;
1565 #if defined (SIGTRAP)
1566 case TARGET_SIGNAL_TRAP: return SIGTRAP;
1568 #if defined (SIGABRT)
1569 case TARGET_SIGNAL_ABRT: return SIGABRT;
1571 #if defined (SIGEMT)
1572 case TARGET_SIGNAL_EMT: return SIGEMT;
1574 #if defined (SIGFPE)
1575 case TARGET_SIGNAL_FPE: return SIGFPE;
1577 #if defined (SIGKILL)
1578 case TARGET_SIGNAL_KILL: return SIGKILL;
1580 #if defined (SIGBUS)
1581 case TARGET_SIGNAL_BUS: return SIGBUS;
1583 #if defined (SIGSEGV)
1584 case TARGET_SIGNAL_SEGV: return SIGSEGV;
1586 #if defined (SIGSYS)
1587 case TARGET_SIGNAL_SYS: return SIGSYS;
1589 #if defined (SIGPIPE)
1590 case TARGET_SIGNAL_PIPE: return SIGPIPE;
1592 #if defined (SIGALRM)
1593 case TARGET_SIGNAL_ALRM: return SIGALRM;
1595 #if defined (SIGTERM)
1596 case TARGET_SIGNAL_TERM: return SIGTERM;
1598 #if defined (SIGUSR1)
1599 case TARGET_SIGNAL_USR1: return SIGUSR1;
1601 #if defined (SIGUSR2)
1602 case TARGET_SIGNAL_USR2: return SIGUSR2;
1604 #if defined (SIGCHLD) || defined (SIGCLD)
1605 case TARGET_SIGNAL_CHLD:
1606 #if defined (SIGCHLD)
1611 #endif /* SIGCLD or SIGCHLD */
1612 #if defined (SIGPWR)
1613 case TARGET_SIGNAL_PWR: return SIGPWR;
1615 #if defined (SIGWINCH)
1616 case TARGET_SIGNAL_WINCH: return SIGWINCH;
1618 #if defined (SIGURG)
1619 case TARGET_SIGNAL_URG: return SIGURG;
1622 case TARGET_SIGNAL_IO: return SIGIO;
1624 #if defined (SIGPOLL)
1625 case TARGET_SIGNAL_POLL: return SIGPOLL;
1627 #if defined (SIGSTOP)
1628 case TARGET_SIGNAL_STOP: return SIGSTOP;
1630 #if defined (SIGTSTP)
1631 case TARGET_SIGNAL_TSTP: return SIGTSTP;
1633 #if defined (SIGCONT)
1634 case TARGET_SIGNAL_CONT: return SIGCONT;
1636 #if defined (SIGTTIN)
1637 case TARGET_SIGNAL_TTIN: return SIGTTIN;
1639 #if defined (SIGTTOU)
1640 case TARGET_SIGNAL_TTOU: return SIGTTOU;
1642 #if defined (SIGVTALRM)
1643 case TARGET_SIGNAL_VTALRM: return SIGVTALRM;
1645 #if defined (SIGPROF)
1646 case TARGET_SIGNAL_PROF: return SIGPROF;
1648 #if defined (SIGXCPU)
1649 case TARGET_SIGNAL_XCPU: return SIGXCPU;
1651 #if defined (SIGXFSZ)
1652 case TARGET_SIGNAL_XFSZ: return SIGXFSZ;
1654 #if defined (SIGWIND)
1655 case TARGET_SIGNAL_WIND: return SIGWIND;
1657 #if defined (SIGPHONE)
1658 case TARGET_SIGNAL_PHONE: return SIGPHONE;
1660 #if defined (SIGLOST)
1661 case TARGET_SIGNAL_LOST: return SIGLOST;
1663 #if defined (SIGWAITING)
1664 case TARGET_SIGNAL_WAITING: return SIGWAITING;
1666 #if defined (SIGLWP)
1667 case TARGET_SIGNAL_LWP: return SIGLWP;
1669 #if defined (SIGDANGER)
1670 case TARGET_SIGNAL_DANGER: return SIGDANGER;
1672 #if defined (SIGGRANT)
1673 case TARGET_SIGNAL_GRANT: return SIGGRANT;
1675 #if defined (SIGRETRACT)
1676 case TARGET_SIGNAL_RETRACT: return SIGRETRACT;
1678 #if defined (SIGMSG)
1679 case TARGET_SIGNAL_MSG: return SIGMSG;
1681 #if defined (SIGSOUND)
1682 case TARGET_SIGNAL_SOUND: return SIGSOUND;
1684 #if defined (SIGSAK)
1685 case TARGET_SIGNAL_SAK: return SIGSAK;
1687 #if defined (SIGPRIO)
1688 case TARGET_SIGNAL_PRIO: return SIGPRIO;
1691 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
1692 #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
1693 case TARGET_EXC_BAD_ACCESS: return _NSIG + EXC_BAD_ACCESS;
1695 #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
1696 case TARGET_EXC_BAD_INSTRUCTION: return _NSIG + EXC_BAD_INSTRUCTION;
1698 #if defined (EXC_ARITHMETIC) && defined (_NSIG)
1699 case TARGET_EXC_ARITHMETIC: return _NSIG + EXC_ARITHMETIC;
1701 #if defined (EXC_EMULATION) && defined (_NSIG)
1702 case TARGET_EXC_EMULATION: return _NSIG + EXC_EMULATION;
1704 #if defined (EXC_SOFTWARE) && defined (_NSIG)
1705 case TARGET_EXC_SOFTWARE: return _NSIG + EXC_SOFTWARE;
1707 #if defined (EXC_BREAKPOINT) && defined (_NSIG)
1708 case TARGET_EXC_BREAKPOINT: return _NSIG + EXC_BREAKPOINT;
1712 #if defined (REALTIME_LO)
1713 if (oursig >= TARGET_SIGNAL_REALTIME_33
1714 && oursig <= TARGET_SIGNAL_REALTIME_63)
1717 (int)oursig - (int)TARGET_SIGNAL_REALTIME_33 + REALTIME_LO;
1718 if (retsig < REALTIME_HI)
1722 /* The user might be trying to do "signal SIGSAK" where this system
1723 doesn't have SIGSAK. */
1724 warning ("Signal %s does not exist on this system.\n",
1725 target_signal_to_name (oursig));
1730 /* Helper function for child_wait and the Lynx derivatives of child_wait.
1731 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1732 translation of that in OURSTATUS. */
1734 store_waitstatus (ourstatus, hoststatus)
1735 struct target_waitstatus *ourstatus;
1738 #ifdef CHILD_SPECIAL_WAITSTATUS
1739 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
1740 if it wants to deal with hoststatus. */
1741 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
1745 if (WIFEXITED (hoststatus))
1747 ourstatus->kind = TARGET_WAITKIND_EXITED;
1748 ourstatus->value.integer = WEXITSTATUS (hoststatus);
1750 else if (!WIFSTOPPED (hoststatus))
1752 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1753 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1757 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1758 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1762 /* In some circumstances we allow a command to specify a numeric
1763 signal. The idea is to keep these circumstances limited so that
1764 users (and scripts) develop portable habits. For comparison,
1765 POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
1766 numeric signal at all is obscelescent. We are slightly more
1767 lenient and allow 1-15 which should match host signal numbers on
1768 most systems. Use of symbolic signal names is strongly encouraged. */
1771 target_signal_from_command (num)
1774 if (num >= 1 && num <= 15)
1775 return (enum target_signal)num;
1776 error ("Only signals 1-15 are valid as numeric signals.\n\
1777 Use \"info signals\" for a list of symbolic signals.");
1780 /* Returns zero to leave the inferior alone, one to interrupt it. */
1781 int (*target_activity_function) PARAMS ((void));
1782 int target_activity_fd;
1784 /* Convert a normal process ID to a string. Returns the string in a static
1788 normal_pid_to_str (pid)
1791 static char buf[30];
1793 if (STREQ (current_target.to_shortname, "remote"))
1794 sprintf (buf, "thread %d\0", pid);
1796 sprintf (buf, "process %d\0", pid);
1801 /* Some targets (such as ttrace-based HPUX) don't allow us to request
1802 notification of inferior events such as fork and vork immediately
1803 after the inferior is created. (This because of how gdb gets an
1804 inferior created via invoking a shell to do it. In such a scenario,
1805 if the shell init file has commands in it, the shell will fork and
1806 exec for each of those commands, and we will see each such fork
1809 This function is used by all targets that allow us to request
1810 notification of forks, etc at inferior creation time; e.g., in
1811 target_acknowledge_forked_child.
1814 normal_target_post_startup_inferior (pid)
1817 /* This space intentionally left blank. */
1821 #ifdef MAINTENANCE_CMDS
1822 static struct target_ops debug_target;
1825 debug_to_open (args, from_tty)
1829 debug_target.to_open (args, from_tty);
1831 fprintf_unfiltered (gdb_stderr, "target_open (%s, %d)\n", args, from_tty);
1835 debug_to_close (quitting)
1838 debug_target.to_close (quitting);
1840 fprintf_unfiltered (gdb_stderr, "target_close (%d)\n", quitting);
1844 debug_to_attach (args, from_tty)
1848 debug_target.to_attach (args, from_tty);
1850 fprintf_unfiltered (gdb_stderr, "target_attach (%s, %d)\n", args, from_tty);
1855 debug_to_post_attach (pid)
1858 debug_target.to_post_attach (pid);
1860 fprintf_unfiltered (gdb_stderr, "target_post_attach (%d)\n", pid);
1864 debug_to_require_attach (args, from_tty)
1868 debug_target.to_require_attach (args, from_tty);
1870 fprintf_unfiltered (gdb_stderr,
1871 "target_require_attach (%s, %d)\n", args, from_tty);
1875 debug_to_detach (args, from_tty)
1879 debug_target.to_detach (args, from_tty);
1881 fprintf_unfiltered (gdb_stderr, "target_detach (%s, %d)\n", args, from_tty);
1885 debug_to_require_detach (pid, args, from_tty)
1890 debug_target.to_require_detach (pid, args, from_tty);
1892 fprintf_unfiltered (gdb_stderr,
1893 "target_require_detach (%d, %s, %d)\n", pid, args, from_tty);
1897 debug_to_resume (pid, step, siggnal)
1900 enum target_signal siggnal;
1902 debug_target.to_resume (pid, step, siggnal);
1904 fprintf_unfiltered (gdb_stderr, "target_resume (%d, %s, %s)\n", pid,
1905 step ? "step" : "continue",
1906 target_signal_to_name (siggnal));
1910 debug_to_wait (pid, status)
1912 struct target_waitstatus *status;
1916 retval = debug_target.to_wait (pid, status);
1918 fprintf_unfiltered (gdb_stderr,
1919 "target_wait (%d, status) = %d, ", pid, retval);
1920 fprintf_unfiltered (gdb_stderr, "status->kind = ");
1921 switch (status->kind)
1923 case TARGET_WAITKIND_EXITED:
1924 fprintf_unfiltered (gdb_stderr, "exited, status = %d\n",
1925 status->value.integer);
1927 case TARGET_WAITKIND_STOPPED:
1928 fprintf_unfiltered (gdb_stderr, "stopped, signal = %s\n",
1929 target_signal_to_name (status->value.sig));
1931 case TARGET_WAITKIND_SIGNALLED:
1932 fprintf_unfiltered (gdb_stderr, "signalled, signal = %s\n",
1933 target_signal_to_name (status->value.sig));
1935 case TARGET_WAITKIND_LOADED:
1936 fprintf_unfiltered (gdb_stderr, "loaded\n");
1938 case TARGET_WAITKIND_FORKED:
1939 fprintf_unfiltered (gdb_stderr, "forked\n");
1941 case TARGET_WAITKIND_VFORKED:
1942 fprintf_unfiltered (gdb_stderr, "vforked\n");
1944 case TARGET_WAITKIND_EXECD:
1945 fprintf_unfiltered (gdb_stderr, "execd\n");
1947 case TARGET_WAITKIND_SPURIOUS:
1948 fprintf_unfiltered (gdb_stderr, "spurious\n");
1951 fprintf_unfiltered (gdb_stderr, "unknown???\n");
1959 debug_to_post_wait (pid, status)
1963 debug_target.to_post_wait (pid, status);
1965 fprintf_unfiltered (gdb_stderr, "target_post_wait (%d, %d)\n",
1970 debug_to_fetch_registers (regno)
1973 debug_target.to_fetch_registers (regno);
1975 fprintf_unfiltered (gdb_stderr, "target_fetch_registers (%s)",
1976 regno != -1 ? REGISTER_NAME (regno) : "-1");
1978 fprintf_unfiltered (gdb_stderr, " = 0x%x %d",
1979 (unsigned long) read_register (regno),
1980 read_register (regno));
1981 fprintf_unfiltered (gdb_stderr, "\n");
1985 debug_to_store_registers (regno)
1988 debug_target.to_store_registers (regno);
1990 if (regno >= 0 && regno < NUM_REGS)
1991 fprintf_unfiltered (gdb_stderr, "target_store_registers (%s) = 0x%x %d\n",
1992 REGISTER_NAME (regno),
1993 (unsigned long) read_register (regno),
1994 (unsigned long) read_register (regno));
1996 fprintf_unfiltered (gdb_stderr, "target_store_registers (%d)\n", regno);
2000 debug_to_prepare_to_store ()
2002 debug_target.to_prepare_to_store ();
2004 fprintf_unfiltered (gdb_stderr, "target_prepare_to_store ()\n");
2008 debug_to_xfer_memory (memaddr, myaddr, len, write, target)
2013 struct target_ops *target;
2017 retval = debug_target.to_xfer_memory (memaddr, myaddr, len, write, target);
2019 fprintf_unfiltered (gdb_stderr,
2020 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
2021 (unsigned int) memaddr, /* possable truncate long long */
2022 len, write ? "write" : "read", retval);
2030 fputs_unfiltered (", bytes =", gdb_stderr);
2031 for (i = 0; i < retval; i++)
2033 if ((((long) &(myaddr[i])) & 0xf) == 0)
2034 fprintf_unfiltered (gdb_stderr, "\n");
2035 fprintf_unfiltered (gdb_stderr, " %02x", myaddr[i] & 0xff);
2039 fputc_unfiltered ('\n', gdb_stderr);
2045 debug_to_files_info (target)
2046 struct target_ops *target;
2048 debug_target.to_files_info (target);
2050 fprintf_unfiltered (gdb_stderr, "target_files_info (xxx)\n");
2054 debug_to_insert_breakpoint (addr, save)
2060 retval = debug_target.to_insert_breakpoint (addr, save);
2062 fprintf_unfiltered (gdb_stderr,
2063 "target_insert_breakpoint (0x%x, xxx) = %d\n",
2064 (unsigned long) addr, retval);
2069 debug_to_remove_breakpoint (addr, save)
2075 retval = debug_target.to_remove_breakpoint (addr, save);
2077 fprintf_unfiltered (gdb_stderr,
2078 "target_remove_breakpoint (0x%x, xxx) = %d\n",
2079 (unsigned long)addr, retval);
2084 debug_to_terminal_init ()
2086 debug_target.to_terminal_init ();
2088 fprintf_unfiltered (gdb_stderr, "target_terminal_init ()\n");
2092 debug_to_terminal_inferior ()
2094 debug_target.to_terminal_inferior ();
2096 fprintf_unfiltered (gdb_stderr, "target_terminal_inferior ()\n");
2100 debug_to_terminal_ours_for_output ()
2102 debug_target.to_terminal_ours_for_output ();
2104 fprintf_unfiltered (gdb_stderr, "target_terminal_ours_for_output ()\n");
2108 debug_to_terminal_ours ()
2110 debug_target.to_terminal_ours ();
2112 fprintf_unfiltered (gdb_stderr, "target_terminal_ours ()\n");
2116 debug_to_terminal_info (arg, from_tty)
2120 debug_target.to_terminal_info (arg, from_tty);
2122 fprintf_unfiltered (gdb_stderr, "target_terminal_info (%s, %d)\n", arg,
2129 debug_target.to_kill ();
2131 fprintf_unfiltered (gdb_stderr, "target_kill ()\n");
2135 debug_to_load (args, from_tty)
2139 debug_target.to_load (args, from_tty);
2141 fprintf_unfiltered (gdb_stderr, "target_load (%s, %d)\n", args, from_tty);
2145 debug_to_lookup_symbol (name, addrp)
2151 retval = debug_target.to_lookup_symbol (name, addrp);
2153 fprintf_unfiltered (gdb_stderr, "target_lookup_symbol (%s, xxx)\n", name);
2159 debug_to_create_inferior (exec_file, args, env)
2164 debug_target.to_create_inferior (exec_file, args, env);
2166 fprintf_unfiltered (gdb_stderr, "target_create_inferior (%s, %s, xxx)\n",
2171 debug_to_post_startup_inferior (pid)
2174 debug_target.to_post_startup_inferior (pid);
2176 fprintf_unfiltered (gdb_stderr, "target_post_startup_inferior (%d)\n",
2181 debug_to_acknowledge_created_inferior (pid)
2184 debug_target.to_acknowledge_created_inferior (pid);
2186 fprintf_unfiltered (gdb_stderr, "target_acknowledge_created_inferior (%d)\n",
2191 debug_to_clone_and_follow_inferior (child_pid, followed_child)
2193 int *followed_child;
2195 debug_target.to_clone_and_follow_inferior (child_pid, followed_child);
2197 fprintf_unfiltered (gdb_stderr,
2198 "target_clone_and_follow_inferior (%d, %d)\n",
2199 child_pid, *followed_child);
2203 debug_to_post_follow_inferior_by_clone ()
2205 debug_target.to_post_follow_inferior_by_clone ();
2207 fprintf_unfiltered (gdb_stderr, "target_post_follow_inferior_by_clone ()\n");
2211 debug_to_insert_fork_catchpoint (pid)
2216 retval = debug_target.to_insert_fork_catchpoint (pid);
2218 fprintf_unfiltered (gdb_stderr, "target_insert_fork_catchpoint (%d) = %d\n",
2225 debug_to_remove_fork_catchpoint (pid)
2230 retval = debug_target.to_remove_fork_catchpoint (pid);
2232 fprintf_unfiltered (gdb_stderr, "target_remove_fork_catchpoint (%d) = %d\n",
2239 debug_to_insert_vfork_catchpoint (pid)
2244 retval = debug_target.to_insert_vfork_catchpoint (pid);
2246 fprintf_unfiltered (gdb_stderr, "target_insert_vfork_catchpoint (%d)= %d\n",
2253 debug_to_remove_vfork_catchpoint (pid)
2258 retval = debug_target.to_remove_vfork_catchpoint (pid);
2260 fprintf_unfiltered (gdb_stderr, "target_remove_vfork_catchpoint (%d) = %d\n",
2267 debug_to_has_forked (pid, child_pid)
2273 has_forked = debug_target.to_has_forked (pid, child_pid);
2275 fprintf_unfiltered (gdb_stderr, "target_has_forked (%d, %d) = %d\n",
2276 pid, *child_pid, has_forked);
2282 debug_to_has_vforked (pid, child_pid)
2288 has_vforked = debug_target.to_has_vforked (pid, child_pid);
2290 fprintf_unfiltered (gdb_stderr, "target_has_vforked (%d, %d) = %d\n",
2291 pid, *child_pid, has_vforked);
2297 debug_to_can_follow_vfork_prior_to_exec ()
2299 int can_immediately_follow_vfork;
2301 can_immediately_follow_vfork = debug_target.to_can_follow_vfork_prior_to_exec ();
2303 fprintf_unfiltered (gdb_stderr, "target_can_follow_vfork_prior_to_exec () = %d\n",
2304 can_immediately_follow_vfork);
2306 return can_immediately_follow_vfork;
2310 debug_to_post_follow_vfork (parent_pid, followed_parent, child_pid, followed_child)
2312 int followed_parent;
2316 debug_target.to_post_follow_vfork (parent_pid, followed_parent, child_pid, followed_child);
2318 fprintf_unfiltered (gdb_stderr,
2319 "target_post_follow_vfork (%d, %d, %d, %d)\n",
2320 parent_pid, followed_parent, child_pid, followed_child);
2324 debug_to_insert_exec_catchpoint (pid)
2329 retval = debug_target.to_insert_exec_catchpoint (pid);
2331 fprintf_unfiltered (gdb_stderr, "target_insert_exec_catchpoint (%d) = %d\n",
2338 debug_to_remove_exec_catchpoint (pid)
2343 retval = debug_target.to_remove_exec_catchpoint (pid);
2345 fprintf_unfiltered (gdb_stderr, "target_remove_exec_catchpoint (%d) = %d\n",
2352 debug_to_has_execd (pid, execd_pathname)
2354 char ** execd_pathname;
2358 has_execd = debug_target.to_has_execd (pid, execd_pathname);
2360 fprintf_unfiltered (gdb_stderr, "target_has_execd (%d, %s) = %d\n",
2361 pid, *execd_pathname, has_execd);
2367 debug_to_reported_exec_events_per_exec_call ()
2369 int reported_exec_events;
2371 reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2373 fprintf_unfiltered (gdb_stderr,
2374 "target_reported_exec_events_per_exec_call () = %d\n",
2375 reported_exec_events);
2377 return reported_exec_events;
2381 debug_to_has_syscall_event (pid, kind, syscall_id)
2383 enum target_waitkind * kind;
2386 int has_syscall_event;
2387 char * kind_spelling = "??";
2389 has_syscall_event = debug_target.to_has_syscall_event (pid, kind, syscall_id);
2390 if (has_syscall_event)
2394 case TARGET_WAITKIND_SYSCALL_ENTRY:
2395 kind_spelling = "SYSCALL_ENTRY";
2397 case TARGET_WAITKIND_SYSCALL_RETURN:
2398 kind_spelling = "SYSCALL_RETURN";
2405 fprintf_unfiltered (gdb_stderr,
2406 "target_has_syscall_event (%d, %s, %d) = %d\n",
2407 pid, kind_spelling, *syscall_id, has_syscall_event);
2409 return has_syscall_event;
2413 debug_to_has_exited (pid, wait_status, exit_status)
2420 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2422 fprintf_unfiltered (gdb_stderr, "target_has_exited (%d, %d, %d) = %d\n",
2423 pid, wait_status, *exit_status, has_exited);
2429 debug_to_mourn_inferior ()
2431 debug_target.to_mourn_inferior ();
2433 fprintf_unfiltered (gdb_stderr, "target_mourn_inferior ()\n");
2441 retval = debug_target.to_can_run ();
2443 fprintf_unfiltered (gdb_stderr, "target_can_run () = %d\n", retval);
2449 debug_to_notice_signals (pid)
2452 debug_target.to_notice_signals (pid);
2454 fprintf_unfiltered (gdb_stderr, "target_notice_signals (%d)\n", pid);
2458 debug_to_thread_alive (pid)
2463 retval = debug_target.to_thread_alive (pid);
2465 fprintf_unfiltered (gdb_stderr, "target_thread_alive (%d) = %d\n",
2474 debug_target.to_stop ();
2476 fprintf_unfiltered (gdb_stderr, "target_stop ()\n");
2480 debug_to_query (type, req, resp, siz)
2488 retval = debug_target.to_query (type, req, resp, siz);
2490 fprintf_unfiltered (stderr, "target_query (%c, %s, %s, %d) = %d\n", type, req, resp, *siz, retval);
2495 static struct symtab_and_line *
2496 debug_to_enable_exception_callback (kind, enable)
2497 enum exception_event_kind kind;
2500 debug_target.to_enable_exception_callback (kind, enable);
2502 fprintf_unfiltered (gdb_stderr,
2503 "target get_exception_callback_sal (%d, %d)\n",
2507 static struct exception_event_record *
2508 debug_to_get_current_exception_event ()
2510 debug_target.to_get_current_exception_event();
2512 fprintf_unfiltered (gdb_stderr, "target get_current_exception_event ()\n");
2516 debug_to_pid_to_exec_file (pid)
2521 exec_file = debug_target.to_pid_to_exec_file (pid);
2523 fprintf_unfiltered (gdb_stderr, "target_pid_to_exec_file (%d) = %s\n",
2530 debug_to_core_file_to_sym_file (core)
2535 sym_file = debug_target.to_core_file_to_sym_file (core);
2537 fprintf_unfiltered (gdb_stderr, "target_core_file_to_sym_file (%s) = %s\n",
2544 setup_target_debug ()
2546 memcpy (&debug_target, ¤t_target, sizeof debug_target);
2548 current_target.to_open = debug_to_open;
2549 current_target.to_close = debug_to_close;
2550 current_target.to_attach = debug_to_attach;
2551 current_target.to_post_attach = debug_to_post_attach;
2552 current_target.to_require_attach = debug_to_require_attach;
2553 current_target.to_detach = debug_to_detach;
2554 current_target.to_require_detach = debug_to_require_detach;
2555 current_target.to_resume = debug_to_resume;
2556 current_target.to_wait = debug_to_wait;
2557 current_target.to_post_wait = debug_to_post_wait;
2558 current_target.to_fetch_registers = debug_to_fetch_registers;
2559 current_target.to_store_registers = debug_to_store_registers;
2560 current_target.to_prepare_to_store = debug_to_prepare_to_store;
2561 current_target.to_xfer_memory = debug_to_xfer_memory;
2562 current_target.to_files_info = debug_to_files_info;
2563 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2564 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
2565 current_target.to_terminal_init = debug_to_terminal_init;
2566 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2567 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2568 current_target.to_terminal_ours = debug_to_terminal_ours;
2569 current_target.to_terminal_info = debug_to_terminal_info;
2570 current_target.to_kill = debug_to_kill;
2571 current_target.to_load = debug_to_load;
2572 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2573 current_target.to_create_inferior = debug_to_create_inferior;
2574 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2575 current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
2576 current_target.to_clone_and_follow_inferior = debug_to_clone_and_follow_inferior;
2577 current_target.to_post_follow_inferior_by_clone = debug_to_post_follow_inferior_by_clone;
2578 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2579 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2580 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2581 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
2582 current_target.to_has_forked = debug_to_has_forked;
2583 current_target.to_has_vforked = debug_to_has_vforked;
2584 current_target.to_can_follow_vfork_prior_to_exec = debug_to_can_follow_vfork_prior_to_exec;
2585 current_target.to_post_follow_vfork = debug_to_post_follow_vfork;
2586 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2587 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
2588 current_target.to_has_execd = debug_to_has_execd;
2589 current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
2590 current_target.to_has_syscall_event = debug_to_has_syscall_event;
2591 current_target.to_has_exited = debug_to_has_exited;
2592 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2593 current_target.to_can_run = debug_to_can_run;
2594 current_target.to_notice_signals = debug_to_notice_signals;
2595 current_target.to_thread_alive = debug_to_thread_alive;
2596 current_target.to_stop = debug_to_stop;
2597 current_target.to_query = debug_to_query;
2598 current_target.to_enable_exception_callback = debug_to_enable_exception_callback;
2599 current_target.to_get_current_exception_event = debug_to_get_current_exception_event;
2600 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
2601 current_target.to_core_file_to_sym_file = debug_to_core_file_to_sym_file;
2604 #endif /* MAINTENANCE_CMDS */
2606 static char targ_desc[] =
2607 "Names of targets and files being debugged.\n\
2608 Shows the entire stack of targets currently in use (including the exec-file,\n\
2609 core-file, and process, if any), as well as the symbol file name.";
2612 initialize_targets ()
2614 push_target (&dummy_target);
2616 add_info ("target", target_info, targ_desc);
2617 add_info ("files", target_info, targ_desc);
2619 #ifdef MAINTENANCE_CMDS
2621 add_set_cmd ("targetdebug", class_maintenance, var_zinteger,
2622 (char *)&targetdebug,
2623 "Set target debugging.\n\
2624 When non-zero, target debugging is enabled.", &setlist),
2628 if (!STREQ (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC"))