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