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