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