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