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