* Makefile.in (objfiles.o, symfile.o): Update.
[deliverable/binutils-gdb.git] / gdb / target.c
CommitLineData
c906108c 1/* Select target systems and architectures at runtime for GDB.
7998dfc3 2
197e01b6 3 Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
f6519ebc
MK
4 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
5 Free Software Foundation, Inc.
7998dfc3 6
c906108c
SS
7 Contributed by Cygnus Support.
8
c5aa993b 9 This file is part of GDB.
c906108c 10
c5aa993b
JM
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
c906108c 15
c5aa993b
JM
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
c906108c 20
c5aa993b
JM
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
197e01b6
EZ
23 Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 Boston, MA 02110-1301, USA. */
c906108c
SS
25
26#include "defs.h"
27#include <errno.h>
c906108c
SS
28#include "gdb_string.h"
29#include "target.h"
30#include "gdbcmd.h"
31#include "symtab.h"
32#include "inferior.h"
33#include "bfd.h"
34#include "symfile.h"
35#include "objfiles.h"
03f2053f 36#include "gdb_wait.h"
4930751a 37#include "dcache.h"
c906108c 38#include <signal.h>
4e052eda 39#include "regcache.h"
0088c768 40#include "gdb_assert.h"
b6591e8b 41#include "gdbcore.h"
c906108c 42
a14ed312 43static void target_info (char *, int);
c906108c 44
a14ed312 45static void maybe_kill_then_attach (char *, int);
c906108c 46
a14ed312 47static void kill_or_be_killed (int);
c906108c 48
a14ed312 49static void default_terminal_info (char *, int);
c906108c 50
e0d24f8d
WZ
51static int default_region_ok_for_hw_watchpoint (CORE_ADDR, int);
52
a14ed312 53static int nosymbol (char *, CORE_ADDR *);
c906108c 54
4ecb6f27 55static void tcomplain (void) ATTR_NORETURN;
c906108c 56
a14ed312 57static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
c906108c 58
a14ed312 59static int return_zero (void);
c906108c 60
a14ed312 61static int return_one (void);
c906108c 62
ccaa32c7
GS
63static int return_minus_one (void);
64
a14ed312 65void target_ignore (void);
c906108c 66
a14ed312 67static void target_command (char *, int);
c906108c 68
a14ed312 69static struct target_ops *find_default_run_target (char *);
c906108c 70
a14ed312 71static void nosupport_runtime (void);
392a587b 72
4b8a223f 73static LONGEST default_xfer_partial (struct target_ops *ops,
0088c768 74 enum target_object object,
1b0ba102
AC
75 const char *annex, gdb_byte *readbuf,
76 const gdb_byte *writebuf,
8aa91c1e 77 ULONGEST offset, LONGEST len);
0088c768 78
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
13547ab6 1344static LONGEST
1e3ff5ad
AC
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
13547ab6 1353static LONGEST
1e3ff5ad
AC
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? */
13547ab6
DJ
1376 if (xfer == 0)
1377 return xfered;
1378 if (xfer < 0)
0088c768 1379 return -1;
1e3ff5ad
AC
1380 xfered += xfer;
1381 QUIT;
1382 }
1383 return len;
1384}
1385
1386LONGEST
1387target_write (struct target_ops *ops,
1388 enum target_object object,
1b0ba102 1389 const char *annex, const gdb_byte *buf,
1e3ff5ad
AC
1390 ULONGEST offset, LONGEST len)
1391{
1392 LONGEST xfered = 0;
1393 while (xfered < len)
1394 {
1395 LONGEST xfer = target_write_partial (ops, object, annex,
fc1a4b47 1396 (gdb_byte *) buf + xfered,
1e3ff5ad
AC
1397 offset + xfered, len - xfered);
1398 /* Call an observer, notifying them of the xfer progress? */
13547ab6
DJ
1399 if (xfer == 0)
1400 return xfered;
1401 if (xfer < 0)
0088c768 1402 return -1;
1e3ff5ad
AC
1403 xfered += xfer;
1404 QUIT;
1405 }
1406 return len;
1407}
1408
159f81f3
DJ
1409/* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
1410 the size of the transferred data. PADDING additional bytes are
1411 available in *BUF_P. This is a helper function for
1412 target_read_alloc; see the declaration of that function for more
1413 information. */
13547ab6 1414
159f81f3
DJ
1415static LONGEST
1416target_read_alloc_1 (struct target_ops *ops, enum target_object object,
1417 const char *annex, gdb_byte **buf_p, int padding)
13547ab6
DJ
1418{
1419 size_t buf_alloc, buf_pos;
1420 gdb_byte *buf;
1421 LONGEST n;
1422
1423 /* This function does not have a length parameter; it reads the
1424 entire OBJECT). Also, it doesn't support objects fetched partly
1425 from one target and partly from another (in a different stratum,
1426 e.g. a core file and an executable). Both reasons make it
1427 unsuitable for reading memory. */
1428 gdb_assert (object != TARGET_OBJECT_MEMORY);
1429
1430 /* Start by reading up to 4K at a time. The target will throttle
1431 this number down if necessary. */
1432 buf_alloc = 4096;
1433 buf = xmalloc (buf_alloc);
1434 buf_pos = 0;
1435 while (1)
1436 {
1437 n = target_read_partial (ops, object, annex, &buf[buf_pos],
159f81f3 1438 buf_pos, buf_alloc - buf_pos - padding);
13547ab6
DJ
1439 if (n < 0)
1440 {
1441 /* An error occurred. */
1442 xfree (buf);
1443 return -1;
1444 }
1445 else if (n == 0)
1446 {
1447 /* Read all there was. */
1448 if (buf_pos == 0)
1449 xfree (buf);
1450 else
1451 *buf_p = buf;
1452 return buf_pos;
1453 }
1454
1455 buf_pos += n;
1456
1457 /* If the buffer is filling up, expand it. */
1458 if (buf_alloc < buf_pos * 2)
1459 {
1460 buf_alloc *= 2;
1461 buf = xrealloc (buf, buf_alloc);
1462 }
1463
1464 QUIT;
1465 }
1466}
1467
159f81f3
DJ
1468/* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
1469 the size of the transferred data. See the declaration in "target.h"
1470 function for more information about the return value. */
1471
1472LONGEST
1473target_read_alloc (struct target_ops *ops, enum target_object object,
1474 const char *annex, gdb_byte **buf_p)
1475{
1476 return target_read_alloc_1 (ops, object, annex, buf_p, 0);
1477}
1478
1479/* Read OBJECT/ANNEX using OPS. The result is NUL-terminated and
1480 returned as a string, allocated using xmalloc. If an error occurs
1481 or the transfer is unsupported, NULL is returned. Empty objects
1482 are returned as allocated but empty strings. A warning is issued
1483 if the result contains any embedded NUL bytes. */
1484
1485char *
1486target_read_stralloc (struct target_ops *ops, enum target_object object,
1487 const char *annex)
1488{
1489 gdb_byte *buffer;
1490 LONGEST transferred;
1491
1492 transferred = target_read_alloc_1 (ops, object, annex, &buffer, 1);
1493
1494 if (transferred < 0)
1495 return NULL;
1496
1497 if (transferred == 0)
1498 return xstrdup ("");
1499
1500 buffer[transferred] = 0;
1501 if (strlen (buffer) < transferred)
1502 warning (_("target object %d, annex %s, "
1503 "contained unexpected null characters"),
1504 (int) object, annex ? annex : "(none)");
1505
1506 return (char *) buffer;
1507}
1508
b6591e8b
AC
1509/* Memory transfer methods. */
1510
1511void
1b0ba102 1512get_target_memory (struct target_ops *ops, CORE_ADDR addr, gdb_byte *buf,
b6591e8b
AC
1513 LONGEST len)
1514{
1515 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL, buf, addr, len)
1516 != len)
1517 memory_error (EIO, addr);
1518}
1519
1520ULONGEST
1521get_target_memory_unsigned (struct target_ops *ops,
1522 CORE_ADDR addr, int len)
1523{
f6519ebc 1524 gdb_byte buf[sizeof (ULONGEST)];
b6591e8b
AC
1525
1526 gdb_assert (len <= sizeof (buf));
1527 get_target_memory (ops, addr, buf, len);
1528 return extract_unsigned_integer (buf, len);
1529}
1530
c906108c 1531static void
fba45db2 1532target_info (char *args, int from_tty)
c906108c
SS
1533{
1534 struct target_ops *t;
c906108c 1535 int has_all_mem = 0;
c5aa993b 1536
c906108c 1537 if (symfile_objfile != NULL)
a3f17187 1538 printf_unfiltered (_("Symbols from \"%s\".\n"), symfile_objfile->name);
c906108c 1539
258b763a 1540 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 1541 {
c906108c
SS
1542 if (!t->to_has_memory)
1543 continue;
1544
c5aa993b 1545 if ((int) (t->to_stratum) <= (int) dummy_stratum)
c906108c
SS
1546 continue;
1547 if (has_all_mem)
a3f17187 1548 printf_unfiltered (_("\tWhile running this, GDB does not access memory from...\n"));
c5aa993b
JM
1549 printf_unfiltered ("%s:\n", t->to_longname);
1550 (t->to_files_info) (t);
c906108c
SS
1551 has_all_mem = t->to_has_all_memory;
1552 }
1553}
1554
1555/* This is to be called by the open routine before it does
1556 anything. */
1557
1558void
fba45db2 1559target_preopen (int from_tty)
c906108c 1560{
c5aa993b 1561 dont_repeat ();
c906108c
SS
1562
1563 if (target_has_execution)
c5aa993b 1564 {
adf40b2e 1565 if (!from_tty
e2e0b3e5 1566 || query (_("A program is being debugged already. Kill it? ")))
c5aa993b 1567 target_kill ();
c906108c 1568 else
8a3fe4f8 1569 error (_("Program not killed."));
c906108c
SS
1570 }
1571
1572 /* Calling target_kill may remove the target from the stack. But if
1573 it doesn't (which seems like a win for UDI), remove it now. */
1574
1575 if (target_has_execution)
1576 pop_target ();
1577}
1578
1579/* Detach a target after doing deferred register stores. */
1580
1581void
fba45db2 1582target_detach (char *args, int from_tty)
c906108c 1583{
c906108c
SS
1584 (current_target.to_detach) (args, from_tty);
1585}
1586
6ad8ae5c
DJ
1587void
1588target_disconnect (char *args, int from_tty)
1589{
597320e7
DJ
1590 struct target_ops *t;
1591
1592 for (t = current_target.beneath; t != NULL; t = t->beneath)
1593 if (t->to_disconnect != NULL)
1594 {
1595 if (targetdebug)
1596 fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
1597 args, from_tty);
1598 t->to_disconnect (t, args, from_tty);
1599 return;
1600 }
1601
1602 tcomplain ();
6ad8ae5c
DJ
1603}
1604
ed9a39eb
JM
1605int
1606target_async_mask (int mask)
1607{
1608 int saved_async_masked_status = target_async_mask_value;
1609 target_async_mask_value = mask;
1610 return saved_async_masked_status;
1611}
1612
ee057212
DJ
1613/* Look through the list of possible targets for a target that can
1614 follow forks. */
1615
1616int
1617target_follow_fork (int follow_child)
1618{
1619 struct target_ops *t;
1620
1621 for (t = current_target.beneath; t != NULL; t = t->beneath)
1622 {
1623 if (t->to_follow_fork != NULL)
1624 {
1625 int retval = t->to_follow_fork (t, follow_child);
1626 if (targetdebug)
1627 fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
1628 follow_child, retval);
1629 return retval;
1630 }
1631 }
1632
1633 /* Some target returned a fork event, but did not know how to follow it. */
1634 internal_error (__FILE__, __LINE__,
1635 "could not find a target to follow fork");
1636}
1637
c906108c
SS
1638/* Look through the list of possible targets for a target that can
1639 execute a run or attach command without any other data. This is
1640 used to locate the default process stratum.
1641
1642 Result is always valid (error() is called for errors). */
1643
1644static struct target_ops *
fba45db2 1645find_default_run_target (char *do_mesg)
c906108c
SS
1646{
1647 struct target_ops **t;
1648 struct target_ops *runable = NULL;
1649 int count;
1650
1651 count = 0;
1652
1653 for (t = target_structs; t < target_structs + target_struct_size;
1654 ++t)
1655 {
c5aa993b 1656 if ((*t)->to_can_run && target_can_run (*t))
c906108c
SS
1657 {
1658 runable = *t;
1659 ++count;
1660 }
1661 }
1662
1663 if (count != 1)
8a3fe4f8 1664 error (_("Don't know how to %s. Try \"help target\"."), do_mesg);
c906108c
SS
1665
1666 return runable;
1667}
1668
1669void
fba45db2 1670find_default_attach (char *args, int from_tty)
c906108c
SS
1671{
1672 struct target_ops *t;
1673
c5aa993b 1674 t = find_default_run_target ("attach");
c906108c
SS
1675 (t->to_attach) (args, from_tty);
1676 return;
1677}
1678
c906108c 1679void
c27cda74
AC
1680find_default_create_inferior (char *exec_file, char *allargs, char **env,
1681 int from_tty)
c906108c
SS
1682{
1683 struct target_ops *t;
1684
c5aa993b 1685 t = find_default_run_target ("run");
c27cda74 1686 (t->to_create_inferior) (exec_file, allargs, env, from_tty);
c906108c
SS
1687 return;
1688}
1689
e0d24f8d
WZ
1690static int
1691default_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
1692{
2a3cdf79 1693 return (len <= TYPE_LENGTH (builtin_type_void_data_ptr));
ccaa32c7
GS
1694}
1695
c906108c 1696static int
fba45db2 1697return_zero (void)
c906108c
SS
1698{
1699 return 0;
1700}
1701
1702static int
fba45db2 1703return_one (void)
c906108c
SS
1704{
1705 return 1;
1706}
1707
ccaa32c7
GS
1708static int
1709return_minus_one (void)
1710{
1711 return -1;
1712}
1713
6426a772
JM
1714/*
1715 * Resize the to_sections pointer. Also make sure that anyone that
1716 * was holding on to an old value of it gets updated.
1717 * Returns the old size.
1718 */
1719
1720int
1721target_resize_to_sections (struct target_ops *target, int num_added)
1722{
1723 struct target_ops **t;
1724 struct section_table *old_value;
1725 int old_count;
1726
1727 old_value = target->to_sections;
1728
1729 if (target->to_sections)
1730 {
1731 old_count = target->to_sections_end - target->to_sections;
1732 target->to_sections = (struct section_table *)
1733 xrealloc ((char *) target->to_sections,
1734 (sizeof (struct section_table)) * (num_added + old_count));
1735 }
1736 else
1737 {
1738 old_count = 0;
1739 target->to_sections = (struct section_table *)
1740 xmalloc ((sizeof (struct section_table)) * num_added);
1741 }
1742 target->to_sections_end = target->to_sections + (num_added + old_count);
1743
1744 /* Check to see if anyone else was pointing to this structure.
1745 If old_value was null, then no one was. */
1746
1747 if (old_value)
1748 {
1749 for (t = target_structs; t < target_structs + target_struct_size;
1750 ++t)
1751 {
1752 if ((*t)->to_sections == old_value)
1753 {
1754 (*t)->to_sections = target->to_sections;
1755 (*t)->to_sections_end = target->to_sections_end;
1756 }
1757 }
e354df01
NW
1758 /* There is a flattened view of the target stack in current_target,
1759 so its to_sections pointer might also need updating. */
1760 if (current_target.to_sections == old_value)
1761 {
1762 current_target.to_sections = target->to_sections;
1763 current_target.to_sections_end = target->to_sections_end;
1764 }
6426a772
JM
1765 }
1766
1767 return old_count;
1768
1769}
1770
07cd4b97
JB
1771/* Remove all target sections taken from ABFD.
1772
1773 Scan the current target stack for targets whose section tables
1774 refer to sections from BFD, and remove those sections. We use this
1775 when we notice that the inferior has unloaded a shared object, for
1776 example. */
1777void
1778remove_target_sections (bfd *abfd)
1779{
1780 struct target_ops **t;
1781
1782 for (t = target_structs; t < target_structs + target_struct_size; t++)
1783 {
1784 struct section_table *src, *dest;
1785
1786 dest = (*t)->to_sections;
1787 for (src = (*t)->to_sections; src < (*t)->to_sections_end; src++)
1788 if (src->bfd != abfd)
1789 {
1790 /* Keep this section. */
1791 if (dest < src) *dest = *src;
1792 dest++;
1793 }
1794
1795 /* If we've dropped any sections, resize the section table. */
1796 if (dest < src)
1797 target_resize_to_sections (*t, dest - src);
1798 }
1799}
1800
1801
1802
1803
7a292a7a
SS
1804/* Find a single runnable target in the stack and return it. If for
1805 some reason there is more than one, return NULL. */
1806
1807struct target_ops *
fba45db2 1808find_run_target (void)
7a292a7a
SS
1809{
1810 struct target_ops **t;
1811 struct target_ops *runable = NULL;
1812 int count;
c5aa993b 1813
7a292a7a 1814 count = 0;
c5aa993b 1815
7a292a7a
SS
1816 for (t = target_structs; t < target_structs + target_struct_size; ++t)
1817 {
c5aa993b 1818 if ((*t)->to_can_run && target_can_run (*t))
7a292a7a
SS
1819 {
1820 runable = *t;
1821 ++count;
1822 }
1823 }
c5aa993b 1824
7a292a7a
SS
1825 return (count == 1 ? runable : NULL);
1826}
1827
ed9a39eb
JM
1828/* Find a single core_stratum target in the list of targets and return it.
1829 If for some reason there is more than one, return NULL. */
1830
c906108c 1831struct target_ops *
fba45db2 1832find_core_target (void)
c906108c
SS
1833{
1834 struct target_ops **t;
1835 struct target_ops *runable = NULL;
1836 int count;
c5aa993b 1837
c906108c 1838 count = 0;
c5aa993b 1839
c906108c
SS
1840 for (t = target_structs; t < target_structs + target_struct_size;
1841 ++t)
1842 {
1843 if ((*t)->to_stratum == core_stratum)
1844 {
1845 runable = *t;
1846 ++count;
1847 }
1848 }
c5aa993b
JM
1849
1850 return (count == 1 ? runable : NULL);
c906108c 1851}
ed9a39eb
JM
1852
1853/*
1854 * Find the next target down the stack from the specified target.
1855 */
1856
1857struct target_ops *
fba45db2 1858find_target_beneath (struct target_ops *t)
ed9a39eb 1859{
258b763a 1860 return t->beneath;
ed9a39eb
JM
1861}
1862
c906108c
SS
1863\f
1864/* The inferior process has died. Long live the inferior! */
1865
1866void
fba45db2 1867generic_mourn_inferior (void)
c906108c
SS
1868{
1869 extern int show_breakpoint_hit_counts;
1870
39f77062 1871 inferior_ptid = null_ptid;
c906108c
SS
1872 attach_flag = 0;
1873 breakpoint_init_inferior (inf_exited);
1874 registers_changed ();
1875
c906108c
SS
1876 reopen_exec_file ();
1877 reinit_frame_cache ();
1878
1879 /* It is confusing to the user for ignore counts to stick around
1880 from previous runs of the inferior. So clear them. */
1881 /* However, it is more confusing for the ignore counts to disappear when
1882 using hit counts. So don't clear them if we're counting hits. */
1883 if (!show_breakpoint_hit_counts)
1884 breakpoint_clear_ignore_counts ();
c5b739b5 1885
9a4105ab
AC
1886 if (deprecated_detach_hook)
1887 deprecated_detach_hook ();
c906108c
SS
1888}
1889\f
c906108c
SS
1890/* Helper function for child_wait and the Lynx derivatives of child_wait.
1891 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1892 translation of that in OURSTATUS. */
1893void
fba45db2 1894store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
c906108c
SS
1895{
1896#ifdef CHILD_SPECIAL_WAITSTATUS
1897 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
1898 if it wants to deal with hoststatus. */
1899 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
1900 return;
1901#endif
1902
1903 if (WIFEXITED (hoststatus))
1904 {
1905 ourstatus->kind = TARGET_WAITKIND_EXITED;
1906 ourstatus->value.integer = WEXITSTATUS (hoststatus);
1907 }
1908 else if (!WIFSTOPPED (hoststatus))
1909 {
1910 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1911 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1912 }
1913 else
1914 {
1915 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1916 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1917 }
1918}
1919\f
c906108c 1920/* Returns zero to leave the inferior alone, one to interrupt it. */
507f3c78 1921int (*target_activity_function) (void);
c906108c
SS
1922int target_activity_fd;
1923\f
fd0a2a6f
MK
1924/* Convert a normal process ID to a string. Returns the string in a
1925 static buffer. */
c906108c
SS
1926
1927char *
39f77062 1928normal_pid_to_str (ptid_t ptid)
c906108c 1929{
fd0a2a6f 1930 static char buf[32];
c906108c 1931
5fff8fc0 1932 xsnprintf (buf, sizeof buf, "process %d", ptid_get_pid (ptid));
c906108c
SS
1933 return buf;
1934}
1935
be4d1333 1936/* Error-catcher for target_find_memory_regions */
be4d1333
MS
1937static int dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
1938{
8a3fe4f8 1939 error (_("No target."));
be4d1333
MS
1940 return 0;
1941}
1942
1943/* Error-catcher for target_make_corefile_notes */
be4d1333
MS
1944static char * dummy_make_corefile_notes (bfd *ignore1, int *ignore2)
1945{
8a3fe4f8 1946 error (_("No target."));
be4d1333
MS
1947 return NULL;
1948}
1949
c906108c
SS
1950/* Set up the handful of non-empty slots needed by the dummy target
1951 vector. */
1952
1953static void
fba45db2 1954init_dummy_target (void)
c906108c
SS
1955{
1956 dummy_target.to_shortname = "None";
1957 dummy_target.to_longname = "None";
1958 dummy_target.to_doc = "";
1959 dummy_target.to_attach = find_default_attach;
c906108c 1960 dummy_target.to_create_inferior = find_default_create_inferior;
ed9a39eb 1961 dummy_target.to_pid_to_str = normal_pid_to_str;
c906108c 1962 dummy_target.to_stratum = dummy_stratum;
be4d1333
MS
1963 dummy_target.to_find_memory_regions = dummy_find_memory_regions;
1964 dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
0b603eba 1965 dummy_target.to_xfer_partial = default_xfer_partial;
c906108c
SS
1966 dummy_target.to_magic = OPS_MAGIC;
1967}
c906108c 1968\f
c906108c 1969static void
fba45db2 1970debug_to_open (char *args, int from_tty)
c906108c
SS
1971{
1972 debug_target.to_open (args, from_tty);
1973
96baa820 1974 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
c906108c
SS
1975}
1976
1977static void
fba45db2 1978debug_to_close (int quitting)
c906108c 1979{
f1c07ab0 1980 target_close (&debug_target, quitting);
96baa820 1981 fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
c906108c
SS
1982}
1983
f1c07ab0
AC
1984void
1985target_close (struct target_ops *targ, int quitting)
1986{
1987 if (targ->to_xclose != NULL)
1988 targ->to_xclose (targ, quitting);
1989 else if (targ->to_close != NULL)
1990 targ->to_close (quitting);
1991}
1992
c906108c 1993static void
fba45db2 1994debug_to_attach (char *args, int from_tty)
c906108c
SS
1995{
1996 debug_target.to_attach (args, from_tty);
1997
96baa820 1998 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n", args, from_tty);
c906108c
SS
1999}
2000
2001
2002static void
fba45db2 2003debug_to_post_attach (int pid)
c906108c
SS
2004{
2005 debug_target.to_post_attach (pid);
2006
96baa820 2007 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
c906108c
SS
2008}
2009
c906108c 2010static void
fba45db2 2011debug_to_detach (char *args, int from_tty)
c906108c
SS
2012{
2013 debug_target.to_detach (args, from_tty);
2014
96baa820 2015 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n", args, from_tty);
c906108c
SS
2016}
2017
c906108c 2018static void
39f77062 2019debug_to_resume (ptid_t ptid, int step, enum target_signal siggnal)
c906108c 2020{
39f77062 2021 debug_target.to_resume (ptid, step, siggnal);
c906108c 2022
39f77062 2023 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n", PIDGET (ptid),
c906108c
SS
2024 step ? "step" : "continue",
2025 target_signal_to_name (siggnal));
2026}
2027
39f77062
KB
2028static ptid_t
2029debug_to_wait (ptid_t ptid, struct target_waitstatus *status)
c906108c 2030{
39f77062 2031 ptid_t retval;
c906108c 2032
39f77062 2033 retval = debug_target.to_wait (ptid, status);
c906108c 2034
96baa820 2035 fprintf_unfiltered (gdb_stdlog,
39f77062
KB
2036 "target_wait (%d, status) = %d, ", PIDGET (ptid),
2037 PIDGET (retval));
96baa820 2038 fprintf_unfiltered (gdb_stdlog, "status->kind = ");
c906108c
SS
2039 switch (status->kind)
2040 {
2041 case TARGET_WAITKIND_EXITED:
96baa820 2042 fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n",
c906108c
SS
2043 status->value.integer);
2044 break;
2045 case TARGET_WAITKIND_STOPPED:
96baa820 2046 fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n",
c906108c
SS
2047 target_signal_to_name (status->value.sig));
2048 break;
2049 case TARGET_WAITKIND_SIGNALLED:
96baa820 2050 fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n",
c906108c
SS
2051 target_signal_to_name (status->value.sig));
2052 break;
2053 case TARGET_WAITKIND_LOADED:
96baa820 2054 fprintf_unfiltered (gdb_stdlog, "loaded\n");
c906108c
SS
2055 break;
2056 case TARGET_WAITKIND_FORKED:
96baa820 2057 fprintf_unfiltered (gdb_stdlog, "forked\n");
c906108c
SS
2058 break;
2059 case TARGET_WAITKIND_VFORKED:
96baa820 2060 fprintf_unfiltered (gdb_stdlog, "vforked\n");
c906108c
SS
2061 break;
2062 case TARGET_WAITKIND_EXECD:
96baa820 2063 fprintf_unfiltered (gdb_stdlog, "execd\n");
c906108c
SS
2064 break;
2065 case TARGET_WAITKIND_SPURIOUS:
96baa820 2066 fprintf_unfiltered (gdb_stdlog, "spurious\n");
c906108c
SS
2067 break;
2068 default:
96baa820 2069 fprintf_unfiltered (gdb_stdlog, "unknown???\n");
c906108c
SS
2070 break;
2071 }
2072
2073 return retval;
2074}
2075
bf0c5130
AC
2076static void
2077debug_print_register (const char * func, int regno)
2078{
2079 fprintf_unfiltered (gdb_stdlog, "%s ", func);
2080 if (regno >= 0 && regno < NUM_REGS + NUM_PSEUDO_REGS
2081 && REGISTER_NAME (regno) != NULL && REGISTER_NAME (regno)[0] != '\0')
2082 fprintf_unfiltered (gdb_stdlog, "(%s)", REGISTER_NAME (regno));
2083 else
2084 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
2085 if (regno >= 0)
2086 {
2087 int i;
d9d9c31f 2088 unsigned char buf[MAX_REGISTER_SIZE];
4caf0990 2089 deprecated_read_register_gen (regno, buf);
bf0c5130 2090 fprintf_unfiltered (gdb_stdlog, " = ");
3acba339 2091 for (i = 0; i < register_size (current_gdbarch, regno); i++)
bf0c5130
AC
2092 {
2093 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
2094 }
3acba339 2095 if (register_size (current_gdbarch, regno) <= sizeof (LONGEST))
bf0c5130
AC
2096 {
2097 fprintf_unfiltered (gdb_stdlog, " 0x%s %s",
2098 paddr_nz (read_register (regno)),
2099 paddr_d (read_register (regno)));
2100 }
2101 }
2102 fprintf_unfiltered (gdb_stdlog, "\n");
2103}
2104
c906108c 2105static void
fba45db2 2106debug_to_fetch_registers (int regno)
c906108c
SS
2107{
2108 debug_target.to_fetch_registers (regno);
bf0c5130 2109 debug_print_register ("target_fetch_registers", regno);
c906108c
SS
2110}
2111
2112static void
fba45db2 2113debug_to_store_registers (int regno)
c906108c
SS
2114{
2115 debug_target.to_store_registers (regno);
bf0c5130
AC
2116 debug_print_register ("target_store_registers", regno);
2117 fprintf_unfiltered (gdb_stdlog, "\n");
c906108c
SS
2118}
2119
2120static void
fba45db2 2121debug_to_prepare_to_store (void)
c906108c
SS
2122{
2123 debug_target.to_prepare_to_store ();
2124
96baa820 2125 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
c906108c
SS
2126}
2127
2128static int
961cb7b5 2129deprecated_debug_xfer_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len,
c8e73a31
AC
2130 int write, struct mem_attrib *attrib,
2131 struct target_ops *target)
c906108c
SS
2132{
2133 int retval;
2134
c8e73a31
AC
2135 retval = debug_target.deprecated_xfer_memory (memaddr, myaddr, len, write,
2136 attrib, target);
c906108c 2137
96baa820 2138 fprintf_unfiltered (gdb_stdlog,
c906108c 2139 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
c5aa993b 2140 (unsigned int) memaddr, /* possable truncate long long */
c906108c
SS
2141 len, write ? "write" : "read", retval);
2142
c906108c
SS
2143 if (retval > 0)
2144 {
2145 int i;
2146
96baa820 2147 fputs_unfiltered (", bytes =", gdb_stdlog);
c906108c
SS
2148 for (i = 0; i < retval; i++)
2149 {
2150 if ((((long) &(myaddr[i])) & 0xf) == 0)
333dabeb
DJ
2151 {
2152 if (targetdebug < 2 && i > 0)
2153 {
2154 fprintf_unfiltered (gdb_stdlog, " ...");
2155 break;
2156 }
2157 fprintf_unfiltered (gdb_stdlog, "\n");
2158 }
2159
96baa820 2160 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
c906108c
SS
2161 }
2162 }
2163
96baa820 2164 fputc_unfiltered ('\n', gdb_stdlog);
c906108c
SS
2165
2166 return retval;
2167}
2168
2169static void
fba45db2 2170debug_to_files_info (struct target_ops *target)
c906108c
SS
2171{
2172 debug_target.to_files_info (target);
2173
96baa820 2174 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
c906108c
SS
2175}
2176
2177static int
8181d85f 2178debug_to_insert_breakpoint (struct bp_target_info *bp_tgt)
c906108c
SS
2179{
2180 int retval;
2181
8181d85f 2182 retval = debug_target.to_insert_breakpoint (bp_tgt);
c906108c 2183
96baa820 2184 fprintf_unfiltered (gdb_stdlog,
104c1213 2185 "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
8181d85f 2186 (unsigned long) bp_tgt->placed_address,
104c1213 2187 (unsigned long) retval);
c906108c
SS
2188 return retval;
2189}
2190
2191static int
8181d85f 2192debug_to_remove_breakpoint (struct bp_target_info *bp_tgt)
c906108c
SS
2193{
2194 int retval;
2195
8181d85f 2196 retval = debug_target.to_remove_breakpoint (bp_tgt);
c906108c 2197
96baa820 2198 fprintf_unfiltered (gdb_stdlog,
104c1213 2199 "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
8181d85f 2200 (unsigned long) bp_tgt->placed_address,
104c1213 2201 (unsigned long) retval);
c906108c
SS
2202 return retval;
2203}
2204
ccaa32c7
GS
2205static int
2206debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
2207{
2208 int retval;
2209
2210 retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
2211
2212 fprintf_unfiltered (gdb_stdlog,
2213 "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
2214 (unsigned long) type,
2215 (unsigned long) cnt,
2216 (unsigned long) from_tty,
2217 (unsigned long) retval);
2218 return retval;
2219}
2220
e0d24f8d
WZ
2221static int
2222debug_to_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
2223{
2224 CORE_ADDR retval;
2225
2226 retval = debug_target.to_region_ok_for_hw_watchpoint (addr, len);
2227
2228 fprintf_unfiltered (gdb_stdlog,
2229 "TARGET_REGION_OK_FOR_HW_WATCHPOINT (%ld, %ld) = 0x%lx\n",
2230 (unsigned long) addr,
2231 (unsigned long) len,
2232 (unsigned long) retval);
2233 return retval;
2234}
2235
ccaa32c7
GS
2236static int
2237debug_to_stopped_by_watchpoint (void)
2238{
2239 int retval;
2240
2241 retval = debug_target.to_stopped_by_watchpoint ();
2242
2243 fprintf_unfiltered (gdb_stdlog,
2244 "STOPPED_BY_WATCHPOINT () = %ld\n",
2245 (unsigned long) retval);
2246 return retval;
2247}
2248
4aa7a7f5
JJ
2249static int
2250debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
ccaa32c7 2251{
4aa7a7f5 2252 int retval;
ccaa32c7 2253
4aa7a7f5 2254 retval = debug_target.to_stopped_data_address (target, addr);
ccaa32c7
GS
2255
2256 fprintf_unfiltered (gdb_stdlog,
4aa7a7f5
JJ
2257 "target_stopped_data_address ([0x%lx]) = %ld\n",
2258 (unsigned long)*addr,
2259 (unsigned long)retval);
ccaa32c7
GS
2260 return retval;
2261}
2262
2263static int
8181d85f 2264debug_to_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
ccaa32c7
GS
2265{
2266 int retval;
2267
8181d85f 2268 retval = debug_target.to_insert_hw_breakpoint (bp_tgt);
ccaa32c7
GS
2269
2270 fprintf_unfiltered (gdb_stdlog,
2271 "target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
8181d85f 2272 (unsigned long) bp_tgt->placed_address,
ccaa32c7
GS
2273 (unsigned long) retval);
2274 return retval;
2275}
2276
2277static int
8181d85f 2278debug_to_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
ccaa32c7
GS
2279{
2280 int retval;
2281
8181d85f 2282 retval = debug_target.to_remove_hw_breakpoint (bp_tgt);
ccaa32c7
GS
2283
2284 fprintf_unfiltered (gdb_stdlog,
2285 "target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
8181d85f 2286 (unsigned long) bp_tgt->placed_address,
ccaa32c7
GS
2287 (unsigned long) retval);
2288 return retval;
2289}
2290
2291static int
2292debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type)
2293{
2294 int retval;
2295
2296 retval = debug_target.to_insert_watchpoint (addr, len, type);
2297
2298 fprintf_unfiltered (gdb_stdlog,
2299 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2300 (unsigned long) addr, len, type, (unsigned long) retval);
2301 return retval;
2302}
2303
2304static int
2305debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type)
2306{
2307 int retval;
2308
2309 retval = debug_target.to_insert_watchpoint (addr, len, type);
2310
2311 fprintf_unfiltered (gdb_stdlog,
2312 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2313 (unsigned long) addr, len, type, (unsigned long) retval);
2314 return retval;
2315}
2316
c906108c 2317static void
fba45db2 2318debug_to_terminal_init (void)
c906108c
SS
2319{
2320 debug_target.to_terminal_init ();
2321
96baa820 2322 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
c906108c
SS
2323}
2324
2325static void
fba45db2 2326debug_to_terminal_inferior (void)
c906108c
SS
2327{
2328 debug_target.to_terminal_inferior ();
2329
96baa820 2330 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
c906108c
SS
2331}
2332
2333static void
fba45db2 2334debug_to_terminal_ours_for_output (void)
c906108c
SS
2335{
2336 debug_target.to_terminal_ours_for_output ();
2337
96baa820 2338 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
c906108c
SS
2339}
2340
2341static void
fba45db2 2342debug_to_terminal_ours (void)
c906108c
SS
2343{
2344 debug_target.to_terminal_ours ();
2345
96baa820 2346 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
c906108c
SS
2347}
2348
a790ad35
SC
2349static void
2350debug_to_terminal_save_ours (void)
2351{
2352 debug_target.to_terminal_save_ours ();
2353
2354 fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
2355}
2356
c906108c 2357static void
fba45db2 2358debug_to_terminal_info (char *arg, int from_tty)
c906108c
SS
2359{
2360 debug_target.to_terminal_info (arg, from_tty);
2361
96baa820 2362 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
c906108c
SS
2363 from_tty);
2364}
2365
2366static void
fba45db2 2367debug_to_kill (void)
c906108c
SS
2368{
2369 debug_target.to_kill ();
2370
96baa820 2371 fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
c906108c
SS
2372}
2373
2374static void
fba45db2 2375debug_to_load (char *args, int from_tty)
c906108c
SS
2376{
2377 debug_target.to_load (args, from_tty);
2378
96baa820 2379 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
c906108c
SS
2380}
2381
2382static int
fba45db2 2383debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
c906108c
SS
2384{
2385 int retval;
2386
2387 retval = debug_target.to_lookup_symbol (name, addrp);
2388
96baa820 2389 fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
c906108c
SS
2390
2391 return retval;
2392}
2393
2394static void
c27cda74
AC
2395debug_to_create_inferior (char *exec_file, char *args, char **env,
2396 int from_tty)
c906108c 2397{
c27cda74 2398 debug_target.to_create_inferior (exec_file, args, env, from_tty);
c906108c 2399
c27cda74
AC
2400 fprintf_unfiltered (gdb_stdlog, "target_create_inferior (%s, %s, xxx, %d)\n",
2401 exec_file, args, from_tty);
c906108c
SS
2402}
2403
2404static void
39f77062 2405debug_to_post_startup_inferior (ptid_t ptid)
c906108c 2406{
39f77062 2407 debug_target.to_post_startup_inferior (ptid);
c906108c 2408
96baa820 2409 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
39f77062 2410 PIDGET (ptid));
c906108c
SS
2411}
2412
2413static void
fba45db2 2414debug_to_acknowledge_created_inferior (int pid)
c906108c
SS
2415{
2416 debug_target.to_acknowledge_created_inferior (pid);
2417
96baa820 2418 fprintf_unfiltered (gdb_stdlog, "target_acknowledge_created_inferior (%d)\n",
c906108c
SS
2419 pid);
2420}
2421
fa113d1a 2422static void
fba45db2 2423debug_to_insert_fork_catchpoint (int pid)
c906108c 2424{
fa113d1a 2425 debug_target.to_insert_fork_catchpoint (pid);
c906108c 2426
fa113d1a
AC
2427 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d)\n",
2428 pid);
c906108c
SS
2429}
2430
2431static int
fba45db2 2432debug_to_remove_fork_catchpoint (int pid)
c906108c 2433{
c5aa993b 2434 int retval;
c906108c
SS
2435
2436 retval = debug_target.to_remove_fork_catchpoint (pid);
2437
96baa820 2438 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
c5aa993b 2439 pid, retval);
c906108c
SS
2440
2441 return retval;
2442}
2443
fa113d1a 2444static void
fba45db2 2445debug_to_insert_vfork_catchpoint (int pid)
c906108c 2446{
fa113d1a 2447 debug_target.to_insert_vfork_catchpoint (pid);
c906108c 2448
fa113d1a
AC
2449 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d)\n",
2450 pid);
c906108c
SS
2451}
2452
2453static int
fba45db2 2454debug_to_remove_vfork_catchpoint (int pid)
c906108c 2455{
c5aa993b 2456 int retval;
c906108c
SS
2457
2458 retval = debug_target.to_remove_vfork_catchpoint (pid);
2459
96baa820 2460 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
c5aa993b 2461 pid, retval);
c906108c
SS
2462
2463 return retval;
2464}
2465
fa113d1a 2466static void
fba45db2 2467debug_to_insert_exec_catchpoint (int pid)
c906108c 2468{
fa113d1a 2469 debug_target.to_insert_exec_catchpoint (pid);
c906108c 2470
fa113d1a
AC
2471 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d)\n",
2472 pid);
c906108c
SS
2473}
2474
2475static int
fba45db2 2476debug_to_remove_exec_catchpoint (int pid)
c906108c 2477{
c5aa993b 2478 int retval;
c906108c
SS
2479
2480 retval = debug_target.to_remove_exec_catchpoint (pid);
2481
96baa820 2482 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
c5aa993b 2483 pid, retval);
c906108c
SS
2484
2485 return retval;
2486}
2487
c906108c 2488static int
fba45db2 2489debug_to_reported_exec_events_per_exec_call (void)
c906108c 2490{
c5aa993b 2491 int reported_exec_events;
c906108c
SS
2492
2493 reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2494
96baa820 2495 fprintf_unfiltered (gdb_stdlog,
c906108c 2496 "target_reported_exec_events_per_exec_call () = %d\n",
c5aa993b 2497 reported_exec_events);
c906108c
SS
2498
2499 return reported_exec_events;
2500}
2501
c906108c 2502static int
fba45db2 2503debug_to_has_exited (int pid, int wait_status, int *exit_status)
c906108c 2504{
c5aa993b 2505 int has_exited;
c906108c
SS
2506
2507 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2508
96baa820 2509 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
c5aa993b 2510 pid, wait_status, *exit_status, has_exited);
c906108c
SS
2511
2512 return has_exited;
2513}
2514
2515static void
fba45db2 2516debug_to_mourn_inferior (void)
c906108c
SS
2517{
2518 debug_target.to_mourn_inferior ();
2519
96baa820 2520 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
c906108c
SS
2521}
2522
2523static int
fba45db2 2524debug_to_can_run (void)
c906108c
SS
2525{
2526 int retval;
2527
2528 retval = debug_target.to_can_run ();
2529
96baa820 2530 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
c906108c
SS
2531
2532 return retval;
2533}
2534
2535static void
39f77062 2536debug_to_notice_signals (ptid_t ptid)
c906108c 2537{
39f77062 2538 debug_target.to_notice_signals (ptid);
c906108c 2539
39f77062
KB
2540 fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n",
2541 PIDGET (ptid));
c906108c
SS
2542}
2543
2544static int
39f77062 2545debug_to_thread_alive (ptid_t ptid)
c906108c
SS
2546{
2547 int retval;
2548
39f77062 2549 retval = debug_target.to_thread_alive (ptid);
c906108c 2550
96baa820 2551 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
39f77062 2552 PIDGET (ptid), retval);
c906108c
SS
2553
2554 return retval;
2555}
2556
0d06e24b 2557static void
fba45db2 2558debug_to_find_new_threads (void)
0d06e24b
JM
2559{
2560 debug_target.to_find_new_threads ();
2561
2562 fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
2563}
2564
c906108c 2565static void
fba45db2 2566debug_to_stop (void)
c906108c
SS
2567{
2568 debug_target.to_stop ();
2569
96baa820 2570 fprintf_unfiltered (gdb_stdlog, "target_stop ()\n");
c906108c
SS
2571}
2572
96baa820
JM
2573static void
2574debug_to_rcmd (char *command,
d9fcf2fb 2575 struct ui_file *outbuf)
96baa820
JM
2576{
2577 debug_target.to_rcmd (command, outbuf);
2578 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
2579}
2580
c906108c 2581static struct symtab_and_line *
fba45db2 2582debug_to_enable_exception_callback (enum exception_event_kind kind, int enable)
c906108c 2583{
7a292a7a
SS
2584 struct symtab_and_line *result;
2585 result = debug_target.to_enable_exception_callback (kind, enable);
96baa820 2586 fprintf_unfiltered (gdb_stdlog,
c906108c
SS
2587 "target get_exception_callback_sal (%d, %d)\n",
2588 kind, enable);
7a292a7a 2589 return result;
c906108c
SS
2590}
2591
2592static struct exception_event_record *
fba45db2 2593debug_to_get_current_exception_event (void)
c906108c 2594{
7a292a7a 2595 struct exception_event_record *result;
c5aa993b 2596 result = debug_target.to_get_current_exception_event ();
96baa820 2597 fprintf_unfiltered (gdb_stdlog, "target get_current_exception_event ()\n");
7a292a7a 2598 return result;
c906108c
SS
2599}
2600
2601static char *
fba45db2 2602debug_to_pid_to_exec_file (int pid)
c906108c 2603{
c5aa993b 2604 char *exec_file;
c906108c
SS
2605
2606 exec_file = debug_target.to_pid_to_exec_file (pid);
2607
96baa820 2608 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
c5aa993b 2609 pid, exec_file);
c906108c
SS
2610
2611 return exec_file;
2612}
2613
c906108c 2614static void
fba45db2 2615setup_target_debug (void)
c906108c
SS
2616{
2617 memcpy (&debug_target, &current_target, sizeof debug_target);
2618
2619 current_target.to_open = debug_to_open;
2620 current_target.to_close = debug_to_close;
2621 current_target.to_attach = debug_to_attach;
2622 current_target.to_post_attach = debug_to_post_attach;
c906108c 2623 current_target.to_detach = debug_to_detach;
c906108c
SS
2624 current_target.to_resume = debug_to_resume;
2625 current_target.to_wait = debug_to_wait;
c906108c
SS
2626 current_target.to_fetch_registers = debug_to_fetch_registers;
2627 current_target.to_store_registers = debug_to_store_registers;
2628 current_target.to_prepare_to_store = debug_to_prepare_to_store;
c8e73a31 2629 current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory;
c906108c
SS
2630 current_target.to_files_info = debug_to_files_info;
2631 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2632 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
ccaa32c7
GS
2633 current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
2634 current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
2635 current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
2636 current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
2637 current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
2638 current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
2639 current_target.to_stopped_data_address = debug_to_stopped_data_address;
e0d24f8d 2640 current_target.to_region_ok_for_hw_watchpoint = debug_to_region_ok_for_hw_watchpoint;
c906108c
SS
2641 current_target.to_terminal_init = debug_to_terminal_init;
2642 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2643 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2644 current_target.to_terminal_ours = debug_to_terminal_ours;
a790ad35 2645 current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
c906108c
SS
2646 current_target.to_terminal_info = debug_to_terminal_info;
2647 current_target.to_kill = debug_to_kill;
2648 current_target.to_load = debug_to_load;
2649 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2650 current_target.to_create_inferior = debug_to_create_inferior;
2651 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2652 current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
c906108c
SS
2653 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2654 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2655 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2656 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
c906108c
SS
2657 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2658 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
c906108c 2659 current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
c906108c
SS
2660 current_target.to_has_exited = debug_to_has_exited;
2661 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2662 current_target.to_can_run = debug_to_can_run;
2663 current_target.to_notice_signals = debug_to_notice_signals;
2664 current_target.to_thread_alive = debug_to_thread_alive;
0d06e24b 2665 current_target.to_find_new_threads = debug_to_find_new_threads;
c906108c 2666 current_target.to_stop = debug_to_stop;
96baa820 2667 current_target.to_rcmd = debug_to_rcmd;
c906108c
SS
2668 current_target.to_enable_exception_callback = debug_to_enable_exception_callback;
2669 current_target.to_get_current_exception_event = debug_to_get_current_exception_event;
2670 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
c906108c 2671}
c906108c 2672\f
c5aa993b
JM
2673
2674static char targ_desc[] =
2675"Names of targets and files being debugged.\n\
c906108c
SS
2676Shows the entire stack of targets currently in use (including the exec-file,\n\
2677core-file, and process, if any), as well as the symbol file name.";
2678
96baa820
JM
2679static void
2680do_monitor_command (char *cmd,
2681 int from_tty)
2682{
2b5fe715
AC
2683 if ((current_target.to_rcmd
2684 == (void (*) (char *, struct ui_file *)) tcomplain)
96baa820 2685 || (current_target.to_rcmd == debug_to_rcmd
2b5fe715
AC
2686 && (debug_target.to_rcmd
2687 == (void (*) (char *, struct ui_file *)) tcomplain)))
8a3fe4f8 2688 error (_("\"monitor\" command not supported by this target."));
96baa820
JM
2689 target_rcmd (cmd, gdb_stdtarg);
2690}
2691
c906108c 2692void
fba45db2 2693initialize_targets (void)
c906108c
SS
2694{
2695 init_dummy_target ();
2696 push_target (&dummy_target);
2697
2698 add_info ("target", target_info, targ_desc);
2699 add_info ("files", target_info, targ_desc);
2700
85c07804
AC
2701 add_setshow_zinteger_cmd ("target", class_maintenance, &targetdebug, _("\
2702Set target debugging."), _("\
2703Show target debugging."), _("\
333dabeb
DJ
2704When non-zero, target debugging is enabled. Higher numbers are more\n\
2705verbose. Changes do not take effect until the next \"run\" or \"target\"\n\
85c07804
AC
2706command."),
2707 NULL,
920d2a44 2708 show_targetdebug,
85c07804 2709 &setdebuglist, &showdebuglist);
3a11626d 2710
e707bbc2 2711 add_setshow_boolean_cmd ("trust-readonly-sections", class_support,
7915a72c
AC
2712 &trust_readonly, _("\
2713Set mode for reading from readonly sections."), _("\
2714Show mode for reading from readonly sections."), _("\
3a11626d
MS
2715When this mode is on, memory reads from readonly sections (such as .text)\n\
2716will be read from the object file instead of from the target. This will\n\
7915a72c 2717result in significant performance improvement for remote targets."),
2c5b56ce 2718 NULL,
920d2a44 2719 show_trust_readonly,
e707bbc2 2720 &setlist, &showlist);
96baa820
JM
2721
2722 add_com ("monitor", class_obscure, do_monitor_command,
1bedd215 2723 _("Send a command to the remote monitor (remote targets only)."));
96baa820 2724
8add0441 2725 target_dcache = dcache_init ();
c906108c 2726}
This page took 0.758335 seconds and 4 git commands to generate.