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