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