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