(elf_core_file_p): Move the call to elf_backend_object_p to allow the correct
[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 279{
8a3fe4f8 280 error (_("You can't do that when your target is `%s'"),
c906108c
SS
281 current_target.to_shortname);
282}
283
284void
fba45db2 285noprocess (void)
c906108c 286{
8a3fe4f8 287 error (_("You can't do that without a process to debug."));
c906108c
SS
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
8a3fe4f8 302 error (_("No run-time support for this"));
c906108c
SS
303}
304
305
c906108c 306static void
fba45db2 307default_terminal_info (char *args, int from_tty)
c906108c 308{
a3f17187 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 {
a3f17187 322 printf_unfiltered (_("You are already running a program:\n"));
c906108c 323 target_files_info ();
c5aa993b
JM
324 if (query ("Kill it? "))
325 {
326 target_kill ();
327 if (target_has_execution)
8a3fe4f8 328 error (_("Killing the program did not help."));
c5aa993b
JM
329 return;
330 }
331 else
332 {
8a3fe4f8 333 error (_("Program not killed."));
c5aa993b 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);
e2e0b3e5 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);
e2e0b3e5 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
10e2d419 998target_read_memory (CORE_ADDR memaddr, bfd_byte *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
10e2d419 1008target_write_memory (CORE_ADDR memaddr, const bfd_byte *myaddr, int len)
c906108c 1009{
10e2d419
AC
1010 bfd_byte *bytes = alloca (len);
1011 memcpy (bytes, myaddr, len);
0779438d
AC
1012 if (target_xfer_partial_p ())
1013 return xfer_using_stratum (TARGET_OBJECT_MEMORY, NULL,
10e2d419 1014 memaddr, len, NULL, bytes);
0779438d 1015 else
10e2d419 1016 return target_xfer_memory (memaddr, bytes, len, 1);
c906108c 1017}
c5aa993b 1018
4aa7a7f5
JJ
1019#ifndef target_stopped_data_address_p
1020int
1021target_stopped_data_address_p (struct target_ops *target)
1022{
aa869812
AC
1023 if (target->to_stopped_data_address
1024 == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero)
4aa7a7f5 1025 return 0;
aa869812
AC
1026 if (target->to_stopped_data_address == debug_to_stopped_data_address
1027 && (debug_target.to_stopped_data_address
1028 == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero))
1029 return 0;
1030 return 1;
4aa7a7f5
JJ
1031}
1032#endif
1033
3a11626d
MS
1034static int trust_readonly = 0;
1035
67e0617e
C
1036/* Move memory to or from the targets. The top target gets priority;
1037 if it cannot handle it, it is offered to the next one down, etc.
c906108c 1038
67e0617e 1039 Result is -1 on error, or the number of bytes transfered. */
c906108c 1040
4930751a 1041int
29e57380
C
1042do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
1043 struct mem_attrib *attrib)
c906108c 1044{
c906108c 1045 int res;
4930751a 1046 int done = 0;
c906108c 1047 struct target_ops *t;
c906108c
SS
1048
1049 /* Zero length requests are ok and require no work. */
1050 if (len == 0)
1051 return 0;
1052
c8e73a31
AC
1053 /* deprecated_xfer_memory is not guaranteed to set errno, even when
1054 it returns 0. */
c906108c
SS
1055 errno = 0;
1056
3a11626d
MS
1057 if (!write && trust_readonly)
1058 {
8db32d44 1059 struct section_table *secp;
2ceb85d0
BE
1060 /* User-settable option, "trust-readonly-sections". If true,
1061 then memory from any SEC_READONLY bfd section may be read
8db32d44
AC
1062 directly from the bfd file. */
1063 secp = target_section_by_addr (&current_target, memaddr);
1064 if (secp != NULL
1065 && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1066 & SEC_READONLY))
1067 return xfer_memory (memaddr, myaddr, len, 0, attrib, &current_target);
3a11626d
MS
1068 }
1069
67e0617e 1070 /* The quick case is that the top target can handle the transfer. */
c8e73a31 1071 res = current_target.deprecated_xfer_memory
29e57380 1072 (memaddr, myaddr, len, write, attrib, &current_target);
c906108c 1073
67e0617e
C
1074 /* If res <= 0 then we call it again in the loop. Ah well. */
1075 if (res <= 0)
c906108c 1076 {
258b763a 1077 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 1078 {
c906108c
SS
1079 if (!t->to_has_memory)
1080 continue;
1081
c8e73a31 1082 res = t->deprecated_xfer_memory (memaddr, myaddr, len, write, attrib, t);
c906108c
SS
1083 if (res > 0)
1084 break; /* Handled all or part of xfer */
1085 if (t->to_has_all_memory)
1086 break;
1087 }
1088
4930751a 1089 if (res <= 0)
67e0617e 1090 return -1;
4930751a 1091 }
67e0617e
C
1092
1093 return res;
4930751a
C
1094}
1095
67e0617e
C
1096
1097/* Perform a memory transfer. Iterate until the entire region has
1098 been transfered.
1099
1100 Result is 0 or errno value. */
1101
4930751a
C
1102static int
1103target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
1104{
1105 int res;
29e57380
C
1106 int reg_len;
1107 struct mem_region *region;
4930751a
C
1108
1109 /* Zero length requests are ok and require no work. */
1110 if (len == 0)
1111 {
1112 return 0;
1113 }
1114
1115 while (len > 0)
1116 {
29e57380
C
1117 region = lookup_mem_region(memaddr);
1118 if (memaddr + len < region->hi)
1119 reg_len = len;
1120 else
1121 reg_len = region->hi - memaddr;
1122
1123 switch (region->attrib.mode)
c906108c 1124 {
29e57380
C
1125 case MEM_RO:
1126 if (write)
1127 return EIO;
1128 break;
1129
1130 case MEM_WO:
c906108c 1131 if (!write)
c906108c 1132 return EIO;
29e57380 1133 break;
c906108c 1134 }
4930751a 1135
29e57380
C
1136 while (reg_len > 0)
1137 {
1138 if (region->attrib.cache)
8add0441 1139 res = dcache_xfer_memory (target_dcache, memaddr, myaddr,
29e57380
C
1140 reg_len, write);
1141 else
8add0441 1142 res = do_xfer_memory (memaddr, myaddr, reg_len, write,
29e57380
C
1143 &region->attrib);
1144
1145 if (res <= 0)
1146 {
1147 /* If this address is for nonexistent memory, read zeros
1148 if reading, or do nothing if writing. Return
1149 error. */
1150 if (!write)
1151 memset (myaddr, 0, len);
1152 if (errno == 0)
1153 return EIO;
1154 else
1155 return errno;
1156 }
1157
1158 memaddr += res;
1159 myaddr += res;
1160 len -= res;
1161 reg_len -= res;
1162 }
c906108c 1163 }
4930751a 1164
c906108c
SS
1165 return 0; /* We managed to cover it all somehow. */
1166}
1167
1168
67e0617e
C
1169/* Perform a partial memory transfer.
1170
1171 Result is -1 on error, or the number of bytes transfered. */
917317f4
JM
1172
1173static int
4930751a 1174target_xfer_memory_partial (CORE_ADDR memaddr, char *myaddr, int len,
917317f4
JM
1175 int write_p, int *err)
1176{
1177 int res;
29e57380
C
1178 int reg_len;
1179 struct mem_region *region;
917317f4
JM
1180
1181 /* Zero length requests are ok and require no work. */
1182 if (len == 0)
1183 {
1184 *err = 0;
1185 return 0;
1186 }
1187
29e57380
C
1188 region = lookup_mem_region(memaddr);
1189 if (memaddr + len < region->hi)
1190 reg_len = len;
1191 else
1192 reg_len = region->hi - memaddr;
1193
1194 switch (region->attrib.mode)
1195 {
1196 case MEM_RO:
1197 if (write_p)
1198 {
1199 *err = EIO;
873406a6 1200 return -1;
29e57380
C
1201 }
1202 break;
1203
1204 case MEM_WO:
1205 if (write_p)
1206 {
1207 *err = EIO;
873406a6 1208 return -1;
29e57380
C
1209 }
1210 break;
1211 }
1212
1213 if (region->attrib.cache)
1214 res = dcache_xfer_memory (target_dcache, memaddr, myaddr,
1215 reg_len, write_p);
1216 else
1217 res = do_xfer_memory (memaddr, myaddr, reg_len, write_p,
1218 &region->attrib);
1219
4930751a 1220 if (res <= 0)
917317f4 1221 {
4930751a
C
1222 if (errno != 0)
1223 *err = errno;
1224 else
1225 *err = EIO;
917317f4 1226
4930751a 1227 return -1;
917317f4
JM
1228 }
1229
4930751a 1230 *err = 0;
67e0617e 1231 return res;
917317f4
JM
1232}
1233
1234int
1235target_read_memory_partial (CORE_ADDR memaddr, char *buf, int len, int *err)
1236{
0779438d 1237 if (target_xfer_partial_p ())
27394598
AC
1238 return target_xfer_partial (target_stack, TARGET_OBJECT_MEMORY, NULL,
1239 buf, NULL, memaddr, len);
0779438d
AC
1240 else
1241 return target_xfer_memory_partial (memaddr, buf, len, 0, err);
917317f4
JM
1242}
1243
1244int
1245target_write_memory_partial (CORE_ADDR memaddr, char *buf, int len, int *err)
1246{
0779438d 1247 if (target_xfer_partial_p ())
27394598
AC
1248 return target_xfer_partial (target_stack, TARGET_OBJECT_MEMORY, NULL,
1249 NULL, buf, memaddr, len);
0779438d
AC
1250 else
1251 return target_xfer_memory_partial (memaddr, buf, len, 1, err);
917317f4
JM
1252}
1253
1e3ff5ad
AC
1254/* More generic transfers. */
1255
0088c768 1256static LONGEST
8aa91c1e
AC
1257default_xfer_partial (struct target_ops *ops, enum target_object object,
1258 const char *annex, void *readbuf,
1259 const void *writebuf, ULONGEST offset, LONGEST len)
0088c768
AC
1260{
1261 if (object == TARGET_OBJECT_MEMORY
c8e73a31
AC
1262 && ops->deprecated_xfer_memory != NULL)
1263 /* If available, fall back to the target's
1264 "deprecated_xfer_memory" method. */
0088c768 1265 {
4b8a223f 1266 int xfered = -1;
0088c768 1267 errno = 0;
4b8a223f
AC
1268 if (writebuf != NULL)
1269 {
1270 void *buffer = xmalloc (len);
1271 struct cleanup *cleanup = make_cleanup (xfree, buffer);
1272 memcpy (buffer, writebuf, len);
c8e73a31
AC
1273 xfered = ops->deprecated_xfer_memory (offset, buffer, len,
1274 1/*write*/, NULL, ops);
4b8a223f
AC
1275 do_cleanups (cleanup);
1276 }
1277 if (readbuf != NULL)
c8e73a31
AC
1278 xfered = ops->deprecated_xfer_memory (offset, readbuf, len, 0/*read*/,
1279 NULL, ops);
0088c768
AC
1280 if (xfered > 0)
1281 return xfered;
1282 else if (xfered == 0 && errno == 0)
c8e73a31
AC
1283 /* "deprecated_xfer_memory" uses 0, cross checked against
1284 ERRNO as one indication of an error. */
0088c768
AC
1285 return 0;
1286 else
1287 return -1;
1288 }
1289 else if (ops->beneath != NULL)
27394598
AC
1290 return target_xfer_partial (ops->beneath, object, annex,
1291 readbuf, writebuf, offset, len);
0088c768
AC
1292 else
1293 return -1;
1294}
1295
1296/* Target vector read/write partial wrapper functions.
1297
1298 NOTE: cagney/2003-10-21: I wonder if having "to_xfer_partial
1299 (inbuf, outbuf)", instead of separate read/write methods, make life
1300 easier. */
1301
1e3ff5ad
AC
1302LONGEST
1303target_read_partial (struct target_ops *ops,
1304 enum target_object object,
1305 const char *annex, void *buf,
1306 ULONGEST offset, LONGEST len)
1307{
27394598 1308 return target_xfer_partial (ops, object, annex, buf, NULL, offset, len);
1e3ff5ad
AC
1309}
1310
1311LONGEST
1312target_write_partial (struct target_ops *ops,
1313 enum target_object object,
1314 const char *annex, const void *buf,
1315 ULONGEST offset, LONGEST len)
1316{
27394598 1317 return target_xfer_partial (ops, object, annex, NULL, buf, offset, len);
1e3ff5ad
AC
1318}
1319
1320/* Wrappers to perform the full transfer. */
1321LONGEST
1322target_read (struct target_ops *ops,
1323 enum target_object object,
1324 const char *annex, void *buf,
1325 ULONGEST offset, LONGEST len)
1326{
1327 LONGEST xfered = 0;
1328 while (xfered < len)
1329 {
0088c768
AC
1330 LONGEST xfer = target_read_partial (ops, object, annex,
1331 (bfd_byte *) buf + xfered,
1332 offset + xfered, len - xfered);
1e3ff5ad 1333 /* Call an observer, notifying them of the xfer progress? */
0088c768
AC
1334 if (xfer <= 0)
1335 /* Call memory_error? */
1336 return -1;
1e3ff5ad
AC
1337 xfered += xfer;
1338 QUIT;
1339 }
1340 return len;
1341}
1342
1343LONGEST
1344target_write (struct target_ops *ops,
1345 enum target_object object,
1346 const char *annex, const void *buf,
1347 ULONGEST offset, LONGEST len)
1348{
1349 LONGEST xfered = 0;
1350 while (xfered < len)
1351 {
1352 LONGEST xfer = target_write_partial (ops, object, annex,
1353 (bfd_byte *) buf + xfered,
1354 offset + xfered, len - xfered);
1355 /* Call an observer, notifying them of the xfer progress? */
0088c768
AC
1356 if (xfer <= 0)
1357 /* Call memory_error? */
1358 return -1;
1e3ff5ad
AC
1359 xfered += xfer;
1360 QUIT;
1361 }
1362 return len;
1363}
1364
b6591e8b
AC
1365/* Memory transfer methods. */
1366
1367void
1368get_target_memory (struct target_ops *ops, CORE_ADDR addr, void *buf,
1369 LONGEST len)
1370{
1371 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL, buf, addr, len)
1372 != len)
1373 memory_error (EIO, addr);
1374}
1375
1376ULONGEST
1377get_target_memory_unsigned (struct target_ops *ops,
1378 CORE_ADDR addr, int len)
1379{
1380 char buf[sizeof (ULONGEST)];
1381
1382 gdb_assert (len <= sizeof (buf));
1383 get_target_memory (ops, addr, buf, len);
1384 return extract_unsigned_integer (buf, len);
1385}
1386
c906108c 1387static void
fba45db2 1388target_info (char *args, int from_tty)
c906108c
SS
1389{
1390 struct target_ops *t;
c906108c 1391 int has_all_mem = 0;
c5aa993b 1392
c906108c 1393 if (symfile_objfile != NULL)
a3f17187 1394 printf_unfiltered (_("Symbols from \"%s\".\n"), symfile_objfile->name);
c906108c 1395
258b763a 1396 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 1397 {
c906108c
SS
1398 if (!t->to_has_memory)
1399 continue;
1400
c5aa993b 1401 if ((int) (t->to_stratum) <= (int) dummy_stratum)
c906108c
SS
1402 continue;
1403 if (has_all_mem)
a3f17187 1404 printf_unfiltered (_("\tWhile running this, GDB does not access memory from...\n"));
c5aa993b
JM
1405 printf_unfiltered ("%s:\n", t->to_longname);
1406 (t->to_files_info) (t);
c906108c
SS
1407 has_all_mem = t->to_has_all_memory;
1408 }
1409}
1410
1411/* This is to be called by the open routine before it does
1412 anything. */
1413
1414void
fba45db2 1415target_preopen (int from_tty)
c906108c 1416{
c5aa993b 1417 dont_repeat ();
c906108c
SS
1418
1419 if (target_has_execution)
c5aa993b 1420 {
adf40b2e 1421 if (!from_tty
e2e0b3e5 1422 || query (_("A program is being debugged already. Kill it? ")))
c5aa993b 1423 target_kill ();
c906108c 1424 else
8a3fe4f8 1425 error (_("Program not killed."));
c906108c
SS
1426 }
1427
1428 /* Calling target_kill may remove the target from the stack. But if
1429 it doesn't (which seems like a win for UDI), remove it now. */
1430
1431 if (target_has_execution)
1432 pop_target ();
1433}
1434
1435/* Detach a target after doing deferred register stores. */
1436
1437void
fba45db2 1438target_detach (char *args, int from_tty)
c906108c 1439{
c906108c
SS
1440 (current_target.to_detach) (args, from_tty);
1441}
1442
6ad8ae5c
DJ
1443void
1444target_disconnect (char *args, int from_tty)
1445{
6ad8ae5c
DJ
1446 (current_target.to_disconnect) (args, from_tty);
1447}
1448
c906108c 1449void
fba45db2 1450target_link (char *modname, CORE_ADDR *t_reloc)
c906108c 1451{
cb137aa5 1452 if (DEPRECATED_STREQ (current_target.to_shortname, "rombug"))
c906108c
SS
1453 {
1454 (current_target.to_lookup_symbol) (modname, t_reloc);
1455 if (*t_reloc == 0)
8a3fe4f8 1456 error (_("Unable to link to %s and get relocation in rombug"), modname);
c906108c
SS
1457 }
1458 else
2acceee2 1459 *t_reloc = (CORE_ADDR) -1;
c906108c
SS
1460}
1461
ed9a39eb
JM
1462int
1463target_async_mask (int mask)
1464{
1465 int saved_async_masked_status = target_async_mask_value;
1466 target_async_mask_value = mask;
1467 return saved_async_masked_status;
1468}
1469
c906108c
SS
1470/* Look through the list of possible targets for a target that can
1471 execute a run or attach command without any other data. This is
1472 used to locate the default process stratum.
1473
1474 Result is always valid (error() is called for errors). */
1475
1476static struct target_ops *
fba45db2 1477find_default_run_target (char *do_mesg)
c906108c
SS
1478{
1479 struct target_ops **t;
1480 struct target_ops *runable = NULL;
1481 int count;
1482
1483 count = 0;
1484
1485 for (t = target_structs; t < target_structs + target_struct_size;
1486 ++t)
1487 {
c5aa993b 1488 if ((*t)->to_can_run && target_can_run (*t))
c906108c
SS
1489 {
1490 runable = *t;
1491 ++count;
1492 }
1493 }
1494
1495 if (count != 1)
8a3fe4f8 1496 error (_("Don't know how to %s. Try \"help target\"."), do_mesg);
c906108c
SS
1497
1498 return runable;
1499}
1500
1501void
fba45db2 1502find_default_attach (char *args, int from_tty)
c906108c
SS
1503{
1504 struct target_ops *t;
1505
c5aa993b 1506 t = find_default_run_target ("attach");
c906108c
SS
1507 (t->to_attach) (args, from_tty);
1508 return;
1509}
1510
c906108c 1511void
c27cda74
AC
1512find_default_create_inferior (char *exec_file, char *allargs, char **env,
1513 int from_tty)
c906108c
SS
1514{
1515 struct target_ops *t;
1516
c5aa993b 1517 t = find_default_run_target ("run");
c27cda74 1518 (t->to_create_inferior) (exec_file, allargs, env, from_tty);
c906108c
SS
1519 return;
1520}
1521
ccaa32c7
GS
1522static int
1523default_region_size_ok_for_hw_watchpoint (int byte_count)
1524{
437b434f 1525 return (byte_count <= TYPE_LENGTH (builtin_type_void_data_ptr));
ccaa32c7
GS
1526}
1527
c906108c 1528static int
fba45db2 1529return_zero (void)
c906108c
SS
1530{
1531 return 0;
1532}
1533
1534static int
fba45db2 1535return_one (void)
c906108c
SS
1536{
1537 return 1;
1538}
1539
ccaa32c7
GS
1540static int
1541return_minus_one (void)
1542{
1543 return -1;
1544}
1545
6426a772
JM
1546/*
1547 * Resize the to_sections pointer. Also make sure that anyone that
1548 * was holding on to an old value of it gets updated.
1549 * Returns the old size.
1550 */
1551
1552int
1553target_resize_to_sections (struct target_ops *target, int num_added)
1554{
1555 struct target_ops **t;
1556 struct section_table *old_value;
1557 int old_count;
1558
1559 old_value = target->to_sections;
1560
1561 if (target->to_sections)
1562 {
1563 old_count = target->to_sections_end - target->to_sections;
1564 target->to_sections = (struct section_table *)
1565 xrealloc ((char *) target->to_sections,
1566 (sizeof (struct section_table)) * (num_added + old_count));
1567 }
1568 else
1569 {
1570 old_count = 0;
1571 target->to_sections = (struct section_table *)
1572 xmalloc ((sizeof (struct section_table)) * num_added);
1573 }
1574 target->to_sections_end = target->to_sections + (num_added + old_count);
1575
1576 /* Check to see if anyone else was pointing to this structure.
1577 If old_value was null, then no one was. */
1578
1579 if (old_value)
1580 {
1581 for (t = target_structs; t < target_structs + target_struct_size;
1582 ++t)
1583 {
1584 if ((*t)->to_sections == old_value)
1585 {
1586 (*t)->to_sections = target->to_sections;
1587 (*t)->to_sections_end = target->to_sections_end;
1588 }
1589 }
e354df01
NW
1590 /* There is a flattened view of the target stack in current_target,
1591 so its to_sections pointer might also need updating. */
1592 if (current_target.to_sections == old_value)
1593 {
1594 current_target.to_sections = target->to_sections;
1595 current_target.to_sections_end = target->to_sections_end;
1596 }
6426a772
JM
1597 }
1598
1599 return old_count;
1600
1601}
1602
07cd4b97
JB
1603/* Remove all target sections taken from ABFD.
1604
1605 Scan the current target stack for targets whose section tables
1606 refer to sections from BFD, and remove those sections. We use this
1607 when we notice that the inferior has unloaded a shared object, for
1608 example. */
1609void
1610remove_target_sections (bfd *abfd)
1611{
1612 struct target_ops **t;
1613
1614 for (t = target_structs; t < target_structs + target_struct_size; t++)
1615 {
1616 struct section_table *src, *dest;
1617
1618 dest = (*t)->to_sections;
1619 for (src = (*t)->to_sections; src < (*t)->to_sections_end; src++)
1620 if (src->bfd != abfd)
1621 {
1622 /* Keep this section. */
1623 if (dest < src) *dest = *src;
1624 dest++;
1625 }
1626
1627 /* If we've dropped any sections, resize the section table. */
1628 if (dest < src)
1629 target_resize_to_sections (*t, dest - src);
1630 }
1631}
1632
1633
1634
1635
7a292a7a
SS
1636/* Find a single runnable target in the stack and return it. If for
1637 some reason there is more than one, return NULL. */
1638
1639struct target_ops *
fba45db2 1640find_run_target (void)
7a292a7a
SS
1641{
1642 struct target_ops **t;
1643 struct target_ops *runable = NULL;
1644 int count;
c5aa993b 1645
7a292a7a 1646 count = 0;
c5aa993b 1647
7a292a7a
SS
1648 for (t = target_structs; t < target_structs + target_struct_size; ++t)
1649 {
c5aa993b 1650 if ((*t)->to_can_run && target_can_run (*t))
7a292a7a
SS
1651 {
1652 runable = *t;
1653 ++count;
1654 }
1655 }
c5aa993b 1656
7a292a7a
SS
1657 return (count == 1 ? runable : NULL);
1658}
1659
ed9a39eb
JM
1660/* Find a single core_stratum target in the list of targets and return it.
1661 If for some reason there is more than one, return NULL. */
1662
c906108c 1663struct target_ops *
fba45db2 1664find_core_target (void)
c906108c
SS
1665{
1666 struct target_ops **t;
1667 struct target_ops *runable = NULL;
1668 int count;
c5aa993b 1669
c906108c 1670 count = 0;
c5aa993b 1671
c906108c
SS
1672 for (t = target_structs; t < target_structs + target_struct_size;
1673 ++t)
1674 {
1675 if ((*t)->to_stratum == core_stratum)
1676 {
1677 runable = *t;
1678 ++count;
1679 }
1680 }
c5aa993b
JM
1681
1682 return (count == 1 ? runable : NULL);
c906108c 1683}
ed9a39eb
JM
1684
1685/*
1686 * Find the next target down the stack from the specified target.
1687 */
1688
1689struct target_ops *
fba45db2 1690find_target_beneath (struct target_ops *t)
ed9a39eb 1691{
258b763a 1692 return t->beneath;
ed9a39eb
JM
1693}
1694
c906108c
SS
1695\f
1696/* The inferior process has died. Long live the inferior! */
1697
1698void
fba45db2 1699generic_mourn_inferior (void)
c906108c
SS
1700{
1701 extern int show_breakpoint_hit_counts;
1702
39f77062 1703 inferior_ptid = null_ptid;
c906108c
SS
1704 attach_flag = 0;
1705 breakpoint_init_inferior (inf_exited);
1706 registers_changed ();
1707
c906108c
SS
1708 reopen_exec_file ();
1709 reinit_frame_cache ();
1710
1711 /* It is confusing to the user for ignore counts to stick around
1712 from previous runs of the inferior. So clear them. */
1713 /* However, it is more confusing for the ignore counts to disappear when
1714 using hit counts. So don't clear them if we're counting hits. */
1715 if (!show_breakpoint_hit_counts)
1716 breakpoint_clear_ignore_counts ();
c5b739b5 1717
9a4105ab
AC
1718 if (deprecated_detach_hook)
1719 deprecated_detach_hook ();
c906108c
SS
1720}
1721\f
c906108c
SS
1722/* Helper function for child_wait and the Lynx derivatives of child_wait.
1723 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1724 translation of that in OURSTATUS. */
1725void
fba45db2 1726store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
c906108c
SS
1727{
1728#ifdef CHILD_SPECIAL_WAITSTATUS
1729 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
1730 if it wants to deal with hoststatus. */
1731 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
1732 return;
1733#endif
1734
1735 if (WIFEXITED (hoststatus))
1736 {
1737 ourstatus->kind = TARGET_WAITKIND_EXITED;
1738 ourstatus->value.integer = WEXITSTATUS (hoststatus);
1739 }
1740 else if (!WIFSTOPPED (hoststatus))
1741 {
1742 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1743 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1744 }
1745 else
1746 {
1747 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1748 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1749 }
1750}
1751\f
c906108c 1752/* Returns zero to leave the inferior alone, one to interrupt it. */
507f3c78 1753int (*target_activity_function) (void);
c906108c
SS
1754int target_activity_fd;
1755\f
1756/* Convert a normal process ID to a string. Returns the string in a static
1757 buffer. */
1758
1759char *
39f77062 1760normal_pid_to_str (ptid_t ptid)
c906108c
SS
1761{
1762 static char buf[30];
1763
39f77062 1764 sprintf (buf, "process %d", PIDGET (ptid));
c906108c
SS
1765 return buf;
1766}
1767
be4d1333 1768/* Error-catcher for target_find_memory_regions */
be4d1333
MS
1769static int dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
1770{
8a3fe4f8 1771 error (_("No target."));
be4d1333
MS
1772 return 0;
1773}
1774
1775/* Error-catcher for target_make_corefile_notes */
be4d1333
MS
1776static char * dummy_make_corefile_notes (bfd *ignore1, int *ignore2)
1777{
8a3fe4f8 1778 error (_("No target."));
be4d1333
MS
1779 return NULL;
1780}
1781
c906108c
SS
1782/* Set up the handful of non-empty slots needed by the dummy target
1783 vector. */
1784
1785static void
fba45db2 1786init_dummy_target (void)
c906108c
SS
1787{
1788 dummy_target.to_shortname = "None";
1789 dummy_target.to_longname = "None";
1790 dummy_target.to_doc = "";
1791 dummy_target.to_attach = find_default_attach;
c906108c 1792 dummy_target.to_create_inferior = find_default_create_inferior;
ed9a39eb 1793 dummy_target.to_pid_to_str = normal_pid_to_str;
c906108c 1794 dummy_target.to_stratum = dummy_stratum;
be4d1333
MS
1795 dummy_target.to_find_memory_regions = dummy_find_memory_regions;
1796 dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
0b603eba 1797 dummy_target.to_xfer_partial = default_xfer_partial;
c906108c
SS
1798 dummy_target.to_magic = OPS_MAGIC;
1799}
c906108c 1800\f
c906108c 1801static void
fba45db2 1802debug_to_open (char *args, int from_tty)
c906108c
SS
1803{
1804 debug_target.to_open (args, from_tty);
1805
96baa820 1806 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
c906108c
SS
1807}
1808
1809static void
fba45db2 1810debug_to_close (int quitting)
c906108c 1811{
f1c07ab0 1812 target_close (&debug_target, quitting);
96baa820 1813 fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
c906108c
SS
1814}
1815
f1c07ab0
AC
1816void
1817target_close (struct target_ops *targ, int quitting)
1818{
1819 if (targ->to_xclose != NULL)
1820 targ->to_xclose (targ, quitting);
1821 else if (targ->to_close != NULL)
1822 targ->to_close (quitting);
1823}
1824
c906108c 1825static void
fba45db2 1826debug_to_attach (char *args, int from_tty)
c906108c
SS
1827{
1828 debug_target.to_attach (args, from_tty);
1829
96baa820 1830 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n", args, from_tty);
c906108c
SS
1831}
1832
1833
1834static void
fba45db2 1835debug_to_post_attach (int pid)
c906108c
SS
1836{
1837 debug_target.to_post_attach (pid);
1838
96baa820 1839 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
c906108c
SS
1840}
1841
c906108c 1842static void
fba45db2 1843debug_to_detach (char *args, int from_tty)
c906108c
SS
1844{
1845 debug_target.to_detach (args, from_tty);
1846
96baa820 1847 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n", args, from_tty);
c906108c
SS
1848}
1849
6ad8ae5c
DJ
1850static void
1851debug_to_disconnect (char *args, int from_tty)
1852{
1853 debug_target.to_disconnect (args, from_tty);
1854
1855 fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
1856 args, from_tty);
1857}
1858
c906108c 1859static void
39f77062 1860debug_to_resume (ptid_t ptid, int step, enum target_signal siggnal)
c906108c 1861{
39f77062 1862 debug_target.to_resume (ptid, step, siggnal);
c906108c 1863
39f77062 1864 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n", PIDGET (ptid),
c906108c
SS
1865 step ? "step" : "continue",
1866 target_signal_to_name (siggnal));
1867}
1868
39f77062
KB
1869static ptid_t
1870debug_to_wait (ptid_t ptid, struct target_waitstatus *status)
c906108c 1871{
39f77062 1872 ptid_t retval;
c906108c 1873
39f77062 1874 retval = debug_target.to_wait (ptid, status);
c906108c 1875
96baa820 1876 fprintf_unfiltered (gdb_stdlog,
39f77062
KB
1877 "target_wait (%d, status) = %d, ", PIDGET (ptid),
1878 PIDGET (retval));
96baa820 1879 fprintf_unfiltered (gdb_stdlog, "status->kind = ");
c906108c
SS
1880 switch (status->kind)
1881 {
1882 case TARGET_WAITKIND_EXITED:
96baa820 1883 fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n",
c906108c
SS
1884 status->value.integer);
1885 break;
1886 case TARGET_WAITKIND_STOPPED:
96baa820 1887 fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n",
c906108c
SS
1888 target_signal_to_name (status->value.sig));
1889 break;
1890 case TARGET_WAITKIND_SIGNALLED:
96baa820 1891 fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n",
c906108c
SS
1892 target_signal_to_name (status->value.sig));
1893 break;
1894 case TARGET_WAITKIND_LOADED:
96baa820 1895 fprintf_unfiltered (gdb_stdlog, "loaded\n");
c906108c
SS
1896 break;
1897 case TARGET_WAITKIND_FORKED:
96baa820 1898 fprintf_unfiltered (gdb_stdlog, "forked\n");
c906108c
SS
1899 break;
1900 case TARGET_WAITKIND_VFORKED:
96baa820 1901 fprintf_unfiltered (gdb_stdlog, "vforked\n");
c906108c
SS
1902 break;
1903 case TARGET_WAITKIND_EXECD:
96baa820 1904 fprintf_unfiltered (gdb_stdlog, "execd\n");
c906108c
SS
1905 break;
1906 case TARGET_WAITKIND_SPURIOUS:
96baa820 1907 fprintf_unfiltered (gdb_stdlog, "spurious\n");
c906108c
SS
1908 break;
1909 default:
96baa820 1910 fprintf_unfiltered (gdb_stdlog, "unknown???\n");
c906108c
SS
1911 break;
1912 }
1913
1914 return retval;
1915}
1916
bf0c5130
AC
1917static void
1918debug_print_register (const char * func, int regno)
1919{
1920 fprintf_unfiltered (gdb_stdlog, "%s ", func);
1921 if (regno >= 0 && regno < NUM_REGS + NUM_PSEUDO_REGS
1922 && REGISTER_NAME (regno) != NULL && REGISTER_NAME (regno)[0] != '\0')
1923 fprintf_unfiltered (gdb_stdlog, "(%s)", REGISTER_NAME (regno));
1924 else
1925 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1926 if (regno >= 0)
1927 {
1928 int i;
d9d9c31f 1929 unsigned char buf[MAX_REGISTER_SIZE];
4caf0990 1930 deprecated_read_register_gen (regno, buf);
bf0c5130 1931 fprintf_unfiltered (gdb_stdlog, " = ");
3acba339 1932 for (i = 0; i < register_size (current_gdbarch, regno); i++)
bf0c5130
AC
1933 {
1934 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1935 }
3acba339 1936 if (register_size (current_gdbarch, regno) <= sizeof (LONGEST))
bf0c5130
AC
1937 {
1938 fprintf_unfiltered (gdb_stdlog, " 0x%s %s",
1939 paddr_nz (read_register (regno)),
1940 paddr_d (read_register (regno)));
1941 }
1942 }
1943 fprintf_unfiltered (gdb_stdlog, "\n");
1944}
1945
c906108c 1946static void
fba45db2 1947debug_to_fetch_registers (int regno)
c906108c
SS
1948{
1949 debug_target.to_fetch_registers (regno);
bf0c5130 1950 debug_print_register ("target_fetch_registers", regno);
c906108c
SS
1951}
1952
1953static void
fba45db2 1954debug_to_store_registers (int regno)
c906108c
SS
1955{
1956 debug_target.to_store_registers (regno);
bf0c5130
AC
1957 debug_print_register ("target_store_registers", regno);
1958 fprintf_unfiltered (gdb_stdlog, "\n");
c906108c
SS
1959}
1960
1961static void
fba45db2 1962debug_to_prepare_to_store (void)
c906108c
SS
1963{
1964 debug_target.to_prepare_to_store ();
1965
96baa820 1966 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
c906108c
SS
1967}
1968
1969static int
c8e73a31
AC
1970deprecated_debug_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
1971 int write, struct mem_attrib *attrib,
1972 struct target_ops *target)
c906108c
SS
1973{
1974 int retval;
1975
c8e73a31
AC
1976 retval = debug_target.deprecated_xfer_memory (memaddr, myaddr, len, write,
1977 attrib, target);
c906108c 1978
96baa820 1979 fprintf_unfiltered (gdb_stdlog,
c906108c 1980 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
c5aa993b 1981 (unsigned int) memaddr, /* possable truncate long long */
c906108c
SS
1982 len, write ? "write" : "read", retval);
1983
c906108c
SS
1984 if (retval > 0)
1985 {
1986 int i;
1987
96baa820 1988 fputs_unfiltered (", bytes =", gdb_stdlog);
c906108c
SS
1989 for (i = 0; i < retval; i++)
1990 {
1991 if ((((long) &(myaddr[i])) & 0xf) == 0)
333dabeb
DJ
1992 {
1993 if (targetdebug < 2 && i > 0)
1994 {
1995 fprintf_unfiltered (gdb_stdlog, " ...");
1996 break;
1997 }
1998 fprintf_unfiltered (gdb_stdlog, "\n");
1999 }
2000
96baa820 2001 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
c906108c
SS
2002 }
2003 }
2004
96baa820 2005 fputc_unfiltered ('\n', gdb_stdlog);
c906108c
SS
2006
2007 return retval;
2008}
2009
2010static void
fba45db2 2011debug_to_files_info (struct target_ops *target)
c906108c
SS
2012{
2013 debug_target.to_files_info (target);
2014
96baa820 2015 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
c906108c
SS
2016}
2017
2018static int
fba45db2 2019debug_to_insert_breakpoint (CORE_ADDR addr, char *save)
c906108c
SS
2020{
2021 int retval;
2022
2023 retval = debug_target.to_insert_breakpoint (addr, save);
2024
96baa820 2025 fprintf_unfiltered (gdb_stdlog,
104c1213
JM
2026 "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
2027 (unsigned long) addr,
2028 (unsigned long) retval);
c906108c
SS
2029 return retval;
2030}
2031
2032static int
fba45db2 2033debug_to_remove_breakpoint (CORE_ADDR addr, char *save)
c906108c
SS
2034{
2035 int retval;
2036
2037 retval = debug_target.to_remove_breakpoint (addr, save);
2038
96baa820 2039 fprintf_unfiltered (gdb_stdlog,
104c1213
JM
2040 "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
2041 (unsigned long) addr,
2042 (unsigned long) retval);
c906108c
SS
2043 return retval;
2044}
2045
ccaa32c7
GS
2046static int
2047debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
2048{
2049 int retval;
2050
2051 retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
2052
2053 fprintf_unfiltered (gdb_stdlog,
2054 "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
2055 (unsigned long) type,
2056 (unsigned long) cnt,
2057 (unsigned long) from_tty,
2058 (unsigned long) retval);
2059 return retval;
2060}
2061
2062static int
2063debug_to_region_size_ok_for_hw_watchpoint (int byte_count)
2064{
2065 CORE_ADDR retval;
2066
2067 retval = debug_target.to_region_size_ok_for_hw_watchpoint (byte_count);
2068
2069 fprintf_unfiltered (gdb_stdlog,
2070 "TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (%ld) = 0x%lx\n",
2071 (unsigned long) byte_count,
2072 (unsigned long) retval);
2073 return retval;
2074}
2075
2076static int
2077debug_to_stopped_by_watchpoint (void)
2078{
2079 int retval;
2080
2081 retval = debug_target.to_stopped_by_watchpoint ();
2082
2083 fprintf_unfiltered (gdb_stdlog,
2084 "STOPPED_BY_WATCHPOINT () = %ld\n",
2085 (unsigned long) retval);
2086 return retval;
2087}
2088
4aa7a7f5
JJ
2089static int
2090debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
ccaa32c7 2091{
4aa7a7f5 2092 int retval;
ccaa32c7 2093
4aa7a7f5 2094 retval = debug_target.to_stopped_data_address (target, addr);
ccaa32c7
GS
2095
2096 fprintf_unfiltered (gdb_stdlog,
4aa7a7f5
JJ
2097 "target_stopped_data_address ([0x%lx]) = %ld\n",
2098 (unsigned long)*addr,
2099 (unsigned long)retval);
ccaa32c7
GS
2100 return retval;
2101}
2102
2103static int
2104debug_to_insert_hw_breakpoint (CORE_ADDR addr, char *save)
2105{
2106 int retval;
2107
2108 retval = debug_target.to_insert_hw_breakpoint (addr, save);
2109
2110 fprintf_unfiltered (gdb_stdlog,
2111 "target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
2112 (unsigned long) addr,
2113 (unsigned long) retval);
2114 return retval;
2115}
2116
2117static int
2118debug_to_remove_hw_breakpoint (CORE_ADDR addr, char *save)
2119{
2120 int retval;
2121
2122 retval = debug_target.to_remove_hw_breakpoint (addr, save);
2123
2124 fprintf_unfiltered (gdb_stdlog,
2125 "target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
2126 (unsigned long) addr,
2127 (unsigned long) retval);
2128 return retval;
2129}
2130
2131static int
2132debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type)
2133{
2134 int retval;
2135
2136 retval = debug_target.to_insert_watchpoint (addr, len, type);
2137
2138 fprintf_unfiltered (gdb_stdlog,
2139 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2140 (unsigned long) addr, len, type, (unsigned long) retval);
2141 return retval;
2142}
2143
2144static int
2145debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type)
2146{
2147 int retval;
2148
2149 retval = debug_target.to_insert_watchpoint (addr, len, type);
2150
2151 fprintf_unfiltered (gdb_stdlog,
2152 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2153 (unsigned long) addr, len, type, (unsigned long) retval);
2154 return retval;
2155}
2156
c906108c 2157static void
fba45db2 2158debug_to_terminal_init (void)
c906108c
SS
2159{
2160 debug_target.to_terminal_init ();
2161
96baa820 2162 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
c906108c
SS
2163}
2164
2165static void
fba45db2 2166debug_to_terminal_inferior (void)
c906108c
SS
2167{
2168 debug_target.to_terminal_inferior ();
2169
96baa820 2170 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
c906108c
SS
2171}
2172
2173static void
fba45db2 2174debug_to_terminal_ours_for_output (void)
c906108c
SS
2175{
2176 debug_target.to_terminal_ours_for_output ();
2177
96baa820 2178 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
c906108c
SS
2179}
2180
2181static void
fba45db2 2182debug_to_terminal_ours (void)
c906108c
SS
2183{
2184 debug_target.to_terminal_ours ();
2185
96baa820 2186 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
c906108c
SS
2187}
2188
a790ad35
SC
2189static void
2190debug_to_terminal_save_ours (void)
2191{
2192 debug_target.to_terminal_save_ours ();
2193
2194 fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
2195}
2196
c906108c 2197static void
fba45db2 2198debug_to_terminal_info (char *arg, int from_tty)
c906108c
SS
2199{
2200 debug_target.to_terminal_info (arg, from_tty);
2201
96baa820 2202 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
c906108c
SS
2203 from_tty);
2204}
2205
2206static void
fba45db2 2207debug_to_kill (void)
c906108c
SS
2208{
2209 debug_target.to_kill ();
2210
96baa820 2211 fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
c906108c
SS
2212}
2213
2214static void
fba45db2 2215debug_to_load (char *args, int from_tty)
c906108c
SS
2216{
2217 debug_target.to_load (args, from_tty);
2218
96baa820 2219 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
c906108c
SS
2220}
2221
2222static int
fba45db2 2223debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
c906108c
SS
2224{
2225 int retval;
2226
2227 retval = debug_target.to_lookup_symbol (name, addrp);
2228
96baa820 2229 fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
c906108c
SS
2230
2231 return retval;
2232}
2233
2234static void
c27cda74
AC
2235debug_to_create_inferior (char *exec_file, char *args, char **env,
2236 int from_tty)
c906108c 2237{
c27cda74 2238 debug_target.to_create_inferior (exec_file, args, env, from_tty);
c906108c 2239
c27cda74
AC
2240 fprintf_unfiltered (gdb_stdlog, "target_create_inferior (%s, %s, xxx, %d)\n",
2241 exec_file, args, from_tty);
c906108c
SS
2242}
2243
2244static void
39f77062 2245debug_to_post_startup_inferior (ptid_t ptid)
c906108c 2246{
39f77062 2247 debug_target.to_post_startup_inferior (ptid);
c906108c 2248
96baa820 2249 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
39f77062 2250 PIDGET (ptid));
c906108c
SS
2251}
2252
2253static void
fba45db2 2254debug_to_acknowledge_created_inferior (int pid)
c906108c
SS
2255{
2256 debug_target.to_acknowledge_created_inferior (pid);
2257
96baa820 2258 fprintf_unfiltered (gdb_stdlog, "target_acknowledge_created_inferior (%d)\n",
c906108c
SS
2259 pid);
2260}
2261
fa113d1a 2262static void
fba45db2 2263debug_to_insert_fork_catchpoint (int pid)
c906108c 2264{
fa113d1a 2265 debug_target.to_insert_fork_catchpoint (pid);
c906108c 2266
fa113d1a
AC
2267 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d)\n",
2268 pid);
c906108c
SS
2269}
2270
2271static int
fba45db2 2272debug_to_remove_fork_catchpoint (int pid)
c906108c 2273{
c5aa993b 2274 int retval;
c906108c
SS
2275
2276 retval = debug_target.to_remove_fork_catchpoint (pid);
2277
96baa820 2278 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
c5aa993b 2279 pid, retval);
c906108c
SS
2280
2281 return retval;
2282}
2283
fa113d1a 2284static void
fba45db2 2285debug_to_insert_vfork_catchpoint (int pid)
c906108c 2286{
fa113d1a 2287 debug_target.to_insert_vfork_catchpoint (pid);
c906108c 2288
fa113d1a
AC
2289 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d)\n",
2290 pid);
c906108c
SS
2291}
2292
2293static int
fba45db2 2294debug_to_remove_vfork_catchpoint (int pid)
c906108c 2295{
c5aa993b 2296 int retval;
c906108c
SS
2297
2298 retval = debug_target.to_remove_vfork_catchpoint (pid);
2299
96baa820 2300 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
c5aa993b 2301 pid, retval);
c906108c
SS
2302
2303 return retval;
2304}
2305
6604731b
DJ
2306static int
2307debug_to_follow_fork (int follow_child)
c906108c 2308{
6604731b 2309 int retval = debug_target.to_follow_fork (follow_child);
c906108c 2310
6604731b
DJ
2311 fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
2312 follow_child, retval);
2313
2314 return retval;
c906108c
SS
2315}
2316
fa113d1a 2317static void
fba45db2 2318debug_to_insert_exec_catchpoint (int pid)
c906108c 2319{
fa113d1a 2320 debug_target.to_insert_exec_catchpoint (pid);
c906108c 2321
fa113d1a
AC
2322 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d)\n",
2323 pid);
c906108c
SS
2324}
2325
2326static int
fba45db2 2327debug_to_remove_exec_catchpoint (int pid)
c906108c 2328{
c5aa993b 2329 int retval;
c906108c
SS
2330
2331 retval = debug_target.to_remove_exec_catchpoint (pid);
2332
96baa820 2333 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
c5aa993b 2334 pid, retval);
c906108c
SS
2335
2336 return retval;
2337}
2338
c906108c 2339static int
fba45db2 2340debug_to_reported_exec_events_per_exec_call (void)
c906108c 2341{
c5aa993b 2342 int reported_exec_events;
c906108c
SS
2343
2344 reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2345
96baa820 2346 fprintf_unfiltered (gdb_stdlog,
c906108c 2347 "target_reported_exec_events_per_exec_call () = %d\n",
c5aa993b 2348 reported_exec_events);
c906108c
SS
2349
2350 return reported_exec_events;
2351}
2352
c906108c 2353static int
fba45db2 2354debug_to_has_exited (int pid, int wait_status, int *exit_status)
c906108c 2355{
c5aa993b 2356 int has_exited;
c906108c
SS
2357
2358 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2359
96baa820 2360 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
c5aa993b 2361 pid, wait_status, *exit_status, has_exited);
c906108c
SS
2362
2363 return has_exited;
2364}
2365
2366static void
fba45db2 2367debug_to_mourn_inferior (void)
c906108c
SS
2368{
2369 debug_target.to_mourn_inferior ();
2370
96baa820 2371 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
c906108c
SS
2372}
2373
2374static int
fba45db2 2375debug_to_can_run (void)
c906108c
SS
2376{
2377 int retval;
2378
2379 retval = debug_target.to_can_run ();
2380
96baa820 2381 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
c906108c
SS
2382
2383 return retval;
2384}
2385
2386static void
39f77062 2387debug_to_notice_signals (ptid_t ptid)
c906108c 2388{
39f77062 2389 debug_target.to_notice_signals (ptid);
c906108c 2390
39f77062
KB
2391 fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n",
2392 PIDGET (ptid));
c906108c
SS
2393}
2394
2395static int
39f77062 2396debug_to_thread_alive (ptid_t ptid)
c906108c
SS
2397{
2398 int retval;
2399
39f77062 2400 retval = debug_target.to_thread_alive (ptid);
c906108c 2401
96baa820 2402 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
39f77062 2403 PIDGET (ptid), retval);
c906108c
SS
2404
2405 return retval;
2406}
2407
0d06e24b 2408static void
fba45db2 2409debug_to_find_new_threads (void)
0d06e24b
JM
2410{
2411 debug_target.to_find_new_threads ();
2412
2413 fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
2414}
2415
c906108c 2416static void
fba45db2 2417debug_to_stop (void)
c906108c
SS
2418{
2419 debug_target.to_stop ();
2420
96baa820 2421 fprintf_unfiltered (gdb_stdlog, "target_stop ()\n");
c906108c
SS
2422}
2423
96baa820
JM
2424static void
2425debug_to_rcmd (char *command,
d9fcf2fb 2426 struct ui_file *outbuf)
96baa820
JM
2427{
2428 debug_target.to_rcmd (command, outbuf);
2429 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
2430}
2431
c906108c 2432static struct symtab_and_line *
fba45db2 2433debug_to_enable_exception_callback (enum exception_event_kind kind, int enable)
c906108c 2434{
7a292a7a
SS
2435 struct symtab_and_line *result;
2436 result = debug_target.to_enable_exception_callback (kind, enable);
96baa820 2437 fprintf_unfiltered (gdb_stdlog,
c906108c
SS
2438 "target get_exception_callback_sal (%d, %d)\n",
2439 kind, enable);
7a292a7a 2440 return result;
c906108c
SS
2441}
2442
2443static struct exception_event_record *
fba45db2 2444debug_to_get_current_exception_event (void)
c906108c 2445{
7a292a7a 2446 struct exception_event_record *result;
c5aa993b 2447 result = debug_target.to_get_current_exception_event ();
96baa820 2448 fprintf_unfiltered (gdb_stdlog, "target get_current_exception_event ()\n");
7a292a7a 2449 return result;
c906108c
SS
2450}
2451
2452static char *
fba45db2 2453debug_to_pid_to_exec_file (int pid)
c906108c 2454{
c5aa993b 2455 char *exec_file;
c906108c
SS
2456
2457 exec_file = debug_target.to_pid_to_exec_file (pid);
2458
96baa820 2459 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
c5aa993b 2460 pid, exec_file);
c906108c
SS
2461
2462 return exec_file;
2463}
2464
c906108c 2465static void
fba45db2 2466setup_target_debug (void)
c906108c
SS
2467{
2468 memcpy (&debug_target, &current_target, sizeof debug_target);
2469
2470 current_target.to_open = debug_to_open;
2471 current_target.to_close = debug_to_close;
2472 current_target.to_attach = debug_to_attach;
2473 current_target.to_post_attach = debug_to_post_attach;
c906108c 2474 current_target.to_detach = debug_to_detach;
6ad8ae5c 2475 current_target.to_disconnect = debug_to_disconnect;
c906108c
SS
2476 current_target.to_resume = debug_to_resume;
2477 current_target.to_wait = debug_to_wait;
c906108c
SS
2478 current_target.to_fetch_registers = debug_to_fetch_registers;
2479 current_target.to_store_registers = debug_to_store_registers;
2480 current_target.to_prepare_to_store = debug_to_prepare_to_store;
c8e73a31 2481 current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory;
c906108c
SS
2482 current_target.to_files_info = debug_to_files_info;
2483 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2484 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
ccaa32c7
GS
2485 current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
2486 current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
2487 current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
2488 current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
2489 current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
2490 current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
2491 current_target.to_stopped_data_address = debug_to_stopped_data_address;
2492 current_target.to_region_size_ok_for_hw_watchpoint = debug_to_region_size_ok_for_hw_watchpoint;
c906108c
SS
2493 current_target.to_terminal_init = debug_to_terminal_init;
2494 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2495 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2496 current_target.to_terminal_ours = debug_to_terminal_ours;
a790ad35 2497 current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
c906108c
SS
2498 current_target.to_terminal_info = debug_to_terminal_info;
2499 current_target.to_kill = debug_to_kill;
2500 current_target.to_load = debug_to_load;
2501 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2502 current_target.to_create_inferior = debug_to_create_inferior;
2503 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2504 current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
c906108c
SS
2505 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2506 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2507 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2508 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
6604731b 2509 current_target.to_follow_fork = debug_to_follow_fork;
c906108c
SS
2510 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2511 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
c906108c 2512 current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
c906108c
SS
2513 current_target.to_has_exited = debug_to_has_exited;
2514 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2515 current_target.to_can_run = debug_to_can_run;
2516 current_target.to_notice_signals = debug_to_notice_signals;
2517 current_target.to_thread_alive = debug_to_thread_alive;
0d06e24b 2518 current_target.to_find_new_threads = debug_to_find_new_threads;
c906108c 2519 current_target.to_stop = debug_to_stop;
96baa820 2520 current_target.to_rcmd = debug_to_rcmd;
c906108c
SS
2521 current_target.to_enable_exception_callback = debug_to_enable_exception_callback;
2522 current_target.to_get_current_exception_event = debug_to_get_current_exception_event;
2523 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
c906108c
SS
2524
2525}
c906108c 2526\f
c5aa993b
JM
2527
2528static char targ_desc[] =
2529"Names of targets and files being debugged.\n\
c906108c
SS
2530Shows the entire stack of targets currently in use (including the exec-file,\n\
2531core-file, and process, if any), as well as the symbol file name.";
2532
96baa820
JM
2533static void
2534do_monitor_command (char *cmd,
2535 int from_tty)
2536{
2b5fe715
AC
2537 if ((current_target.to_rcmd
2538 == (void (*) (char *, struct ui_file *)) tcomplain)
96baa820 2539 || (current_target.to_rcmd == debug_to_rcmd
2b5fe715
AC
2540 && (debug_target.to_rcmd
2541 == (void (*) (char *, struct ui_file *)) tcomplain)))
8a3fe4f8 2542 error (_("\"monitor\" command not supported by this target."));
96baa820
JM
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\
335cca0d
AC
2570result in significant performance improvement for remote targets.",
2571 NULL, /* PRINT: Mode 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.941896 seconds and 4 git commands to generate.