2004-10-08 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / target.c
CommitLineData
c906108c 1/* Select target systems and architectures at runtime for GDB.
7998dfc3
AC
2
3 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
c6f0559b 4 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
7998dfc3 5
c906108c
SS
6 Contributed by Cygnus Support.
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b
JM
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
c906108c
SS
24
25#include "defs.h"
26#include <errno.h>
c906108c
SS
27#include "gdb_string.h"
28#include "target.h"
29#include "gdbcmd.h"
30#include "symtab.h"
31#include "inferior.h"
32#include "bfd.h"
33#include "symfile.h"
34#include "objfiles.h"
03f2053f 35#include "gdb_wait.h"
4930751a 36#include "dcache.h"
c906108c 37#include <signal.h>
4e052eda 38#include "regcache.h"
0088c768 39#include "gdb_assert.h"
b6591e8b 40#include "gdbcore.h"
c906108c 41
a14ed312 42static void target_info (char *, int);
c906108c 43
a14ed312 44static void maybe_kill_then_attach (char *, int);
c906108c 45
a14ed312 46static void kill_or_be_killed (int);
c906108c 47
a14ed312 48static void default_terminal_info (char *, int);
c906108c 49
ccaa32c7
GS
50static int default_region_size_ok_for_hw_watchpoint (int);
51
a14ed312 52static int nosymbol (char *, CORE_ADDR *);
c906108c 53
a14ed312 54static void tcomplain (void);
c906108c 55
a14ed312 56static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
c906108c 57
a14ed312 58static int return_zero (void);
c906108c 59
a14ed312 60static int return_one (void);
c906108c 61
ccaa32c7
GS
62static int return_minus_one (void);
63
a14ed312 64void target_ignore (void);
c906108c 65
a14ed312 66static void target_command (char *, int);
c906108c 67
a14ed312 68static struct target_ops *find_default_run_target (char *);
c906108c 69
a14ed312 70static void nosupport_runtime (void);
392a587b 71
4b8a223f 72static LONGEST default_xfer_partial (struct target_ops *ops,
0088c768 73 enum target_object object,
8aa91c1e
AC
74 const char *annex, void *readbuf,
75 const void *writebuf,
76 ULONGEST offset, LONGEST len);
0088c768 77
917317f4
JM
78/* Transfer LEN bytes between target address MEMADDR and GDB address
79 MYADDR. Returns 0 for success, errno code for failure (which
80 includes partial transfers -- if you want a more useful response to
81 partial transfers, try either target_read_memory_partial or
82 target_write_memory_partial). */
c906108c 83
570b8f7c
AC
84static int target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
85 int write);
c906108c 86
a14ed312 87static void init_dummy_target (void);
c906108c 88
aa869812
AC
89static struct target_ops debug_target;
90
a14ed312 91static void debug_to_open (char *, int);
c906108c 92
a14ed312 93static void debug_to_close (int);
c906108c 94
a14ed312 95static void debug_to_attach (char *, int);
c906108c 96
a14ed312 97static void debug_to_detach (char *, int);
c906108c 98
6ad8ae5c
DJ
99static void debug_to_disconnect (char *, int);
100
39f77062 101static void debug_to_resume (ptid_t, int, enum target_signal);
c906108c 102
39f77062 103static ptid_t debug_to_wait (ptid_t, struct target_waitstatus *);
c906108c 104
a14ed312 105static void debug_to_fetch_registers (int);
c906108c 106
a14ed312 107static void debug_to_store_registers (int);
c906108c 108
a14ed312 109static void debug_to_prepare_to_store (void);
c906108c 110
5ae5f592
AC
111static int debug_to_xfer_memory (CORE_ADDR, char *, int, int,
112 struct mem_attrib *, struct target_ops *);
c906108c 113
a14ed312 114static void debug_to_files_info (struct target_ops *);
c906108c 115
a14ed312 116static int debug_to_insert_breakpoint (CORE_ADDR, char *);
c906108c 117
a14ed312 118static int debug_to_remove_breakpoint (CORE_ADDR, char *);
c906108c 119
ccaa32c7
GS
120static int debug_to_can_use_hw_breakpoint (int, int, int);
121
122static int debug_to_insert_hw_breakpoint (CORE_ADDR, char *);
123
124static int debug_to_remove_hw_breakpoint (CORE_ADDR, char *);
125
126static int debug_to_insert_watchpoint (CORE_ADDR, int, int);
127
128static int debug_to_remove_watchpoint (CORE_ADDR, int, int);
129
130static int debug_to_stopped_by_watchpoint (void);
131
4aa7a7f5 132static int debug_to_stopped_data_address (struct target_ops *, CORE_ADDR *);
ccaa32c7
GS
133
134static int debug_to_region_size_ok_for_hw_watchpoint (int);
135
a14ed312 136static void debug_to_terminal_init (void);
c906108c 137
a14ed312 138static void debug_to_terminal_inferior (void);
c906108c 139
a14ed312 140static void debug_to_terminal_ours_for_output (void);
c906108c 141
a790ad35
SC
142static void debug_to_terminal_save_ours (void);
143
a14ed312 144static void debug_to_terminal_ours (void);
c906108c 145
a14ed312 146static void debug_to_terminal_info (char *, int);
c906108c 147
a14ed312 148static void debug_to_kill (void);
c906108c 149
a14ed312 150static void debug_to_load (char *, int);
c906108c 151
a14ed312 152static int debug_to_lookup_symbol (char *, CORE_ADDR *);
c906108c 153
a14ed312 154static void debug_to_mourn_inferior (void);
c906108c 155
a14ed312 156static int debug_to_can_run (void);
c906108c 157
39f77062 158static void debug_to_notice_signals (ptid_t);
c906108c 159
39f77062 160static int debug_to_thread_alive (ptid_t);
c906108c 161
a14ed312 162static void debug_to_stop (void);
c906108c 163
5ac10fd1
AC
164/* NOTE: cagney/2004-09-29: Many targets reference this variable in
165 wierd and mysterious ways. Putting the variable here lets those
166 wierd and mysterious ways keep building while they are being
167 converted to the inferior inheritance structure. */
1df84f13 168struct target_ops deprecated_child_ops;
5ac10fd1 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 224 /* Provide default values for all "must have" methods. */
0b603eba
AC
225 if (t->to_xfer_partial == NULL)
226 t->to_xfer_partial = default_xfer_partial;
0088c768 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
c27cda74
AC
346maybe_kill_then_create_inferior (char *exec, char *args, char **env,
347 int from_tty)
c906108c
SS
348{
349 kill_or_be_killed (0);
c27cda74 350 target_create_inferior (exec, args, env, from_tty);
c906108c
SS
351}
352
7998dfc3
AC
353/* Go through the target stack from top to bottom, copying over zero
354 entries in current_target, then filling in still empty entries. In
355 effect, we are doing class inheritance through the pushed target
356 vectors.
357
358 NOTE: cagney/2003-10-17: The problem with this inheritance, as it
359 is currently implemented, is that it discards any knowledge of
360 which target an inherited method originally belonged to.
361 Consequently, new new target methods should instead explicitly and
362 locally search the target stack for the target that can handle the
363 request. */
c906108c
SS
364
365static void
7998dfc3 366update_current_target (void)
c906108c 367{
7998dfc3
AC
368 struct target_ops *t;
369
370 /* First, reset curren'ts contents. */
371 memset (&current_target, 0, sizeof (current_target));
372
373#define INHERIT(FIELD, TARGET) \
374 if (!current_target.FIELD) \
375 current_target.FIELD = (TARGET)->FIELD
376
377 for (t = target_stack; t; t = t->beneath)
378 {
379 INHERIT (to_shortname, t);
380 INHERIT (to_longname, t);
381 INHERIT (to_doc, t);
382 INHERIT (to_open, t);
383 INHERIT (to_close, t);
384 INHERIT (to_attach, t);
385 INHERIT (to_post_attach, t);
386 INHERIT (to_detach, t);
387 INHERIT (to_disconnect, t);
388 INHERIT (to_resume, t);
389 INHERIT (to_wait, t);
7998dfc3
AC
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);
4b8a223f 435 /* Do not inherit to_xfer_partial. */
7998dfc3
AC
436 INHERIT (to_rcmd, t);
437 INHERIT (to_enable_exception_callback, t);
438 INHERIT (to_get_current_exception_event, t);
439 INHERIT (to_pid_to_exec_file, t);
440 INHERIT (to_stratum, t);
441 INHERIT (to_has_all_memory, t);
442 INHERIT (to_has_memory, t);
443 INHERIT (to_has_stack, t);
444 INHERIT (to_has_registers, t);
445 INHERIT (to_has_execution, t);
446 INHERIT (to_has_thread_control, t);
447 INHERIT (to_sections, t);
448 INHERIT (to_sections_end, t);
449 INHERIT (to_can_async_p, t);
450 INHERIT (to_is_async_p, t);
451 INHERIT (to_async, t);
452 INHERIT (to_async_mask_value, t);
453 INHERIT (to_find_memory_regions, t);
454 INHERIT (to_make_corefile_notes, t);
455 INHERIT (to_get_thread_local_address, t);
456 INHERIT (to_magic, t);
457 }
458#undef INHERIT
459
460 /* Clean up a target struct so it no longer has any zero pointers in
0088c768
AC
461 it. Some entries are defaulted to a method that print an error,
462 others are hard-wired to a standard recursive default. */
c906108c
SS
463
464#define de_fault(field, value) \
7998dfc3
AC
465 if (!current_target.field) \
466 current_target.field = value
0d06e24b
JM
467
468 de_fault (to_open,
469 (void (*) (char *, int))
470 tcomplain);
471 de_fault (to_close,
472 (void (*) (int))
473 target_ignore);
474 de_fault (to_attach,
475 maybe_kill_then_attach);
476 de_fault (to_post_attach,
477 (void (*) (int))
478 target_ignore);
0d06e24b
JM
479 de_fault (to_detach,
480 (void (*) (char *, int))
481 target_ignore);
6ad8ae5c
DJ
482 de_fault (to_disconnect,
483 (void (*) (char *, int))
484 tcomplain);
0d06e24b 485 de_fault (to_resume,
39f77062 486 (void (*) (ptid_t, int, enum target_signal))
0d06e24b
JM
487 noprocess);
488 de_fault (to_wait,
39f77062 489 (ptid_t (*) (ptid_t, struct target_waitstatus *))
0d06e24b 490 noprocess);
0d06e24b
JM
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,
4aa7a7f5 529 (int (*) (struct target_ops *, CORE_ADDR *))
ccaa32c7
GS
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
c906108c
SS
711 /* Look for the specified target. Note that we assume that a target
712 can only occur once in the target stack. */
713
258b763a
AC
714 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
715 {
716 if ((*cur) == t)
717 break;
718 }
c906108c 719
258b763a 720 if ((*cur) == NULL)
c906108c
SS
721 return 0; /* Didn't find target_ops, quit now */
722
5269965e
AC
723 /* NOTE: cagney/2003-12-06: In '94 the close call was made
724 unconditional by moving it to before the above check that the
725 target was in the target stack (something about "Change the way
726 pushing and popping of targets work to support target overlays
727 and inheritance"). This doesn't make much sense - only open
728 targets should be closed. */
729 target_close (t, 0);
730
c906108c 731 /* Unchain the target */
258b763a
AC
732 tmp = (*cur);
733 (*cur) = (*cur)->beneath;
734 tmp->beneath = NULL;
c906108c
SS
735
736 update_current_target ();
c906108c
SS
737
738 return 1;
739}
740
741void
fba45db2 742pop_target (void)
c906108c 743{
f1c07ab0 744 target_close (&current_target, 0); /* Let it clean up */
258b763a 745 if (unpush_target (target_stack) == 1)
c906108c
SS
746 return;
747
c5aa993b
JM
748 fprintf_unfiltered (gdb_stderr,
749 "pop_target couldn't find target %s\n",
750 current_target.to_shortname);
e1e9e218 751 internal_error (__FILE__, __LINE__, "failed internal consistency check");
c906108c
SS
752}
753
754#undef MIN
755#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
756
757/* target_read_string -- read a null terminated string, up to LEN bytes,
758 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
759 Set *STRING to a pointer to malloc'd memory containing the data; the caller
760 is responsible for freeing it. Return the number of bytes successfully
761 read. */
762
763int
fba45db2 764target_read_string (CORE_ADDR memaddr, char **string, int len, int *errnop)
c906108c
SS
765{
766 int tlen, origlen, offset, i;
767 char buf[4];
768 int errcode = 0;
769 char *buffer;
770 int buffer_allocated;
771 char *bufptr;
772 unsigned int nbytes_read = 0;
773
774 /* Small for testing. */
775 buffer_allocated = 4;
776 buffer = xmalloc (buffer_allocated);
777 bufptr = buffer;
778
779 origlen = len;
780
781 while (len > 0)
782 {
783 tlen = MIN (len, 4 - (memaddr & 3));
784 offset = memaddr & 3;
785
b8eb5af0 786 errcode = target_read_memory (memaddr & ~3, buf, 4);
c906108c
SS
787 if (errcode != 0)
788 {
789 /* The transfer request might have crossed the boundary to an
790 unallocated region of memory. Retry the transfer, requesting
791 a single byte. */
792 tlen = 1;
793 offset = 0;
b8eb5af0 794 errcode = target_read_memory (memaddr, buf, 1);
c906108c
SS
795 if (errcode != 0)
796 goto done;
797 }
798
799 if (bufptr - buffer + tlen > buffer_allocated)
800 {
801 unsigned int bytes;
802 bytes = bufptr - buffer;
803 buffer_allocated *= 2;
804 buffer = xrealloc (buffer, buffer_allocated);
805 bufptr = buffer + bytes;
806 }
807
808 for (i = 0; i < tlen; i++)
809 {
810 *bufptr++ = buf[i + offset];
811 if (buf[i + offset] == '\000')
812 {
813 nbytes_read += i + 1;
814 goto done;
815 }
816 }
817
818 memaddr += tlen;
819 len -= tlen;
820 nbytes_read += tlen;
821 }
c5aa993b 822done:
c906108c
SS
823 if (errnop != NULL)
824 *errnop = errcode;
825 if (string != NULL)
826 *string = buffer;
827 return nbytes_read;
828}
829
8db32d44
AC
830/* Find a section containing ADDR. */
831struct section_table *
832target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
833{
834 struct section_table *secp;
835 for (secp = target->to_sections;
836 secp < target->to_sections_end;
837 secp++)
838 {
839 if (addr >= secp->addr && addr < secp->endaddr)
840 return secp;
841 }
842 return NULL;
843}
844
0779438d
AC
845/* Return non-zero when the target vector has supplied an xfer_partial
846 method and it, rather than xfer_memory, should be used. */
847static int
848target_xfer_partial_p (void)
849{
850 return (target_stack != NULL
851 && target_stack->to_xfer_partial != default_xfer_partial);
852}
853
27394598
AC
854static LONGEST
855target_xfer_partial (struct target_ops *ops,
856 enum target_object object, const char *annex,
857 void *readbuf, const void *writebuf,
858 ULONGEST offset, LONGEST len)
859{
860 LONGEST retval;
861
862 gdb_assert (ops->to_xfer_partial != NULL);
863 retval = ops->to_xfer_partial (ops, object, annex, readbuf, writebuf,
864 offset, len);
865 if (targetdebug)
866 {
867 const unsigned char *myaddr = NULL;
868
869 fprintf_unfiltered (gdb_stdlog,
870 "%s:target_xfer_partial (%d, %s, 0x%lx, 0x%lx, 0x%s, %s) = %s",
871 ops->to_shortname,
872 (int) object,
873 (annex ? annex : "(null)"),
874 (long) readbuf, (long) writebuf,
875 paddr_nz (offset), paddr_d (len), paddr_d (retval));
876
877 if (readbuf)
878 myaddr = readbuf;
879 if (writebuf)
880 myaddr = writebuf;
881 if (retval > 0 && myaddr != NULL)
882 {
883 int i;
884
885 fputs_unfiltered (", bytes =", gdb_stdlog);
886 for (i = 0; i < retval; i++)
887 {
888 if ((((long) &(myaddr[i])) & 0xf) == 0)
889 {
890 if (targetdebug < 2 && i > 0)
891 {
892 fprintf_unfiltered (gdb_stdlog, " ...");
893 break;
894 }
895 fprintf_unfiltered (gdb_stdlog, "\n");
896 }
897
898 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
899 }
900 }
901
902 fputc_unfiltered ('\n', gdb_stdlog);
903 }
904 return retval;
905}
906
0779438d
AC
907/* Attempt a transfer all LEN bytes starting at OFFSET between the
908 inferior's KIND:ANNEX space and GDB's READBUF/WRITEBUF buffer. If
909 the transfer succeeds, return zero, otherwize the host ERRNO is
910 returned.
911
912 The inferior is formed from several layers. In the case of
913 corefiles, inf-corefile is layered above inf-exec and a request for
914 text (corefiles do not include text pages) will be first sent to
915 the core-stratum, fail, and then sent to the object-file where it
916 will succeed.
917
918 NOTE: cagney/2004-09-30:
919
920 The old code tried to use four separate mechanisms for mapping an
921 object:offset:len tuple onto an inferior and its address space: the
922 target stack; the inferior's TO_SECTIONS; solib's SO_LIST;
923 overlays.
924
925 This is stupid.
926
927 The code below is instead using a single mechanism (currently
928 strata). If that mechanism proves insufficient then re-factor it
929 implementing another singluar mechanism (for instance, a generic
930 object:annex onto inferior:object:annex say). */
931
cb85a953 932static LONGEST
0779438d 933xfer_using_stratum (enum target_object object, const char *annex,
cb85a953 934 ULONGEST offset, LONGEST len, void *readbuf,
0779438d
AC
935 const void *writebuf)
936{
937 LONGEST xfered;
938 struct target_ops *target;
939
940 /* Always successful. */
941 if (len == 0)
942 return 0;
943 /* Never successful. */
944 if (target_stack == NULL)
945 return EIO;
946
947 target = target_stack;
948 while (1)
949 {
27394598 950 xfered = target_xfer_partial (target, object, annex,
cb85a953 951 readbuf, writebuf, offset, len);
0779438d
AC
952 if (xfered > 0)
953 {
954 /* The partial xfer succeeded, update the counts, check that
955 the xfer hasn't finished and if it hasn't set things up
956 for the next round. */
957 len -= xfered;
958 if (len <= 0)
959 return 0;
cb85a953
AC
960 offset += xfered;
961 if (readbuf != NULL)
962 readbuf = (bfd_byte *) readbuf + xfered;
963 if (writebuf != NULL)
964 writebuf = (bfd_byte *) writebuf + xfered;
0779438d
AC
965 target = target_stack;
966 }
967 else if (xfered < 0)
968 {
969 /* Something totally screwed up, abandon the attempt to
970 xfer. */
971 if (errno)
972 return errno;
973 else
974 return EIO;
975 }
976 else
977 {
978 /* This "stratum" didn't work, try the next one down. */
979 target = target->beneath;
980 if (target == NULL)
981 return EIO;
982 }
983 }
984}
985
c906108c
SS
986/* Read LEN bytes of target memory at address MEMADDR, placing the results in
987 GDB's memory at MYADDR. Returns either 0 for success or an errno value
988 if any error occurs.
989
990 If an error occurs, no guarantee is made about the contents of the data at
991 MYADDR. In particular, the caller should not depend upon partial reads
992 filling the buffer with good data. There is no way for the caller to know
993 how much good data might have been transfered anyway. Callers that can
994 deal with partial reads should call target_read_memory_partial. */
995
996int
fba45db2 997target_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 998{
0779438d
AC
999 if (target_xfer_partial_p ())
1000 return xfer_using_stratum (TARGET_OBJECT_MEMORY, NULL,
1001 memaddr, len, myaddr, NULL);
1002 else
1003 return target_xfer_memory (memaddr, myaddr, len, 0);
c906108c
SS
1004}
1005
c906108c 1006int
fba45db2 1007target_write_memory (CORE_ADDR memaddr, char *myaddr, int len)
c906108c 1008{
0779438d
AC
1009 if (target_xfer_partial_p ())
1010 return xfer_using_stratum (TARGET_OBJECT_MEMORY, NULL,
1011 memaddr, len, NULL, myaddr);
1012 else
1013 return target_xfer_memory (memaddr, myaddr, len, 1);
c906108c 1014}
c5aa993b 1015
4aa7a7f5
JJ
1016#ifndef target_stopped_data_address_p
1017int
1018target_stopped_data_address_p (struct target_ops *target)
1019{
aa869812
AC
1020 if (target->to_stopped_data_address
1021 == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero)
4aa7a7f5 1022 return 0;
aa869812
AC
1023 if (target->to_stopped_data_address == debug_to_stopped_data_address
1024 && (debug_target.to_stopped_data_address
1025 == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero))
1026 return 0;
1027 return 1;
4aa7a7f5
JJ
1028}
1029#endif
1030
3a11626d
MS
1031static int trust_readonly = 0;
1032
67e0617e
C
1033/* Move memory to or from the targets. The top target gets priority;
1034 if it cannot handle it, it is offered to the next one down, etc.
c906108c 1035
67e0617e 1036 Result is -1 on error, or the number of bytes transfered. */
c906108c 1037
4930751a 1038int
29e57380
C
1039do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
1040 struct mem_attrib *attrib)
c906108c 1041{
c906108c 1042 int res;
4930751a 1043 int done = 0;
c906108c 1044 struct target_ops *t;
c906108c
SS
1045
1046 /* Zero length requests are ok and require no work. */
1047 if (len == 0)
1048 return 0;
1049
c906108c
SS
1050 /* to_xfer_memory is not guaranteed to set errno, even when it returns
1051 0. */
1052 errno = 0;
1053
3a11626d
MS
1054 if (!write && trust_readonly)
1055 {
8db32d44 1056 struct section_table *secp;
2ceb85d0
BE
1057 /* User-settable option, "trust-readonly-sections". If true,
1058 then memory from any SEC_READONLY bfd section may be read
8db32d44
AC
1059 directly from the bfd file. */
1060 secp = target_section_by_addr (&current_target, memaddr);
1061 if (secp != NULL
1062 && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1063 & SEC_READONLY))
1064 return xfer_memory (memaddr, myaddr, len, 0, attrib, &current_target);
3a11626d
MS
1065 }
1066
67e0617e 1067 /* The quick case is that the top target can handle the transfer. */
c906108c 1068 res = current_target.to_xfer_memory
29e57380 1069 (memaddr, myaddr, len, write, attrib, &current_target);
c906108c 1070
67e0617e
C
1071 /* If res <= 0 then we call it again in the loop. Ah well. */
1072 if (res <= 0)
c906108c 1073 {
258b763a 1074 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 1075 {
c906108c
SS
1076 if (!t->to_has_memory)
1077 continue;
1078
29e57380 1079 res = t->to_xfer_memory (memaddr, myaddr, len, write, attrib, t);
c906108c
SS
1080 if (res > 0)
1081 break; /* Handled all or part of xfer */
1082 if (t->to_has_all_memory)
1083 break;
1084 }
1085
4930751a 1086 if (res <= 0)
67e0617e 1087 return -1;
4930751a 1088 }
67e0617e
C
1089
1090 return res;
4930751a
C
1091}
1092
67e0617e
C
1093
1094/* Perform a memory transfer. Iterate until the entire region has
1095 been transfered.
1096
1097 Result is 0 or errno value. */
1098
4930751a
C
1099static int
1100target_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write)
1101{
1102 int res;
29e57380
C
1103 int reg_len;
1104 struct mem_region *region;
4930751a
C
1105
1106 /* Zero length requests are ok and require no work. */
1107 if (len == 0)
1108 {
1109 return 0;
1110 }
1111
1112 while (len > 0)
1113 {
29e57380
C
1114 region = lookup_mem_region(memaddr);
1115 if (memaddr + len < region->hi)
1116 reg_len = len;
1117 else
1118 reg_len = region->hi - memaddr;
1119
1120 switch (region->attrib.mode)
c906108c 1121 {
29e57380
C
1122 case MEM_RO:
1123 if (write)
1124 return EIO;
1125 break;
1126
1127 case MEM_WO:
c906108c 1128 if (!write)
c906108c 1129 return EIO;
29e57380 1130 break;
c906108c 1131 }
4930751a 1132
29e57380
C
1133 while (reg_len > 0)
1134 {
1135 if (region->attrib.cache)
8add0441 1136 res = dcache_xfer_memory (target_dcache, memaddr, myaddr,
29e57380
C
1137 reg_len, write);
1138 else
8add0441 1139 res = do_xfer_memory (memaddr, myaddr, reg_len, write,
29e57380
C
1140 &region->attrib);
1141
1142 if (res <= 0)
1143 {
1144 /* If this address is for nonexistent memory, read zeros
1145 if reading, or do nothing if writing. Return
1146 error. */
1147 if (!write)
1148 memset (myaddr, 0, len);
1149 if (errno == 0)
1150 return EIO;
1151 else
1152 return errno;
1153 }
1154
1155 memaddr += res;
1156 myaddr += res;
1157 len -= res;
1158 reg_len -= res;
1159 }
c906108c 1160 }
4930751a 1161
c906108c
SS
1162 return 0; /* We managed to cover it all somehow. */
1163}
1164
1165
67e0617e
C
1166/* Perform a partial memory transfer.
1167
1168 Result is -1 on error, or the number of bytes transfered. */
917317f4
JM
1169
1170static int
4930751a 1171target_xfer_memory_partial (CORE_ADDR memaddr, char *myaddr, int len,
917317f4
JM
1172 int write_p, int *err)
1173{
1174 int res;
29e57380
C
1175 int reg_len;
1176 struct mem_region *region;
917317f4
JM
1177
1178 /* Zero length requests are ok and require no work. */
1179 if (len == 0)
1180 {
1181 *err = 0;
1182 return 0;
1183 }
1184
29e57380
C
1185 region = lookup_mem_region(memaddr);
1186 if (memaddr + len < region->hi)
1187 reg_len = len;
1188 else
1189 reg_len = region->hi - memaddr;
1190
1191 switch (region->attrib.mode)
1192 {
1193 case MEM_RO:
1194 if (write_p)
1195 {
1196 *err = EIO;
873406a6 1197 return -1;
29e57380
C
1198 }
1199 break;
1200
1201 case MEM_WO:
1202 if (write_p)
1203 {
1204 *err = EIO;
873406a6 1205 return -1;
29e57380
C
1206 }
1207 break;
1208 }
1209
1210 if (region->attrib.cache)
1211 res = dcache_xfer_memory (target_dcache, memaddr, myaddr,
1212 reg_len, write_p);
1213 else
1214 res = do_xfer_memory (memaddr, myaddr, reg_len, write_p,
1215 &region->attrib);
1216
4930751a 1217 if (res <= 0)
917317f4 1218 {
4930751a
C
1219 if (errno != 0)
1220 *err = errno;
1221 else
1222 *err = EIO;
917317f4 1223
4930751a 1224 return -1;
917317f4
JM
1225 }
1226
4930751a 1227 *err = 0;
67e0617e 1228 return res;
917317f4
JM
1229}
1230
1231int
1232target_read_memory_partial (CORE_ADDR memaddr, char *buf, int len, int *err)
1233{
0779438d 1234 if (target_xfer_partial_p ())
27394598
AC
1235 return target_xfer_partial (target_stack, TARGET_OBJECT_MEMORY, NULL,
1236 buf, NULL, memaddr, len);
0779438d
AC
1237 else
1238 return target_xfer_memory_partial (memaddr, buf, len, 0, err);
917317f4
JM
1239}
1240
1241int
1242target_write_memory_partial (CORE_ADDR memaddr, char *buf, int len, int *err)
1243{
0779438d 1244 if (target_xfer_partial_p ())
27394598
AC
1245 return target_xfer_partial (target_stack, TARGET_OBJECT_MEMORY, NULL,
1246 NULL, buf, memaddr, len);
0779438d
AC
1247 else
1248 return target_xfer_memory_partial (memaddr, buf, len, 1, err);
917317f4
JM
1249}
1250
1e3ff5ad
AC
1251/* More generic transfers. */
1252
0088c768 1253static LONGEST
8aa91c1e
AC
1254default_xfer_partial (struct target_ops *ops, enum target_object object,
1255 const char *annex, void *readbuf,
1256 const void *writebuf, ULONGEST offset, LONGEST len)
0088c768
AC
1257{
1258 if (object == TARGET_OBJECT_MEMORY
1259 && ops->to_xfer_memory != NULL)
1260 /* If available, fall back to the target's "to_xfer_memory"
1261 method. */
1262 {
4b8a223f 1263 int xfered = -1;
0088c768 1264 errno = 0;
4b8a223f
AC
1265 if (writebuf != NULL)
1266 {
1267 void *buffer = xmalloc (len);
1268 struct cleanup *cleanup = make_cleanup (xfree, buffer);
1269 memcpy (buffer, writebuf, len);
1270 xfered = ops->to_xfer_memory (offset, buffer, len, 1/*write*/, NULL,
1271 ops);
1272 do_cleanups (cleanup);
1273 }
1274 if (readbuf != NULL)
1275 xfered = ops->to_xfer_memory (offset, readbuf, len, 0/*read*/, NULL,
0088c768 1276 ops);
0088c768
AC
1277 if (xfered > 0)
1278 return xfered;
1279 else if (xfered == 0 && errno == 0)
1280 /* "to_xfer_memory" uses 0, cross checked against ERRNO as one
1281 indication of an error. */
1282 return 0;
1283 else
1284 return -1;
1285 }
1286 else if (ops->beneath != NULL)
27394598
AC
1287 return target_xfer_partial (ops->beneath, object, annex,
1288 readbuf, writebuf, offset, len);
0088c768
AC
1289 else
1290 return -1;
1291}
1292
1293/* Target vector read/write partial wrapper functions.
1294
1295 NOTE: cagney/2003-10-21: I wonder if having "to_xfer_partial
1296 (inbuf, outbuf)", instead of separate read/write methods, make life
1297 easier. */
1298
1e3ff5ad
AC
1299LONGEST
1300target_read_partial (struct target_ops *ops,
1301 enum target_object object,
1302 const char *annex, void *buf,
1303 ULONGEST offset, LONGEST len)
1304{
27394598 1305 return target_xfer_partial (ops, object, annex, buf, NULL, offset, len);
1e3ff5ad
AC
1306}
1307
1308LONGEST
1309target_write_partial (struct target_ops *ops,
1310 enum target_object object,
1311 const char *annex, const void *buf,
1312 ULONGEST offset, LONGEST len)
1313{
27394598 1314 return target_xfer_partial (ops, object, annex, NULL, buf, offset, len);
1e3ff5ad
AC
1315}
1316
1317/* Wrappers to perform the full transfer. */
1318LONGEST
1319target_read (struct target_ops *ops,
1320 enum target_object object,
1321 const char *annex, void *buf,
1322 ULONGEST offset, LONGEST len)
1323{
1324 LONGEST xfered = 0;
1325 while (xfered < len)
1326 {
0088c768
AC
1327 LONGEST xfer = target_read_partial (ops, object, annex,
1328 (bfd_byte *) buf + xfered,
1329 offset + xfered, len - xfered);
1e3ff5ad 1330 /* Call an observer, notifying them of the xfer progress? */
0088c768
AC
1331 if (xfer <= 0)
1332 /* Call memory_error? */
1333 return -1;
1e3ff5ad
AC
1334 xfered += xfer;
1335 QUIT;
1336 }
1337 return len;
1338}
1339
1340LONGEST
1341target_write (struct target_ops *ops,
1342 enum target_object object,
1343 const char *annex, const void *buf,
1344 ULONGEST offset, LONGEST len)
1345{
1346 LONGEST xfered = 0;
1347 while (xfered < len)
1348 {
1349 LONGEST xfer = target_write_partial (ops, object, annex,
1350 (bfd_byte *) buf + xfered,
1351 offset + xfered, len - xfered);
1352 /* Call an observer, notifying them of the xfer progress? */
0088c768
AC
1353 if (xfer <= 0)
1354 /* Call memory_error? */
1355 return -1;
1e3ff5ad
AC
1356 xfered += xfer;
1357 QUIT;
1358 }
1359 return len;
1360}
1361
b6591e8b
AC
1362/* Memory transfer methods. */
1363
1364void
1365get_target_memory (struct target_ops *ops, CORE_ADDR addr, void *buf,
1366 LONGEST len)
1367{
1368 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL, buf, addr, len)
1369 != len)
1370 memory_error (EIO, addr);
1371}
1372
1373ULONGEST
1374get_target_memory_unsigned (struct target_ops *ops,
1375 CORE_ADDR addr, int len)
1376{
1377 char buf[sizeof (ULONGEST)];
1378
1379 gdb_assert (len <= sizeof (buf));
1380 get_target_memory (ops, addr, buf, len);
1381 return extract_unsigned_integer (buf, len);
1382}
1383
c906108c 1384static void
fba45db2 1385target_info (char *args, int from_tty)
c906108c
SS
1386{
1387 struct target_ops *t;
c906108c 1388 int has_all_mem = 0;
c5aa993b 1389
c906108c
SS
1390 if (symfile_objfile != NULL)
1391 printf_unfiltered ("Symbols from \"%s\".\n", symfile_objfile->name);
1392
258b763a 1393 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 1394 {
c906108c
SS
1395 if (!t->to_has_memory)
1396 continue;
1397
c5aa993b 1398 if ((int) (t->to_stratum) <= (int) dummy_stratum)
c906108c
SS
1399 continue;
1400 if (has_all_mem)
c5aa993b
JM
1401 printf_unfiltered ("\tWhile running this, GDB does not access memory from...\n");
1402 printf_unfiltered ("%s:\n", t->to_longname);
1403 (t->to_files_info) (t);
c906108c
SS
1404 has_all_mem = t->to_has_all_memory;
1405 }
1406}
1407
1408/* This is to be called by the open routine before it does
1409 anything. */
1410
1411void
fba45db2 1412target_preopen (int from_tty)
c906108c 1413{
c5aa993b 1414 dont_repeat ();
c906108c
SS
1415
1416 if (target_has_execution)
c5aa993b 1417 {
adf40b2e
JM
1418 if (!from_tty
1419 || query ("A program is being debugged already. Kill it? "))
c5aa993b 1420 target_kill ();
c906108c 1421 else
c5aa993b 1422 error ("Program not killed.");
c906108c
SS
1423 }
1424
1425 /* Calling target_kill may remove the target from the stack. But if
1426 it doesn't (which seems like a win for UDI), remove it now. */
1427
1428 if (target_has_execution)
1429 pop_target ();
1430}
1431
1432/* Detach a target after doing deferred register stores. */
1433
1434void
fba45db2 1435target_detach (char *args, int from_tty)
c906108c 1436{
c906108c
SS
1437 (current_target.to_detach) (args, from_tty);
1438}
1439
6ad8ae5c
DJ
1440void
1441target_disconnect (char *args, int from_tty)
1442{
6ad8ae5c
DJ
1443 (current_target.to_disconnect) (args, from_tty);
1444}
1445
c906108c 1446void
fba45db2 1447target_link (char *modname, CORE_ADDR *t_reloc)
c906108c 1448{
cb137aa5 1449 if (DEPRECATED_STREQ (current_target.to_shortname, "rombug"))
c906108c
SS
1450 {
1451 (current_target.to_lookup_symbol) (modname, t_reloc);
1452 if (*t_reloc == 0)
c5aa993b 1453 error ("Unable to link to %s and get relocation in rombug", modname);
c906108c
SS
1454 }
1455 else
2acceee2 1456 *t_reloc = (CORE_ADDR) -1;
c906108c
SS
1457}
1458
ed9a39eb
JM
1459int
1460target_async_mask (int mask)
1461{
1462 int saved_async_masked_status = target_async_mask_value;
1463 target_async_mask_value = mask;
1464 return saved_async_masked_status;
1465}
1466
c906108c
SS
1467/* Look through the list of possible targets for a target that can
1468 execute a run or attach command without any other data. This is
1469 used to locate the default process stratum.
1470
1471 Result is always valid (error() is called for errors). */
1472
1473static struct target_ops *
fba45db2 1474find_default_run_target (char *do_mesg)
c906108c
SS
1475{
1476 struct target_ops **t;
1477 struct target_ops *runable = NULL;
1478 int count;
1479
1480 count = 0;
1481
1482 for (t = target_structs; t < target_structs + target_struct_size;
1483 ++t)
1484 {
c5aa993b 1485 if ((*t)->to_can_run && target_can_run (*t))
c906108c
SS
1486 {
1487 runable = *t;
1488 ++count;
1489 }
1490 }
1491
1492 if (count != 1)
1493 error ("Don't know how to %s. Try \"help target\".", do_mesg);
1494
1495 return runable;
1496}
1497
1498void
fba45db2 1499find_default_attach (char *args, int from_tty)
c906108c
SS
1500{
1501 struct target_ops *t;
1502
c5aa993b 1503 t = find_default_run_target ("attach");
c906108c
SS
1504 (t->to_attach) (args, from_tty);
1505 return;
1506}
1507
c906108c 1508void
c27cda74
AC
1509find_default_create_inferior (char *exec_file, char *allargs, char **env,
1510 int from_tty)
c906108c
SS
1511{
1512 struct target_ops *t;
1513
c5aa993b 1514 t = find_default_run_target ("run");
c27cda74 1515 (t->to_create_inferior) (exec_file, allargs, env, from_tty);
c906108c
SS
1516 return;
1517}
1518
ccaa32c7
GS
1519static int
1520default_region_size_ok_for_hw_watchpoint (int byte_count)
1521{
437b434f 1522 return (byte_count <= TYPE_LENGTH (builtin_type_void_data_ptr));
ccaa32c7
GS
1523}
1524
c906108c 1525static int
fba45db2 1526return_zero (void)
c906108c
SS
1527{
1528 return 0;
1529}
1530
1531static int
fba45db2 1532return_one (void)
c906108c
SS
1533{
1534 return 1;
1535}
1536
ccaa32c7
GS
1537static int
1538return_minus_one (void)
1539{
1540 return -1;
1541}
1542
6426a772
JM
1543/*
1544 * Resize the to_sections pointer. Also make sure that anyone that
1545 * was holding on to an old value of it gets updated.
1546 * Returns the old size.
1547 */
1548
1549int
1550target_resize_to_sections (struct target_ops *target, int num_added)
1551{
1552 struct target_ops **t;
1553 struct section_table *old_value;
1554 int old_count;
1555
1556 old_value = target->to_sections;
1557
1558 if (target->to_sections)
1559 {
1560 old_count = target->to_sections_end - target->to_sections;
1561 target->to_sections = (struct section_table *)
1562 xrealloc ((char *) target->to_sections,
1563 (sizeof (struct section_table)) * (num_added + old_count));
1564 }
1565 else
1566 {
1567 old_count = 0;
1568 target->to_sections = (struct section_table *)
1569 xmalloc ((sizeof (struct section_table)) * num_added);
1570 }
1571 target->to_sections_end = target->to_sections + (num_added + old_count);
1572
1573 /* Check to see if anyone else was pointing to this structure.
1574 If old_value was null, then no one was. */
1575
1576 if (old_value)
1577 {
1578 for (t = target_structs; t < target_structs + target_struct_size;
1579 ++t)
1580 {
1581 if ((*t)->to_sections == old_value)
1582 {
1583 (*t)->to_sections = target->to_sections;
1584 (*t)->to_sections_end = target->to_sections_end;
1585 }
1586 }
e354df01
NW
1587 /* There is a flattened view of the target stack in current_target,
1588 so its to_sections pointer might also need updating. */
1589 if (current_target.to_sections == old_value)
1590 {
1591 current_target.to_sections = target->to_sections;
1592 current_target.to_sections_end = target->to_sections_end;
1593 }
6426a772
JM
1594 }
1595
1596 return old_count;
1597
1598}
1599
07cd4b97
JB
1600/* Remove all target sections taken from ABFD.
1601
1602 Scan the current target stack for targets whose section tables
1603 refer to sections from BFD, and remove those sections. We use this
1604 when we notice that the inferior has unloaded a shared object, for
1605 example. */
1606void
1607remove_target_sections (bfd *abfd)
1608{
1609 struct target_ops **t;
1610
1611 for (t = target_structs; t < target_structs + target_struct_size; t++)
1612 {
1613 struct section_table *src, *dest;
1614
1615 dest = (*t)->to_sections;
1616 for (src = (*t)->to_sections; src < (*t)->to_sections_end; src++)
1617 if (src->bfd != abfd)
1618 {
1619 /* Keep this section. */
1620 if (dest < src) *dest = *src;
1621 dest++;
1622 }
1623
1624 /* If we've dropped any sections, resize the section table. */
1625 if (dest < src)
1626 target_resize_to_sections (*t, dest - src);
1627 }
1628}
1629
1630
1631
1632
7a292a7a
SS
1633/* Find a single runnable target in the stack and return it. If for
1634 some reason there is more than one, return NULL. */
1635
1636struct target_ops *
fba45db2 1637find_run_target (void)
7a292a7a
SS
1638{
1639 struct target_ops **t;
1640 struct target_ops *runable = NULL;
1641 int count;
c5aa993b 1642
7a292a7a 1643 count = 0;
c5aa993b 1644
7a292a7a
SS
1645 for (t = target_structs; t < target_structs + target_struct_size; ++t)
1646 {
c5aa993b 1647 if ((*t)->to_can_run && target_can_run (*t))
7a292a7a
SS
1648 {
1649 runable = *t;
1650 ++count;
1651 }
1652 }
c5aa993b 1653
7a292a7a
SS
1654 return (count == 1 ? runable : NULL);
1655}
1656
ed9a39eb
JM
1657/* Find a single core_stratum target in the list of targets and return it.
1658 If for some reason there is more than one, return NULL. */
1659
c906108c 1660struct target_ops *
fba45db2 1661find_core_target (void)
c906108c
SS
1662{
1663 struct target_ops **t;
1664 struct target_ops *runable = NULL;
1665 int count;
c5aa993b 1666
c906108c 1667 count = 0;
c5aa993b 1668
c906108c
SS
1669 for (t = target_structs; t < target_structs + target_struct_size;
1670 ++t)
1671 {
1672 if ((*t)->to_stratum == core_stratum)
1673 {
1674 runable = *t;
1675 ++count;
1676 }
1677 }
c5aa993b
JM
1678
1679 return (count == 1 ? runable : NULL);
c906108c 1680}
ed9a39eb
JM
1681
1682/*
1683 * Find the next target down the stack from the specified target.
1684 */
1685
1686struct target_ops *
fba45db2 1687find_target_beneath (struct target_ops *t)
ed9a39eb 1688{
258b763a 1689 return t->beneath;
ed9a39eb
JM
1690}
1691
c906108c
SS
1692\f
1693/* The inferior process has died. Long live the inferior! */
1694
1695void
fba45db2 1696generic_mourn_inferior (void)
c906108c
SS
1697{
1698 extern int show_breakpoint_hit_counts;
1699
39f77062 1700 inferior_ptid = null_ptid;
c906108c
SS
1701 attach_flag = 0;
1702 breakpoint_init_inferior (inf_exited);
1703 registers_changed ();
1704
c906108c
SS
1705 reopen_exec_file ();
1706 reinit_frame_cache ();
1707
1708 /* It is confusing to the user for ignore counts to stick around
1709 from previous runs of the inferior. So clear them. */
1710 /* However, it is more confusing for the ignore counts to disappear when
1711 using hit counts. So don't clear them if we're counting hits. */
1712 if (!show_breakpoint_hit_counts)
1713 breakpoint_clear_ignore_counts ();
c5b739b5 1714
9a4105ab
AC
1715 if (deprecated_detach_hook)
1716 deprecated_detach_hook ();
c906108c
SS
1717}
1718\f
c906108c
SS
1719/* Helper function for child_wait and the Lynx derivatives of child_wait.
1720 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1721 translation of that in OURSTATUS. */
1722void
fba45db2 1723store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
c906108c
SS
1724{
1725#ifdef CHILD_SPECIAL_WAITSTATUS
1726 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
1727 if it wants to deal with hoststatus. */
1728 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
1729 return;
1730#endif
1731
1732 if (WIFEXITED (hoststatus))
1733 {
1734 ourstatus->kind = TARGET_WAITKIND_EXITED;
1735 ourstatus->value.integer = WEXITSTATUS (hoststatus);
1736 }
1737 else if (!WIFSTOPPED (hoststatus))
1738 {
1739 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1740 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1741 }
1742 else
1743 {
1744 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1745 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1746 }
1747}
1748\f
c906108c 1749/* Returns zero to leave the inferior alone, one to interrupt it. */
507f3c78 1750int (*target_activity_function) (void);
c906108c
SS
1751int target_activity_fd;
1752\f
1753/* Convert a normal process ID to a string. Returns the string in a static
1754 buffer. */
1755
1756char *
39f77062 1757normal_pid_to_str (ptid_t ptid)
c906108c
SS
1758{
1759 static char buf[30];
1760
39f77062 1761 sprintf (buf, "process %d", PIDGET (ptid));
c906108c
SS
1762 return buf;
1763}
1764
be4d1333 1765/* Error-catcher for target_find_memory_regions */
be4d1333
MS
1766static int dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
1767{
1768 error ("No target.");
1769 return 0;
1770}
1771
1772/* Error-catcher for target_make_corefile_notes */
be4d1333
MS
1773static char * dummy_make_corefile_notes (bfd *ignore1, int *ignore2)
1774{
1775 error ("No target.");
1776 return NULL;
1777}
1778
c906108c
SS
1779/* Set up the handful of non-empty slots needed by the dummy target
1780 vector. */
1781
1782static void
fba45db2 1783init_dummy_target (void)
c906108c
SS
1784{
1785 dummy_target.to_shortname = "None";
1786 dummy_target.to_longname = "None";
1787 dummy_target.to_doc = "";
1788 dummy_target.to_attach = find_default_attach;
c906108c 1789 dummy_target.to_create_inferior = find_default_create_inferior;
ed9a39eb 1790 dummy_target.to_pid_to_str = normal_pid_to_str;
c906108c 1791 dummy_target.to_stratum = dummy_stratum;
be4d1333
MS
1792 dummy_target.to_find_memory_regions = dummy_find_memory_regions;
1793 dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
0b603eba 1794 dummy_target.to_xfer_partial = default_xfer_partial;
c906108c
SS
1795 dummy_target.to_magic = OPS_MAGIC;
1796}
c906108c 1797\f
c906108c 1798static void
fba45db2 1799debug_to_open (char *args, int from_tty)
c906108c
SS
1800{
1801 debug_target.to_open (args, from_tty);
1802
96baa820 1803 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
c906108c
SS
1804}
1805
1806static void
fba45db2 1807debug_to_close (int quitting)
c906108c 1808{
f1c07ab0 1809 target_close (&debug_target, quitting);
96baa820 1810 fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
c906108c
SS
1811}
1812
f1c07ab0
AC
1813void
1814target_close (struct target_ops *targ, int quitting)
1815{
1816 if (targ->to_xclose != NULL)
1817 targ->to_xclose (targ, quitting);
1818 else if (targ->to_close != NULL)
1819 targ->to_close (quitting);
1820}
1821
c906108c 1822static void
fba45db2 1823debug_to_attach (char *args, int from_tty)
c906108c
SS
1824{
1825 debug_target.to_attach (args, from_tty);
1826
96baa820 1827 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n", args, from_tty);
c906108c
SS
1828}
1829
1830
1831static void
fba45db2 1832debug_to_post_attach (int pid)
c906108c
SS
1833{
1834 debug_target.to_post_attach (pid);
1835
96baa820 1836 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
c906108c
SS
1837}
1838
c906108c 1839static void
fba45db2 1840debug_to_detach (char *args, int from_tty)
c906108c
SS
1841{
1842 debug_target.to_detach (args, from_tty);
1843
96baa820 1844 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n", args, from_tty);
c906108c
SS
1845}
1846
6ad8ae5c
DJ
1847static void
1848debug_to_disconnect (char *args, int from_tty)
1849{
1850 debug_target.to_disconnect (args, from_tty);
1851
1852 fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
1853 args, from_tty);
1854}
1855
c906108c 1856static void
39f77062 1857debug_to_resume (ptid_t ptid, int step, enum target_signal siggnal)
c906108c 1858{
39f77062 1859 debug_target.to_resume (ptid, step, siggnal);
c906108c 1860
39f77062 1861 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n", PIDGET (ptid),
c906108c
SS
1862 step ? "step" : "continue",
1863 target_signal_to_name (siggnal));
1864}
1865
39f77062
KB
1866static ptid_t
1867debug_to_wait (ptid_t ptid, struct target_waitstatus *status)
c906108c 1868{
39f77062 1869 ptid_t retval;
c906108c 1870
39f77062 1871 retval = debug_target.to_wait (ptid, status);
c906108c 1872
96baa820 1873 fprintf_unfiltered (gdb_stdlog,
39f77062
KB
1874 "target_wait (%d, status) = %d, ", PIDGET (ptid),
1875 PIDGET (retval));
96baa820 1876 fprintf_unfiltered (gdb_stdlog, "status->kind = ");
c906108c
SS
1877 switch (status->kind)
1878 {
1879 case TARGET_WAITKIND_EXITED:
96baa820 1880 fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n",
c906108c
SS
1881 status->value.integer);
1882 break;
1883 case TARGET_WAITKIND_STOPPED:
96baa820 1884 fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n",
c906108c
SS
1885 target_signal_to_name (status->value.sig));
1886 break;
1887 case TARGET_WAITKIND_SIGNALLED:
96baa820 1888 fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n",
c906108c
SS
1889 target_signal_to_name (status->value.sig));
1890 break;
1891 case TARGET_WAITKIND_LOADED:
96baa820 1892 fprintf_unfiltered (gdb_stdlog, "loaded\n");
c906108c
SS
1893 break;
1894 case TARGET_WAITKIND_FORKED:
96baa820 1895 fprintf_unfiltered (gdb_stdlog, "forked\n");
c906108c
SS
1896 break;
1897 case TARGET_WAITKIND_VFORKED:
96baa820 1898 fprintf_unfiltered (gdb_stdlog, "vforked\n");
c906108c
SS
1899 break;
1900 case TARGET_WAITKIND_EXECD:
96baa820 1901 fprintf_unfiltered (gdb_stdlog, "execd\n");
c906108c
SS
1902 break;
1903 case TARGET_WAITKIND_SPURIOUS:
96baa820 1904 fprintf_unfiltered (gdb_stdlog, "spurious\n");
c906108c
SS
1905 break;
1906 default:
96baa820 1907 fprintf_unfiltered (gdb_stdlog, "unknown???\n");
c906108c
SS
1908 break;
1909 }
1910
1911 return retval;
1912}
1913
bf0c5130
AC
1914static void
1915debug_print_register (const char * func, int regno)
1916{
1917 fprintf_unfiltered (gdb_stdlog, "%s ", func);
1918 if (regno >= 0 && regno < NUM_REGS + NUM_PSEUDO_REGS
1919 && REGISTER_NAME (regno) != NULL && REGISTER_NAME (regno)[0] != '\0')
1920 fprintf_unfiltered (gdb_stdlog, "(%s)", REGISTER_NAME (regno));
1921 else
1922 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
1923 if (regno >= 0)
1924 {
1925 int i;
d9d9c31f 1926 unsigned char buf[MAX_REGISTER_SIZE];
4caf0990 1927 deprecated_read_register_gen (regno, buf);
bf0c5130 1928 fprintf_unfiltered (gdb_stdlog, " = ");
3acba339 1929 for (i = 0; i < register_size (current_gdbarch, regno); i++)
bf0c5130
AC
1930 {
1931 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
1932 }
3acba339 1933 if (register_size (current_gdbarch, regno) <= sizeof (LONGEST))
bf0c5130
AC
1934 {
1935 fprintf_unfiltered (gdb_stdlog, " 0x%s %s",
1936 paddr_nz (read_register (regno)),
1937 paddr_d (read_register (regno)));
1938 }
1939 }
1940 fprintf_unfiltered (gdb_stdlog, "\n");
1941}
1942
c906108c 1943static void
fba45db2 1944debug_to_fetch_registers (int regno)
c906108c
SS
1945{
1946 debug_target.to_fetch_registers (regno);
bf0c5130 1947 debug_print_register ("target_fetch_registers", regno);
c906108c
SS
1948}
1949
1950static void
fba45db2 1951debug_to_store_registers (int regno)
c906108c
SS
1952{
1953 debug_target.to_store_registers (regno);
bf0c5130
AC
1954 debug_print_register ("target_store_registers", regno);
1955 fprintf_unfiltered (gdb_stdlog, "\n");
c906108c
SS
1956}
1957
1958static void
fba45db2 1959debug_to_prepare_to_store (void)
c906108c
SS
1960{
1961 debug_target.to_prepare_to_store ();
1962
96baa820 1963 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
c906108c
SS
1964}
1965
1966static int
fba45db2 1967debug_to_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
29e57380 1968 struct mem_attrib *attrib,
fba45db2 1969 struct target_ops *target)
c906108c
SS
1970{
1971 int retval;
1972
29e57380
C
1973 retval = debug_target.to_xfer_memory (memaddr, myaddr, len, write,
1974 attrib, target);
c906108c 1975
96baa820 1976 fprintf_unfiltered (gdb_stdlog,
c906108c 1977 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
c5aa993b 1978 (unsigned int) memaddr, /* possable truncate long long */
c906108c
SS
1979 len, write ? "write" : "read", retval);
1980
c906108c
SS
1981 if (retval > 0)
1982 {
1983 int i;
1984
96baa820 1985 fputs_unfiltered (", bytes =", gdb_stdlog);
c906108c
SS
1986 for (i = 0; i < retval; i++)
1987 {
1988 if ((((long) &(myaddr[i])) & 0xf) == 0)
333dabeb
DJ
1989 {
1990 if (targetdebug < 2 && i > 0)
1991 {
1992 fprintf_unfiltered (gdb_stdlog, " ...");
1993 break;
1994 }
1995 fprintf_unfiltered (gdb_stdlog, "\n");
1996 }
1997
96baa820 1998 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
c906108c
SS
1999 }
2000 }
2001
96baa820 2002 fputc_unfiltered ('\n', gdb_stdlog);
c906108c
SS
2003
2004 return retval;
2005}
2006
2007static void
fba45db2 2008debug_to_files_info (struct target_ops *target)
c906108c
SS
2009{
2010 debug_target.to_files_info (target);
2011
96baa820 2012 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
c906108c
SS
2013}
2014
2015static int
fba45db2 2016debug_to_insert_breakpoint (CORE_ADDR addr, char *save)
c906108c
SS
2017{
2018 int retval;
2019
2020 retval = debug_target.to_insert_breakpoint (addr, save);
2021
96baa820 2022 fprintf_unfiltered (gdb_stdlog,
104c1213
JM
2023 "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
2024 (unsigned long) addr,
2025 (unsigned long) retval);
c906108c
SS
2026 return retval;
2027}
2028
2029static int
fba45db2 2030debug_to_remove_breakpoint (CORE_ADDR addr, char *save)
c906108c
SS
2031{
2032 int retval;
2033
2034 retval = debug_target.to_remove_breakpoint (addr, save);
2035
96baa820 2036 fprintf_unfiltered (gdb_stdlog,
104c1213
JM
2037 "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
2038 (unsigned long) addr,
2039 (unsigned long) retval);
c906108c
SS
2040 return retval;
2041}
2042
ccaa32c7
GS
2043static int
2044debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
2045{
2046 int retval;
2047
2048 retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
2049
2050 fprintf_unfiltered (gdb_stdlog,
2051 "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
2052 (unsigned long) type,
2053 (unsigned long) cnt,
2054 (unsigned long) from_tty,
2055 (unsigned long) retval);
2056 return retval;
2057}
2058
2059static int
2060debug_to_region_size_ok_for_hw_watchpoint (int byte_count)
2061{
2062 CORE_ADDR retval;
2063
2064 retval = debug_target.to_region_size_ok_for_hw_watchpoint (byte_count);
2065
2066 fprintf_unfiltered (gdb_stdlog,
2067 "TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (%ld) = 0x%lx\n",
2068 (unsigned long) byte_count,
2069 (unsigned long) retval);
2070 return retval;
2071}
2072
2073static int
2074debug_to_stopped_by_watchpoint (void)
2075{
2076 int retval;
2077
2078 retval = debug_target.to_stopped_by_watchpoint ();
2079
2080 fprintf_unfiltered (gdb_stdlog,
2081 "STOPPED_BY_WATCHPOINT () = %ld\n",
2082 (unsigned long) retval);
2083 return retval;
2084}
2085
4aa7a7f5
JJ
2086static int
2087debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
ccaa32c7 2088{
4aa7a7f5 2089 int retval;
ccaa32c7 2090
4aa7a7f5 2091 retval = debug_target.to_stopped_data_address (target, addr);
ccaa32c7
GS
2092
2093 fprintf_unfiltered (gdb_stdlog,
4aa7a7f5
JJ
2094 "target_stopped_data_address ([0x%lx]) = %ld\n",
2095 (unsigned long)*addr,
2096 (unsigned long)retval);
ccaa32c7
GS
2097 return retval;
2098}
2099
2100static int
2101debug_to_insert_hw_breakpoint (CORE_ADDR addr, char *save)
2102{
2103 int retval;
2104
2105 retval = debug_target.to_insert_hw_breakpoint (addr, save);
2106
2107 fprintf_unfiltered (gdb_stdlog,
2108 "target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
2109 (unsigned long) addr,
2110 (unsigned long) retval);
2111 return retval;
2112}
2113
2114static int
2115debug_to_remove_hw_breakpoint (CORE_ADDR addr, char *save)
2116{
2117 int retval;
2118
2119 retval = debug_target.to_remove_hw_breakpoint (addr, save);
2120
2121 fprintf_unfiltered (gdb_stdlog,
2122 "target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
2123 (unsigned long) addr,
2124 (unsigned long) retval);
2125 return retval;
2126}
2127
2128static int
2129debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type)
2130{
2131 int retval;
2132
2133 retval = debug_target.to_insert_watchpoint (addr, len, type);
2134
2135 fprintf_unfiltered (gdb_stdlog,
2136 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2137 (unsigned long) addr, len, type, (unsigned long) retval);
2138 return retval;
2139}
2140
2141static int
2142debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type)
2143{
2144 int retval;
2145
2146 retval = debug_target.to_insert_watchpoint (addr, len, type);
2147
2148 fprintf_unfiltered (gdb_stdlog,
2149 "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2150 (unsigned long) addr, len, type, (unsigned long) retval);
2151 return retval;
2152}
2153
c906108c 2154static void
fba45db2 2155debug_to_terminal_init (void)
c906108c
SS
2156{
2157 debug_target.to_terminal_init ();
2158
96baa820 2159 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
c906108c
SS
2160}
2161
2162static void
fba45db2 2163debug_to_terminal_inferior (void)
c906108c
SS
2164{
2165 debug_target.to_terminal_inferior ();
2166
96baa820 2167 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
c906108c
SS
2168}
2169
2170static void
fba45db2 2171debug_to_terminal_ours_for_output (void)
c906108c
SS
2172{
2173 debug_target.to_terminal_ours_for_output ();
2174
96baa820 2175 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
c906108c
SS
2176}
2177
2178static void
fba45db2 2179debug_to_terminal_ours (void)
c906108c
SS
2180{
2181 debug_target.to_terminal_ours ();
2182
96baa820 2183 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
c906108c
SS
2184}
2185
a790ad35
SC
2186static void
2187debug_to_terminal_save_ours (void)
2188{
2189 debug_target.to_terminal_save_ours ();
2190
2191 fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
2192}
2193
c906108c 2194static void
fba45db2 2195debug_to_terminal_info (char *arg, int from_tty)
c906108c
SS
2196{
2197 debug_target.to_terminal_info (arg, from_tty);
2198
96baa820 2199 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
c906108c
SS
2200 from_tty);
2201}
2202
2203static void
fba45db2 2204debug_to_kill (void)
c906108c
SS
2205{
2206 debug_target.to_kill ();
2207
96baa820 2208 fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
c906108c
SS
2209}
2210
2211static void
fba45db2 2212debug_to_load (char *args, int from_tty)
c906108c
SS
2213{
2214 debug_target.to_load (args, from_tty);
2215
96baa820 2216 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
c906108c
SS
2217}
2218
2219static int
fba45db2 2220debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
c906108c
SS
2221{
2222 int retval;
2223
2224 retval = debug_target.to_lookup_symbol (name, addrp);
2225
96baa820 2226 fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
c906108c
SS
2227
2228 return retval;
2229}
2230
2231static void
c27cda74
AC
2232debug_to_create_inferior (char *exec_file, char *args, char **env,
2233 int from_tty)
c906108c 2234{
c27cda74 2235 debug_target.to_create_inferior (exec_file, args, env, from_tty);
c906108c 2236
c27cda74
AC
2237 fprintf_unfiltered (gdb_stdlog, "target_create_inferior (%s, %s, xxx, %d)\n",
2238 exec_file, args, from_tty);
c906108c
SS
2239}
2240
2241static void
39f77062 2242debug_to_post_startup_inferior (ptid_t ptid)
c906108c 2243{
39f77062 2244 debug_target.to_post_startup_inferior (ptid);
c906108c 2245
96baa820 2246 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
39f77062 2247 PIDGET (ptid));
c906108c
SS
2248}
2249
2250static void
fba45db2 2251debug_to_acknowledge_created_inferior (int pid)
c906108c
SS
2252{
2253 debug_target.to_acknowledge_created_inferior (pid);
2254
96baa820 2255 fprintf_unfiltered (gdb_stdlog, "target_acknowledge_created_inferior (%d)\n",
c906108c
SS
2256 pid);
2257}
2258
c906108c 2259static int
fba45db2 2260debug_to_insert_fork_catchpoint (int pid)
c906108c 2261{
c5aa993b 2262 int retval;
c906108c
SS
2263
2264 retval = debug_target.to_insert_fork_catchpoint (pid);
2265
96baa820 2266 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d) = %d\n",
c5aa993b 2267 pid, retval);
c906108c
SS
2268
2269 return retval;
2270}
2271
2272static int
fba45db2 2273debug_to_remove_fork_catchpoint (int pid)
c906108c 2274{
c5aa993b 2275 int retval;
c906108c
SS
2276
2277 retval = debug_target.to_remove_fork_catchpoint (pid);
2278
96baa820 2279 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
c5aa993b 2280 pid, retval);
c906108c
SS
2281
2282 return retval;
2283}
2284
2285static int
fba45db2 2286debug_to_insert_vfork_catchpoint (int pid)
c906108c 2287{
c5aa993b 2288 int retval;
c906108c
SS
2289
2290 retval = debug_target.to_insert_vfork_catchpoint (pid);
2291
96baa820 2292 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d)= %d\n",
c5aa993b 2293 pid, retval);
c906108c
SS
2294
2295 return retval;
2296}
2297
2298static int
fba45db2 2299debug_to_remove_vfork_catchpoint (int pid)
c906108c 2300{
c5aa993b 2301 int retval;
c906108c
SS
2302
2303 retval = debug_target.to_remove_vfork_catchpoint (pid);
2304
96baa820 2305 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
c5aa993b 2306 pid, retval);
c906108c
SS
2307
2308 return retval;
2309}
2310
6604731b
DJ
2311static int
2312debug_to_follow_fork (int follow_child)
c906108c 2313{
6604731b 2314 int retval = debug_target.to_follow_fork (follow_child);
c906108c 2315
6604731b
DJ
2316 fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
2317 follow_child, retval);
2318
2319 return retval;
c906108c
SS
2320}
2321
2322static int
fba45db2 2323debug_to_insert_exec_catchpoint (int pid)
c906108c 2324{
c5aa993b 2325 int retval;
c906108c
SS
2326
2327 retval = debug_target.to_insert_exec_catchpoint (pid);
2328
96baa820 2329 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d) = %d\n",
c5aa993b 2330 pid, retval);
c906108c
SS
2331
2332 return retval;
2333}
2334
2335static int
fba45db2 2336debug_to_remove_exec_catchpoint (int pid)
c906108c 2337{
c5aa993b 2338 int retval;
c906108c
SS
2339
2340 retval = debug_target.to_remove_exec_catchpoint (pid);
2341
96baa820 2342 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
c5aa993b 2343 pid, retval);
c906108c
SS
2344
2345 return retval;
2346}
2347
c906108c 2348static int
fba45db2 2349debug_to_reported_exec_events_per_exec_call (void)
c906108c 2350{
c5aa993b 2351 int reported_exec_events;
c906108c
SS
2352
2353 reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2354
96baa820 2355 fprintf_unfiltered (gdb_stdlog,
c906108c 2356 "target_reported_exec_events_per_exec_call () = %d\n",
c5aa993b 2357 reported_exec_events);
c906108c
SS
2358
2359 return reported_exec_events;
2360}
2361
c906108c 2362static int
fba45db2 2363debug_to_has_exited (int pid, int wait_status, int *exit_status)
c906108c 2364{
c5aa993b 2365 int has_exited;
c906108c
SS
2366
2367 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2368
96baa820 2369 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
c5aa993b 2370 pid, wait_status, *exit_status, has_exited);
c906108c
SS
2371
2372 return has_exited;
2373}
2374
2375static void
fba45db2 2376debug_to_mourn_inferior (void)
c906108c
SS
2377{
2378 debug_target.to_mourn_inferior ();
2379
96baa820 2380 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
c906108c
SS
2381}
2382
2383static int
fba45db2 2384debug_to_can_run (void)
c906108c
SS
2385{
2386 int retval;
2387
2388 retval = debug_target.to_can_run ();
2389
96baa820 2390 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
c906108c
SS
2391
2392 return retval;
2393}
2394
2395static void
39f77062 2396debug_to_notice_signals (ptid_t ptid)
c906108c 2397{
39f77062 2398 debug_target.to_notice_signals (ptid);
c906108c 2399
39f77062
KB
2400 fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n",
2401 PIDGET (ptid));
c906108c
SS
2402}
2403
2404static int
39f77062 2405debug_to_thread_alive (ptid_t ptid)
c906108c
SS
2406{
2407 int retval;
2408
39f77062 2409 retval = debug_target.to_thread_alive (ptid);
c906108c 2410
96baa820 2411 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
39f77062 2412 PIDGET (ptid), retval);
c906108c
SS
2413
2414 return retval;
2415}
2416
0d06e24b 2417static void
fba45db2 2418debug_to_find_new_threads (void)
0d06e24b
JM
2419{
2420 debug_target.to_find_new_threads ();
2421
2422 fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
2423}
2424
c906108c 2425static void
fba45db2 2426debug_to_stop (void)
c906108c
SS
2427{
2428 debug_target.to_stop ();
2429
96baa820 2430 fprintf_unfiltered (gdb_stdlog, "target_stop ()\n");
c906108c
SS
2431}
2432
96baa820
JM
2433static void
2434debug_to_rcmd (char *command,
d9fcf2fb 2435 struct ui_file *outbuf)
96baa820
JM
2436{
2437 debug_target.to_rcmd (command, outbuf);
2438 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
2439}
2440
c906108c 2441static struct symtab_and_line *
fba45db2 2442debug_to_enable_exception_callback (enum exception_event_kind kind, int enable)
c906108c 2443{
7a292a7a
SS
2444 struct symtab_and_line *result;
2445 result = debug_target.to_enable_exception_callback (kind, enable);
96baa820 2446 fprintf_unfiltered (gdb_stdlog,
c906108c
SS
2447 "target get_exception_callback_sal (%d, %d)\n",
2448 kind, enable);
7a292a7a 2449 return result;
c906108c
SS
2450}
2451
2452static struct exception_event_record *
fba45db2 2453debug_to_get_current_exception_event (void)
c906108c 2454{
7a292a7a 2455 struct exception_event_record *result;
c5aa993b 2456 result = debug_target.to_get_current_exception_event ();
96baa820 2457 fprintf_unfiltered (gdb_stdlog, "target get_current_exception_event ()\n");
7a292a7a 2458 return result;
c906108c
SS
2459}
2460
2461static char *
fba45db2 2462debug_to_pid_to_exec_file (int pid)
c906108c 2463{
c5aa993b 2464 char *exec_file;
c906108c
SS
2465
2466 exec_file = debug_target.to_pid_to_exec_file (pid);
2467
96baa820 2468 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
c5aa993b 2469 pid, exec_file);
c906108c
SS
2470
2471 return exec_file;
2472}
2473
c906108c 2474static void
fba45db2 2475setup_target_debug (void)
c906108c
SS
2476{
2477 memcpy (&debug_target, &current_target, sizeof debug_target);
2478
2479 current_target.to_open = debug_to_open;
2480 current_target.to_close = debug_to_close;
2481 current_target.to_attach = debug_to_attach;
2482 current_target.to_post_attach = debug_to_post_attach;
c906108c 2483 current_target.to_detach = debug_to_detach;
6ad8ae5c 2484 current_target.to_disconnect = debug_to_disconnect;
c906108c
SS
2485 current_target.to_resume = debug_to_resume;
2486 current_target.to_wait = debug_to_wait;
c906108c
SS
2487 current_target.to_fetch_registers = debug_to_fetch_registers;
2488 current_target.to_store_registers = debug_to_store_registers;
2489 current_target.to_prepare_to_store = debug_to_prepare_to_store;
2490 current_target.to_xfer_memory = debug_to_xfer_memory;
2491 current_target.to_files_info = debug_to_files_info;
2492 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2493 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
ccaa32c7
GS
2494 current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
2495 current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
2496 current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
2497 current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
2498 current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
2499 current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
2500 current_target.to_stopped_data_address = debug_to_stopped_data_address;
2501 current_target.to_region_size_ok_for_hw_watchpoint = debug_to_region_size_ok_for_hw_watchpoint;
c906108c
SS
2502 current_target.to_terminal_init = debug_to_terminal_init;
2503 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2504 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2505 current_target.to_terminal_ours = debug_to_terminal_ours;
a790ad35 2506 current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
c906108c
SS
2507 current_target.to_terminal_info = debug_to_terminal_info;
2508 current_target.to_kill = debug_to_kill;
2509 current_target.to_load = debug_to_load;
2510 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2511 current_target.to_create_inferior = debug_to_create_inferior;
2512 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2513 current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
c906108c
SS
2514 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2515 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2516 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2517 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
6604731b 2518 current_target.to_follow_fork = debug_to_follow_fork;
c906108c
SS
2519 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2520 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
c906108c 2521 current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
c906108c
SS
2522 current_target.to_has_exited = debug_to_has_exited;
2523 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2524 current_target.to_can_run = debug_to_can_run;
2525 current_target.to_notice_signals = debug_to_notice_signals;
2526 current_target.to_thread_alive = debug_to_thread_alive;
0d06e24b 2527 current_target.to_find_new_threads = debug_to_find_new_threads;
c906108c 2528 current_target.to_stop = debug_to_stop;
96baa820 2529 current_target.to_rcmd = debug_to_rcmd;
c906108c
SS
2530 current_target.to_enable_exception_callback = debug_to_enable_exception_callback;
2531 current_target.to_get_current_exception_event = debug_to_get_current_exception_event;
2532 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
c906108c
SS
2533
2534}
c906108c 2535\f
c5aa993b
JM
2536
2537static char targ_desc[] =
2538"Names of targets and files being debugged.\n\
c906108c
SS
2539Shows the entire stack of targets currently in use (including the exec-file,\n\
2540core-file, and process, if any), as well as the symbol file name.";
2541
96baa820
JM
2542static void
2543do_monitor_command (char *cmd,
2544 int from_tty)
2545{
2b5fe715
AC
2546 if ((current_target.to_rcmd
2547 == (void (*) (char *, struct ui_file *)) tcomplain)
96baa820 2548 || (current_target.to_rcmd == debug_to_rcmd
2b5fe715
AC
2549 && (debug_target.to_rcmd
2550 == (void (*) (char *, struct ui_file *)) tcomplain)))
96baa820
JM
2551 {
2552 error ("\"monitor\" command not supported by this target.\n");
2553 }
2554 target_rcmd (cmd, gdb_stdtarg);
2555}
2556
c906108c 2557void
fba45db2 2558initialize_targets (void)
c906108c
SS
2559{
2560 init_dummy_target ();
2561 push_target (&dummy_target);
2562
2563 add_info ("target", target_info, targ_desc);
2564 add_info ("files", target_info, targ_desc);
2565
cb1a6d5f 2566 deprecated_add_show_from_set
3a11626d
MS
2567 (add_set_cmd ("target", class_maintenance, var_zinteger,
2568 (char *) &targetdebug,
2569 "Set target debugging.\n\
333dabeb
DJ
2570When non-zero, target debugging is enabled. Higher numbers are more\n\
2571verbose. Changes do not take effect until the next \"run\" or \"target\"\n\
2572command.", &setdebuglist),
3a11626d
MS
2573 &showdebuglist);
2574
e707bbc2
AC
2575 add_setshow_boolean_cmd ("trust-readonly-sections", class_support,
2576 &trust_readonly, "\
3b64bf98
AC
2577Set mode for reading from readonly sections.", "\
2578Show mode for reading from readonly sections.", "\
3a11626d
MS
2579When this mode is on, memory reads from readonly sections (such as .text)\n\
2580will be read from the object file instead of from the target. This will\n\
e707bbc2 2581result in significant performance improvement for remote targets.", "\
3b64bf98 2582Mode for reading from readonly sections is %s.",
e707bbc2
AC
2583 NULL, NULL,
2584 &setlist, &showlist);
96baa820
JM
2585
2586 add_com ("monitor", class_obscure, do_monitor_command,
2587 "Send a command to the remote monitor (remote targets only).");
2588
8add0441 2589 target_dcache = dcache_init ();
c906108c 2590}
This page took 0.620197 seconds and 4 git commands to generate.