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