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