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