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