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