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