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