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