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