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