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