Remove trailing spaces and tabulations from pascal language
[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,
7b6bb8da 4 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
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"
07b82ea5 44#include "exec.h"
edb3359d 45#include "inline-frame.h"
2f4d8875 46#include "tracepoint.h"
c906108c 47
a14ed312 48static void target_info (char *, int);
c906108c 49
a14ed312 50static void default_terminal_info (char *, int);
c906108c 51
5009afc5
AS
52static int default_watchpoint_addr_within_range (struct target_ops *,
53 CORE_ADDR, CORE_ADDR, int);
54
e0d24f8d
WZ
55static int default_region_ok_for_hw_watchpoint (CORE_ADDR, int);
56
a14ed312 57static int nosymbol (char *, CORE_ADDR *);
c906108c 58
c25c4a8b 59static void tcomplain (void) ATTRIBUTE_NORETURN;
c906108c 60
a14ed312 61static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
c906108c 62
a14ed312 63static int return_zero (void);
c906108c 64
a14ed312 65static int return_one (void);
c906108c 66
ccaa32c7
GS
67static int return_minus_one (void);
68
a14ed312 69void target_ignore (void);
c906108c 70
a14ed312 71static void target_command (char *, int);
c906108c 72
a14ed312 73static struct target_ops *find_default_run_target (char *);
c906108c 74
4b8a223f 75static LONGEST default_xfer_partial (struct target_ops *ops,
0088c768 76 enum target_object object,
1b0ba102
AC
77 const char *annex, gdb_byte *readbuf,
78 const gdb_byte *writebuf,
8aa91c1e 79 ULONGEST offset, LONGEST len);
0088c768 80
cf7a04e8
DJ
81static LONGEST current_xfer_partial (struct target_ops *ops,
82 enum target_object object,
83 const char *annex, gdb_byte *readbuf,
84 const gdb_byte *writebuf,
85 ULONGEST offset, LONGEST len);
c906108c 86
cf7a04e8
DJ
87static LONGEST target_xfer_partial (struct target_ops *ops,
88 enum target_object object,
89 const char *annex,
90 void *readbuf, const void *writebuf,
91 ULONGEST offset, LONGEST len);
c906108c 92
c2250ad1
UW
93static struct gdbarch *default_thread_architecture (struct target_ops *ops,
94 ptid_t ptid);
95
a14ed312 96static void init_dummy_target (void);
c906108c 97
aa869812
AC
98static struct target_ops debug_target;
99
a14ed312 100static void debug_to_open (char *, int);
c906108c 101
316f2060 102static void debug_to_prepare_to_store (struct regcache *);
c906108c 103
a14ed312 104static void debug_to_files_info (struct target_ops *);
c906108c 105
a6d9a66e
UW
106static int debug_to_insert_breakpoint (struct gdbarch *,
107 struct bp_target_info *);
c906108c 108
a6d9a66e
UW
109static int debug_to_remove_breakpoint (struct gdbarch *,
110 struct bp_target_info *);
c906108c 111
ccaa32c7
GS
112static int debug_to_can_use_hw_breakpoint (int, int, int);
113
a6d9a66e
UW
114static int debug_to_insert_hw_breakpoint (struct gdbarch *,
115 struct bp_target_info *);
ccaa32c7 116
a6d9a66e
UW
117static int debug_to_remove_hw_breakpoint (struct gdbarch *,
118 struct bp_target_info *);
ccaa32c7 119
0cf6dd15
TJB
120static int debug_to_insert_watchpoint (CORE_ADDR, int, int,
121 struct expression *);
ccaa32c7 122
0cf6dd15
TJB
123static int debug_to_remove_watchpoint (CORE_ADDR, int, int,
124 struct expression *);
ccaa32c7
GS
125
126static int debug_to_stopped_by_watchpoint (void);
127
4aa7a7f5 128static int debug_to_stopped_data_address (struct target_ops *, CORE_ADDR *);
ccaa32c7 129
5009afc5
AS
130static int debug_to_watchpoint_addr_within_range (struct target_ops *,
131 CORE_ADDR, CORE_ADDR, int);
132
e0d24f8d
WZ
133static int debug_to_region_ok_for_hw_watchpoint (CORE_ADDR, int);
134
0cf6dd15
TJB
135static int debug_to_can_accel_watchpoint_condition (CORE_ADDR, int, int,
136 struct expression *);
137
a14ed312 138static void debug_to_terminal_init (void);
c906108c 139
a14ed312 140static void debug_to_terminal_inferior (void);
c906108c 141
a14ed312 142static void debug_to_terminal_ours_for_output (void);
c906108c 143
a790ad35
SC
144static void debug_to_terminal_save_ours (void);
145
a14ed312 146static void debug_to_terminal_ours (void);
c906108c 147
a14ed312 148static void debug_to_terminal_info (char *, int);
c906108c 149
a14ed312 150static void debug_to_load (char *, int);
c906108c 151
a14ed312 152static int debug_to_lookup_symbol (char *, CORE_ADDR *);
c906108c 153
a14ed312 154static int debug_to_can_run (void);
c906108c 155
39f77062 156static void debug_to_notice_signals (ptid_t);
c906108c 157
94cc34af 158static void debug_to_stop (ptid_t);
c906108c 159
c906108c 160/* Pointer to array of target architecture structures; the size of the
2bc416ba 161 array; the current index into the array; the allocated size of the
c906108c
SS
162 array. */
163struct target_ops **target_structs;
164unsigned target_struct_size;
165unsigned target_struct_index;
166unsigned target_struct_allocsize;
167#define DEFAULT_ALLOCSIZE 10
168
169/* The initial current target, so that there is always a semi-valid
170 current target. */
171
172static struct target_ops dummy_target;
173
174/* Top of target stack. */
175
258b763a 176static struct target_ops *target_stack;
c906108c
SS
177
178/* The target structure we are currently using to talk to a process
179 or file or whatever "inferior" we have. */
180
181struct target_ops current_target;
182
183/* Command list for target. */
184
185static struct cmd_list_element *targetlist = NULL;
186
cf7a04e8
DJ
187/* Nonzero if we should trust readonly sections from the
188 executable when reading memory. */
189
190static int trust_readonly = 0;
191
8defab1a
DJ
192/* Nonzero if we should show true memory content including
193 memory breakpoint inserted by gdb. */
194
195static int show_memory_breakpoints = 0;
196
d914c394
SS
197/* These globals control whether GDB attempts to perform these
198 operations; they are useful for targets that need to prevent
199 inadvertant disruption, such as in non-stop mode. */
200
201int may_write_registers = 1;
202
203int may_write_memory = 1;
204
205int may_insert_breakpoints = 1;
206
207int may_insert_tracepoints = 1;
208
209int may_insert_fast_tracepoints = 1;
210
211int may_stop = 1;
212
c906108c
SS
213/* Non-zero if we want to see trace of target level stuff. */
214
215static int targetdebug = 0;
920d2a44
AC
216static void
217show_targetdebug (struct ui_file *file, int from_tty,
218 struct cmd_list_element *c, const char *value)
219{
220 fprintf_filtered (file, _("Target debugging is %s.\n"), value);
221}
c906108c 222
a14ed312 223static void setup_target_debug (void);
c906108c 224
4e5d721f
DE
225/* The option sets this. */
226static int stack_cache_enabled_p_1 = 1;
227/* And set_stack_cache_enabled_p updates this.
228 The reason for the separation is so that we don't flush the cache for
229 on->on transitions. */
230static int stack_cache_enabled_p = 1;
231
232/* This is called *after* the stack-cache has been set.
233 Flush the cache for off->on and on->off transitions.
234 There's no real need to flush the cache for on->off transitions,
235 except cleanliness. */
236
237static void
238set_stack_cache_enabled_p (char *args, int from_tty,
239 struct cmd_list_element *c)
240{
241 if (stack_cache_enabled_p != stack_cache_enabled_p_1)
242 target_dcache_invalidate ();
243
244 stack_cache_enabled_p = stack_cache_enabled_p_1;
245}
246
247static void
248show_stack_cache_enabled_p (struct ui_file *file, int from_tty,
249 struct cmd_list_element *c, const char *value)
250{
251 fprintf_filtered (file, _("Cache use for stack accesses is %s.\n"), value);
252}
253
254/* Cache of memory operations, to speed up remote access. */
255static DCACHE *target_dcache;
256
257/* Invalidate the target dcache. */
258
259void
260target_dcache_invalidate (void)
261{
262 dcache_invalidate (target_dcache);
263}
4930751a 264
c906108c
SS
265/* The user just typed 'target' without the name of a target. */
266
c906108c 267static void
fba45db2 268target_command (char *arg, int from_tty)
c906108c
SS
269{
270 fputs_filtered ("Argument required (target name). Try `help target'\n",
271 gdb_stdout);
272}
273
c35b1492
PA
274/* Default target_has_* methods for process_stratum targets. */
275
276int
277default_child_has_all_memory (struct target_ops *ops)
278{
279 /* If no inferior selected, then we can't read memory here. */
280 if (ptid_equal (inferior_ptid, null_ptid))
281 return 0;
282
283 return 1;
284}
285
286int
287default_child_has_memory (struct target_ops *ops)
288{
289 /* If no inferior selected, then we can't read memory here. */
290 if (ptid_equal (inferior_ptid, null_ptid))
291 return 0;
292
293 return 1;
294}
295
296int
297default_child_has_stack (struct target_ops *ops)
298{
299 /* If no inferior selected, there's no stack. */
300 if (ptid_equal (inferior_ptid, null_ptid))
301 return 0;
302
303 return 1;
304}
305
306int
307default_child_has_registers (struct target_ops *ops)
308{
309 /* Can't read registers from no inferior. */
310 if (ptid_equal (inferior_ptid, null_ptid))
311 return 0;
312
313 return 1;
314}
315
316int
aeaec162 317default_child_has_execution (struct target_ops *ops, ptid_t the_ptid)
c35b1492
PA
318{
319 /* If there's no thread selected, then we can't make it run through
320 hoops. */
aeaec162 321 if (ptid_equal (the_ptid, null_ptid))
c35b1492
PA
322 return 0;
323
324 return 1;
325}
326
327
328int
329target_has_all_memory_1 (void)
330{
331 struct target_ops *t;
332
333 for (t = current_target.beneath; t != NULL; t = t->beneath)
334 if (t->to_has_all_memory (t))
335 return 1;
336
337 return 0;
338}
339
340int
341target_has_memory_1 (void)
342{
343 struct target_ops *t;
344
345 for (t = current_target.beneath; t != NULL; t = t->beneath)
346 if (t->to_has_memory (t))
347 return 1;
348
349 return 0;
350}
351
352int
353target_has_stack_1 (void)
354{
355 struct target_ops *t;
356
357 for (t = current_target.beneath; t != NULL; t = t->beneath)
358 if (t->to_has_stack (t))
359 return 1;
360
361 return 0;
362}
363
364int
365target_has_registers_1 (void)
366{
367 struct target_ops *t;
368
369 for (t = current_target.beneath; t != NULL; t = t->beneath)
370 if (t->to_has_registers (t))
371 return 1;
372
373 return 0;
374}
375
376int
aeaec162 377target_has_execution_1 (ptid_t the_ptid)
c35b1492
PA
378{
379 struct target_ops *t;
380
381 for (t = current_target.beneath; t != NULL; t = t->beneath)
aeaec162 382 if (t->to_has_execution (t, the_ptid))
c35b1492
PA
383 return 1;
384
385 return 0;
386}
387
aeaec162
TT
388int
389target_has_execution_current (void)
390{
391 return target_has_execution_1 (inferior_ptid);
392}
393
c906108c
SS
394/* Add a possible target architecture to the list. */
395
396void
fba45db2 397add_target (struct target_ops *t)
c906108c 398{
0088c768 399 /* Provide default values for all "must have" methods. */
0b603eba
AC
400 if (t->to_xfer_partial == NULL)
401 t->to_xfer_partial = default_xfer_partial;
0088c768 402
c35b1492
PA
403 if (t->to_has_all_memory == NULL)
404 t->to_has_all_memory = (int (*) (struct target_ops *)) return_zero;
405
406 if (t->to_has_memory == NULL)
407 t->to_has_memory = (int (*) (struct target_ops *)) return_zero;
408
409 if (t->to_has_stack == NULL)
410 t->to_has_stack = (int (*) (struct target_ops *)) return_zero;
411
412 if (t->to_has_registers == NULL)
413 t->to_has_registers = (int (*) (struct target_ops *)) return_zero;
414
415 if (t->to_has_execution == NULL)
aeaec162 416 t->to_has_execution = (int (*) (struct target_ops *, ptid_t)) return_zero;
c35b1492 417
c906108c
SS
418 if (!target_structs)
419 {
420 target_struct_allocsize = DEFAULT_ALLOCSIZE;
421 target_structs = (struct target_ops **) xmalloc
422 (target_struct_allocsize * sizeof (*target_structs));
423 }
424 if (target_struct_size >= target_struct_allocsize)
425 {
426 target_struct_allocsize *= 2;
427 target_structs = (struct target_ops **)
c5aa993b
JM
428 xrealloc ((char *) target_structs,
429 target_struct_allocsize * sizeof (*target_structs));
c906108c
SS
430 }
431 target_structs[target_struct_size++] = t;
c906108c
SS
432
433 if (targetlist == NULL)
1bedd215
AC
434 add_prefix_cmd ("target", class_run, target_command, _("\
435Connect to a target machine or process.\n\
c906108c
SS
436The first argument is the type or protocol of the target machine.\n\
437Remaining arguments are interpreted by the target protocol. For more\n\
438information on the arguments for a particular protocol, type\n\
1bedd215 439`help target ' followed by the protocol name."),
c906108c
SS
440 &targetlist, "target ", 0, &cmdlist);
441 add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
442}
443
444/* Stub functions */
445
446void
fba45db2 447target_ignore (void)
c906108c
SS
448{
449}
450
7d85a9c0
JB
451void
452target_kill (void)
453{
454 struct target_ops *t;
455
456 for (t = current_target.beneath; t != NULL; t = t->beneath)
457 if (t->to_kill != NULL)
458 {
459 if (targetdebug)
460 fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
461
462 t->to_kill (t);
463 return;
464 }
465
466 noprocess ();
467}
468
11cf8741
JM
469void
470target_load (char *arg, int from_tty)
471{
4e5d721f 472 target_dcache_invalidate ();
11cf8741
JM
473 (*current_target.to_load) (arg, from_tty);
474}
475
947b8855
PA
476void
477target_create_inferior (char *exec_file, char *args,
478 char **env, int from_tty)
136d6dae
VP
479{
480 struct target_ops *t;
5d502164 481
136d6dae
VP
482 for (t = current_target.beneath; t != NULL; t = t->beneath)
483 {
484 if (t->to_create_inferior != NULL)
485 {
486 t->to_create_inferior (t, exec_file, args, env, from_tty);
947b8855
PA
487 if (targetdebug)
488 fprintf_unfiltered (gdb_stdlog,
489 "target_create_inferior (%s, %s, xxx, %d)\n",
490 exec_file, args, from_tty);
136d6dae
VP
491 return;
492 }
493 }
494
495 internal_error (__FILE__, __LINE__,
9b20d036 496 _("could not find a target to create inferior"));
136d6dae
VP
497}
498
d9d2d8b6
PA
499void
500target_terminal_inferior (void)
501{
502 /* A background resume (``run&'') should leave GDB in control of the
c378eb4e 503 terminal. Use target_can_async_p, not target_is_async_p, since at
ba7f6c64
VP
504 this point the target is not async yet. However, if sync_execution
505 is not set, we know it will become async prior to resume. */
506 if (target_can_async_p () && !sync_execution)
d9d2d8b6
PA
507 return;
508
509 /* If GDB is resuming the inferior in the foreground, install
510 inferior's terminal modes. */
511 (*current_target.to_terminal_inferior) ();
512}
136d6dae 513
c906108c 514static int
fba45db2
KB
515nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
516 struct target_ops *t)
c906108c 517{
c378eb4e
MS
518 errno = EIO; /* Can't read/write this location. */
519 return 0; /* No bytes handled. */
c906108c
SS
520}
521
522static void
fba45db2 523tcomplain (void)
c906108c 524{
8a3fe4f8 525 error (_("You can't do that when your target is `%s'"),
c906108c
SS
526 current_target.to_shortname);
527}
528
529void
fba45db2 530noprocess (void)
c906108c 531{
8a3fe4f8 532 error (_("You can't do that without a process to debug."));
c906108c
SS
533}
534
c906108c 535static int
fba45db2 536nosymbol (char *name, CORE_ADDR *addrp)
c906108c 537{
c378eb4e 538 return 1; /* Symbol does not exist in target env. */
c906108c
SS
539}
540
c906108c 541static void
fba45db2 542default_terminal_info (char *args, int from_tty)
c906108c 543{
a3f17187 544 printf_unfiltered (_("No saved terminal information.\n"));
c906108c
SS
545}
546
0ef643c8
JB
547/* A default implementation for the to_get_ada_task_ptid target method.
548
549 This function builds the PTID by using both LWP and TID as part of
550 the PTID lwp and tid elements. The pid used is the pid of the
551 inferior_ptid. */
552
2c0b251b 553static ptid_t
0ef643c8
JB
554default_get_ada_task_ptid (long lwp, long tid)
555{
556 return ptid_build (ptid_get_pid (inferior_ptid), lwp, tid);
557}
558
7998dfc3
AC
559/* Go through the target stack from top to bottom, copying over zero
560 entries in current_target, then filling in still empty entries. In
561 effect, we are doing class inheritance through the pushed target
562 vectors.
563
564 NOTE: cagney/2003-10-17: The problem with this inheritance, as it
565 is currently implemented, is that it discards any knowledge of
566 which target an inherited method originally belonged to.
567 Consequently, new new target methods should instead explicitly and
568 locally search the target stack for the target that can handle the
569 request. */
c906108c
SS
570
571static void
7998dfc3 572update_current_target (void)
c906108c 573{
7998dfc3
AC
574 struct target_ops *t;
575
08d8bcd7 576 /* First, reset current's contents. */
7998dfc3
AC
577 memset (&current_target, 0, sizeof (current_target));
578
579#define INHERIT(FIELD, TARGET) \
580 if (!current_target.FIELD) \
581 current_target.FIELD = (TARGET)->FIELD
582
583 for (t = target_stack; t; t = t->beneath)
584 {
585 INHERIT (to_shortname, t);
586 INHERIT (to_longname, t);
587 INHERIT (to_doc, t);
b52323fa
UW
588 /* Do not inherit to_open. */
589 /* Do not inherit to_close. */
136d6dae 590 /* Do not inherit to_attach. */
7998dfc3 591 INHERIT (to_post_attach, t);
dc177b7a 592 INHERIT (to_attach_no_wait, t);
136d6dae 593 /* Do not inherit to_detach. */
597320e7 594 /* Do not inherit to_disconnect. */
28439f5e 595 /* Do not inherit to_resume. */
117de6a9 596 /* Do not inherit to_wait. */
28439f5e
PA
597 /* Do not inherit to_fetch_registers. */
598 /* Do not inherit to_store_registers. */
7998dfc3 599 INHERIT (to_prepare_to_store, t);
c8e73a31 600 INHERIT (deprecated_xfer_memory, t);
7998dfc3
AC
601 INHERIT (to_files_info, t);
602 INHERIT (to_insert_breakpoint, t);
603 INHERIT (to_remove_breakpoint, t);
604 INHERIT (to_can_use_hw_breakpoint, t);
605 INHERIT (to_insert_hw_breakpoint, t);
606 INHERIT (to_remove_hw_breakpoint, t);
607 INHERIT (to_insert_watchpoint, t);
608 INHERIT (to_remove_watchpoint, t);
609 INHERIT (to_stopped_data_address, t);
74174d2e 610 INHERIT (to_have_steppable_watchpoint, t);
7998dfc3 611 INHERIT (to_have_continuable_watchpoint, t);
5009afc5
AS
612 INHERIT (to_stopped_by_watchpoint, t);
613 INHERIT (to_watchpoint_addr_within_range, t);
e0d24f8d 614 INHERIT (to_region_ok_for_hw_watchpoint, t);
0cf6dd15 615 INHERIT (to_can_accel_watchpoint_condition, t);
7998dfc3
AC
616 INHERIT (to_terminal_init, t);
617 INHERIT (to_terminal_inferior, t);
618 INHERIT (to_terminal_ours_for_output, t);
619 INHERIT (to_terminal_ours, t);
620 INHERIT (to_terminal_save_ours, t);
621 INHERIT (to_terminal_info, t);
7d85a9c0 622 /* Do not inherit to_kill. */
7998dfc3
AC
623 INHERIT (to_load, t);
624 INHERIT (to_lookup_symbol, t);
136d6dae 625 /* Do no inherit to_create_inferior. */
7998dfc3 626 INHERIT (to_post_startup_inferior, t);
7998dfc3
AC
627 INHERIT (to_insert_fork_catchpoint, t);
628 INHERIT (to_remove_fork_catchpoint, t);
629 INHERIT (to_insert_vfork_catchpoint, t);
630 INHERIT (to_remove_vfork_catchpoint, t);
ee057212 631 /* Do not inherit to_follow_fork. */
7998dfc3
AC
632 INHERIT (to_insert_exec_catchpoint, t);
633 INHERIT (to_remove_exec_catchpoint, t);
a96d9b2e 634 INHERIT (to_set_syscall_catchpoint, t);
7998dfc3 635 INHERIT (to_has_exited, t);
82892036 636 /* Do not inherit to_mourn_inferior. */
7998dfc3
AC
637 INHERIT (to_can_run, t);
638 INHERIT (to_notice_signals, t);
28439f5e
PA
639 /* Do not inherit to_thread_alive. */
640 /* Do not inherit to_find_new_threads. */
117de6a9 641 /* Do not inherit to_pid_to_str. */
7998dfc3 642 INHERIT (to_extra_thread_info, t);
4694da01 643 INHERIT (to_thread_name, t);
7998dfc3 644 INHERIT (to_stop, t);
4b8a223f 645 /* Do not inherit to_xfer_partial. */
7998dfc3 646 INHERIT (to_rcmd, t);
7998dfc3 647 INHERIT (to_pid_to_exec_file, t);
49d03eab 648 INHERIT (to_log_command, t);
7998dfc3 649 INHERIT (to_stratum, t);
c378eb4e
MS
650 /* Do not inherit to_has_all_memory. */
651 /* Do not inherit to_has_memory. */
652 /* Do not inherit to_has_stack. */
653 /* Do not inherit to_has_registers. */
654 /* Do not inherit to_has_execution. */
7998dfc3 655 INHERIT (to_has_thread_control, t);
7998dfc3
AC
656 INHERIT (to_can_async_p, t);
657 INHERIT (to_is_async_p, t);
658 INHERIT (to_async, t);
b84876c2 659 INHERIT (to_async_mask, t);
7998dfc3
AC
660 INHERIT (to_find_memory_regions, t);
661 INHERIT (to_make_corefile_notes, t);
6b04bdb7
MS
662 INHERIT (to_get_bookmark, t);
663 INHERIT (to_goto_bookmark, t);
117de6a9 664 /* Do not inherit to_get_thread_local_address. */
b2175913 665 INHERIT (to_can_execute_reverse, t);
c2250ad1 666 INHERIT (to_thread_architecture, t);
424163ea 667 /* Do not inherit to_read_description. */
0ef643c8 668 INHERIT (to_get_ada_task_ptid, t);
08388c79 669 /* Do not inherit to_search_memory. */
8a305172 670 INHERIT (to_supports_multi_process, t);
35b1e5cc
SS
671 INHERIT (to_trace_init, t);
672 INHERIT (to_download_tracepoint, t);
673 INHERIT (to_download_trace_state_variable, t);
674 INHERIT (to_trace_set_readonly_regions, t);
675 INHERIT (to_trace_start, t);
676 INHERIT (to_get_trace_status, t);
677 INHERIT (to_trace_stop, t);
678 INHERIT (to_trace_find, t);
679 INHERIT (to_get_trace_state_variable_value, t);
00bf0b85
SS
680 INHERIT (to_save_trace_data, t);
681 INHERIT (to_upload_tracepoints, t);
682 INHERIT (to_upload_trace_state_variables, t);
683 INHERIT (to_get_raw_trace_data, t);
35b1e5cc 684 INHERIT (to_set_disconnected_tracing, t);
4daf5ac0 685 INHERIT (to_set_circular_trace_buffer, t);
711e434b 686 INHERIT (to_get_tib_address, t);
d914c394 687 INHERIT (to_set_permissions, t);
0fb4aa4b
PA
688 INHERIT (to_static_tracepoint_marker_at, t);
689 INHERIT (to_static_tracepoint_markers_by_strid, t);
b3b9301e 690 INHERIT (to_traceframe_info, t);
7998dfc3 691 INHERIT (to_magic, t);
fd79ecee 692 /* Do not inherit to_memory_map. */
a76d924d
DJ
693 /* Do not inherit to_flash_erase. */
694 /* Do not inherit to_flash_done. */
7998dfc3
AC
695 }
696#undef INHERIT
697
698 /* Clean up a target struct so it no longer has any zero pointers in
0088c768
AC
699 it. Some entries are defaulted to a method that print an error,
700 others are hard-wired to a standard recursive default. */
c906108c
SS
701
702#define de_fault(field, value) \
7998dfc3
AC
703 if (!current_target.field) \
704 current_target.field = value
0d06e24b 705
2bc416ba
DJ
706 de_fault (to_open,
707 (void (*) (char *, int))
0d06e24b 708 tcomplain);
2bc416ba
DJ
709 de_fault (to_close,
710 (void (*) (int))
0d06e24b 711 target_ignore);
2bc416ba
DJ
712 de_fault (to_post_attach,
713 (void (*) (int))
0d06e24b 714 target_ignore);
2bc416ba 715 de_fault (to_prepare_to_store,
316f2060 716 (void (*) (struct regcache *))
0d06e24b 717 noprocess);
2bc416ba 718 de_fault (deprecated_xfer_memory,
3e43a32a
MS
719 (int (*) (CORE_ADDR, gdb_byte *, int, int,
720 struct mem_attrib *, struct target_ops *))
0d06e24b 721 nomemory);
2bc416ba
DJ
722 de_fault (to_files_info,
723 (void (*) (struct target_ops *))
0d06e24b 724 target_ignore);
2bc416ba 725 de_fault (to_insert_breakpoint,
0d06e24b 726 memory_insert_breakpoint);
2bc416ba 727 de_fault (to_remove_breakpoint,
0d06e24b 728 memory_remove_breakpoint);
ccaa32c7
GS
729 de_fault (to_can_use_hw_breakpoint,
730 (int (*) (int, int, int))
731 return_zero);
732 de_fault (to_insert_hw_breakpoint,
a6d9a66e 733 (int (*) (struct gdbarch *, struct bp_target_info *))
ccaa32c7
GS
734 return_minus_one);
735 de_fault (to_remove_hw_breakpoint,
a6d9a66e 736 (int (*) (struct gdbarch *, struct bp_target_info *))
ccaa32c7
GS
737 return_minus_one);
738 de_fault (to_insert_watchpoint,
0cf6dd15 739 (int (*) (CORE_ADDR, int, int, struct expression *))
ccaa32c7
GS
740 return_minus_one);
741 de_fault (to_remove_watchpoint,
0cf6dd15 742 (int (*) (CORE_ADDR, int, int, struct expression *))
ccaa32c7
GS
743 return_minus_one);
744 de_fault (to_stopped_by_watchpoint,
745 (int (*) (void))
746 return_zero);
747 de_fault (to_stopped_data_address,
4aa7a7f5 748 (int (*) (struct target_ops *, CORE_ADDR *))
ccaa32c7 749 return_zero);
5009afc5
AS
750 de_fault (to_watchpoint_addr_within_range,
751 default_watchpoint_addr_within_range);
e0d24f8d
WZ
752 de_fault (to_region_ok_for_hw_watchpoint,
753 default_region_ok_for_hw_watchpoint);
0cf6dd15
TJB
754 de_fault (to_can_accel_watchpoint_condition,
755 (int (*) (CORE_ADDR, int, int, struct expression *))
756 return_zero);
2bc416ba
DJ
757 de_fault (to_terminal_init,
758 (void (*) (void))
0d06e24b 759 target_ignore);
2bc416ba
DJ
760 de_fault (to_terminal_inferior,
761 (void (*) (void))
0d06e24b 762 target_ignore);
2bc416ba
DJ
763 de_fault (to_terminal_ours_for_output,
764 (void (*) (void))
0d06e24b 765 target_ignore);
2bc416ba
DJ
766 de_fault (to_terminal_ours,
767 (void (*) (void))
0d06e24b 768 target_ignore);
2bc416ba
DJ
769 de_fault (to_terminal_save_ours,
770 (void (*) (void))
a790ad35 771 target_ignore);
2bc416ba 772 de_fault (to_terminal_info,
0d06e24b 773 default_terminal_info);
2bc416ba
DJ
774 de_fault (to_load,
775 (void (*) (char *, int))
0d06e24b 776 tcomplain);
2bc416ba
DJ
777 de_fault (to_lookup_symbol,
778 (int (*) (char *, CORE_ADDR *))
0d06e24b 779 nosymbol);
2bc416ba
DJ
780 de_fault (to_post_startup_inferior,
781 (void (*) (ptid_t))
0d06e24b 782 target_ignore);
2bc416ba 783 de_fault (to_insert_fork_catchpoint,
77b06cd7
TJB
784 (int (*) (int))
785 return_one);
2bc416ba
DJ
786 de_fault (to_remove_fork_catchpoint,
787 (int (*) (int))
77b06cd7 788 return_one);
2bc416ba 789 de_fault (to_insert_vfork_catchpoint,
77b06cd7
TJB
790 (int (*) (int))
791 return_one);
2bc416ba
DJ
792 de_fault (to_remove_vfork_catchpoint,
793 (int (*) (int))
77b06cd7 794 return_one);
2bc416ba 795 de_fault (to_insert_exec_catchpoint,
77b06cd7
TJB
796 (int (*) (int))
797 return_one);
2bc416ba
DJ
798 de_fault (to_remove_exec_catchpoint,
799 (int (*) (int))
77b06cd7 800 return_one);
a96d9b2e
SDJ
801 de_fault (to_set_syscall_catchpoint,
802 (int (*) (int, int, int, int, int *))
77b06cd7 803 return_one);
2bc416ba
DJ
804 de_fault (to_has_exited,
805 (int (*) (int, int, int *))
0d06e24b 806 return_zero);
2bc416ba 807 de_fault (to_can_run,
0d06e24b 808 return_zero);
2bc416ba
DJ
809 de_fault (to_notice_signals,
810 (void (*) (ptid_t))
0d06e24b 811 target_ignore);
2bc416ba
DJ
812 de_fault (to_extra_thread_info,
813 (char *(*) (struct thread_info *))
0d06e24b 814 return_zero);
4694da01
TT
815 de_fault (to_thread_name,
816 (char *(*) (struct thread_info *))
817 return_zero);
2bc416ba 818 de_fault (to_stop,
94cc34af 819 (void (*) (ptid_t))
0d06e24b 820 target_ignore);
cf7a04e8 821 current_target.to_xfer_partial = current_xfer_partial;
2bc416ba
DJ
822 de_fault (to_rcmd,
823 (void (*) (char *, struct ui_file *))
0d06e24b 824 tcomplain);
2bc416ba
DJ
825 de_fault (to_pid_to_exec_file,
826 (char *(*) (int))
0d06e24b 827 return_zero);
2bc416ba
DJ
828 de_fault (to_async,
829 (void (*) (void (*) (enum inferior_event_type, void*), void*))
0d06e24b 830 tcomplain);
b84876c2
PA
831 de_fault (to_async_mask,
832 (int (*) (int))
833 return_one);
c2250ad1
UW
834 de_fault (to_thread_architecture,
835 default_thread_architecture);
424163ea 836 current_target.to_read_description = NULL;
0ef643c8
JB
837 de_fault (to_get_ada_task_ptid,
838 (ptid_t (*) (long, long))
839 default_get_ada_task_ptid);
8a305172
PA
840 de_fault (to_supports_multi_process,
841 (int (*) (void))
842 return_zero);
35b1e5cc
SS
843 de_fault (to_trace_init,
844 (void (*) (void))
845 tcomplain);
846 de_fault (to_download_tracepoint,
847 (void (*) (struct breakpoint *))
848 tcomplain);
849 de_fault (to_download_trace_state_variable,
850 (void (*) (struct trace_state_variable *))
851 tcomplain);
852 de_fault (to_trace_set_readonly_regions,
853 (void (*) (void))
854 tcomplain);
855 de_fault (to_trace_start,
856 (void (*) (void))
857 tcomplain);
858 de_fault (to_get_trace_status,
00bf0b85 859 (int (*) (struct trace_status *))
35b1e5cc
SS
860 return_minus_one);
861 de_fault (to_trace_stop,
862 (void (*) (void))
863 tcomplain);
864 de_fault (to_trace_find,
865 (int (*) (enum trace_find_type, int, ULONGEST, ULONGEST, int *))
4136fdd2 866 return_minus_one);
35b1e5cc
SS
867 de_fault (to_get_trace_state_variable_value,
868 (int (*) (int, LONGEST *))
869 return_zero);
00bf0b85 870 de_fault (to_save_trace_data,
011aacb0 871 (int (*) (const char *))
00bf0b85
SS
872 tcomplain);
873 de_fault (to_upload_tracepoints,
874 (int (*) (struct uploaded_tp **))
875 return_zero);
876 de_fault (to_upload_trace_state_variables,
877 (int (*) (struct uploaded_tsv **))
878 return_zero);
879 de_fault (to_get_raw_trace_data,
880 (LONGEST (*) (gdb_byte *, ULONGEST, LONGEST))
881 tcomplain);
35b1e5cc
SS
882 de_fault (to_set_disconnected_tracing,
883 (void (*) (int))
4daf5ac0
SS
884 target_ignore);
885 de_fault (to_set_circular_trace_buffer,
886 (void (*) (int))
887 target_ignore);
711e434b
PM
888 de_fault (to_get_tib_address,
889 (int (*) (ptid_t, CORE_ADDR *))
890 tcomplain);
d914c394
SS
891 de_fault (to_set_permissions,
892 (void (*) (void))
893 target_ignore);
0fb4aa4b
PA
894 de_fault (to_static_tracepoint_marker_at,
895 (int (*) (CORE_ADDR, struct static_tracepoint_marker *))
896 return_zero);
897 de_fault (to_static_tracepoint_markers_by_strid,
898 (VEC(static_tracepoint_marker_p) * (*) (const char *))
899 tcomplain);
b3b9301e
PA
900 de_fault (to_traceframe_info,
901 (struct traceframe_info * (*) (void))
902 tcomplain);
c906108c 903#undef de_fault
c906108c 904
7998dfc3
AC
905 /* Finally, position the target-stack beneath the squashed
906 "current_target". That way code looking for a non-inherited
907 target method can quickly and simply find it. */
908 current_target.beneath = target_stack;
b4b61fdb
DJ
909
910 if (targetdebug)
911 setup_target_debug ();
c906108c
SS
912}
913
914/* Push a new target type into the stack of the existing target accessors,
915 possibly superseding some of the existing accessors.
916
c906108c
SS
917 Rather than allow an empty stack, we always have the dummy target at
918 the bottom stratum, so we can call the function vectors without
919 checking them. */
920
b26a4dcb 921void
fba45db2 922push_target (struct target_ops *t)
c906108c 923{
258b763a 924 struct target_ops **cur;
c906108c
SS
925
926 /* Check magic number. If wrong, it probably means someone changed
927 the struct definition, but not all the places that initialize one. */
928 if (t->to_magic != OPS_MAGIC)
929 {
c5aa993b
JM
930 fprintf_unfiltered (gdb_stderr,
931 "Magic number of %s target struct wrong\n",
932 t->to_shortname);
3e43a32a
MS
933 internal_error (__FILE__, __LINE__,
934 _("failed internal consistency check"));
c906108c
SS
935 }
936
258b763a
AC
937 /* Find the proper stratum to install this target in. */
938 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
c906108c 939 {
258b763a 940 if ((int) (t->to_stratum) >= (int) (*cur)->to_stratum)
c906108c
SS
941 break;
942 }
943
258b763a 944 /* If there's already targets at this stratum, remove them. */
88c231eb 945 /* FIXME: cagney/2003-10-15: I think this should be popping all
258b763a
AC
946 targets to CUR, and not just those at this stratum level. */
947 while ((*cur) != NULL && t->to_stratum == (*cur)->to_stratum)
948 {
949 /* There's already something at this stratum level. Close it,
950 and un-hook it from the stack. */
951 struct target_ops *tmp = (*cur);
5d502164 952
258b763a
AC
953 (*cur) = (*cur)->beneath;
954 tmp->beneath = NULL;
f1c07ab0 955 target_close (tmp, 0);
258b763a 956 }
c906108c
SS
957
958 /* We have removed all targets in our stratum, now add the new one. */
258b763a
AC
959 t->beneath = (*cur);
960 (*cur) = t;
c906108c
SS
961
962 update_current_target ();
c906108c
SS
963}
964
2bc416ba 965/* Remove a target_ops vector from the stack, wherever it may be.
c906108c
SS
966 Return how many times it was removed (0 or 1). */
967
968int
fba45db2 969unpush_target (struct target_ops *t)
c906108c 970{
258b763a
AC
971 struct target_ops **cur;
972 struct target_ops *tmp;
c906108c 973
c8d104ad
PA
974 if (t->to_stratum == dummy_stratum)
975 internal_error (__FILE__, __LINE__,
9b20d036 976 _("Attempt to unpush the dummy target"));
c8d104ad 977
c906108c 978 /* Look for the specified target. Note that we assume that a target
c378eb4e 979 can only occur once in the target stack. */
c906108c 980
258b763a
AC
981 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
982 {
983 if ((*cur) == t)
984 break;
985 }
c906108c 986
258b763a 987 if ((*cur) == NULL)
c378eb4e 988 return 0; /* Didn't find target_ops, quit now. */
c906108c 989
5269965e
AC
990 /* NOTE: cagney/2003-12-06: In '94 the close call was made
991 unconditional by moving it to before the above check that the
992 target was in the target stack (something about "Change the way
993 pushing and popping of targets work to support target overlays
994 and inheritance"). This doesn't make much sense - only open
995 targets should be closed. */
996 target_close (t, 0);
997
c378eb4e 998 /* Unchain the target. */
258b763a
AC
999 tmp = (*cur);
1000 (*cur) = (*cur)->beneath;
1001 tmp->beneath = NULL;
c906108c
SS
1002
1003 update_current_target ();
c906108c
SS
1004
1005 return 1;
1006}
1007
1008void
fba45db2 1009pop_target (void)
c906108c 1010{
c378eb4e 1011 target_close (target_stack, 0); /* Let it clean up. */
258b763a 1012 if (unpush_target (target_stack) == 1)
c906108c
SS
1013 return;
1014
c5aa993b
JM
1015 fprintf_unfiltered (gdb_stderr,
1016 "pop_target couldn't find target %s\n",
1017 current_target.to_shortname);
5d502164
MS
1018 internal_error (__FILE__, __LINE__,
1019 _("failed internal consistency check"));
c906108c
SS
1020}
1021
aa76d38d 1022void
87ab71f0 1023pop_all_targets_above (enum strata above_stratum, int quitting)
aa76d38d 1024{
87ab71f0 1025 while ((int) (current_target.to_stratum) > (int) above_stratum)
aa76d38d 1026 {
b52323fa 1027 target_close (target_stack, quitting);
aa76d38d
PA
1028 if (!unpush_target (target_stack))
1029 {
1030 fprintf_unfiltered (gdb_stderr,
1031 "pop_all_targets couldn't find target %s\n",
b52323fa 1032 target_stack->to_shortname);
aa76d38d
PA
1033 internal_error (__FILE__, __LINE__,
1034 _("failed internal consistency check"));
1035 break;
1036 }
1037 }
1038}
1039
87ab71f0
PA
1040void
1041pop_all_targets (int quitting)
1042{
1043 pop_all_targets_above (dummy_stratum, quitting);
1044}
1045
c0edd9ed
JK
1046/* Return 1 if T is now pushed in the target stack. Return 0 otherwise. */
1047
1048int
1049target_is_pushed (struct target_ops *t)
1050{
1051 struct target_ops **cur;
1052
1053 /* Check magic number. If wrong, it probably means someone changed
1054 the struct definition, but not all the places that initialize one. */
1055 if (t->to_magic != OPS_MAGIC)
1056 {
1057 fprintf_unfiltered (gdb_stderr,
1058 "Magic number of %s target struct wrong\n",
1059 t->to_shortname);
3e43a32a
MS
1060 internal_error (__FILE__, __LINE__,
1061 _("failed internal consistency check"));
c0edd9ed
JK
1062 }
1063
1064 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
1065 if (*cur == t)
1066 return 1;
1067
1068 return 0;
1069}
1070
72f5cf0e 1071/* Using the objfile specified in OBJFILE, find the address for the
9e35dae4
DJ
1072 current thread's thread-local storage with offset OFFSET. */
1073CORE_ADDR
1074target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
1075{
1076 volatile CORE_ADDR addr = 0;
117de6a9
PA
1077 struct target_ops *target;
1078
1079 for (target = current_target.beneath;
1080 target != NULL;
1081 target = target->beneath)
1082 {
1083 if (target->to_get_thread_local_address != NULL)
1084 break;
1085 }
9e35dae4 1086
117de6a9 1087 if (target != NULL
1cf3db46 1088 && gdbarch_fetch_tls_load_module_address_p (target_gdbarch))
9e35dae4
DJ
1089 {
1090 ptid_t ptid = inferior_ptid;
1091 volatile struct gdb_exception ex;
1092
1093 TRY_CATCH (ex, RETURN_MASK_ALL)
1094 {
1095 CORE_ADDR lm_addr;
1096
1097 /* Fetch the load module address for this objfile. */
1cf3db46 1098 lm_addr = gdbarch_fetch_tls_load_module_address (target_gdbarch,
9e35dae4
DJ
1099 objfile);
1100 /* If it's 0, throw the appropriate exception. */
1101 if (lm_addr == 0)
1102 throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
1103 _("TLS load module not found"));
1104
3e43a32a
MS
1105 addr = target->to_get_thread_local_address (target, ptid,
1106 lm_addr, offset);
9e35dae4
DJ
1107 }
1108 /* If an error occurred, print TLS related messages here. Otherwise,
1109 throw the error to some higher catcher. */
1110 if (ex.reason < 0)
1111 {
1112 int objfile_is_library = (objfile->flags & OBJF_SHARED);
1113
1114 switch (ex.error)
1115 {
1116 case TLS_NO_LIBRARY_SUPPORT_ERROR:
3e43a32a
MS
1117 error (_("Cannot find thread-local variables "
1118 "in this thread library."));
9e35dae4
DJ
1119 break;
1120 case TLS_LOAD_MODULE_NOT_FOUND_ERROR:
1121 if (objfile_is_library)
1122 error (_("Cannot find shared library `%s' in dynamic"
1123 " linker's load module list"), objfile->name);
1124 else
1125 error (_("Cannot find executable file `%s' in dynamic"
1126 " linker's load module list"), objfile->name);
1127 break;
1128 case TLS_NOT_ALLOCATED_YET_ERROR:
1129 if (objfile_is_library)
1130 error (_("The inferior has not yet allocated storage for"
1131 " thread-local variables in\n"
1132 "the shared library `%s'\n"
1133 "for %s"),
1134 objfile->name, target_pid_to_str (ptid));
1135 else
1136 error (_("The inferior has not yet allocated storage for"
1137 " thread-local variables in\n"
1138 "the executable `%s'\n"
1139 "for %s"),
1140 objfile->name, target_pid_to_str (ptid));
1141 break;
1142 case TLS_GENERIC_ERROR:
1143 if (objfile_is_library)
1144 error (_("Cannot find thread-local storage for %s, "
1145 "shared library %s:\n%s"),
1146 target_pid_to_str (ptid),
1147 objfile->name, ex.message);
1148 else
1149 error (_("Cannot find thread-local storage for %s, "
1150 "executable file %s:\n%s"),
1151 target_pid_to_str (ptid),
1152 objfile->name, ex.message);
1153 break;
1154 default:
1155 throw_exception (ex);
1156 break;
1157 }
1158 }
1159 }
1160 /* It wouldn't be wrong here to try a gdbarch method, too; finding
1161 TLS is an ABI-specific thing. But we don't do that yet. */
1162 else
1163 error (_("Cannot find thread-local variables on this target"));
1164
1165 return addr;
1166}
1167
c906108c
SS
1168#undef MIN
1169#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
1170
1171/* target_read_string -- read a null terminated string, up to LEN bytes,
1172 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
1173 Set *STRING to a pointer to malloc'd memory containing the data; the caller
1174 is responsible for freeing it. Return the number of bytes successfully
1175 read. */
1176
1177int
fba45db2 1178target_read_string (CORE_ADDR memaddr, char **string, int len, int *errnop)
c906108c
SS
1179{
1180 int tlen, origlen, offset, i;
1b0ba102 1181 gdb_byte buf[4];
c906108c
SS
1182 int errcode = 0;
1183 char *buffer;
1184 int buffer_allocated;
1185 char *bufptr;
1186 unsigned int nbytes_read = 0;
1187
6217bf3e
MS
1188 gdb_assert (string);
1189
c906108c
SS
1190 /* Small for testing. */
1191 buffer_allocated = 4;
1192 buffer = xmalloc (buffer_allocated);
1193 bufptr = buffer;
1194
1195 origlen = len;
1196
1197 while (len > 0)
1198 {
1199 tlen = MIN (len, 4 - (memaddr & 3));
1200 offset = memaddr & 3;
1201
1b0ba102 1202 errcode = target_read_memory (memaddr & ~3, buf, sizeof buf);
c906108c
SS
1203 if (errcode != 0)
1204 {
1205 /* The transfer request might have crossed the boundary to an
c378eb4e 1206 unallocated region of memory. Retry the transfer, requesting
c906108c
SS
1207 a single byte. */
1208 tlen = 1;
1209 offset = 0;
b8eb5af0 1210 errcode = target_read_memory (memaddr, buf, 1);
c906108c
SS
1211 if (errcode != 0)
1212 goto done;
1213 }
1214
1215 if (bufptr - buffer + tlen > buffer_allocated)
1216 {
1217 unsigned int bytes;
5d502164 1218
c906108c
SS
1219 bytes = bufptr - buffer;
1220 buffer_allocated *= 2;
1221 buffer = xrealloc (buffer, buffer_allocated);
1222 bufptr = buffer + bytes;
1223 }
1224
1225 for (i = 0; i < tlen; i++)
1226 {
1227 *bufptr++ = buf[i + offset];
1228 if (buf[i + offset] == '\000')
1229 {
1230 nbytes_read += i + 1;
1231 goto done;
1232 }
1233 }
1234
1235 memaddr += tlen;
1236 len -= tlen;
1237 nbytes_read += tlen;
1238 }
c5aa993b 1239done:
6217bf3e 1240 *string = buffer;
c906108c
SS
1241 if (errnop != NULL)
1242 *errnop = errcode;
c906108c
SS
1243 return nbytes_read;
1244}
1245
07b82ea5
PA
1246struct target_section_table *
1247target_get_section_table (struct target_ops *target)
1248{
1249 struct target_ops *t;
1250
1251 if (targetdebug)
1252 fprintf_unfiltered (gdb_stdlog, "target_get_section_table ()\n");
1253
1254 for (t = target; t != NULL; t = t->beneath)
1255 if (t->to_get_section_table != NULL)
1256 return (*t->to_get_section_table) (t);
1257
1258 return NULL;
1259}
1260
8db32d44 1261/* Find a section containing ADDR. */
07b82ea5 1262
0542c86d 1263struct target_section *
8db32d44
AC
1264target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
1265{
07b82ea5 1266 struct target_section_table *table = target_get_section_table (target);
0542c86d 1267 struct target_section *secp;
07b82ea5
PA
1268
1269 if (table == NULL)
1270 return NULL;
1271
1272 for (secp = table->sections; secp < table->sections_end; secp++)
8db32d44
AC
1273 {
1274 if (addr >= secp->addr && addr < secp->endaddr)
1275 return secp;
1276 }
1277 return NULL;
1278}
1279
e6e4e701
PA
1280/* Read memory from the live target, even if currently inspecting a
1281 traceframe. The return is the same as that of target_read. */
1282
1283static LONGEST
1284target_read_live_memory (enum target_object object,
1285 ULONGEST memaddr, gdb_byte *myaddr, LONGEST len)
1286{
1287 int ret;
1288 struct cleanup *cleanup;
1289
1290 /* Switch momentarily out of tfind mode so to access live memory.
1291 Note that this must not clear global state, such as the frame
1292 cache, which must still remain valid for the previous traceframe.
1293 We may be _building_ the frame cache at this point. */
1294 cleanup = make_cleanup_restore_traceframe_number ();
1295 set_traceframe_number (-1);
1296
1297 ret = target_read (current_target.beneath, object, NULL,
1298 myaddr, memaddr, len);
1299
1300 do_cleanups (cleanup);
1301 return ret;
1302}
1303
1304/* Using the set of read-only target sections of OPS, read live
1305 read-only memory. Note that the actual reads start from the
5657161f
PA
1306 top-most target again.
1307
1308 For interface/parameters/return description see target.h,
1309 to_xfer_partial. */
e6e4e701
PA
1310
1311static LONGEST
1312memory_xfer_live_readonly_partial (struct target_ops *ops,
1313 enum target_object object,
1314 gdb_byte *readbuf, ULONGEST memaddr,
1315 LONGEST len)
1316{
1317 struct target_section *secp;
1318 struct target_section_table *table;
1319
1320 secp = target_section_by_addr (ops, memaddr);
1321 if (secp != NULL
1322 && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1323 & SEC_READONLY))
1324 {
1325 struct target_section *p;
1326 ULONGEST memend = memaddr + len;
1327
1328 table = target_get_section_table (ops);
1329
1330 for (p = table->sections; p < table->sections_end; p++)
1331 {
1332 if (memaddr >= p->addr)
1333 {
1334 if (memend <= p->endaddr)
1335 {
1336 /* Entire transfer is within this section. */
1337 return target_read_live_memory (object, memaddr,
1338 readbuf, len);
1339 }
1340 else if (memaddr >= p->endaddr)
1341 {
1342 /* This section ends before the transfer starts. */
1343 continue;
1344 }
1345 else
1346 {
1347 /* This section overlaps the transfer. Just do half. */
1348 len = p->endaddr - memaddr;
1349 return target_read_live_memory (object, memaddr,
1350 readbuf, len);
1351 }
1352 }
1353 }
1354 }
1355
1356 return 0;
1357}
1358
7f79c47e
DE
1359/* Perform a partial memory transfer.
1360 For docs see target.h, to_xfer_partial. */
cf7a04e8
DJ
1361
1362static LONGEST
4e5d721f
DE
1363memory_xfer_partial (struct target_ops *ops, enum target_object object,
1364 void *readbuf, const void *writebuf, ULONGEST memaddr,
1365 LONGEST len)
0779438d 1366{
cf7a04e8
DJ
1367 LONGEST res;
1368 int reg_len;
1369 struct mem_region *region;
4e5d721f 1370 struct inferior *inf;
cf7a04e8
DJ
1371
1372 /* Zero length requests are ok and require no work. */
1373 if (len == 0)
1374 return 0;
1375
07b82ea5
PA
1376 /* For accesses to unmapped overlay sections, read directly from
1377 files. Must do this first, as MEMADDR may need adjustment. */
1378 if (readbuf != NULL && overlay_debugging)
1379 {
1380 struct obj_section *section = find_pc_overlay (memaddr);
5d502164 1381
07b82ea5
PA
1382 if (pc_in_unmapped_range (memaddr, section))
1383 {
1384 struct target_section_table *table
1385 = target_get_section_table (ops);
1386 const char *section_name = section->the_bfd_section->name;
5d502164 1387
07b82ea5
PA
1388 memaddr = overlay_mapped_address (memaddr, section);
1389 return section_table_xfer_memory_partial (readbuf, writebuf,
1390 memaddr, len,
1391 table->sections,
1392 table->sections_end,
1393 section_name);
1394 }
1395 }
1396
1397 /* Try the executable files, if "trust-readonly-sections" is set. */
cf7a04e8
DJ
1398 if (readbuf != NULL && trust_readonly)
1399 {
0542c86d 1400 struct target_section *secp;
07b82ea5 1401 struct target_section_table *table;
cf7a04e8
DJ
1402
1403 secp = target_section_by_addr (ops, memaddr);
1404 if (secp != NULL
1405 && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1406 & SEC_READONLY))
07b82ea5
PA
1407 {
1408 table = target_get_section_table (ops);
1409 return section_table_xfer_memory_partial (readbuf, writebuf,
1410 memaddr, len,
1411 table->sections,
1412 table->sections_end,
1413 NULL);
1414 }
98646950
UW
1415 }
1416
e6e4e701
PA
1417 /* If reading unavailable memory in the context of traceframes, and
1418 this address falls within a read-only section, fallback to
1419 reading from live memory. */
1420 if (readbuf != NULL && get_traceframe_number () != -1)
1421 {
1422 VEC(mem_range_s) *available;
1423
1424 /* If we fail to get the set of available memory, then the
1425 target does not support querying traceframe info, and so we
1426 attempt reading from the traceframe anyway (assuming the
1427 target implements the old QTro packet then). */
1428 if (traceframe_available_memory (&available, memaddr, len))
1429 {
1430 struct cleanup *old_chain;
1431
1432 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
1433
1434 if (VEC_empty (mem_range_s, available)
1435 || VEC_index (mem_range_s, available, 0)->start != memaddr)
1436 {
1437 /* Don't read into the traceframe's available
1438 memory. */
1439 if (!VEC_empty (mem_range_s, available))
1440 {
1441 LONGEST oldlen = len;
1442
1443 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
1444 gdb_assert (len <= oldlen);
1445 }
1446
1447 do_cleanups (old_chain);
1448
1449 /* This goes through the topmost target again. */
1450 res = memory_xfer_live_readonly_partial (ops, object,
1451 readbuf, memaddr, len);
1452 if (res > 0)
1453 return res;
1454
1455 /* No use trying further, we know some memory starting
1456 at MEMADDR isn't available. */
1457 return -1;
1458 }
1459
1460 /* Don't try to read more than how much is available, in
1461 case the target implements the deprecated QTro packet to
1462 cater for older GDBs (the target's knowledge of read-only
1463 sections may be outdated by now). */
1464 len = VEC_index (mem_range_s, available, 0)->length;
1465
1466 do_cleanups (old_chain);
1467 }
1468 }
1469
cf7a04e8
DJ
1470 /* Try GDB's internal data cache. */
1471 region = lookup_mem_region (memaddr);
4b5752d0
VP
1472 /* region->hi == 0 means there's no upper bound. */
1473 if (memaddr + len < region->hi || region->hi == 0)
cf7a04e8
DJ
1474 reg_len = len;
1475 else
1476 reg_len = region->hi - memaddr;
1477
1478 switch (region->attrib.mode)
1479 {
1480 case MEM_RO:
1481 if (writebuf != NULL)
1482 return -1;
1483 break;
1484
1485 case MEM_WO:
1486 if (readbuf != NULL)
1487 return -1;
1488 break;
a76d924d
DJ
1489
1490 case MEM_FLASH:
1491 /* We only support writing to flash during "load" for now. */
1492 if (writebuf != NULL)
1493 error (_("Writing to flash memory forbidden in this context"));
1494 break;
4b5752d0
VP
1495
1496 case MEM_NONE:
1497 return -1;
cf7a04e8
DJ
1498 }
1499
6c95b8df
PA
1500 if (!ptid_equal (inferior_ptid, null_ptid))
1501 inf = find_inferior_pid (ptid_get_pid (inferior_ptid));
1502 else
1503 inf = NULL;
4e5d721f
DE
1504
1505 if (inf != NULL
2f4d8875
PA
1506 /* The dcache reads whole cache lines; that doesn't play well
1507 with reading from a trace buffer, because reading outside of
1508 the collected memory range fails. */
1509 && get_traceframe_number () == -1
4e5d721f
DE
1510 && (region->attrib.cache
1511 || (stack_cache_enabled_p && object == TARGET_OBJECT_STACK_MEMORY)))
cf7a04e8 1512 {
cf7a04e8 1513 if (readbuf != NULL)
25f122dc 1514 res = dcache_xfer_memory (ops, target_dcache, memaddr, readbuf,
cf7a04e8
DJ
1515 reg_len, 0);
1516 else
1517 /* FIXME drow/2006-08-09: If we're going to preserve const
1518 correctness dcache_xfer_memory should take readbuf and
1519 writebuf. */
25f122dc 1520 res = dcache_xfer_memory (ops, target_dcache, memaddr,
cf7a04e8
DJ
1521 (void *) writebuf,
1522 reg_len, 1);
1523 if (res <= 0)
1524 return -1;
1525 else
8defab1a
DJ
1526 {
1527 if (readbuf && !show_memory_breakpoints)
1528 breakpoint_restore_shadows (readbuf, memaddr, reg_len);
1529 return res;
1530 }
cf7a04e8
DJ
1531 }
1532
1533 /* If none of those methods found the memory we wanted, fall back
1534 to a target partial transfer. Normally a single call to
1535 to_xfer_partial is enough; if it doesn't recognize an object
1536 it will call the to_xfer_partial of the next target down.
1537 But for memory this won't do. Memory is the only target
1538 object which can be read from more than one valid target.
1539 A core file, for instance, could have some of memory but
1540 delegate other bits to the target below it. So, we must
1541 manually try all targets. */
1542
1543 do
1544 {
1545 res = ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL,
4b5752d0 1546 readbuf, writebuf, memaddr, reg_len);
cf7a04e8 1547 if (res > 0)
8defab1a 1548 break;
cf7a04e8 1549
5ad3a4ca
DJ
1550 /* We want to continue past core files to executables, but not
1551 past a running target's memory. */
c35b1492 1552 if (ops->to_has_all_memory (ops))
8defab1a 1553 break;
5ad3a4ca 1554
cf7a04e8
DJ
1555 ops = ops->beneath;
1556 }
1557 while (ops != NULL);
1558
e8c9e0a1 1559 if (res > 0 && readbuf != NULL && !show_memory_breakpoints)
8defab1a
DJ
1560 breakpoint_restore_shadows (readbuf, memaddr, reg_len);
1561
41dcd03f
DE
1562 /* Make sure the cache gets updated no matter what - if we are writing
1563 to the stack. Even if this write is not tagged as such, we still need
1564 to update the cache. */
1565
1566 if (res > 0
1567 && inf != NULL
1568 && writebuf != NULL
1569 && !region->attrib.cache
1570 && stack_cache_enabled_p
1571 && object != TARGET_OBJECT_STACK_MEMORY)
1572 {
7d4f32d3 1573 dcache_update (target_dcache, memaddr, (void *) writebuf, res);
41dcd03f
DE
1574 }
1575
cf7a04e8
DJ
1576 /* If we still haven't got anything, return the last error. We
1577 give up. */
1578 return res;
0779438d
AC
1579}
1580
8defab1a
DJ
1581static void
1582restore_show_memory_breakpoints (void *arg)
1583{
1584 show_memory_breakpoints = (uintptr_t) arg;
1585}
1586
1587struct cleanup *
1588make_show_memory_breakpoints_cleanup (int show)
1589{
1590 int current = show_memory_breakpoints;
8defab1a 1591
5d502164 1592 show_memory_breakpoints = show;
8defab1a
DJ
1593 return make_cleanup (restore_show_memory_breakpoints,
1594 (void *) (uintptr_t) current);
1595}
1596
7f79c47e
DE
1597/* For docs see target.h, to_xfer_partial. */
1598
27394598
AC
1599static LONGEST
1600target_xfer_partial (struct target_ops *ops,
1601 enum target_object object, const char *annex,
1602 void *readbuf, const void *writebuf,
1603 ULONGEST offset, LONGEST len)
1604{
1605 LONGEST retval;
1606
1607 gdb_assert (ops->to_xfer_partial != NULL);
cf7a04e8 1608
d914c394
SS
1609 if (writebuf && !may_write_memory)
1610 error (_("Writing to memory is not allowed (addr %s, len %s)"),
1611 core_addr_to_string_nz (offset), plongest (len));
1612
cf7a04e8
DJ
1613 /* If this is a memory transfer, let the memory-specific code
1614 have a look at it instead. Memory transfers are more
1615 complicated. */
4e5d721f
DE
1616 if (object == TARGET_OBJECT_MEMORY || object == TARGET_OBJECT_STACK_MEMORY)
1617 retval = memory_xfer_partial (ops, object, readbuf,
1618 writebuf, offset, len);
cf7a04e8
DJ
1619 else
1620 {
1621 enum target_object raw_object = object;
1622
1623 /* If this is a raw memory transfer, request the normal
1624 memory object from other layers. */
1625 if (raw_object == TARGET_OBJECT_RAW_MEMORY)
1626 raw_object = TARGET_OBJECT_MEMORY;
1627
1628 retval = ops->to_xfer_partial (ops, raw_object, annex, readbuf,
1629 writebuf, offset, len);
1630 }
1631
27394598
AC
1632 if (targetdebug)
1633 {
1634 const unsigned char *myaddr = NULL;
1635
1636 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
1637 "%s:target_xfer_partial "
1638 "(%d, %s, %s, %s, %s, %s) = %s",
27394598
AC
1639 ops->to_shortname,
1640 (int) object,
1641 (annex ? annex : "(null)"),
53b71562
JB
1642 host_address_to_string (readbuf),
1643 host_address_to_string (writebuf),
0b1553bc
UW
1644 core_addr_to_string_nz (offset),
1645 plongest (len), plongest (retval));
27394598
AC
1646
1647 if (readbuf)
1648 myaddr = readbuf;
1649 if (writebuf)
1650 myaddr = writebuf;
1651 if (retval > 0 && myaddr != NULL)
1652 {
1653 int i;
2bc416ba 1654
27394598
AC
1655 fputs_unfiltered (", bytes =", gdb_stdlog);
1656 for (i = 0; i < retval; i++)
1657 {
53b71562 1658 if ((((intptr_t) &(myaddr[i])) & 0xf) == 0)
27394598
AC
1659 {
1660 if (targetdebug < 2 && i > 0)
1661 {
1662 fprintf_unfiltered (gdb_stdlog, " ...");
1663 break;
1664 }
1665 fprintf_unfiltered (gdb_stdlog, "\n");
1666 }
2bc416ba 1667
27394598
AC
1668 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
1669 }
1670 }
2bc416ba 1671
27394598
AC
1672 fputc_unfiltered ('\n', gdb_stdlog);
1673 }
1674 return retval;
1675}
1676
c906108c
SS
1677/* Read LEN bytes of target memory at address MEMADDR, placing the results in
1678 GDB's memory at MYADDR. Returns either 0 for success or an errno value
1679 if any error occurs.
1680
1681 If an error occurs, no guarantee is made about the contents of the data at
1682 MYADDR. In particular, the caller should not depend upon partial reads
1683 filling the buffer with good data. There is no way for the caller to know
1684 how much good data might have been transfered anyway. Callers that can
cf7a04e8 1685 deal with partial reads should call target_read (which will retry until
c378eb4e 1686 it makes no progress, and then return how much was transferred). */
c906108c
SS
1687
1688int
fc1a4b47 1689target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
c906108c 1690{
c35b1492
PA
1691 /* Dispatch to the topmost target, not the flattened current_target.
1692 Memory accesses check target->to_has_(all_)memory, and the
1693 flattened target doesn't inherit those. */
1694 if (target_read (current_target.beneath, TARGET_OBJECT_MEMORY, NULL,
cf7a04e8
DJ
1695 myaddr, memaddr, len) == len)
1696 return 0;
0779438d 1697 else
cf7a04e8 1698 return EIO;
c906108c
SS
1699}
1700
4e5d721f
DE
1701/* Like target_read_memory, but specify explicitly that this is a read from
1702 the target's stack. This may trigger different cache behavior. */
1703
1704int
1705target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
1706{
1707 /* Dispatch to the topmost target, not the flattened current_target.
1708 Memory accesses check target->to_has_(all_)memory, and the
1709 flattened target doesn't inherit those. */
1710
1711 if (target_read (current_target.beneath, TARGET_OBJECT_STACK_MEMORY, NULL,
1712 myaddr, memaddr, len) == len)
1713 return 0;
1714 else
1715 return EIO;
1716}
1717
7f79c47e
DE
1718/* Write LEN bytes from MYADDR to target memory at address MEMADDR.
1719 Returns either 0 for success or an errno value if any error occurs.
1720 If an error occurs, no guarantee is made about how much data got written.
1721 Callers that can deal with partial writes should call target_write. */
1722
c906108c 1723int
fc1a4b47 1724target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
c906108c 1725{
c35b1492
PA
1726 /* Dispatch to the topmost target, not the flattened current_target.
1727 Memory accesses check target->to_has_(all_)memory, and the
1728 flattened target doesn't inherit those. */
1729 if (target_write (current_target.beneath, TARGET_OBJECT_MEMORY, NULL,
cf7a04e8
DJ
1730 myaddr, memaddr, len) == len)
1731 return 0;
0779438d 1732 else
cf7a04e8 1733 return EIO;
c906108c 1734}
c5aa993b 1735
fd79ecee
DJ
1736/* Fetch the target's memory map. */
1737
1738VEC(mem_region_s) *
1739target_memory_map (void)
1740{
1741 VEC(mem_region_s) *result;
1742 struct mem_region *last_one, *this_one;
1743 int ix;
1744 struct target_ops *t;
1745
1746 if (targetdebug)
1747 fprintf_unfiltered (gdb_stdlog, "target_memory_map ()\n");
1748
1749 for (t = current_target.beneath; t != NULL; t = t->beneath)
1750 if (t->to_memory_map != NULL)
1751 break;
1752
1753 if (t == NULL)
1754 return NULL;
1755
1756 result = t->to_memory_map (t);
1757 if (result == NULL)
1758 return NULL;
1759
1760 qsort (VEC_address (mem_region_s, result),
1761 VEC_length (mem_region_s, result),
1762 sizeof (struct mem_region), mem_region_cmp);
1763
1764 /* Check that regions do not overlap. Simultaneously assign
1765 a numbering for the "mem" commands to use to refer to
1766 each region. */
1767 last_one = NULL;
1768 for (ix = 0; VEC_iterate (mem_region_s, result, ix, this_one); ix++)
1769 {
1770 this_one->number = ix;
1771
1772 if (last_one && last_one->hi > this_one->lo)
1773 {
1774 warning (_("Overlapping regions in memory map: ignoring"));
1775 VEC_free (mem_region_s, result);
1776 return NULL;
1777 }
1778 last_one = this_one;
1779 }
1780
1781 return result;
1782}
1783
a76d924d
DJ
1784void
1785target_flash_erase (ULONGEST address, LONGEST length)
1786{
1787 struct target_ops *t;
1788
1789 for (t = current_target.beneath; t != NULL; t = t->beneath)
1790 if (t->to_flash_erase != NULL)
5d502164
MS
1791 {
1792 if (targetdebug)
1793 fprintf_unfiltered (gdb_stdlog, "target_flash_erase (%s, %s)\n",
1794 hex_string (address), phex (length, 0));
1795 t->to_flash_erase (t, address, length);
1796 return;
1797 }
a76d924d
DJ
1798
1799 tcomplain ();
1800}
1801
1802void
1803target_flash_done (void)
1804{
1805 struct target_ops *t;
1806
1807 for (t = current_target.beneath; t != NULL; t = t->beneath)
1808 if (t->to_flash_done != NULL)
5d502164
MS
1809 {
1810 if (targetdebug)
1811 fprintf_unfiltered (gdb_stdlog, "target_flash_done\n");
1812 t->to_flash_done (t);
1813 return;
1814 }
a76d924d
DJ
1815
1816 tcomplain ();
1817}
1818
920d2a44
AC
1819static void
1820show_trust_readonly (struct ui_file *file, int from_tty,
1821 struct cmd_list_element *c, const char *value)
1822{
3e43a32a
MS
1823 fprintf_filtered (file,
1824 _("Mode for reading from readonly sections is %s.\n"),
920d2a44
AC
1825 value);
1826}
3a11626d 1827
1e3ff5ad
AC
1828/* More generic transfers. */
1829
0088c768 1830static LONGEST
8aa91c1e 1831default_xfer_partial (struct target_ops *ops, enum target_object object,
2bc416ba 1832 const char *annex, gdb_byte *readbuf,
1b0ba102 1833 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
0088c768
AC
1834{
1835 if (object == TARGET_OBJECT_MEMORY
c8e73a31
AC
1836 && ops->deprecated_xfer_memory != NULL)
1837 /* If available, fall back to the target's
1838 "deprecated_xfer_memory" method. */
0088c768 1839 {
4b8a223f 1840 int xfered = -1;
5d502164 1841
0088c768 1842 errno = 0;
4b8a223f
AC
1843 if (writebuf != NULL)
1844 {
1845 void *buffer = xmalloc (len);
1846 struct cleanup *cleanup = make_cleanup (xfree, buffer);
5d502164 1847
4b8a223f 1848 memcpy (buffer, writebuf, len);
c8e73a31
AC
1849 xfered = ops->deprecated_xfer_memory (offset, buffer, len,
1850 1/*write*/, NULL, ops);
4b8a223f
AC
1851 do_cleanups (cleanup);
1852 }
1853 if (readbuf != NULL)
244e85c8
MS
1854 xfered = ops->deprecated_xfer_memory (offset, readbuf, len,
1855 0/*read*/, NULL, ops);
0088c768
AC
1856 if (xfered > 0)
1857 return xfered;
1858 else if (xfered == 0 && errno == 0)
c8e73a31
AC
1859 /* "deprecated_xfer_memory" uses 0, cross checked against
1860 ERRNO as one indication of an error. */
0088c768
AC
1861 return 0;
1862 else
1863 return -1;
1864 }
1865 else if (ops->beneath != NULL)
cf7a04e8
DJ
1866 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
1867 readbuf, writebuf, offset, len);
1868 else
1869 return -1;
1870}
1871
1872/* The xfer_partial handler for the topmost target. Unlike the default,
1873 it does not need to handle memory specially; it just passes all
1874 requests down the stack. */
1875
1876static LONGEST
1877current_xfer_partial (struct target_ops *ops, enum target_object object,
1878 const char *annex, gdb_byte *readbuf,
1879 const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1880{
1881 if (ops->beneath != NULL)
1882 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
1883 readbuf, writebuf, offset, len);
0088c768
AC
1884 else
1885 return -1;
1886}
1887
7f79c47e 1888/* Target vector read/write partial wrapper functions. */
0088c768 1889
13547ab6 1890static LONGEST
1e3ff5ad
AC
1891target_read_partial (struct target_ops *ops,
1892 enum target_object object,
1b0ba102 1893 const char *annex, gdb_byte *buf,
1e3ff5ad
AC
1894 ULONGEST offset, LONGEST len)
1895{
27394598 1896 return target_xfer_partial (ops, object, annex, buf, NULL, offset, len);
1e3ff5ad
AC
1897}
1898
13547ab6 1899static LONGEST
1e3ff5ad
AC
1900target_write_partial (struct target_ops *ops,
1901 enum target_object object,
1b0ba102 1902 const char *annex, const gdb_byte *buf,
1e3ff5ad
AC
1903 ULONGEST offset, LONGEST len)
1904{
27394598 1905 return target_xfer_partial (ops, object, annex, NULL, buf, offset, len);
1e3ff5ad
AC
1906}
1907
1908/* Wrappers to perform the full transfer. */
7f79c47e
DE
1909
1910/* For docs on target_read see target.h. */
1911
1e3ff5ad
AC
1912LONGEST
1913target_read (struct target_ops *ops,
1914 enum target_object object,
1b0ba102 1915 const char *annex, gdb_byte *buf,
1e3ff5ad
AC
1916 ULONGEST offset, LONGEST len)
1917{
1918 LONGEST xfered = 0;
5d502164 1919
1e3ff5ad
AC
1920 while (xfered < len)
1921 {
0088c768 1922 LONGEST xfer = target_read_partial (ops, object, annex,
fc1a4b47 1923 (gdb_byte *) buf + xfered,
0088c768 1924 offset + xfered, len - xfered);
5d502164 1925
1e3ff5ad 1926 /* Call an observer, notifying them of the xfer progress? */
13547ab6
DJ
1927 if (xfer == 0)
1928 return xfered;
1929 if (xfer < 0)
0088c768 1930 return -1;
1e3ff5ad
AC
1931 xfered += xfer;
1932 QUIT;
1933 }
1934 return len;
1935}
1936
f1a507a1
JB
1937/* Assuming that the entire [begin, end) range of memory cannot be
1938 read, try to read whatever subrange is possible to read.
1939
1940 The function returns, in RESULT, either zero or one memory block.
1941 If there's a readable subrange at the beginning, it is completely
1942 read and returned. Any further readable subrange will not be read.
1943 Otherwise, if there's a readable subrange at the end, it will be
1944 completely read and returned. Any readable subranges before it
1945 (obviously, not starting at the beginning), will be ignored. In
1946 other cases -- either no readable subrange, or readable subrange(s)
1947 that is neither at the beginning, or end, nothing is returned.
1948
1949 The purpose of this function is to handle a read across a boundary
1950 of accessible memory in a case when memory map is not available.
1951 The above restrictions are fine for this case, but will give
1952 incorrect results if the memory is 'patchy'. However, supporting
1953 'patchy' memory would require trying to read every single byte,
1954 and it seems unacceptable solution. Explicit memory map is
1955 recommended for this case -- and target_read_memory_robust will
1956 take care of reading multiple ranges then. */
8dedea02
VP
1957
1958static void
3e43a32a
MS
1959read_whatever_is_readable (struct target_ops *ops,
1960 ULONGEST begin, ULONGEST end,
8dedea02 1961 VEC(memory_read_result_s) **result)
d5086790 1962{
f1a507a1 1963 gdb_byte *buf = xmalloc (end - begin);
8dedea02
VP
1964 ULONGEST current_begin = begin;
1965 ULONGEST current_end = end;
1966 int forward;
1967 memory_read_result_s r;
1968
1969 /* If we previously failed to read 1 byte, nothing can be done here. */
1970 if (end - begin <= 1)
13b3fd9b
MS
1971 {
1972 xfree (buf);
1973 return;
1974 }
8dedea02
VP
1975
1976 /* Check that either first or the last byte is readable, and give up
c378eb4e 1977 if not. This heuristic is meant to permit reading accessible memory
8dedea02
VP
1978 at the boundary of accessible region. */
1979 if (target_read_partial (ops, TARGET_OBJECT_MEMORY, NULL,
1980 buf, begin, 1) == 1)
1981 {
1982 forward = 1;
1983 ++current_begin;
1984 }
1985 else if (target_read_partial (ops, TARGET_OBJECT_MEMORY, NULL,
1986 buf + (end-begin) - 1, end - 1, 1) == 1)
1987 {
1988 forward = 0;
1989 --current_end;
1990 }
1991 else
1992 {
13b3fd9b 1993 xfree (buf);
8dedea02
VP
1994 return;
1995 }
1996
1997 /* Loop invariant is that the [current_begin, current_end) was previously
1998 found to be not readable as a whole.
1999
2000 Note loop condition -- if the range has 1 byte, we can't divide the range
2001 so there's no point trying further. */
2002 while (current_end - current_begin > 1)
2003 {
2004 ULONGEST first_half_begin, first_half_end;
2005 ULONGEST second_half_begin, second_half_end;
2006 LONGEST xfer;
8dedea02 2007 ULONGEST middle = current_begin + (current_end - current_begin)/2;
f1a507a1 2008
8dedea02
VP
2009 if (forward)
2010 {
2011 first_half_begin = current_begin;
2012 first_half_end = middle;
2013 second_half_begin = middle;
2014 second_half_end = current_end;
2015 }
2016 else
2017 {
2018 first_half_begin = middle;
2019 first_half_end = current_end;
2020 second_half_begin = current_begin;
2021 second_half_end = middle;
2022 }
2023
2024 xfer = target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2025 buf + (first_half_begin - begin),
2026 first_half_begin,
2027 first_half_end - first_half_begin);
2028
2029 if (xfer == first_half_end - first_half_begin)
2030 {
c378eb4e 2031 /* This half reads up fine. So, the error must be in the
3e43a32a 2032 other half. */
8dedea02
VP
2033 current_begin = second_half_begin;
2034 current_end = second_half_end;
2035 }
2036 else
2037 {
c378eb4e
MS
2038 /* This half is not readable. Because we've tried one byte, we
2039 know some part of this half if actually redable. Go to the next
8dedea02
VP
2040 iteration to divide again and try to read.
2041
2042 We don't handle the other half, because this function only tries
2043 to read a single readable subrange. */
2044 current_begin = first_half_begin;
2045 current_end = first_half_end;
2046 }
2047 }
2048
2049 if (forward)
2050 {
2051 /* The [begin, current_begin) range has been read. */
2052 r.begin = begin;
2053 r.end = current_begin;
2054 r.data = buf;
2055 }
2056 else
2057 {
2058 /* The [current_end, end) range has been read. */
2059 LONGEST rlen = end - current_end;
f1a507a1 2060
8dedea02
VP
2061 r.data = xmalloc (rlen);
2062 memcpy (r.data, buf + current_end - begin, rlen);
2063 r.begin = current_end;
2064 r.end = end;
2065 xfree (buf);
2066 }
2067 VEC_safe_push(memory_read_result_s, (*result), &r);
2068}
2069
2070void
2071free_memory_read_result_vector (void *x)
2072{
2073 VEC(memory_read_result_s) *v = x;
2074 memory_read_result_s *current;
2075 int ix;
2076
2077 for (ix = 0; VEC_iterate (memory_read_result_s, v, ix, current); ++ix)
2078 {
2079 xfree (current->data);
2080 }
2081 VEC_free (memory_read_result_s, v);
2082}
2083
2084VEC(memory_read_result_s) *
2085read_memory_robust (struct target_ops *ops, ULONGEST offset, LONGEST len)
2086{
2087 VEC(memory_read_result_s) *result = 0;
2088
2089 LONGEST xfered = 0;
d5086790
VP
2090 while (xfered < len)
2091 {
8dedea02
VP
2092 struct mem_region *region = lookup_mem_region (offset + xfered);
2093 LONGEST rlen;
5d502164 2094
8dedea02
VP
2095 /* If there is no explicit region, a fake one should be created. */
2096 gdb_assert (region);
2097
2098 if (region->hi == 0)
2099 rlen = len - xfered;
2100 else
2101 rlen = region->hi - offset;
2102
2103 if (region->attrib.mode == MEM_NONE || region->attrib.mode == MEM_WO)
d5086790 2104 {
c378eb4e 2105 /* Cannot read this region. Note that we can end up here only
8dedea02
VP
2106 if the region is explicitly marked inaccessible, or
2107 'inaccessible-by-default' is in effect. */
2108 xfered += rlen;
2109 }
2110 else
2111 {
2112 LONGEST to_read = min (len - xfered, rlen);
2113 gdb_byte *buffer = (gdb_byte *)xmalloc (to_read);
2114
2115 LONGEST xfer = target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2116 (gdb_byte *) buffer,
2117 offset + xfered, to_read);
2118 /* Call an observer, notifying them of the xfer progress? */
d5086790 2119 if (xfer <= 0)
d5086790 2120 {
c378eb4e 2121 /* Got an error reading full chunk. See if maybe we can read
8dedea02
VP
2122 some subrange. */
2123 xfree (buffer);
3e43a32a
MS
2124 read_whatever_is_readable (ops, offset + xfered,
2125 offset + xfered + to_read, &result);
8dedea02 2126 xfered += to_read;
d5086790 2127 }
8dedea02
VP
2128 else
2129 {
2130 struct memory_read_result r;
2131 r.data = buffer;
2132 r.begin = offset + xfered;
2133 r.end = r.begin + xfer;
2134 VEC_safe_push (memory_read_result_s, result, &r);
2135 xfered += xfer;
2136 }
2137 QUIT;
d5086790 2138 }
d5086790 2139 }
8dedea02 2140 return result;
d5086790
VP
2141}
2142
8dedea02 2143
cf7a04e8
DJ
2144/* An alternative to target_write with progress callbacks. */
2145
1e3ff5ad 2146LONGEST
cf7a04e8
DJ
2147target_write_with_progress (struct target_ops *ops,
2148 enum target_object object,
2149 const char *annex, const gdb_byte *buf,
2150 ULONGEST offset, LONGEST len,
2151 void (*progress) (ULONGEST, void *), void *baton)
1e3ff5ad
AC
2152{
2153 LONGEST xfered = 0;
a76d924d
DJ
2154
2155 /* Give the progress callback a chance to set up. */
2156 if (progress)
2157 (*progress) (0, baton);
2158
1e3ff5ad
AC
2159 while (xfered < len)
2160 {
2161 LONGEST xfer = target_write_partial (ops, object, annex,
fc1a4b47 2162 (gdb_byte *) buf + xfered,
1e3ff5ad 2163 offset + xfered, len - xfered);
cf7a04e8 2164
13547ab6
DJ
2165 if (xfer == 0)
2166 return xfered;
2167 if (xfer < 0)
0088c768 2168 return -1;
cf7a04e8
DJ
2169
2170 if (progress)
2171 (*progress) (xfer, baton);
2172
1e3ff5ad
AC
2173 xfered += xfer;
2174 QUIT;
2175 }
2176 return len;
2177}
2178
7f79c47e
DE
2179/* For docs on target_write see target.h. */
2180
cf7a04e8
DJ
2181LONGEST
2182target_write (struct target_ops *ops,
2183 enum target_object object,
2184 const char *annex, const gdb_byte *buf,
2185 ULONGEST offset, LONGEST len)
2186{
2187 return target_write_with_progress (ops, object, annex, buf, offset, len,
2188 NULL, NULL);
2189}
2190
159f81f3
DJ
2191/* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
2192 the size of the transferred data. PADDING additional bytes are
2193 available in *BUF_P. This is a helper function for
2194 target_read_alloc; see the declaration of that function for more
2195 information. */
13547ab6 2196
159f81f3
DJ
2197static LONGEST
2198target_read_alloc_1 (struct target_ops *ops, enum target_object object,
2199 const char *annex, gdb_byte **buf_p, int padding)
13547ab6
DJ
2200{
2201 size_t buf_alloc, buf_pos;
2202 gdb_byte *buf;
2203 LONGEST n;
2204
2205 /* This function does not have a length parameter; it reads the
2206 entire OBJECT). Also, it doesn't support objects fetched partly
2207 from one target and partly from another (in a different stratum,
2208 e.g. a core file and an executable). Both reasons make it
2209 unsuitable for reading memory. */
2210 gdb_assert (object != TARGET_OBJECT_MEMORY);
2211
2212 /* Start by reading up to 4K at a time. The target will throttle
2213 this number down if necessary. */
2214 buf_alloc = 4096;
2215 buf = xmalloc (buf_alloc);
2216 buf_pos = 0;
2217 while (1)
2218 {
2219 n = target_read_partial (ops, object, annex, &buf[buf_pos],
159f81f3 2220 buf_pos, buf_alloc - buf_pos - padding);
13547ab6
DJ
2221 if (n < 0)
2222 {
2223 /* An error occurred. */
2224 xfree (buf);
2225 return -1;
2226 }
2227 else if (n == 0)
2228 {
2229 /* Read all there was. */
2230 if (buf_pos == 0)
2231 xfree (buf);
2232 else
2233 *buf_p = buf;
2234 return buf_pos;
2235 }
2236
2237 buf_pos += n;
2238
2239 /* If the buffer is filling up, expand it. */
2240 if (buf_alloc < buf_pos * 2)
2241 {
2242 buf_alloc *= 2;
2243 buf = xrealloc (buf, buf_alloc);
2244 }
2245
2246 QUIT;
2247 }
2248}
2249
159f81f3
DJ
2250/* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
2251 the size of the transferred data. See the declaration in "target.h"
2252 function for more information about the return value. */
2253
2254LONGEST
2255target_read_alloc (struct target_ops *ops, enum target_object object,
2256 const char *annex, gdb_byte **buf_p)
2257{
2258 return target_read_alloc_1 (ops, object, annex, buf_p, 0);
2259}
2260
2261/* Read OBJECT/ANNEX using OPS. The result is NUL-terminated and
2262 returned as a string, allocated using xmalloc. If an error occurs
2263 or the transfer is unsupported, NULL is returned. Empty objects
2264 are returned as allocated but empty strings. A warning is issued
2265 if the result contains any embedded NUL bytes. */
2266
2267char *
2268target_read_stralloc (struct target_ops *ops, enum target_object object,
2269 const char *annex)
2270{
2271 gdb_byte *buffer;
2272 LONGEST transferred;
2273
2274 transferred = target_read_alloc_1 (ops, object, annex, &buffer, 1);
2275
2276 if (transferred < 0)
2277 return NULL;
2278
2279 if (transferred == 0)
2280 return xstrdup ("");
2281
2282 buffer[transferred] = 0;
2283 if (strlen (buffer) < transferred)
2284 warning (_("target object %d, annex %s, "
2285 "contained unexpected null characters"),
2286 (int) object, annex ? annex : "(none)");
2287
2288 return (char *) buffer;
2289}
2290
b6591e8b
AC
2291/* Memory transfer methods. */
2292
2293void
1b0ba102 2294get_target_memory (struct target_ops *ops, CORE_ADDR addr, gdb_byte *buf,
b6591e8b
AC
2295 LONGEST len)
2296{
07b82ea5
PA
2297 /* This method is used to read from an alternate, non-current
2298 target. This read must bypass the overlay support (as symbols
2299 don't match this target), and GDB's internal cache (wrong cache
2300 for this target). */
2301 if (target_read (ops, TARGET_OBJECT_RAW_MEMORY, NULL, buf, addr, len)
b6591e8b
AC
2302 != len)
2303 memory_error (EIO, addr);
2304}
2305
2306ULONGEST
5d502164
MS
2307get_target_memory_unsigned (struct target_ops *ops, CORE_ADDR addr,
2308 int len, enum bfd_endian byte_order)
b6591e8b 2309{
f6519ebc 2310 gdb_byte buf[sizeof (ULONGEST)];
b6591e8b
AC
2311
2312 gdb_assert (len <= sizeof (buf));
2313 get_target_memory (ops, addr, buf, len);
e17a4113 2314 return extract_unsigned_integer (buf, len, byte_order);
b6591e8b
AC
2315}
2316
d914c394
SS
2317int
2318target_insert_breakpoint (struct gdbarch *gdbarch,
2319 struct bp_target_info *bp_tgt)
2320{
2321 if (!may_insert_breakpoints)
2322 {
2323 warning (_("May not insert breakpoints"));
2324 return 1;
2325 }
2326
2327 return (*current_target.to_insert_breakpoint) (gdbarch, bp_tgt);
2328}
2329
2330int
2331target_remove_breakpoint (struct gdbarch *gdbarch,
2332 struct bp_target_info *bp_tgt)
2333{
2334 /* This is kind of a weird case to handle, but the permission might
2335 have been changed after breakpoints were inserted - in which case
2336 we should just take the user literally and assume that any
2337 breakpoints should be left in place. */
2338 if (!may_insert_breakpoints)
2339 {
2340 warning (_("May not remove breakpoints"));
2341 return 1;
2342 }
2343
2344 return (*current_target.to_remove_breakpoint) (gdbarch, bp_tgt);
2345}
2346
c906108c 2347static void
fba45db2 2348target_info (char *args, int from_tty)
c906108c
SS
2349{
2350 struct target_ops *t;
c906108c 2351 int has_all_mem = 0;
c5aa993b 2352
c906108c 2353 if (symfile_objfile != NULL)
a3f17187 2354 printf_unfiltered (_("Symbols from \"%s\".\n"), symfile_objfile->name);
c906108c 2355
258b763a 2356 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 2357 {
c35b1492 2358 if (!(*t->to_has_memory) (t))
c906108c
SS
2359 continue;
2360
c5aa993b 2361 if ((int) (t->to_stratum) <= (int) dummy_stratum)
c906108c
SS
2362 continue;
2363 if (has_all_mem)
3e43a32a
MS
2364 printf_unfiltered (_("\tWhile running this, "
2365 "GDB does not access memory from...\n"));
c5aa993b
JM
2366 printf_unfiltered ("%s:\n", t->to_longname);
2367 (t->to_files_info) (t);
c35b1492 2368 has_all_mem = (*t->to_has_all_memory) (t);
c906108c
SS
2369 }
2370}
2371
fd79ecee
DJ
2372/* This function is called before any new inferior is created, e.g.
2373 by running a program, attaching, or connecting to a target.
2374 It cleans up any state from previous invocations which might
2375 change between runs. This is a subset of what target_preopen
2376 resets (things which might change between targets). */
2377
2378void
2379target_pre_inferior (int from_tty)
2380{
c378eb4e 2381 /* Clear out solib state. Otherwise the solib state of the previous
b9db4ced 2382 inferior might have survived and is entirely wrong for the new
c378eb4e 2383 target. This has been observed on GNU/Linux using glibc 2.3. How
b9db4ced
UW
2384 to reproduce:
2385
2386 bash$ ./foo&
2387 [1] 4711
2388 bash$ ./foo&
2389 [1] 4712
2390 bash$ gdb ./foo
2391 [...]
2392 (gdb) attach 4711
2393 (gdb) detach
2394 (gdb) attach 4712
2395 Cannot access memory at address 0xdeadbeef
2396 */
b9db4ced 2397
50c71eaf
PA
2398 /* In some OSs, the shared library list is the same/global/shared
2399 across inferiors. If code is shared between processes, so are
2400 memory regions and features. */
2401 if (!gdbarch_has_global_solist (target_gdbarch))
2402 {
2403 no_shared_libraries (NULL, from_tty);
2404
2405 invalidate_target_mem_regions ();
424163ea 2406
50c71eaf
PA
2407 target_clear_description ();
2408 }
fd79ecee
DJ
2409}
2410
b8fa0bfa
PA
2411/* Callback for iterate_over_inferiors. Gets rid of the given
2412 inferior. */
2413
2414static int
2415dispose_inferior (struct inferior *inf, void *args)
2416{
2417 struct thread_info *thread;
2418
2419 thread = any_thread_of_process (inf->pid);
2420 if (thread)
2421 {
2422 switch_to_thread (thread->ptid);
2423
2424 /* Core inferiors actually should be detached, not killed. */
2425 if (target_has_execution)
2426 target_kill ();
2427 else
2428 target_detach (NULL, 0);
2429 }
2430
2431 return 0;
2432}
2433
c906108c
SS
2434/* This is to be called by the open routine before it does
2435 anything. */
2436
2437void
fba45db2 2438target_preopen (int from_tty)
c906108c 2439{
c5aa993b 2440 dont_repeat ();
c906108c 2441
b8fa0bfa 2442 if (have_inferiors ())
c5aa993b 2443 {
adf40b2e 2444 if (!from_tty
b8fa0bfa
PA
2445 || !have_live_inferiors ()
2446 || query (_("A program is being debugged already. Kill it? ")))
2447 iterate_over_inferiors (dispose_inferior, NULL);
c906108c 2448 else
8a3fe4f8 2449 error (_("Program not killed."));
c906108c
SS
2450 }
2451
2452 /* Calling target_kill may remove the target from the stack. But if
2453 it doesn't (which seems like a win for UDI), remove it now. */
87ab71f0
PA
2454 /* Leave the exec target, though. The user may be switching from a
2455 live process to a core of the same program. */
2456 pop_all_targets_above (file_stratum, 0);
fd79ecee
DJ
2457
2458 target_pre_inferior (from_tty);
c906108c
SS
2459}
2460
2461/* Detach a target after doing deferred register stores. */
2462
2463void
fba45db2 2464target_detach (char *args, int from_tty)
c906108c 2465{
136d6dae
VP
2466 struct target_ops* t;
2467
2567c7d9 2468 if (gdbarch_has_global_breakpoints (target_gdbarch))
50c71eaf
PA
2469 /* Don't remove global breakpoints here. They're removed on
2470 disconnection from the target. */
2471 ;
2472 else
2473 /* If we're in breakpoints-always-inserted mode, have to remove
2474 them before detaching. */
6c95b8df 2475 remove_breakpoints_pid (PIDGET (inferior_ptid));
74960c60 2476
24291992
PA
2477 prepare_for_detach ();
2478
136d6dae
VP
2479 for (t = current_target.beneath; t != NULL; t = t->beneath)
2480 {
2481 if (t->to_detach != NULL)
2482 {
2483 t->to_detach (t, args, from_tty);
947b8855
PA
2484 if (targetdebug)
2485 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n",
2486 args, from_tty);
136d6dae
VP
2487 return;
2488 }
2489 }
2490
9b20d036 2491 internal_error (__FILE__, __LINE__, _("could not find a target to detach"));
c906108c
SS
2492}
2493
6ad8ae5c
DJ
2494void
2495target_disconnect (char *args, int from_tty)
2496{
597320e7
DJ
2497 struct target_ops *t;
2498
50c71eaf
PA
2499 /* If we're in breakpoints-always-inserted mode or if breakpoints
2500 are global across processes, we have to remove them before
2501 disconnecting. */
74960c60
VP
2502 remove_breakpoints ();
2503
597320e7
DJ
2504 for (t = current_target.beneath; t != NULL; t = t->beneath)
2505 if (t->to_disconnect != NULL)
2506 {
2507 if (targetdebug)
2508 fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
2509 args, from_tty);
2510 t->to_disconnect (t, args, from_tty);
2511 return;
2512 }
2513
2514 tcomplain ();
6ad8ae5c
DJ
2515}
2516
117de6a9 2517ptid_t
47608cb1 2518target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
117de6a9
PA
2519{
2520 struct target_ops *t;
2521
2522 for (t = current_target.beneath; t != NULL; t = t->beneath)
2523 {
2524 if (t->to_wait != NULL)
2525 {
47608cb1 2526 ptid_t retval = (*t->to_wait) (t, ptid, status, options);
117de6a9
PA
2527
2528 if (targetdebug)
2529 {
2530 char *status_string;
2531
2532 status_string = target_waitstatus_to_string (status);
2533 fprintf_unfiltered (gdb_stdlog,
2534 "target_wait (%d, status) = %d, %s\n",
2535 PIDGET (ptid), PIDGET (retval),
2536 status_string);
2537 xfree (status_string);
2538 }
2539
2540 return retval;
2541 }
2542 }
2543
2544 noprocess ();
2545}
2546
2547char *
2548target_pid_to_str (ptid_t ptid)
2549{
2550 struct target_ops *t;
2551
2552 for (t = current_target.beneath; t != NULL; t = t->beneath)
2553 {
2554 if (t->to_pid_to_str != NULL)
2555 return (*t->to_pid_to_str) (t, ptid);
2556 }
2557
2558 return normal_pid_to_str (ptid);
2559}
2560
4694da01
TT
2561char *
2562target_thread_name (struct thread_info *info)
2563{
2564 struct target_ops *t;
2565
2566 for (t = current_target.beneath; t != NULL; t = t->beneath)
2567 {
2568 if (t->to_thread_name != NULL)
2569 return (*t->to_thread_name) (info);
2570 }
2571
2572 return NULL;
2573}
2574
e1ac3328
VP
2575void
2576target_resume (ptid_t ptid, int step, enum target_signal signal)
2577{
28439f5e
PA
2578 struct target_ops *t;
2579
4e5d721f 2580 target_dcache_invalidate ();
28439f5e
PA
2581
2582 for (t = current_target.beneath; t != NULL; t = t->beneath)
2583 {
2584 if (t->to_resume != NULL)
2585 {
2586 t->to_resume (t, ptid, step, signal);
2587 if (targetdebug)
2588 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n",
2589 PIDGET (ptid),
2590 step ? "step" : "continue",
2591 target_signal_to_name (signal));
2592
e66408ed 2593 registers_changed_ptid (ptid);
28439f5e
PA
2594 set_executing (ptid, 1);
2595 set_running (ptid, 1);
edb3359d 2596 clear_inline_frame_state (ptid);
28439f5e
PA
2597 return;
2598 }
2599 }
2600
2601 noprocess ();
e1ac3328 2602}
ee057212
DJ
2603/* Look through the list of possible targets for a target that can
2604 follow forks. */
2605
2606int
2607target_follow_fork (int follow_child)
2608{
2609 struct target_ops *t;
2610
2611 for (t = current_target.beneath; t != NULL; t = t->beneath)
2612 {
2613 if (t->to_follow_fork != NULL)
2614 {
2615 int retval = t->to_follow_fork (t, follow_child);
5d502164 2616
ee057212
DJ
2617 if (targetdebug)
2618 fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
2619 follow_child, retval);
2620 return retval;
2621 }
2622 }
2623
2624 /* Some target returned a fork event, but did not know how to follow it. */
2625 internal_error (__FILE__, __LINE__,
9b20d036 2626 _("could not find a target to follow fork"));
ee057212
DJ
2627}
2628
136d6dae
VP
2629void
2630target_mourn_inferior (void)
2631{
2632 struct target_ops *t;
5d502164 2633
136d6dae
VP
2634 for (t = current_target.beneath; t != NULL; t = t->beneath)
2635 {
2636 if (t->to_mourn_inferior != NULL)
2637 {
2638 t->to_mourn_inferior (t);
947b8855
PA
2639 if (targetdebug)
2640 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
efbd6e75
JB
2641
2642 /* We no longer need to keep handles on any of the object files.
2643 Make sure to release them to avoid unnecessarily locking any
2644 of them while we're not actually debugging. */
2645 bfd_cache_close_all ();
2646
136d6dae
VP
2647 return;
2648 }
2649 }
2650
2651 internal_error (__FILE__, __LINE__,
9b20d036 2652 _("could not find a target to follow mourn inferior"));
136d6dae
VP
2653}
2654
424163ea
DJ
2655/* Look for a target which can describe architectural features, starting
2656 from TARGET. If we find one, return its description. */
2657
2658const struct target_desc *
2659target_read_description (struct target_ops *target)
2660{
2661 struct target_ops *t;
2662
2663 for (t = target; t != NULL; t = t->beneath)
2664 if (t->to_read_description != NULL)
2665 {
2666 const struct target_desc *tdesc;
2667
2668 tdesc = t->to_read_description (t);
2669 if (tdesc)
2670 return tdesc;
2671 }
2672
2673 return NULL;
2674}
2675
08388c79
DE
2676/* The default implementation of to_search_memory.
2677 This implements a basic search of memory, reading target memory and
2678 performing the search here (as opposed to performing the search in on the
2679 target side with, for example, gdbserver). */
2680
2681int
2682simple_search_memory (struct target_ops *ops,
2683 CORE_ADDR start_addr, ULONGEST search_space_len,
2684 const gdb_byte *pattern, ULONGEST pattern_len,
2685 CORE_ADDR *found_addrp)
2686{
2687 /* NOTE: also defined in find.c testcase. */
2688#define SEARCH_CHUNK_SIZE 16000
2689 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
2690 /* Buffer to hold memory contents for searching. */
2691 gdb_byte *search_buf;
2692 unsigned search_buf_size;
2693 struct cleanup *old_cleanups;
2694
2695 search_buf_size = chunk_size + pattern_len - 1;
2696
2697 /* No point in trying to allocate a buffer larger than the search space. */
2698 if (search_space_len < search_buf_size)
2699 search_buf_size = search_space_len;
2700
2701 search_buf = malloc (search_buf_size);
2702 if (search_buf == NULL)
5e1471f5 2703 error (_("Unable to allocate memory to perform the search."));
08388c79
DE
2704 old_cleanups = make_cleanup (free_current_contents, &search_buf);
2705
2706 /* Prime the search buffer. */
2707
2708 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2709 search_buf, start_addr, search_buf_size) != search_buf_size)
2710 {
5e1471f5 2711 warning (_("Unable to access target memory at %s, halting search."),
08388c79
DE
2712 hex_string (start_addr));
2713 do_cleanups (old_cleanups);
2714 return -1;
2715 }
2716
2717 /* Perform the search.
2718
2719 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
2720 When we've scanned N bytes we copy the trailing bytes to the start and
2721 read in another N bytes. */
2722
2723 while (search_space_len >= pattern_len)
2724 {
2725 gdb_byte *found_ptr;
2726 unsigned nr_search_bytes = min (search_space_len, search_buf_size);
2727
2728 found_ptr = memmem (search_buf, nr_search_bytes,
2729 pattern, pattern_len);
2730
2731 if (found_ptr != NULL)
2732 {
2733 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
5d502164 2734
08388c79
DE
2735 *found_addrp = found_addr;
2736 do_cleanups (old_cleanups);
2737 return 1;
2738 }
2739
2740 /* Not found in this chunk, skip to next chunk. */
2741
2742 /* Don't let search_space_len wrap here, it's unsigned. */
2743 if (search_space_len >= chunk_size)
2744 search_space_len -= chunk_size;
2745 else
2746 search_space_len = 0;
2747
2748 if (search_space_len >= pattern_len)
2749 {
2750 unsigned keep_len = search_buf_size - chunk_size;
8a35fb51 2751 CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
08388c79
DE
2752 int nr_to_read;
2753
2754 /* Copy the trailing part of the previous iteration to the front
2755 of the buffer for the next iteration. */
2756 gdb_assert (keep_len == pattern_len - 1);
2757 memcpy (search_buf, search_buf + chunk_size, keep_len);
2758
2759 nr_to_read = min (search_space_len - keep_len, chunk_size);
2760
2761 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2762 search_buf + keep_len, read_addr,
2763 nr_to_read) != nr_to_read)
2764 {
9b20d036
MS
2765 warning (_("Unable to access target "
2766 "memory at %s, halting search."),
08388c79
DE
2767 hex_string (read_addr));
2768 do_cleanups (old_cleanups);
2769 return -1;
2770 }
2771
2772 start_addr += chunk_size;
2773 }
2774 }
2775
2776 /* Not found. */
2777
2778 do_cleanups (old_cleanups);
2779 return 0;
2780}
2781
2782/* Search SEARCH_SPACE_LEN bytes beginning at START_ADDR for the
2783 sequence of bytes in PATTERN with length PATTERN_LEN.
2784
2785 The result is 1 if found, 0 if not found, and -1 if there was an error
2786 requiring halting of the search (e.g. memory read error).
2787 If the pattern is found the address is recorded in FOUND_ADDRP. */
2788
2789int
2790target_search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
2791 const gdb_byte *pattern, ULONGEST pattern_len,
2792 CORE_ADDR *found_addrp)
2793{
2794 struct target_ops *t;
2795 int found;
2796
2797 /* We don't use INHERIT to set current_target.to_search_memory,
2798 so we have to scan the target stack and handle targetdebug
2799 ourselves. */
2800
2801 if (targetdebug)
2802 fprintf_unfiltered (gdb_stdlog, "target_search_memory (%s, ...)\n",
2803 hex_string (start_addr));
2804
2805 for (t = current_target.beneath; t != NULL; t = t->beneath)
2806 if (t->to_search_memory != NULL)
2807 break;
2808
2809 if (t != NULL)
2810 {
2811 found = t->to_search_memory (t, start_addr, search_space_len,
2812 pattern, pattern_len, found_addrp);
2813 }
2814 else
2815 {
2816 /* If a special version of to_search_memory isn't available, use the
2817 simple version. */
c35b1492 2818 found = simple_search_memory (current_target.beneath,
08388c79
DE
2819 start_addr, search_space_len,
2820 pattern, pattern_len, found_addrp);
2821 }
2822
2823 if (targetdebug)
2824 fprintf_unfiltered (gdb_stdlog, " = %d\n", found);
2825
2826 return found;
2827}
2828
8edfe269
DJ
2829/* Look through the currently pushed targets. If none of them will
2830 be able to restart the currently running process, issue an error
2831 message. */
2832
2833void
2834target_require_runnable (void)
2835{
2836 struct target_ops *t;
2837
2838 for (t = target_stack; t != NULL; t = t->beneath)
2839 {
2840 /* If this target knows how to create a new program, then
2841 assume we will still be able to after killing the current
2842 one. Either killing and mourning will not pop T, or else
2843 find_default_run_target will find it again. */
2844 if (t->to_create_inferior != NULL)
2845 return;
2846
2847 /* Do not worry about thread_stratum targets that can not
2848 create inferiors. Assume they will be pushed again if
2849 necessary, and continue to the process_stratum. */
85e747d2
UW
2850 if (t->to_stratum == thread_stratum
2851 || t->to_stratum == arch_stratum)
8edfe269
DJ
2852 continue;
2853
3e43a32a
MS
2854 error (_("The \"%s\" target does not support \"run\". "
2855 "Try \"help target\" or \"continue\"."),
8edfe269
DJ
2856 t->to_shortname);
2857 }
2858
2859 /* This function is only called if the target is running. In that
2860 case there should have been a process_stratum target and it
c378eb4e 2861 should either know how to create inferiors, or not... */
9b20d036 2862 internal_error (__FILE__, __LINE__, _("No targets found"));
8edfe269
DJ
2863}
2864
c906108c
SS
2865/* Look through the list of possible targets for a target that can
2866 execute a run or attach command without any other data. This is
2867 used to locate the default process stratum.
2868
5f667f2d
PA
2869 If DO_MESG is not NULL, the result is always valid (error() is
2870 called for errors); else, return NULL on error. */
c906108c
SS
2871
2872static struct target_ops *
fba45db2 2873find_default_run_target (char *do_mesg)
c906108c
SS
2874{
2875 struct target_ops **t;
2876 struct target_ops *runable = NULL;
2877 int count;
2878
2879 count = 0;
2880
2881 for (t = target_structs; t < target_structs + target_struct_size;
2882 ++t)
2883 {
c5aa993b 2884 if ((*t)->to_can_run && target_can_run (*t))
c906108c
SS
2885 {
2886 runable = *t;
2887 ++count;
2888 }
2889 }
2890
2891 if (count != 1)
5f667f2d
PA
2892 {
2893 if (do_mesg)
2894 error (_("Don't know how to %s. Try \"help target\"."), do_mesg);
2895 else
2896 return NULL;
2897 }
c906108c
SS
2898
2899 return runable;
2900}
2901
2902void
136d6dae 2903find_default_attach (struct target_ops *ops, char *args, int from_tty)
c906108c
SS
2904{
2905 struct target_ops *t;
2906
c5aa993b 2907 t = find_default_run_target ("attach");
136d6dae 2908 (t->to_attach) (t, args, from_tty);
c906108c
SS
2909 return;
2910}
2911
c906108c 2912void
136d6dae
VP
2913find_default_create_inferior (struct target_ops *ops,
2914 char *exec_file, char *allargs, char **env,
c27cda74 2915 int from_tty)
c906108c
SS
2916{
2917 struct target_ops *t;
2918
c5aa993b 2919 t = find_default_run_target ("run");
136d6dae 2920 (t->to_create_inferior) (t, exec_file, allargs, env, from_tty);
c906108c
SS
2921 return;
2922}
2923
2c0b251b 2924static int
b84876c2
PA
2925find_default_can_async_p (void)
2926{
2927 struct target_ops *t;
2928
5f667f2d
PA
2929 /* This may be called before the target is pushed on the stack;
2930 look for the default process stratum. If there's none, gdb isn't
2931 configured with a native debugger, and target remote isn't
2932 connected yet. */
2933 t = find_default_run_target (NULL);
2934 if (t && t->to_can_async_p)
b84876c2
PA
2935 return (t->to_can_async_p) ();
2936 return 0;
2937}
2938
2c0b251b 2939static int
b84876c2
PA
2940find_default_is_async_p (void)
2941{
2942 struct target_ops *t;
2943
5f667f2d
PA
2944 /* This may be called before the target is pushed on the stack;
2945 look for the default process stratum. If there's none, gdb isn't
2946 configured with a native debugger, and target remote isn't
2947 connected yet. */
2948 t = find_default_run_target (NULL);
2949 if (t && t->to_is_async_p)
b84876c2
PA
2950 return (t->to_is_async_p) ();
2951 return 0;
2952}
2953
2c0b251b 2954static int
9908b566
VP
2955find_default_supports_non_stop (void)
2956{
2957 struct target_ops *t;
2958
2959 t = find_default_run_target (NULL);
2960 if (t && t->to_supports_non_stop)
2961 return (t->to_supports_non_stop) ();
2962 return 0;
2963}
2964
2965int
2c0b251b 2966target_supports_non_stop (void)
9908b566
VP
2967{
2968 struct target_ops *t;
5d502164 2969
9908b566
VP
2970 for (t = &current_target; t != NULL; t = t->beneath)
2971 if (t->to_supports_non_stop)
2972 return t->to_supports_non_stop ();
2973
2974 return 0;
2975}
2976
2977
07e059b5
VP
2978char *
2979target_get_osdata (const char *type)
2980{
07e059b5
VP
2981 struct target_ops *t;
2982
739ef7fb
PA
2983 /* If we're already connected to something that can get us OS
2984 related data, use it. Otherwise, try using the native
2985 target. */
2986 if (current_target.to_stratum >= process_stratum)
6d097e65 2987 t = current_target.beneath;
739ef7fb
PA
2988 else
2989 t = find_default_run_target ("get OS data");
07e059b5
VP
2990
2991 if (!t)
2992 return NULL;
2993
6d097e65 2994 return target_read_stralloc (t, TARGET_OBJECT_OSDATA, type);
07e059b5
VP
2995}
2996
6c95b8df
PA
2997/* Determine the current address space of thread PTID. */
2998
2999struct address_space *
3000target_thread_address_space (ptid_t ptid)
3001{
c0694254 3002 struct address_space *aspace;
6c95b8df 3003 struct inferior *inf;
c0694254
PA
3004 struct target_ops *t;
3005
3006 for (t = current_target.beneath; t != NULL; t = t->beneath)
3007 {
3008 if (t->to_thread_address_space != NULL)
3009 {
3010 aspace = t->to_thread_address_space (t, ptid);
3011 gdb_assert (aspace);
6c95b8df 3012
c0694254
PA
3013 if (targetdebug)
3014 fprintf_unfiltered (gdb_stdlog,
3015 "target_thread_address_space (%s) = %d\n",
3016 target_pid_to_str (ptid),
3017 address_space_num (aspace));
3018 return aspace;
3019 }
3020 }
6c95b8df
PA
3021
3022 /* Fall-back to the "main" address space of the inferior. */
3023 inf = find_inferior_pid (ptid_get_pid (ptid));
3024
3025 if (inf == NULL || inf->aspace == NULL)
3e43a32a 3026 internal_error (__FILE__, __LINE__,
9b20d036
MS
3027 _("Can't determine the current "
3028 "address space of thread %s\n"),
6c95b8df
PA
3029 target_pid_to_str (ptid));
3030
3031 return inf->aspace;
3032}
3033
e0d24f8d
WZ
3034static int
3035default_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
3036{
ffe5a37e 3037 return (len <= gdbarch_ptr_bit (target_gdbarch) / TARGET_CHAR_BIT);
ccaa32c7
GS
3038}
3039
5009afc5
AS
3040static int
3041default_watchpoint_addr_within_range (struct target_ops *target,
3042 CORE_ADDR addr,
3043 CORE_ADDR start, int length)
3044{
3045 return addr >= start && addr < start + length;
3046}
3047
c2250ad1
UW
3048static struct gdbarch *
3049default_thread_architecture (struct target_ops *ops, ptid_t ptid)
3050{
3051 return target_gdbarch;
3052}
3053
c906108c 3054static int
fba45db2 3055return_zero (void)
c906108c
SS
3056{
3057 return 0;
3058}
3059
3060static int
fba45db2 3061return_one (void)
c906108c
SS
3062{
3063 return 1;
3064}
3065
ccaa32c7
GS
3066static int
3067return_minus_one (void)
3068{
3069 return -1;
3070}
3071
7a292a7a
SS
3072/* Find a single runnable target in the stack and return it. If for
3073 some reason there is more than one, return NULL. */
3074
3075struct target_ops *
fba45db2 3076find_run_target (void)
7a292a7a
SS
3077{
3078 struct target_ops **t;
3079 struct target_ops *runable = NULL;
3080 int count;
c5aa993b 3081
7a292a7a 3082 count = 0;
c5aa993b 3083
7a292a7a
SS
3084 for (t = target_structs; t < target_structs + target_struct_size; ++t)
3085 {
c5aa993b 3086 if ((*t)->to_can_run && target_can_run (*t))
7a292a7a
SS
3087 {
3088 runable = *t;
3089 ++count;
3090 }
3091 }
c5aa993b 3092
7a292a7a
SS
3093 return (count == 1 ? runable : NULL);
3094}
3095
ed9a39eb
JM
3096/*
3097 * Find the next target down the stack from the specified target.
3098 */
3099
3100struct target_ops *
fba45db2 3101find_target_beneath (struct target_ops *t)
ed9a39eb 3102{
258b763a 3103 return t->beneath;
ed9a39eb
JM
3104}
3105
c906108c
SS
3106\f
3107/* The inferior process has died. Long live the inferior! */
3108
3109void
fba45db2 3110generic_mourn_inferior (void)
c906108c 3111{
7f9f62ba 3112 ptid_t ptid;
c906108c 3113
7f9f62ba 3114 ptid = inferior_ptid;
39f77062 3115 inferior_ptid = null_ptid;
7f9f62ba
PA
3116
3117 if (!ptid_equal (ptid, null_ptid))
3118 {
3119 int pid = ptid_get_pid (ptid);
6c95b8df 3120 exit_inferior (pid);
7f9f62ba
PA
3121 }
3122
c906108c
SS
3123 breakpoint_init_inferior (inf_exited);
3124 registers_changed ();
3125
c906108c
SS
3126 reopen_exec_file ();
3127 reinit_frame_cache ();
3128
9a4105ab
AC
3129 if (deprecated_detach_hook)
3130 deprecated_detach_hook ();
c906108c
SS
3131}
3132\f
8807d78b 3133/* Helper function for child_wait and the derivatives of child_wait.
c906108c
SS
3134 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
3135 translation of that in OURSTATUS. */
3136void
fba45db2 3137store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
c906108c 3138{
c906108c
SS
3139 if (WIFEXITED (hoststatus))
3140 {
3141 ourstatus->kind = TARGET_WAITKIND_EXITED;
3142 ourstatus->value.integer = WEXITSTATUS (hoststatus);
3143 }
3144 else if (!WIFSTOPPED (hoststatus))
3145 {
3146 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
3147 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
3148 }
3149 else
3150 {
3151 ourstatus->kind = TARGET_WAITKIND_STOPPED;
3152 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
3153 }
3154}
3155\f
fd0a2a6f
MK
3156/* Convert a normal process ID to a string. Returns the string in a
3157 static buffer. */
c906108c
SS
3158
3159char *
39f77062 3160normal_pid_to_str (ptid_t ptid)
c906108c 3161{
fd0a2a6f 3162 static char buf[32];
c906108c 3163
5fff8fc0 3164 xsnprintf (buf, sizeof buf, "process %d", ptid_get_pid (ptid));
c906108c
SS
3165 return buf;
3166}
3167
2c0b251b 3168static char *
117de6a9
PA
3169dummy_pid_to_str (struct target_ops *ops, ptid_t ptid)
3170{
3171 return normal_pid_to_str (ptid);
3172}
3173
9b4eba8e
HZ
3174/* Error-catcher for target_find_memory_regions. */
3175static int
b8edc417 3176dummy_find_memory_regions (find_memory_region_ftype ignore1, void *ignore2)
be4d1333 3177{
9b4eba8e 3178 error (_("Command not implemented for this target."));
be4d1333
MS
3179 return 0;
3180}
3181
9b4eba8e
HZ
3182/* Error-catcher for target_make_corefile_notes. */
3183static char *
3184dummy_make_corefile_notes (bfd *ignore1, int *ignore2)
be4d1333 3185{
9b4eba8e 3186 error (_("Command not implemented for this target."));
be4d1333
MS
3187 return NULL;
3188}
3189
6b04bdb7
MS
3190/* Error-catcher for target_get_bookmark. */
3191static gdb_byte *
3192dummy_get_bookmark (char *ignore1, int ignore2)
3193{
3194 tcomplain ();
3195 return NULL;
3196}
3197
3198/* Error-catcher for target_goto_bookmark. */
3199static void
3200dummy_goto_bookmark (gdb_byte *ignore, int from_tty)
3201{
3202 tcomplain ();
3203}
3204
c906108c
SS
3205/* Set up the handful of non-empty slots needed by the dummy target
3206 vector. */
3207
3208static void
fba45db2 3209init_dummy_target (void)
c906108c
SS
3210{
3211 dummy_target.to_shortname = "None";
3212 dummy_target.to_longname = "None";
3213 dummy_target.to_doc = "";
3214 dummy_target.to_attach = find_default_attach;
136d6dae
VP
3215 dummy_target.to_detach =
3216 (void (*)(struct target_ops *, char *, int))target_ignore;
c906108c 3217 dummy_target.to_create_inferior = find_default_create_inferior;
b84876c2
PA
3218 dummy_target.to_can_async_p = find_default_can_async_p;
3219 dummy_target.to_is_async_p = find_default_is_async_p;
9908b566 3220 dummy_target.to_supports_non_stop = find_default_supports_non_stop;
117de6a9 3221 dummy_target.to_pid_to_str = dummy_pid_to_str;
c906108c 3222 dummy_target.to_stratum = dummy_stratum;
be4d1333
MS
3223 dummy_target.to_find_memory_regions = dummy_find_memory_regions;
3224 dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
6b04bdb7
MS
3225 dummy_target.to_get_bookmark = dummy_get_bookmark;
3226 dummy_target.to_goto_bookmark = dummy_goto_bookmark;
0b603eba 3227 dummy_target.to_xfer_partial = default_xfer_partial;
c35b1492
PA
3228 dummy_target.to_has_all_memory = (int (*) (struct target_ops *)) return_zero;
3229 dummy_target.to_has_memory = (int (*) (struct target_ops *)) return_zero;
3230 dummy_target.to_has_stack = (int (*) (struct target_ops *)) return_zero;
3231 dummy_target.to_has_registers = (int (*) (struct target_ops *)) return_zero;
aeaec162
TT
3232 dummy_target.to_has_execution
3233 = (int (*) (struct target_ops *, ptid_t)) return_zero;
7155de5a
HZ
3234 dummy_target.to_stopped_by_watchpoint = return_zero;
3235 dummy_target.to_stopped_data_address =
3236 (int (*) (struct target_ops *, CORE_ADDR *)) return_zero;
c906108c
SS
3237 dummy_target.to_magic = OPS_MAGIC;
3238}
c906108c 3239\f
c906108c 3240static void
fba45db2 3241debug_to_open (char *args, int from_tty)
c906108c
SS
3242{
3243 debug_target.to_open (args, from_tty);
3244
96baa820 3245 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
c906108c
SS
3246}
3247
f1c07ab0
AC
3248void
3249target_close (struct target_ops *targ, int quitting)
3250{
3251 if (targ->to_xclose != NULL)
3252 targ->to_xclose (targ, quitting);
3253 else if (targ->to_close != NULL)
3254 targ->to_close (quitting);
947b8855
PA
3255
3256 if (targetdebug)
3257 fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
f1c07ab0
AC
3258}
3259
136d6dae
VP
3260void
3261target_attach (char *args, int from_tty)
3262{
3263 struct target_ops *t;
5d502164 3264
136d6dae
VP
3265 for (t = current_target.beneath; t != NULL; t = t->beneath)
3266 {
3267 if (t->to_attach != NULL)
3268 {
3269 t->to_attach (t, args, from_tty);
947b8855
PA
3270 if (targetdebug)
3271 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n",
3272 args, from_tty);
136d6dae
VP
3273 return;
3274 }
3275 }
3276
3277 internal_error (__FILE__, __LINE__,
9b20d036 3278 _("could not find a target to attach"));
136d6dae
VP
3279}
3280
28439f5e
PA
3281int
3282target_thread_alive (ptid_t ptid)
c906108c 3283{
28439f5e 3284 struct target_ops *t;
5d502164 3285
28439f5e
PA
3286 for (t = current_target.beneath; t != NULL; t = t->beneath)
3287 {
3288 if (t->to_thread_alive != NULL)
3289 {
3290 int retval;
c906108c 3291
28439f5e
PA
3292 retval = t->to_thread_alive (t, ptid);
3293 if (targetdebug)
3294 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
3295 PIDGET (ptid), retval);
3296
3297 return retval;
3298 }
3299 }
3300
3301 return 0;
3302}
3303
3304void
3305target_find_new_threads (void)
3306{
3307 struct target_ops *t;
5d502164 3308
28439f5e
PA
3309 for (t = current_target.beneath; t != NULL; t = t->beneath)
3310 {
3311 if (t->to_find_new_threads != NULL)
3312 {
3313 t->to_find_new_threads (t);
3314 if (targetdebug)
3315 fprintf_unfiltered (gdb_stdlog, "target_find_new_threads ()\n");
3316
3317 return;
3318 }
3319 }
c906108c
SS
3320}
3321
d914c394
SS
3322void
3323target_stop (ptid_t ptid)
3324{
3325 if (!may_stop)
3326 {
3327 warning (_("May not interrupt or stop the target, ignoring attempt"));
3328 return;
3329 }
3330
3331 (*current_target.to_stop) (ptid);
3332}
3333
c906108c 3334static void
28439f5e 3335debug_to_post_attach (int pid)
c906108c 3336{
28439f5e 3337 debug_target.to_post_attach (pid);
c906108c 3338
28439f5e 3339 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
c906108c
SS
3340}
3341
f00150c9
DE
3342/* Return a pretty printed form of target_waitstatus.
3343 Space for the result is malloc'd, caller must free. */
c906108c 3344
f00150c9
DE
3345char *
3346target_waitstatus_to_string (const struct target_waitstatus *ws)
3347{
3348 const char *kind_str = "status->kind = ";
c906108c 3349
f00150c9 3350 switch (ws->kind)
c906108c
SS
3351 {
3352 case TARGET_WAITKIND_EXITED:
f00150c9
DE
3353 return xstrprintf ("%sexited, status = %d",
3354 kind_str, ws->value.integer);
c906108c 3355 case TARGET_WAITKIND_STOPPED:
f00150c9
DE
3356 return xstrprintf ("%sstopped, signal = %s",
3357 kind_str, target_signal_to_name (ws->value.sig));
c906108c 3358 case TARGET_WAITKIND_SIGNALLED:
f00150c9
DE
3359 return xstrprintf ("%ssignalled, signal = %s",
3360 kind_str, target_signal_to_name (ws->value.sig));
c906108c 3361 case TARGET_WAITKIND_LOADED:
f00150c9 3362 return xstrprintf ("%sloaded", kind_str);
c906108c 3363 case TARGET_WAITKIND_FORKED:
f00150c9 3364 return xstrprintf ("%sforked", kind_str);
c906108c 3365 case TARGET_WAITKIND_VFORKED:
f00150c9 3366 return xstrprintf ("%svforked", kind_str);
c906108c 3367 case TARGET_WAITKIND_EXECD:
f00150c9
DE
3368 return xstrprintf ("%sexecd", kind_str);
3369 case TARGET_WAITKIND_SYSCALL_ENTRY:
a96d9b2e 3370 return xstrprintf ("%sentered syscall", kind_str);
f00150c9 3371 case TARGET_WAITKIND_SYSCALL_RETURN:
a96d9b2e 3372 return xstrprintf ("%sexited syscall", kind_str);
c906108c 3373 case TARGET_WAITKIND_SPURIOUS:
f00150c9
DE
3374 return xstrprintf ("%sspurious", kind_str);
3375 case TARGET_WAITKIND_IGNORE:
3376 return xstrprintf ("%signore", kind_str);
3377 case TARGET_WAITKIND_NO_HISTORY:
3378 return xstrprintf ("%sno-history", kind_str);
c906108c 3379 default:
f00150c9 3380 return xstrprintf ("%sunknown???", kind_str);
c906108c 3381 }
f00150c9
DE
3382}
3383
bf0c5130 3384static void
56be3814
UW
3385debug_print_register (const char * func,
3386 struct regcache *regcache, int regno)
bf0c5130 3387{
f8d29908 3388 struct gdbarch *gdbarch = get_regcache_arch (regcache);
5d502164 3389
bf0c5130 3390 fprintf_unfiltered (gdb_stdlog, "%s ", func);
f8d29908 3391 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
f8d29908
UW
3392 && gdbarch_register_name (gdbarch, regno) != NULL
3393 && gdbarch_register_name (gdbarch, regno)[0] != '\0')
3394 fprintf_unfiltered (gdb_stdlog, "(%s)",
3395 gdbarch_register_name (gdbarch, regno));
bf0c5130
AC
3396 else
3397 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
0ff58721 3398 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
bf0c5130 3399 {
e17a4113 3400 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
f8d29908 3401 int i, size = register_size (gdbarch, regno);
d9d9c31f 3402 unsigned char buf[MAX_REGISTER_SIZE];
5d502164 3403
0ff58721 3404 regcache_raw_collect (regcache, regno, buf);
bf0c5130 3405 fprintf_unfiltered (gdb_stdlog, " = ");
81c4a259 3406 for (i = 0; i < size; i++)
bf0c5130
AC
3407 {
3408 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
3409 }
81c4a259 3410 if (size <= sizeof (LONGEST))
bf0c5130 3411 {
e17a4113 3412 ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
5d502164 3413
0b1553bc
UW
3414 fprintf_unfiltered (gdb_stdlog, " %s %s",
3415 core_addr_to_string_nz (val), plongest (val));
bf0c5130
AC
3416 }
3417 }
3418 fprintf_unfiltered (gdb_stdlog, "\n");
3419}
3420
28439f5e
PA
3421void
3422target_fetch_registers (struct regcache *regcache, int regno)
c906108c 3423{
28439f5e 3424 struct target_ops *t;
5d502164 3425
28439f5e
PA
3426 for (t = current_target.beneath; t != NULL; t = t->beneath)
3427 {
3428 if (t->to_fetch_registers != NULL)
3429 {
3430 t->to_fetch_registers (t, regcache, regno);
3431 if (targetdebug)
3432 debug_print_register ("target_fetch_registers", regcache, regno);
3433 return;
3434 }
3435 }
c906108c
SS
3436}
3437
28439f5e
PA
3438void
3439target_store_registers (struct regcache *regcache, int regno)
c906108c 3440{
28439f5e 3441 struct target_ops *t;
5d502164 3442
d914c394
SS
3443 if (!may_write_registers)
3444 error (_("Writing to registers is not allowed (regno %d)"), regno);
3445
28439f5e
PA
3446 for (t = current_target.beneath; t != NULL; t = t->beneath)
3447 {
3448 if (t->to_store_registers != NULL)
3449 {
3450 t->to_store_registers (t, regcache, regno);
3451 if (targetdebug)
3452 {
3453 debug_print_register ("target_store_registers", regcache, regno);
3454 }
3455 return;
3456 }
3457 }
3458
3459 noprocess ();
c906108c
SS
3460}
3461
dc146f7c
VP
3462int
3463target_core_of_thread (ptid_t ptid)
3464{
3465 struct target_ops *t;
3466
3467 for (t = current_target.beneath; t != NULL; t = t->beneath)
3468 {
3469 if (t->to_core_of_thread != NULL)
3470 {
3471 int retval = t->to_core_of_thread (t, ptid);
5d502164 3472
dc146f7c 3473 if (targetdebug)
3e43a32a
MS
3474 fprintf_unfiltered (gdb_stdlog,
3475 "target_core_of_thread (%d) = %d\n",
dc146f7c
VP
3476 PIDGET (ptid), retval);
3477 return retval;
3478 }
3479 }
3480
3481 return -1;
3482}
3483
4a5e7a5b
PA
3484int
3485target_verify_memory (const gdb_byte *data, CORE_ADDR memaddr, ULONGEST size)
3486{
3487 struct target_ops *t;
3488
3489 for (t = current_target.beneath; t != NULL; t = t->beneath)
3490 {
3491 if (t->to_verify_memory != NULL)
3492 {
3493 int retval = t->to_verify_memory (t, data, memaddr, size);
5d502164 3494
4a5e7a5b 3495 if (targetdebug)
3e43a32a
MS
3496 fprintf_unfiltered (gdb_stdlog,
3497 "target_verify_memory (%s, %s) = %d\n",
4a5e7a5b
PA
3498 paddress (target_gdbarch, memaddr),
3499 pulongest (size),
3500 retval);
3501 return retval;
3502 }
3503 }
3504
3505 tcomplain ();
3506}
3507
c906108c 3508static void
316f2060 3509debug_to_prepare_to_store (struct regcache *regcache)
c906108c 3510{
316f2060 3511 debug_target.to_prepare_to_store (regcache);
c906108c 3512
96baa820 3513 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
c906108c
SS
3514}
3515
3516static int
961cb7b5 3517deprecated_debug_xfer_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len,
c8e73a31
AC
3518 int write, struct mem_attrib *attrib,
3519 struct target_ops *target)
c906108c
SS
3520{
3521 int retval;
3522
c8e73a31
AC
3523 retval = debug_target.deprecated_xfer_memory (memaddr, myaddr, len, write,
3524 attrib, target);
c906108c 3525
96baa820 3526 fprintf_unfiltered (gdb_stdlog,
53b71562 3527 "target_xfer_memory (%s, xxx, %d, %s, xxx) = %d",
5af949e3
UW
3528 paddress (target_gdbarch, memaddr), len,
3529 write ? "write" : "read", retval);
c906108c 3530
c906108c
SS
3531 if (retval > 0)
3532 {
3533 int i;
3534
96baa820 3535 fputs_unfiltered (", bytes =", gdb_stdlog);
c906108c
SS
3536 for (i = 0; i < retval; i++)
3537 {
53b71562 3538 if ((((intptr_t) &(myaddr[i])) & 0xf) == 0)
333dabeb
DJ
3539 {
3540 if (targetdebug < 2 && i > 0)
3541 {
3542 fprintf_unfiltered (gdb_stdlog, " ...");
3543 break;
3544 }
3545 fprintf_unfiltered (gdb_stdlog, "\n");
3546 }
2bc416ba 3547
96baa820 3548 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
c906108c
SS
3549 }
3550 }
3551
96baa820 3552 fputc_unfiltered ('\n', gdb_stdlog);
c906108c
SS
3553
3554 return retval;
3555}
3556
3557static void
fba45db2 3558debug_to_files_info (struct target_ops *target)
c906108c
SS
3559{
3560 debug_target.to_files_info (target);
3561
96baa820 3562 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
c906108c
SS
3563}
3564
3565static int
a6d9a66e
UW
3566debug_to_insert_breakpoint (struct gdbarch *gdbarch,
3567 struct bp_target_info *bp_tgt)
c906108c
SS
3568{
3569 int retval;
3570
a6d9a66e 3571 retval = debug_target.to_insert_breakpoint (gdbarch, bp_tgt);
c906108c 3572
96baa820 3573 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3574 "target_insert_breakpoint (%s, xxx) = %ld\n",
3575 core_addr_to_string (bp_tgt->placed_address),
104c1213 3576 (unsigned long) retval);
c906108c
SS
3577 return retval;
3578}
3579
3580static int
a6d9a66e
UW
3581debug_to_remove_breakpoint (struct gdbarch *gdbarch,
3582 struct bp_target_info *bp_tgt)
c906108c
SS
3583{
3584 int retval;
3585
a6d9a66e 3586 retval = debug_target.to_remove_breakpoint (gdbarch, bp_tgt);
c906108c 3587
96baa820 3588 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3589 "target_remove_breakpoint (%s, xxx) = %ld\n",
3590 core_addr_to_string (bp_tgt->placed_address),
104c1213 3591 (unsigned long) retval);
c906108c
SS
3592 return retval;
3593}
3594
ccaa32c7
GS
3595static int
3596debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
3597{
3598 int retval;
3599
3600 retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
3601
3602 fprintf_unfiltered (gdb_stdlog,
3603 "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
3604 (unsigned long) type,
3605 (unsigned long) cnt,
3606 (unsigned long) from_tty,
3607 (unsigned long) retval);
3608 return retval;
3609}
3610
e0d24f8d
WZ
3611static int
3612debug_to_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
3613{
3614 CORE_ADDR retval;
3615
3616 retval = debug_target.to_region_ok_for_hw_watchpoint (addr, len);
3617
3618 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3619 "target_region_ok_for_hw_watchpoint (%s, %ld) = %s\n",
3620 core_addr_to_string (addr), (unsigned long) len,
3621 core_addr_to_string (retval));
e0d24f8d
WZ
3622 return retval;
3623}
3624
0cf6dd15
TJB
3625static int
3626debug_to_can_accel_watchpoint_condition (CORE_ADDR addr, int len, int rw,
3627 struct expression *cond)
3628{
3629 int retval;
3630
3e43a32a
MS
3631 retval = debug_target.to_can_accel_watchpoint_condition (addr, len,
3632 rw, cond);
0cf6dd15
TJB
3633
3634 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
3635 "target_can_accel_watchpoint_condition "
3636 "(%s, %d, %d, %s) = %ld\n",
bd91e7ae
OS
3637 core_addr_to_string (addr), len, rw,
3638 host_address_to_string (cond), (unsigned long) retval);
0cf6dd15
TJB
3639 return retval;
3640}
3641
ccaa32c7
GS
3642static int
3643debug_to_stopped_by_watchpoint (void)
3644{
3645 int retval;
3646
3647 retval = debug_target.to_stopped_by_watchpoint ();
3648
3649 fprintf_unfiltered (gdb_stdlog,
d92524f1 3650 "target_stopped_by_watchpoint () = %ld\n",
ccaa32c7
GS
3651 (unsigned long) retval);
3652 return retval;
3653}
3654
4aa7a7f5
JJ
3655static int
3656debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
ccaa32c7 3657{
4aa7a7f5 3658 int retval;
ccaa32c7 3659
4aa7a7f5 3660 retval = debug_target.to_stopped_data_address (target, addr);
ccaa32c7
GS
3661
3662 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3663 "target_stopped_data_address ([%s]) = %ld\n",
3664 core_addr_to_string (*addr),
4aa7a7f5 3665 (unsigned long)retval);
ccaa32c7
GS
3666 return retval;
3667}
3668
5009afc5
AS
3669static int
3670debug_to_watchpoint_addr_within_range (struct target_ops *target,
3671 CORE_ADDR addr,
3672 CORE_ADDR start, int length)
3673{
3674 int retval;
3675
3676 retval = debug_target.to_watchpoint_addr_within_range (target, addr,
3677 start, length);
3678
3679 fprintf_filtered (gdb_stdlog,
bd91e7ae
OS
3680 "target_watchpoint_addr_within_range (%s, %s, %d) = %d\n",
3681 core_addr_to_string (addr), core_addr_to_string (start),
3682 length, retval);
5009afc5
AS
3683 return retval;
3684}
3685
ccaa32c7 3686static int
a6d9a66e
UW
3687debug_to_insert_hw_breakpoint (struct gdbarch *gdbarch,
3688 struct bp_target_info *bp_tgt)
ccaa32c7
GS
3689{
3690 int retval;
3691
a6d9a66e 3692 retval = debug_target.to_insert_hw_breakpoint (gdbarch, bp_tgt);
ccaa32c7
GS
3693
3694 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3695 "target_insert_hw_breakpoint (%s, xxx) = %ld\n",
3696 core_addr_to_string (bp_tgt->placed_address),
ccaa32c7
GS
3697 (unsigned long) retval);
3698 return retval;
3699}
3700
3701static int
a6d9a66e
UW
3702debug_to_remove_hw_breakpoint (struct gdbarch *gdbarch,
3703 struct bp_target_info *bp_tgt)
ccaa32c7
GS
3704{
3705 int retval;
3706
a6d9a66e 3707 retval = debug_target.to_remove_hw_breakpoint (gdbarch, bp_tgt);
ccaa32c7
GS
3708
3709 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3710 "target_remove_hw_breakpoint (%s, xxx) = %ld\n",
3711 core_addr_to_string (bp_tgt->placed_address),
ccaa32c7
GS
3712 (unsigned long) retval);
3713 return retval;
3714}
3715
3716static int
0cf6dd15
TJB
3717debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type,
3718 struct expression *cond)
ccaa32c7
GS
3719{
3720 int retval;
3721
0cf6dd15 3722 retval = debug_target.to_insert_watchpoint (addr, len, type, cond);
ccaa32c7
GS
3723
3724 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3725 "target_insert_watchpoint (%s, %d, %d, %s) = %ld\n",
3726 core_addr_to_string (addr), len, type,
3727 host_address_to_string (cond), (unsigned long) retval);
ccaa32c7
GS
3728 return retval;
3729}
3730
3731static int
0cf6dd15
TJB
3732debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type,
3733 struct expression *cond)
ccaa32c7
GS
3734{
3735 int retval;
3736
0cf6dd15 3737 retval = debug_target.to_remove_watchpoint (addr, len, type, cond);
ccaa32c7
GS
3738
3739 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
3740 "target_remove_watchpoint (%s, %d, %d, %s) = %ld\n",
3741 core_addr_to_string (addr), len, type,
3742 host_address_to_string (cond), (unsigned long) retval);
ccaa32c7
GS
3743 return retval;
3744}
3745
c906108c 3746static void
fba45db2 3747debug_to_terminal_init (void)
c906108c
SS
3748{
3749 debug_target.to_terminal_init ();
3750
96baa820 3751 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
c906108c
SS
3752}
3753
3754static void
fba45db2 3755debug_to_terminal_inferior (void)
c906108c
SS
3756{
3757 debug_target.to_terminal_inferior ();
3758
96baa820 3759 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
c906108c
SS
3760}
3761
3762static void
fba45db2 3763debug_to_terminal_ours_for_output (void)
c906108c
SS
3764{
3765 debug_target.to_terminal_ours_for_output ();
3766
96baa820 3767 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
c906108c
SS
3768}
3769
3770static void
fba45db2 3771debug_to_terminal_ours (void)
c906108c
SS
3772{
3773 debug_target.to_terminal_ours ();
3774
96baa820 3775 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
c906108c
SS
3776}
3777
a790ad35
SC
3778static void
3779debug_to_terminal_save_ours (void)
3780{
3781 debug_target.to_terminal_save_ours ();
3782
3783 fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
3784}
3785
c906108c 3786static void
fba45db2 3787debug_to_terminal_info (char *arg, int from_tty)
c906108c
SS
3788{
3789 debug_target.to_terminal_info (arg, from_tty);
3790
96baa820 3791 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
c906108c
SS
3792 from_tty);
3793}
3794
c906108c 3795static void
fba45db2 3796debug_to_load (char *args, int from_tty)
c906108c
SS
3797{
3798 debug_target.to_load (args, from_tty);
3799
96baa820 3800 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
c906108c
SS
3801}
3802
3803static int
fba45db2 3804debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
c906108c
SS
3805{
3806 int retval;
3807
3808 retval = debug_target.to_lookup_symbol (name, addrp);
3809
96baa820 3810 fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
c906108c
SS
3811
3812 return retval;
3813}
3814
c906108c 3815static void
39f77062 3816debug_to_post_startup_inferior (ptid_t ptid)
c906108c 3817{
39f77062 3818 debug_target.to_post_startup_inferior (ptid);
c906108c 3819
96baa820 3820 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
39f77062 3821 PIDGET (ptid));
c906108c
SS
3822}
3823
77b06cd7 3824static int
fba45db2 3825debug_to_insert_fork_catchpoint (int pid)
c906108c 3826{
77b06cd7
TJB
3827 int retval;
3828
3829 retval = debug_target.to_insert_fork_catchpoint (pid);
3830
3831 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d) = %d\n",
3832 pid, retval);
c906108c 3833
77b06cd7 3834 return retval;
c906108c
SS
3835}
3836
3837static int
fba45db2 3838debug_to_remove_fork_catchpoint (int pid)
c906108c 3839{
c5aa993b 3840 int retval;
c906108c
SS
3841
3842 retval = debug_target.to_remove_fork_catchpoint (pid);
3843
96baa820 3844 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
c5aa993b 3845 pid, retval);
c906108c
SS
3846
3847 return retval;
3848}
3849
77b06cd7 3850static int
fba45db2 3851debug_to_insert_vfork_catchpoint (int pid)
c906108c 3852{
77b06cd7
TJB
3853 int retval;
3854
3855 retval = debug_target.to_insert_vfork_catchpoint (pid);
c906108c 3856
77b06cd7
TJB
3857 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d) = %d\n",
3858 pid, retval);
3859
3860 return retval;
c906108c
SS
3861}
3862
3863static int
fba45db2 3864debug_to_remove_vfork_catchpoint (int pid)
c906108c 3865{
c5aa993b 3866 int retval;
c906108c
SS
3867
3868 retval = debug_target.to_remove_vfork_catchpoint (pid);
3869
96baa820 3870 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
c5aa993b 3871 pid, retval);
c906108c
SS
3872
3873 return retval;
3874}
3875
77b06cd7 3876static int
fba45db2 3877debug_to_insert_exec_catchpoint (int pid)
c906108c 3878{
77b06cd7
TJB
3879 int retval;
3880
3881 retval = debug_target.to_insert_exec_catchpoint (pid);
c906108c 3882
77b06cd7
TJB
3883 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d) = %d\n",
3884 pid, retval);
3885
3886 return retval;
c906108c
SS
3887}
3888
3889static int
fba45db2 3890debug_to_remove_exec_catchpoint (int pid)
c906108c 3891{
c5aa993b 3892 int retval;
c906108c
SS
3893
3894 retval = debug_target.to_remove_exec_catchpoint (pid);
3895
96baa820 3896 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
c5aa993b 3897 pid, retval);
c906108c
SS
3898
3899 return retval;
3900}
3901
c906108c 3902static int
fba45db2 3903debug_to_has_exited (int pid, int wait_status, int *exit_status)
c906108c 3904{
c5aa993b 3905 int has_exited;
c906108c
SS
3906
3907 has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
3908
96baa820 3909 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
c5aa993b 3910 pid, wait_status, *exit_status, has_exited);
c906108c
SS
3911
3912 return has_exited;
3913}
3914
c906108c 3915static int
fba45db2 3916debug_to_can_run (void)
c906108c
SS
3917{
3918 int retval;
3919
3920 retval = debug_target.to_can_run ();
3921
96baa820 3922 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
c906108c
SS
3923
3924 return retval;
3925}
3926
3927static void
39f77062 3928debug_to_notice_signals (ptid_t ptid)
c906108c 3929{
39f77062 3930 debug_target.to_notice_signals (ptid);
c906108c 3931
39f77062
KB
3932 fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n",
3933 PIDGET (ptid));
c906108c
SS
3934}
3935
c2250ad1
UW
3936static struct gdbarch *
3937debug_to_thread_architecture (struct target_ops *ops, ptid_t ptid)
3938{
3939 struct gdbarch *retval;
3940
3941 retval = debug_target.to_thread_architecture (ops, ptid);
3942
3e43a32a
MS
3943 fprintf_unfiltered (gdb_stdlog,
3944 "target_thread_architecture (%s) = %s [%s]\n",
3945 target_pid_to_str (ptid),
3946 host_address_to_string (retval),
c2250ad1
UW
3947 gdbarch_bfd_arch_info (retval)->printable_name);
3948 return retval;
3949}
3950
c906108c 3951static void
94cc34af 3952debug_to_stop (ptid_t ptid)
c906108c 3953{
94cc34af 3954 debug_target.to_stop (ptid);
c906108c 3955
94cc34af
PA
3956 fprintf_unfiltered (gdb_stdlog, "target_stop (%s)\n",
3957 target_pid_to_str (ptid));
c906108c
SS
3958}
3959
96baa820
JM
3960static void
3961debug_to_rcmd (char *command,
d9fcf2fb 3962 struct ui_file *outbuf)
96baa820
JM
3963{
3964 debug_target.to_rcmd (command, outbuf);
3965 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
3966}
3967
c906108c 3968static char *
fba45db2 3969debug_to_pid_to_exec_file (int pid)
c906108c 3970{
c5aa993b 3971 char *exec_file;
c906108c
SS
3972
3973 exec_file = debug_target.to_pid_to_exec_file (pid);
3974
96baa820 3975 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
c5aa993b 3976 pid, exec_file);
c906108c
SS
3977
3978 return exec_file;
3979}
3980
c906108c 3981static void
fba45db2 3982setup_target_debug (void)
c906108c
SS
3983{
3984 memcpy (&debug_target, &current_target, sizeof debug_target);
3985
3986 current_target.to_open = debug_to_open;
c906108c 3987 current_target.to_post_attach = debug_to_post_attach;
c906108c 3988 current_target.to_prepare_to_store = debug_to_prepare_to_store;
c8e73a31 3989 current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory;
c906108c
SS
3990 current_target.to_files_info = debug_to_files_info;
3991 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
3992 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
ccaa32c7
GS
3993 current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
3994 current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
3995 current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
3996 current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
3997 current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
3998 current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
3999 current_target.to_stopped_data_address = debug_to_stopped_data_address;
3e43a32a
MS
4000 current_target.to_watchpoint_addr_within_range
4001 = debug_to_watchpoint_addr_within_range;
4002 current_target.to_region_ok_for_hw_watchpoint
4003 = debug_to_region_ok_for_hw_watchpoint;
4004 current_target.to_can_accel_watchpoint_condition
4005 = debug_to_can_accel_watchpoint_condition;
c906108c
SS
4006 current_target.to_terminal_init = debug_to_terminal_init;
4007 current_target.to_terminal_inferior = debug_to_terminal_inferior;
3e43a32a
MS
4008 current_target.to_terminal_ours_for_output
4009 = debug_to_terminal_ours_for_output;
c906108c 4010 current_target.to_terminal_ours = debug_to_terminal_ours;
a790ad35 4011 current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
c906108c 4012 current_target.to_terminal_info = debug_to_terminal_info;
c906108c
SS
4013 current_target.to_load = debug_to_load;
4014 current_target.to_lookup_symbol = debug_to_lookup_symbol;
c906108c 4015 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
c906108c
SS
4016 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
4017 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
4018 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
4019 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
c906108c
SS
4020 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
4021 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
c906108c 4022 current_target.to_has_exited = debug_to_has_exited;
c906108c
SS
4023 current_target.to_can_run = debug_to_can_run;
4024 current_target.to_notice_signals = debug_to_notice_signals;
c906108c 4025 current_target.to_stop = debug_to_stop;
96baa820 4026 current_target.to_rcmd = debug_to_rcmd;
c906108c 4027 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
c2250ad1 4028 current_target.to_thread_architecture = debug_to_thread_architecture;
c906108c 4029}
c906108c 4030\f
c5aa993b
JM
4031
4032static char targ_desc[] =
3e43a32a
MS
4033"Names of targets and files being debugged.\nShows the entire \
4034stack of targets currently in use (including the exec-file,\n\
c906108c
SS
4035core-file, and process, if any), as well as the symbol file name.";
4036
96baa820
JM
4037static void
4038do_monitor_command (char *cmd,
4039 int from_tty)
4040{
2b5fe715
AC
4041 if ((current_target.to_rcmd
4042 == (void (*) (char *, struct ui_file *)) tcomplain)
96baa820 4043 || (current_target.to_rcmd == debug_to_rcmd
2b5fe715
AC
4044 && (debug_target.to_rcmd
4045 == (void (*) (char *, struct ui_file *)) tcomplain)))
8a3fe4f8 4046 error (_("\"monitor\" command not supported by this target."));
96baa820
JM
4047 target_rcmd (cmd, gdb_stdtarg);
4048}
4049
87680a14
JB
4050/* Print the name of each layers of our target stack. */
4051
4052static void
4053maintenance_print_target_stack (char *cmd, int from_tty)
4054{
4055 struct target_ops *t;
4056
4057 printf_filtered (_("The current target stack is:\n"));
4058
4059 for (t = target_stack; t != NULL; t = t->beneath)
4060 {
4061 printf_filtered (" - %s (%s)\n", t->to_shortname, t->to_longname);
4062 }
4063}
4064
c6ebd6cf
VP
4065/* Controls if async mode is permitted. */
4066int target_async_permitted = 0;
4067
4068/* The set command writes to this variable. If the inferior is
4069 executing, linux_nat_async_permitted is *not* updated. */
4070static int target_async_permitted_1 = 0;
4071
4072static void
4073set_maintenance_target_async_permitted (char *args, int from_tty,
4074 struct cmd_list_element *c)
4075{
c35b1492 4076 if (have_live_inferiors ())
c6ebd6cf
VP
4077 {
4078 target_async_permitted_1 = target_async_permitted;
4079 error (_("Cannot change this setting while the inferior is running."));
4080 }
4081
4082 target_async_permitted = target_async_permitted_1;
4083}
4084
4085static void
4086show_maintenance_target_async_permitted (struct ui_file *file, int from_tty,
4087 struct cmd_list_element *c,
4088 const char *value)
4089{
3e43a32a
MS
4090 fprintf_filtered (file,
4091 _("Controlling the inferior in "
4092 "asynchronous mode is %s.\n"), value);
c6ebd6cf
VP
4093}
4094
d914c394
SS
4095/* Temporary copies of permission settings. */
4096
4097static int may_write_registers_1 = 1;
4098static int may_write_memory_1 = 1;
4099static int may_insert_breakpoints_1 = 1;
4100static int may_insert_tracepoints_1 = 1;
4101static int may_insert_fast_tracepoints_1 = 1;
4102static int may_stop_1 = 1;
4103
4104/* Make the user-set values match the real values again. */
4105
4106void
4107update_target_permissions (void)
4108{
4109 may_write_registers_1 = may_write_registers;
4110 may_write_memory_1 = may_write_memory;
4111 may_insert_breakpoints_1 = may_insert_breakpoints;
4112 may_insert_tracepoints_1 = may_insert_tracepoints;
4113 may_insert_fast_tracepoints_1 = may_insert_fast_tracepoints;
4114 may_stop_1 = may_stop;
4115}
4116
4117/* The one function handles (most of) the permission flags in the same
4118 way. */
4119
4120static void
4121set_target_permissions (char *args, int from_tty,
4122 struct cmd_list_element *c)
4123{
4124 if (target_has_execution)
4125 {
4126 update_target_permissions ();
4127 error (_("Cannot change this setting while the inferior is running."));
4128 }
4129
4130 /* Make the real values match the user-changed values. */
4131 may_write_registers = may_write_registers_1;
4132 may_insert_breakpoints = may_insert_breakpoints_1;
4133 may_insert_tracepoints = may_insert_tracepoints_1;
4134 may_insert_fast_tracepoints = may_insert_fast_tracepoints_1;
4135 may_stop = may_stop_1;
4136 update_observer_mode ();
4137}
4138
4139/* Set memory write permission independently of observer mode. */
4140
4141static void
4142set_write_memory_permission (char *args, int from_tty,
4143 struct cmd_list_element *c)
4144{
4145 /* Make the real values match the user-changed values. */
4146 may_write_memory = may_write_memory_1;
4147 update_observer_mode ();
4148}
4149
4150
c906108c 4151void
fba45db2 4152initialize_targets (void)
c906108c
SS
4153{
4154 init_dummy_target ();
4155 push_target (&dummy_target);
4156
4157 add_info ("target", target_info, targ_desc);
4158 add_info ("files", target_info, targ_desc);
4159
85c07804
AC
4160 add_setshow_zinteger_cmd ("target", class_maintenance, &targetdebug, _("\
4161Set target debugging."), _("\
4162Show target debugging."), _("\
333dabeb
DJ
4163When non-zero, target debugging is enabled. Higher numbers are more\n\
4164verbose. Changes do not take effect until the next \"run\" or \"target\"\n\
85c07804
AC
4165command."),
4166 NULL,
920d2a44 4167 show_targetdebug,
85c07804 4168 &setdebuglist, &showdebuglist);
3a11626d 4169
2bc416ba 4170 add_setshow_boolean_cmd ("trust-readonly-sections", class_support,
7915a72c
AC
4171 &trust_readonly, _("\
4172Set mode for reading from readonly sections."), _("\
4173Show mode for reading from readonly sections."), _("\
3a11626d
MS
4174When this mode is on, memory reads from readonly sections (such as .text)\n\
4175will be read from the object file instead of from the target. This will\n\
7915a72c 4176result in significant performance improvement for remote targets."),
2c5b56ce 4177 NULL,
920d2a44 4178 show_trust_readonly,
e707bbc2 4179 &setlist, &showlist);
96baa820
JM
4180
4181 add_com ("monitor", class_obscure, do_monitor_command,
1bedd215 4182 _("Send a command to the remote monitor (remote targets only)."));
96baa820 4183
87680a14
JB
4184 add_cmd ("target-stack", class_maintenance, maintenance_print_target_stack,
4185 _("Print the name of each layer of the internal target stack."),
4186 &maintenanceprintlist);
4187
c6ebd6cf
VP
4188 add_setshow_boolean_cmd ("target-async", no_class,
4189 &target_async_permitted_1, _("\
4190Set whether gdb controls the inferior in asynchronous mode."), _("\
4191Show whether gdb controls the inferior in asynchronous mode."), _("\
4192Tells gdb whether to control the inferior in asynchronous mode."),
4193 set_maintenance_target_async_permitted,
4194 show_maintenance_target_async_permitted,
4195 &setlist,
4196 &showlist);
4197
4e5d721f 4198 add_setshow_boolean_cmd ("stack-cache", class_support,
9cf1b572 4199 &stack_cache_enabled_p_1, _("\
4e5d721f
DE
4200Set cache use for stack access."), _("\
4201Show cache use for stack access."), _("\
4202When on, use the data cache for all stack access, regardless of any\n\
4203configured memory regions. This improves remote performance significantly.\n\
4204By default, caching for stack access is on."),
4205 set_stack_cache_enabled_p,
4206 show_stack_cache_enabled_p,
4207 &setlist, &showlist);
4208
d914c394
SS
4209 add_setshow_boolean_cmd ("may-write-registers", class_support,
4210 &may_write_registers_1, _("\
4211Set permission to write into registers."), _("\
4212Show permission to write into registers."), _("\
4213When this permission is on, GDB may write into the target's registers.\n\
4214Otherwise, any sort of write attempt will result in an error."),
4215 set_target_permissions, NULL,
4216 &setlist, &showlist);
4217
4218 add_setshow_boolean_cmd ("may-write-memory", class_support,
4219 &may_write_memory_1, _("\
4220Set permission to write into target memory."), _("\
4221Show permission to write into target memory."), _("\
4222When this permission is on, GDB may write into the target's memory.\n\
4223Otherwise, any sort of write attempt will result in an error."),
4224 set_write_memory_permission, NULL,
4225 &setlist, &showlist);
4226
4227 add_setshow_boolean_cmd ("may-insert-breakpoints", class_support,
4228 &may_insert_breakpoints_1, _("\
4229Set permission to insert breakpoints in the target."), _("\
4230Show permission to insert breakpoints in the target."), _("\
4231When this permission is on, GDB may insert breakpoints in the program.\n\
4232Otherwise, any sort of insertion attempt will result in an error."),
4233 set_target_permissions, NULL,
4234 &setlist, &showlist);
4235
4236 add_setshow_boolean_cmd ("may-insert-tracepoints", class_support,
4237 &may_insert_tracepoints_1, _("\
4238Set permission to insert tracepoints in the target."), _("\
4239Show permission to insert tracepoints in the target."), _("\
4240When this permission is on, GDB may insert tracepoints in the program.\n\
4241Otherwise, any sort of insertion attempt will result in an error."),
4242 set_target_permissions, NULL,
4243 &setlist, &showlist);
4244
4245 add_setshow_boolean_cmd ("may-insert-fast-tracepoints", class_support,
4246 &may_insert_fast_tracepoints_1, _("\
4247Set permission to insert fast tracepoints in the target."), _("\
4248Show permission to insert fast tracepoints in the target."), _("\
4249When this permission is on, GDB may insert fast tracepoints.\n\
4250Otherwise, any sort of insertion attempt will result in an error."),
4251 set_target_permissions, NULL,
4252 &setlist, &showlist);
4253
4254 add_setshow_boolean_cmd ("may-interrupt", class_support,
4255 &may_stop_1, _("\
4256Set permission to interrupt or signal the target."), _("\
4257Show permission to interrupt or signal the target."), _("\
4258When this permission is on, GDB may interrupt/stop the target's execution.\n\
4259Otherwise, any attempt to interrupt or stop will be ignored."),
4260 set_target_permissions, NULL,
4261 &setlist, &showlist);
4262
4263
8add0441 4264 target_dcache = dcache_init ();
c906108c 4265}
This page took 1.393247 seconds and 4 git commands to generate.