]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/target.c
convert to_load
[thirdparty/binutils-gdb.git] / gdb / target.c
CommitLineData
c906108c 1/* Select target systems and architectures at runtime for GDB.
7998dfc3 2
ecd75fc8 3 Copyright (C) 1990-2014 Free Software Foundation, Inc.
7998dfc3 4
c906108c
SS
5 Contributed by Cygnus Support.
6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
23#include <errno.h>
0e9f083f 24#include <string.h>
c906108c 25#include "target.h"
68c765e2 26#include "target-dcache.h"
c906108c
SS
27#include "gdbcmd.h"
28#include "symtab.h"
29#include "inferior.h"
30#include "bfd.h"
31#include "symfile.h"
32#include "objfiles.h"
4930751a 33#include "dcache.h"
c906108c 34#include <signal.h>
4e052eda 35#include "regcache.h"
0088c768 36#include "gdb_assert.h"
b6591e8b 37#include "gdbcore.h"
9e35dae4 38#include "exceptions.h"
424163ea 39#include "target-descriptions.h"
e1ac3328 40#include "gdbthread.h"
b9db4ced 41#include "solib.h"
07b82ea5 42#include "exec.h"
edb3359d 43#include "inline-frame.h"
2f4d8875 44#include "tracepoint.h"
7313baad 45#include "gdb/fileio.h"
8ffcbaaf 46#include "agent.h"
c906108c 47
a14ed312 48static void target_info (char *, int);
c906108c 49
0a4f40a2 50static void default_terminal_info (struct target_ops *, const char *, int);
c906108c 51
5009afc5
AS
52static int default_watchpoint_addr_within_range (struct target_ops *,
53 CORE_ADDR, CORE_ADDR, int);
54
31568a15
TT
55static int default_region_ok_for_hw_watchpoint (struct target_ops *,
56 CORE_ADDR, int);
e0d24f8d 57
a53f3625
TT
58static void default_rcmd (struct target_ops *, char *, struct ui_file *);
59
c25c4a8b 60static void tcomplain (void) ATTRIBUTE_NORETURN;
c906108c 61
a14ed312 62static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
c906108c 63
a14ed312 64static int return_zero (void);
c906108c 65
a14ed312 66static int return_one (void);
c906108c 67
ccaa32c7
GS
68static int return_minus_one (void);
69
1b67eb02
AS
70static void *return_null (void);
71
a14ed312 72void target_ignore (void);
c906108c 73
a14ed312 74static void target_command (char *, int);
c906108c 75
a14ed312 76static struct target_ops *find_default_run_target (char *);
c906108c 77
4ac248ca
YQ
78static target_xfer_partial_ftype default_xfer_partial;
79
c2250ad1
UW
80static struct gdbarch *default_thread_architecture (struct target_ops *ops,
81 ptid_t ptid);
82
6b84065d
TT
83static int find_default_can_async_p (struct target_ops *ignore);
84
85static int find_default_is_async_p (struct target_ops *ignore);
86
1101cb7b
TT
87#include "target-delegates.c"
88
a14ed312 89static void init_dummy_target (void);
c906108c 90
aa869812
AC
91static struct target_ops debug_target;
92
a14ed312 93static void debug_to_open (char *, int);
c906108c 94
f32dbf8c
MM
95static void debug_to_prepare_to_store (struct target_ops *self,
96 struct regcache *);
c906108c 97
a14ed312 98static void debug_to_files_info (struct target_ops *);
c906108c 99
3db08215 100static int debug_to_insert_breakpoint (struct target_ops *, struct gdbarch *,
a6d9a66e 101 struct bp_target_info *);
c906108c 102
3db08215 103static int debug_to_remove_breakpoint (struct target_ops *, struct gdbarch *,
a6d9a66e 104 struct bp_target_info *);
c906108c 105
5461485a
TT
106static int debug_to_can_use_hw_breakpoint (struct target_ops *self,
107 int, int, int);
ccaa32c7 108
23a26771
TT
109static int debug_to_insert_hw_breakpoint (struct target_ops *self,
110 struct gdbarch *,
a6d9a66e 111 struct bp_target_info *);
ccaa32c7 112
a64dc96c
TT
113static int debug_to_remove_hw_breakpoint (struct target_ops *self,
114 struct gdbarch *,
a6d9a66e 115 struct bp_target_info *);
ccaa32c7 116
7bb99c53
TT
117static int debug_to_insert_watchpoint (struct target_ops *self,
118 CORE_ADDR, int, int,
0cf6dd15 119 struct expression *);
ccaa32c7 120
11b5219a
TT
121static int debug_to_remove_watchpoint (struct target_ops *self,
122 CORE_ADDR, int, int,
0cf6dd15 123 struct expression *);
ccaa32c7 124
4aa7a7f5 125static int debug_to_stopped_data_address (struct target_ops *, CORE_ADDR *);
ccaa32c7 126
5009afc5
AS
127static int debug_to_watchpoint_addr_within_range (struct target_ops *,
128 CORE_ADDR, CORE_ADDR, int);
129
31568a15
TT
130static int debug_to_region_ok_for_hw_watchpoint (struct target_ops *self,
131 CORE_ADDR, int);
e0d24f8d 132
c3a5ff89
TT
133static int debug_to_can_accel_watchpoint_condition (struct target_ops *self,
134 CORE_ADDR, int, int,
0cf6dd15
TJB
135 struct expression *);
136
c42bf286 137static void debug_to_terminal_init (struct target_ops *self);
c906108c 138
d2f640d4 139static void debug_to_terminal_inferior (struct target_ops *self);
c906108c 140
2e1e1a19 141static void debug_to_terminal_ours_for_output (struct target_ops *self);
c906108c 142
ae3bd431 143static void debug_to_terminal_save_ours (struct target_ops *self);
a790ad35 144
e3594fd1 145static void debug_to_terminal_ours (struct target_ops *self);
c906108c 146
71a9f134 147static void debug_to_load (struct target_ops *self, char *, int);
c906108c 148
da82bd6b 149static int debug_to_can_run (struct target_ops *self);
c906108c 150
1eab8a48 151static void debug_to_stop (struct target_ops *self, ptid_t);
c906108c 152
c906108c 153/* Pointer to array of target architecture structures; the size of the
2bc416ba 154 array; the current index into the array; the allocated size of the
c906108c
SS
155 array. */
156struct target_ops **target_structs;
157unsigned target_struct_size;
c906108c
SS
158unsigned target_struct_allocsize;
159#define DEFAULT_ALLOCSIZE 10
160
161/* The initial current target, so that there is always a semi-valid
162 current target. */
163
164static struct target_ops dummy_target;
165
166/* Top of target stack. */
167
258b763a 168static struct target_ops *target_stack;
c906108c
SS
169
170/* The target structure we are currently using to talk to a process
171 or file or whatever "inferior" we have. */
172
173struct target_ops current_target;
174
175/* Command list for target. */
176
177static struct cmd_list_element *targetlist = NULL;
178
cf7a04e8
DJ
179/* Nonzero if we should trust readonly sections from the
180 executable when reading memory. */
181
182static int trust_readonly = 0;
183
8defab1a
DJ
184/* Nonzero if we should show true memory content including
185 memory breakpoint inserted by gdb. */
186
187static int show_memory_breakpoints = 0;
188
d914c394
SS
189/* These globals control whether GDB attempts to perform these
190 operations; they are useful for targets that need to prevent
191 inadvertant disruption, such as in non-stop mode. */
192
193int may_write_registers = 1;
194
195int may_write_memory = 1;
196
197int may_insert_breakpoints = 1;
198
199int may_insert_tracepoints = 1;
200
201int may_insert_fast_tracepoints = 1;
202
203int may_stop = 1;
204
c906108c
SS
205/* Non-zero if we want to see trace of target level stuff. */
206
ccce17b0 207static unsigned int targetdebug = 0;
920d2a44
AC
208static void
209show_targetdebug (struct ui_file *file, int from_tty,
210 struct cmd_list_element *c, const char *value)
211{
212 fprintf_filtered (file, _("Target debugging is %s.\n"), value);
213}
c906108c 214
a14ed312 215static void setup_target_debug (void);
c906108c 216
c906108c
SS
217/* The user just typed 'target' without the name of a target. */
218
c906108c 219static void
fba45db2 220target_command (char *arg, int from_tty)
c906108c
SS
221{
222 fputs_filtered ("Argument required (target name). Try `help target'\n",
223 gdb_stdout);
224}
225
c35b1492
PA
226/* Default target_has_* methods for process_stratum targets. */
227
228int
229default_child_has_all_memory (struct target_ops *ops)
230{
231 /* If no inferior selected, then we can't read memory here. */
232 if (ptid_equal (inferior_ptid, null_ptid))
233 return 0;
234
235 return 1;
236}
237
238int
239default_child_has_memory (struct target_ops *ops)
240{
241 /* If no inferior selected, then we can't read memory here. */
242 if (ptid_equal (inferior_ptid, null_ptid))
243 return 0;
244
245 return 1;
246}
247
248int
249default_child_has_stack (struct target_ops *ops)
250{
251 /* If no inferior selected, there's no stack. */
252 if (ptid_equal (inferior_ptid, null_ptid))
253 return 0;
254
255 return 1;
256}
257
258int
259default_child_has_registers (struct target_ops *ops)
260{
261 /* Can't read registers from no inferior. */
262 if (ptid_equal (inferior_ptid, null_ptid))
263 return 0;
264
265 return 1;
266}
267
268int
aeaec162 269default_child_has_execution (struct target_ops *ops, ptid_t the_ptid)
c35b1492
PA
270{
271 /* If there's no thread selected, then we can't make it run through
272 hoops. */
aeaec162 273 if (ptid_equal (the_ptid, null_ptid))
c35b1492
PA
274 return 0;
275
276 return 1;
277}
278
279
280int
281target_has_all_memory_1 (void)
282{
283 struct target_ops *t;
284
285 for (t = current_target.beneath; t != NULL; t = t->beneath)
286 if (t->to_has_all_memory (t))
287 return 1;
288
289 return 0;
290}
291
292int
293target_has_memory_1 (void)
294{
295 struct target_ops *t;
296
297 for (t = current_target.beneath; t != NULL; t = t->beneath)
298 if (t->to_has_memory (t))
299 return 1;
300
301 return 0;
302}
303
304int
305target_has_stack_1 (void)
306{
307 struct target_ops *t;
308
309 for (t = current_target.beneath; t != NULL; t = t->beneath)
310 if (t->to_has_stack (t))
311 return 1;
312
313 return 0;
314}
315
316int
317target_has_registers_1 (void)
318{
319 struct target_ops *t;
320
321 for (t = current_target.beneath; t != NULL; t = t->beneath)
322 if (t->to_has_registers (t))
323 return 1;
324
325 return 0;
326}
327
328int
aeaec162 329target_has_execution_1 (ptid_t the_ptid)
c35b1492
PA
330{
331 struct target_ops *t;
332
333 for (t = current_target.beneath; t != NULL; t = t->beneath)
aeaec162 334 if (t->to_has_execution (t, the_ptid))
c35b1492
PA
335 return 1;
336
337 return 0;
338}
339
aeaec162
TT
340int
341target_has_execution_current (void)
342{
343 return target_has_execution_1 (inferior_ptid);
344}
345
c22a2b88
TT
346/* Complete initialization of T. This ensures that various fields in
347 T are set, if needed by the target implementation. */
c906108c
SS
348
349void
c22a2b88 350complete_target_initialization (struct target_ops *t)
c906108c 351{
0088c768 352 /* Provide default values for all "must have" methods. */
0b603eba
AC
353 if (t->to_xfer_partial == NULL)
354 t->to_xfer_partial = default_xfer_partial;
0088c768 355
c35b1492
PA
356 if (t->to_has_all_memory == NULL)
357 t->to_has_all_memory = (int (*) (struct target_ops *)) return_zero;
358
359 if (t->to_has_memory == NULL)
360 t->to_has_memory = (int (*) (struct target_ops *)) return_zero;
361
362 if (t->to_has_stack == NULL)
363 t->to_has_stack = (int (*) (struct target_ops *)) return_zero;
364
365 if (t->to_has_registers == NULL)
366 t->to_has_registers = (int (*) (struct target_ops *)) return_zero;
367
368 if (t->to_has_execution == NULL)
aeaec162 369 t->to_has_execution = (int (*) (struct target_ops *, ptid_t)) return_zero;
1101cb7b
TT
370
371 install_delegators (t);
c22a2b88
TT
372}
373
374/* Add possible target architecture T to the list and add a new
375 command 'target T->to_shortname'. Set COMPLETER as the command's
376 completer if not NULL. */
377
378void
379add_target_with_completer (struct target_ops *t,
380 completer_ftype *completer)
381{
382 struct cmd_list_element *c;
383
384 complete_target_initialization (t);
c35b1492 385
c906108c
SS
386 if (!target_structs)
387 {
388 target_struct_allocsize = DEFAULT_ALLOCSIZE;
389 target_structs = (struct target_ops **) xmalloc
390 (target_struct_allocsize * sizeof (*target_structs));
391 }
392 if (target_struct_size >= target_struct_allocsize)
393 {
394 target_struct_allocsize *= 2;
395 target_structs = (struct target_ops **)
c5aa993b
JM
396 xrealloc ((char *) target_structs,
397 target_struct_allocsize * sizeof (*target_structs));
c906108c
SS
398 }
399 target_structs[target_struct_size++] = t;
c906108c
SS
400
401 if (targetlist == NULL)
1bedd215
AC
402 add_prefix_cmd ("target", class_run, target_command, _("\
403Connect to a target machine or process.\n\
c906108c
SS
404The first argument is the type or protocol of the target machine.\n\
405Remaining arguments are interpreted by the target protocol. For more\n\
406information on the arguments for a particular protocol, type\n\
1bedd215 407`help target ' followed by the protocol name."),
c906108c 408 &targetlist, "target ", 0, &cmdlist);
9852c492
YQ
409 c = add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc,
410 &targetlist);
411 if (completer != NULL)
412 set_cmd_completer (c, completer);
413}
414
415/* Add a possible target architecture to the list. */
416
417void
418add_target (struct target_ops *t)
419{
420 add_target_with_completer (t, NULL);
c906108c
SS
421}
422
b48d48eb
MM
423/* See target.h. */
424
425void
426add_deprecated_target_alias (struct target_ops *t, char *alias)
427{
428 struct cmd_list_element *c;
429 char *alt;
430
431 /* If we use add_alias_cmd, here, we do not get the deprecated warning,
432 see PR cli/15104. */
433 c = add_cmd (alias, no_class, t->to_open, t->to_doc, &targetlist);
434 alt = xstrprintf ("target %s", t->to_shortname);
435 deprecate_cmd (c, alt);
436}
437
c906108c
SS
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 ();
71a9f134 467 (*current_target.to_load) (&current_target, arg, from_tty);
11cf8741
JM
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. */
d2f640d4 505 (*current_target.to_terminal_inferior) (&current_target);
d9d2d8b6 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
0a4f40a2 530default_terminal_info (struct target_ops *self, const 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
1e6b91a4 542default_get_ada_task_ptid (struct target_ops *self, long lwp, long tid)
0ef643c8
JB
543{
544 return ptid_build (ptid_get_pid (inferior_ptid), lwp, tid);
545}
546
32231432 547static enum exec_direction_kind
4c612759 548default_execution_direction (struct target_ops *self)
32231432
PA
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
1101cb7b
TT
579 /* Install the delegators. */
580 install_delegators (&current_target);
581
7998dfc3
AC
582#define INHERIT(FIELD, TARGET) \
583 if (!current_target.FIELD) \
584 current_target.FIELD = (TARGET)->FIELD
585
586 for (t = target_stack; t; t = t->beneath)
587 {
588 INHERIT (to_shortname, t);
589 INHERIT (to_longname, t);
590 INHERIT (to_doc, t);
b52323fa
UW
591 /* Do not inherit to_open. */
592 /* Do not inherit to_close. */
136d6dae 593 /* Do not inherit to_attach. */
bebd3233 594 /* Do not inherit to_post_attach. */
dc177b7a 595 INHERIT (to_attach_no_wait, t);
136d6dae 596 /* Do not inherit to_detach. */
597320e7 597 /* Do not inherit to_disconnect. */
28439f5e 598 /* Do not inherit to_resume. */
117de6a9 599 /* Do not inherit to_wait. */
28439f5e
PA
600 /* Do not inherit to_fetch_registers. */
601 /* Do not inherit to_store_registers. */
6c628163 602 /* Do not inherit to_prepare_to_store. */
c8e73a31 603 INHERIT (deprecated_xfer_memory, t);
f86e59b2 604 /* Do not inherit to_files_info. */
3db08215
MM
605 /* Do not inherit to_insert_breakpoint. */
606 /* Do not inherit to_remove_breakpoint. */
52b51d06 607 /* Do not inherit to_can_use_hw_breakpoint. */
61b371f9 608 /* Do not inherit to_insert_hw_breakpoint. */
418dabac 609 /* Do not inherit to_remove_hw_breakpoint. */
f1310107 610 /* Do not inherit to_ranged_break_num_registers. */
016facd4 611 /* Do not inherit to_insert_watchpoint. */
61dd109f 612 /* Do not inherit to_remove_watchpoint. */
9c06b0b4
TJB
613 /* Do not inherit to_insert_mask_watchpoint. */
614 /* Do not inherit to_remove_mask_watchpoint. */
6b84065d 615 /* Do not inherit to_stopped_data_address. */
74174d2e 616 INHERIT (to_have_steppable_watchpoint, t);
7998dfc3 617 INHERIT (to_have_continuable_watchpoint, t);
6b84065d 618 /* Do not inherit to_stopped_by_watchpoint. */
65f160a9 619 /* Do not inherit to_watchpoint_addr_within_range. */
d03655e4 620 /* Do not inherit to_region_ok_for_hw_watchpoint. */
77cdffe9 621 /* Do not inherit to_can_accel_watchpoint_condition. */
9c06b0b4 622 /* Do not inherit to_masked_watch_num_registers. */
0343661d 623 /* Do not inherit to_terminal_init. */
ddeaacc9 624 /* Do not inherit to_terminal_inferior. */
74fcbef9 625 /* Do not inherit to_terminal_ours_for_output. */
e4a733f1 626 /* Do not inherit to_terminal_ours. */
c6ea8f79 627 /* Do not inherit to_terminal_save_ours. */
e19e919f 628 /* Do not inherit to_terminal_info. */
7d85a9c0 629 /* Do not inherit to_kill. */
7634da87 630 /* Do not inherit to_load. */
136d6dae 631 /* Do no inherit to_create_inferior. */
7998dfc3 632 INHERIT (to_post_startup_inferior, t);
7998dfc3
AC
633 INHERIT (to_insert_fork_catchpoint, t);
634 INHERIT (to_remove_fork_catchpoint, t);
635 INHERIT (to_insert_vfork_catchpoint, t);
636 INHERIT (to_remove_vfork_catchpoint, t);
ee057212 637 /* Do not inherit to_follow_fork. */
7998dfc3
AC
638 INHERIT (to_insert_exec_catchpoint, t);
639 INHERIT (to_remove_exec_catchpoint, t);
a96d9b2e 640 INHERIT (to_set_syscall_catchpoint, t);
7998dfc3 641 INHERIT (to_has_exited, t);
82892036 642 /* Do not inherit to_mourn_inferior. */
7998dfc3 643 INHERIT (to_can_run, t);
2455069d 644 /* Do not inherit to_pass_signals. */
9b224c5e 645 /* Do not inherit to_program_signals. */
28439f5e
PA
646 /* Do not inherit to_thread_alive. */
647 /* Do not inherit to_find_new_threads. */
117de6a9 648 /* Do not inherit to_pid_to_str. */
7998dfc3 649 INHERIT (to_extra_thread_info, t);
4694da01 650 INHERIT (to_thread_name, t);
7998dfc3 651 INHERIT (to_stop, t);
4b8a223f 652 /* Do not inherit to_xfer_partial. */
a53f3625 653 /* Do not inherit to_rcmd. */
7998dfc3 654 INHERIT (to_pid_to_exec_file, t);
49d03eab 655 INHERIT (to_log_command, t);
7998dfc3 656 INHERIT (to_stratum, t);
c378eb4e
MS
657 /* Do not inherit to_has_all_memory. */
658 /* Do not inherit to_has_memory. */
659 /* Do not inherit to_has_stack. */
660 /* Do not inherit to_has_registers. */
661 /* Do not inherit to_has_execution. */
7998dfc3 662 INHERIT (to_has_thread_control, t);
6b84065d
TT
663 /* Do not inherit to_can_async_p. */
664 /* Do not inherit to_is_async_p. */
665 /* Do not inherit to_async. */
7998dfc3
AC
666 INHERIT (to_find_memory_regions, t);
667 INHERIT (to_make_corefile_notes, t);
6b04bdb7
MS
668 INHERIT (to_get_bookmark, t);
669 INHERIT (to_goto_bookmark, t);
117de6a9 670 /* Do not inherit to_get_thread_local_address. */
b2175913 671 INHERIT (to_can_execute_reverse, t);
32231432 672 INHERIT (to_execution_direction, t);
c2250ad1 673 INHERIT (to_thread_architecture, t);
424163ea 674 /* Do not inherit to_read_description. */
0ef643c8 675 INHERIT (to_get_ada_task_ptid, t);
08388c79 676 /* Do not inherit to_search_memory. */
8a305172 677 INHERIT (to_supports_multi_process, t);
d248b706 678 INHERIT (to_supports_enable_disable_tracepoint, t);
3065dfb6 679 INHERIT (to_supports_string_tracing, t);
35b1e5cc
SS
680 INHERIT (to_trace_init, t);
681 INHERIT (to_download_tracepoint, t);
1e4d1764 682 INHERIT (to_can_download_tracepoint, t);
35b1e5cc 683 INHERIT (to_download_trace_state_variable, t);
d248b706
KY
684 INHERIT (to_enable_tracepoint, t);
685 INHERIT (to_disable_tracepoint, t);
35b1e5cc
SS
686 INHERIT (to_trace_set_readonly_regions, t);
687 INHERIT (to_trace_start, t);
688 INHERIT (to_get_trace_status, t);
f196051f 689 INHERIT (to_get_tracepoint_status, t);
35b1e5cc
SS
690 INHERIT (to_trace_stop, t);
691 INHERIT (to_trace_find, t);
692 INHERIT (to_get_trace_state_variable_value, t);
00bf0b85
SS
693 INHERIT (to_save_trace_data, t);
694 INHERIT (to_upload_tracepoints, t);
695 INHERIT (to_upload_trace_state_variables, t);
696 INHERIT (to_get_raw_trace_data, t);
405f8e94 697 INHERIT (to_get_min_fast_tracepoint_insn_len, t);
35b1e5cc 698 INHERIT (to_set_disconnected_tracing, t);
4daf5ac0 699 INHERIT (to_set_circular_trace_buffer, t);
f6f899bf 700 INHERIT (to_set_trace_buffer_size, t);
f196051f 701 INHERIT (to_set_trace_notes, t);
711e434b 702 INHERIT (to_get_tib_address, t);
d914c394 703 INHERIT (to_set_permissions, t);
0fb4aa4b
PA
704 INHERIT (to_static_tracepoint_marker_at, t);
705 INHERIT (to_static_tracepoint_markers_by_strid, t);
b3b9301e 706 INHERIT (to_traceframe_info, t);
d1feda86
YQ
707 INHERIT (to_use_agent, t);
708 INHERIT (to_can_use_agent, t);
ced63ec0 709 INHERIT (to_augmented_libraries_svr4_read, t);
7998dfc3 710 INHERIT (to_magic, t);
b775012e 711 INHERIT (to_supports_evaluation_of_breakpoint_conditions, t);
d3ce09f5 712 INHERIT (to_can_run_breakpoint_commands, t);
fd79ecee 713 /* Do not inherit to_memory_map. */
a76d924d
DJ
714 /* Do not inherit to_flash_erase. */
715 /* Do not inherit to_flash_done. */
7998dfc3
AC
716 }
717#undef INHERIT
718
719 /* Clean up a target struct so it no longer has any zero pointers in
0088c768
AC
720 it. Some entries are defaulted to a method that print an error,
721 others are hard-wired to a standard recursive default. */
c906108c
SS
722
723#define de_fault(field, value) \
7998dfc3
AC
724 if (!current_target.field) \
725 current_target.field = value
0d06e24b 726
2bc416ba
DJ
727 de_fault (to_open,
728 (void (*) (char *, int))
0d06e24b 729 tcomplain);
2bc416ba 730 de_fault (to_close,
de90e03d 731 (void (*) (struct target_ops *))
0d06e24b 732 target_ignore);
2bc416ba 733 de_fault (deprecated_xfer_memory,
3e43a32a
MS
734 (int (*) (CORE_ADDR, gdb_byte *, int, int,
735 struct mem_attrib *, struct target_ops *))
0d06e24b 736 nomemory);
2bc416ba 737 de_fault (to_post_startup_inferior,
2e97a79e 738 (void (*) (struct target_ops *, ptid_t))
0d06e24b 739 target_ignore);
2bc416ba 740 de_fault (to_insert_fork_catchpoint,
a863b201 741 (int (*) (struct target_ops *, int))
77b06cd7 742 return_one);
2bc416ba 743 de_fault (to_remove_fork_catchpoint,
973fc227 744 (int (*) (struct target_ops *, int))
77b06cd7 745 return_one);
2bc416ba 746 de_fault (to_insert_vfork_catchpoint,
3ecc7da0 747 (int (*) (struct target_ops *, int))
77b06cd7 748 return_one);
2bc416ba 749 de_fault (to_remove_vfork_catchpoint,
e98cf0cd 750 (int (*) (struct target_ops *, int))
77b06cd7 751 return_one);
2bc416ba 752 de_fault (to_insert_exec_catchpoint,
ba025e51 753 (int (*) (struct target_ops *, int))
77b06cd7 754 return_one);
2bc416ba 755 de_fault (to_remove_exec_catchpoint,
758e29d2 756 (int (*) (struct target_ops *, int))
77b06cd7 757 return_one);
a96d9b2e 758 de_fault (to_set_syscall_catchpoint,
ff214e67 759 (int (*) (struct target_ops *, int, int, int, int, int *))
77b06cd7 760 return_one);
2bc416ba 761 de_fault (to_has_exited,
d796e1d6 762 (int (*) (struct target_ops *, int, int, int *))
0d06e24b 763 return_zero);
2bc416ba 764 de_fault (to_can_run,
da82bd6b 765 (int (*) (struct target_ops *))
0d06e24b 766 return_zero);
2bc416ba 767 de_fault (to_extra_thread_info,
c15906d8 768 (char *(*) (struct target_ops *, struct thread_info *))
1b67eb02 769 return_null);
4694da01 770 de_fault (to_thread_name,
503a628d 771 (char *(*) (struct target_ops *, struct thread_info *))
1b67eb02 772 return_null);
2bc416ba 773 de_fault (to_stop,
1eab8a48 774 (void (*) (struct target_ops *, ptid_t))
0d06e24b 775 target_ignore);
2bc416ba 776 de_fault (to_pid_to_exec_file,
8dd27370 777 (char *(*) (struct target_ops *, int))
1b67eb02 778 return_null);
c2250ad1
UW
779 de_fault (to_thread_architecture,
780 default_thread_architecture);
424163ea 781 current_target.to_read_description = NULL;
0ef643c8 782 de_fault (to_get_ada_task_ptid,
1e6b91a4 783 (ptid_t (*) (struct target_ops *, long, long))
0ef643c8 784 default_get_ada_task_ptid);
8a305172 785 de_fault (to_supports_multi_process,
86ce2668 786 (int (*) (struct target_ops *))
8a305172 787 return_zero);
d248b706 788 de_fault (to_supports_enable_disable_tracepoint,
7d178d6a 789 (int (*) (struct target_ops *))
d248b706 790 return_zero);
3065dfb6 791 de_fault (to_supports_string_tracing,
6de37a3a 792 (int (*) (struct target_ops *))
3065dfb6 793 return_zero);
35b1e5cc 794 de_fault (to_trace_init,
ecae04e1 795 (void (*) (struct target_ops *))
35b1e5cc
SS
796 tcomplain);
797 de_fault (to_download_tracepoint,
548f7808 798 (void (*) (struct target_ops *, struct bp_location *))
35b1e5cc 799 tcomplain);
1e4d1764 800 de_fault (to_can_download_tracepoint,
a52a8357 801 (int (*) (struct target_ops *))
1e4d1764 802 return_zero);
35b1e5cc 803 de_fault (to_download_trace_state_variable,
559d2b81 804 (void (*) (struct target_ops *, struct trace_state_variable *))
35b1e5cc 805 tcomplain);
d248b706 806 de_fault (to_enable_tracepoint,
46670d57 807 (void (*) (struct target_ops *, struct bp_location *))
d248b706
KY
808 tcomplain);
809 de_fault (to_disable_tracepoint,
780b049c 810 (void (*) (struct target_ops *, struct bp_location *))
d248b706 811 tcomplain);
35b1e5cc 812 de_fault (to_trace_set_readonly_regions,
583f9a86 813 (void (*) (struct target_ops *))
35b1e5cc
SS
814 tcomplain);
815 de_fault (to_trace_start,
e2d1aae3 816 (void (*) (struct target_ops *))
35b1e5cc
SS
817 tcomplain);
818 de_fault (to_get_trace_status,
8bd200f1 819 (int (*) (struct target_ops *, struct trace_status *))
35b1e5cc 820 return_minus_one);
f196051f 821 de_fault (to_get_tracepoint_status,
db90e85c
TT
822 (void (*) (struct target_ops *, struct breakpoint *,
823 struct uploaded_tp *))
f196051f 824 tcomplain);
35b1e5cc 825 de_fault (to_trace_stop,
74499f1b 826 (void (*) (struct target_ops *))
35b1e5cc
SS
827 tcomplain);
828 de_fault (to_trace_find,
bd4c6793
TT
829 (int (*) (struct target_ops *,
830 enum trace_find_type, int, CORE_ADDR, CORE_ADDR, int *))
4136fdd2 831 return_minus_one);
35b1e5cc 832 de_fault (to_get_trace_state_variable_value,
4011015b 833 (int (*) (struct target_ops *, int, LONGEST *))
35b1e5cc 834 return_zero);
00bf0b85 835 de_fault (to_save_trace_data,
dc3decaf 836 (int (*) (struct target_ops *, const char *))
00bf0b85
SS
837 tcomplain);
838 de_fault (to_upload_tracepoints,
ab6617cc 839 (int (*) (struct target_ops *, struct uploaded_tp **))
00bf0b85
SS
840 return_zero);
841 de_fault (to_upload_trace_state_variables,
181e3713 842 (int (*) (struct target_ops *, struct uploaded_tsv **))
00bf0b85
SS
843 return_zero);
844 de_fault (to_get_raw_trace_data,
88ee6f45 845 (LONGEST (*) (struct target_ops *, gdb_byte *, ULONGEST, LONGEST))
00bf0b85 846 tcomplain);
405f8e94 847 de_fault (to_get_min_fast_tracepoint_insn_len,
0e67620a 848 (int (*) (struct target_ops *))
405f8e94 849 return_minus_one);
35b1e5cc 850 de_fault (to_set_disconnected_tracing,
37b25738 851 (void (*) (struct target_ops *, int))
4daf5ac0
SS
852 target_ignore);
853 de_fault (to_set_circular_trace_buffer,
736d5b1f 854 (void (*) (struct target_ops *, int))
4daf5ac0 855 target_ignore);
f6f899bf 856 de_fault (to_set_trace_buffer_size,
4da384be 857 (void (*) (struct target_ops *, LONGEST))
f6f899bf 858 target_ignore);
f196051f 859 de_fault (to_set_trace_notes,
d9e68a2c
TT
860 (int (*) (struct target_ops *,
861 const char *, const char *, const char *))
f196051f 862 return_zero);
711e434b 863 de_fault (to_get_tib_address,
bd7ae0f5 864 (int (*) (struct target_ops *, ptid_t, CORE_ADDR *))
711e434b 865 tcomplain);
d914c394 866 de_fault (to_set_permissions,
c378d69d 867 (void (*) (struct target_ops *))
d914c394 868 target_ignore);
0fb4aa4b 869 de_fault (to_static_tracepoint_marker_at,
61fc905d
TT
870 (int (*) (struct target_ops *,
871 CORE_ADDR, struct static_tracepoint_marker *))
0fb4aa4b
PA
872 return_zero);
873 de_fault (to_static_tracepoint_markers_by_strid,
c686c57f
TT
874 (VEC(static_tracepoint_marker_p) * (*) (struct target_ops *,
875 const char *))
0fb4aa4b 876 tcomplain);
b3b9301e 877 de_fault (to_traceframe_info,
a893e81f 878 (struct traceframe_info * (*) (struct target_ops *))
1b67eb02 879 return_null);
b775012e 880 de_fault (to_supports_evaluation_of_breakpoint_conditions,
efcc2da7 881 (int (*) (struct target_ops *))
b775012e 882 return_zero);
d3ce09f5 883 de_fault (to_can_run_breakpoint_commands,
78eff0ec 884 (int (*) (struct target_ops *))
d3ce09f5 885 return_zero);
d1feda86 886 de_fault (to_use_agent,
2c152180 887 (int (*) (struct target_ops *, int))
d1feda86
YQ
888 tcomplain);
889 de_fault (to_can_use_agent,
fe38f897 890 (int (*) (struct target_ops *))
d1feda86 891 return_zero);
ced63ec0 892 de_fault (to_augmented_libraries_svr4_read,
5436ff03 893 (int (*) (struct target_ops *))
ced63ec0 894 return_zero);
32231432
PA
895 de_fault (to_execution_direction, default_execution_direction);
896
c906108c 897#undef de_fault
c906108c 898
7998dfc3
AC
899 /* Finally, position the target-stack beneath the squashed
900 "current_target". That way code looking for a non-inherited
901 target method can quickly and simply find it. */
902 current_target.beneath = target_stack;
b4b61fdb
DJ
903
904 if (targetdebug)
905 setup_target_debug ();
c906108c
SS
906}
907
908/* Push a new target type into the stack of the existing target accessors,
909 possibly superseding some of the existing accessors.
910
c906108c
SS
911 Rather than allow an empty stack, we always have the dummy target at
912 the bottom stratum, so we can call the function vectors without
913 checking them. */
914
b26a4dcb 915void
fba45db2 916push_target (struct target_ops *t)
c906108c 917{
258b763a 918 struct target_ops **cur;
c906108c
SS
919
920 /* Check magic number. If wrong, it probably means someone changed
921 the struct definition, but not all the places that initialize one. */
922 if (t->to_magic != OPS_MAGIC)
923 {
c5aa993b
JM
924 fprintf_unfiltered (gdb_stderr,
925 "Magic number of %s target struct wrong\n",
926 t->to_shortname);
3e43a32a
MS
927 internal_error (__FILE__, __LINE__,
928 _("failed internal consistency check"));
c906108c
SS
929 }
930
258b763a
AC
931 /* Find the proper stratum to install this target in. */
932 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
c906108c 933 {
258b763a 934 if ((int) (t->to_stratum) >= (int) (*cur)->to_stratum)
c906108c
SS
935 break;
936 }
937
258b763a 938 /* If there's already targets at this stratum, remove them. */
88c231eb 939 /* FIXME: cagney/2003-10-15: I think this should be popping all
258b763a
AC
940 targets to CUR, and not just those at this stratum level. */
941 while ((*cur) != NULL && t->to_stratum == (*cur)->to_stratum)
942 {
943 /* There's already something at this stratum level. Close it,
944 and un-hook it from the stack. */
945 struct target_ops *tmp = (*cur);
5d502164 946
258b763a
AC
947 (*cur) = (*cur)->beneath;
948 tmp->beneath = NULL;
460014f5 949 target_close (tmp);
258b763a 950 }
c906108c
SS
951
952 /* We have removed all targets in our stratum, now add the new one. */
258b763a
AC
953 t->beneath = (*cur);
954 (*cur) = t;
c906108c
SS
955
956 update_current_target ();
c906108c
SS
957}
958
2bc416ba 959/* Remove a target_ops vector from the stack, wherever it may be.
c906108c
SS
960 Return how many times it was removed (0 or 1). */
961
962int
fba45db2 963unpush_target (struct target_ops *t)
c906108c 964{
258b763a
AC
965 struct target_ops **cur;
966 struct target_ops *tmp;
c906108c 967
c8d104ad
PA
968 if (t->to_stratum == dummy_stratum)
969 internal_error (__FILE__, __LINE__,
9b20d036 970 _("Attempt to unpush the dummy target"));
c8d104ad 971
c906108c 972 /* Look for the specified target. Note that we assume that a target
c378eb4e 973 can only occur once in the target stack. */
c906108c 974
258b763a
AC
975 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
976 {
977 if ((*cur) == t)
978 break;
979 }
c906108c 980
305436e0
PA
981 /* If we don't find target_ops, quit. Only open targets should be
982 closed. */
258b763a 983 if ((*cur) == NULL)
305436e0 984 return 0;
5269965e 985
c378eb4e 986 /* Unchain the target. */
258b763a
AC
987 tmp = (*cur);
988 (*cur) = (*cur)->beneath;
989 tmp->beneath = NULL;
c906108c
SS
990
991 update_current_target ();
c906108c 992
305436e0
PA
993 /* Finally close the target. Note we do this after unchaining, so
994 any target method calls from within the target_close
995 implementation don't end up in T anymore. */
460014f5 996 target_close (t);
305436e0 997
c906108c
SS
998 return 1;
999}
1000
aa76d38d 1001void
460014f5 1002pop_all_targets_above (enum strata above_stratum)
aa76d38d 1003{
87ab71f0 1004 while ((int) (current_target.to_stratum) > (int) above_stratum)
aa76d38d 1005 {
aa76d38d
PA
1006 if (!unpush_target (target_stack))
1007 {
1008 fprintf_unfiltered (gdb_stderr,
1009 "pop_all_targets couldn't find target %s\n",
b52323fa 1010 target_stack->to_shortname);
aa76d38d
PA
1011 internal_error (__FILE__, __LINE__,
1012 _("failed internal consistency check"));
1013 break;
1014 }
1015 }
1016}
1017
87ab71f0 1018void
460014f5 1019pop_all_targets (void)
87ab71f0 1020{
460014f5 1021 pop_all_targets_above (dummy_stratum);
87ab71f0
PA
1022}
1023
c0edd9ed
JK
1024/* Return 1 if T is now pushed in the target stack. Return 0 otherwise. */
1025
1026int
1027target_is_pushed (struct target_ops *t)
1028{
1029 struct target_ops **cur;
1030
1031 /* Check magic number. If wrong, it probably means someone changed
1032 the struct definition, but not all the places that initialize one. */
1033 if (t->to_magic != OPS_MAGIC)
1034 {
1035 fprintf_unfiltered (gdb_stderr,
1036 "Magic number of %s target struct wrong\n",
1037 t->to_shortname);
3e43a32a
MS
1038 internal_error (__FILE__, __LINE__,
1039 _("failed internal consistency check"));
c0edd9ed
JK
1040 }
1041
1042 for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
1043 if (*cur == t)
1044 return 1;
1045
1046 return 0;
1047}
1048
72f5cf0e 1049/* Using the objfile specified in OBJFILE, find the address for the
9e35dae4
DJ
1050 current thread's thread-local storage with offset OFFSET. */
1051CORE_ADDR
1052target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
1053{
1054 volatile CORE_ADDR addr = 0;
117de6a9
PA
1055 struct target_ops *target;
1056
1057 for (target = current_target.beneath;
1058 target != NULL;
1059 target = target->beneath)
1060 {
1061 if (target->to_get_thread_local_address != NULL)
1062 break;
1063 }
9e35dae4 1064
117de6a9 1065 if (target != NULL
f5656ead 1066 && gdbarch_fetch_tls_load_module_address_p (target_gdbarch ()))
9e35dae4
DJ
1067 {
1068 ptid_t ptid = inferior_ptid;
1069 volatile struct gdb_exception ex;
1070
1071 TRY_CATCH (ex, RETURN_MASK_ALL)
1072 {
1073 CORE_ADDR lm_addr;
1074
1075 /* Fetch the load module address for this objfile. */
f5656ead 1076 lm_addr = gdbarch_fetch_tls_load_module_address (target_gdbarch (),
9e35dae4
DJ
1077 objfile);
1078 /* If it's 0, throw the appropriate exception. */
1079 if (lm_addr == 0)
1080 throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
1081 _("TLS load module not found"));
1082
3e43a32a
MS
1083 addr = target->to_get_thread_local_address (target, ptid,
1084 lm_addr, offset);
9e35dae4
DJ
1085 }
1086 /* If an error occurred, print TLS related messages here. Otherwise,
1087 throw the error to some higher catcher. */
1088 if (ex.reason < 0)
1089 {
1090 int objfile_is_library = (objfile->flags & OBJF_SHARED);
1091
1092 switch (ex.error)
1093 {
1094 case TLS_NO_LIBRARY_SUPPORT_ERROR:
3e43a32a
MS
1095 error (_("Cannot find thread-local variables "
1096 "in this thread library."));
9e35dae4
DJ
1097 break;
1098 case TLS_LOAD_MODULE_NOT_FOUND_ERROR:
1099 if (objfile_is_library)
1100 error (_("Cannot find shared library `%s' in dynamic"
4262abfb 1101 " linker's load module list"), objfile_name (objfile));
9e35dae4
DJ
1102 else
1103 error (_("Cannot find executable file `%s' in dynamic"
4262abfb 1104 " linker's load module list"), objfile_name (objfile));
9e35dae4
DJ
1105 break;
1106 case TLS_NOT_ALLOCATED_YET_ERROR:
1107 if (objfile_is_library)
1108 error (_("The inferior has not yet allocated storage for"
1109 " thread-local variables in\n"
1110 "the shared library `%s'\n"
1111 "for %s"),
4262abfb 1112 objfile_name (objfile), target_pid_to_str (ptid));
9e35dae4
DJ
1113 else
1114 error (_("The inferior has not yet allocated storage for"
1115 " thread-local variables in\n"
1116 "the executable `%s'\n"
1117 "for %s"),
4262abfb 1118 objfile_name (objfile), target_pid_to_str (ptid));
9e35dae4
DJ
1119 break;
1120 case TLS_GENERIC_ERROR:
1121 if (objfile_is_library)
1122 error (_("Cannot find thread-local storage for %s, "
1123 "shared library %s:\n%s"),
1124 target_pid_to_str (ptid),
4262abfb 1125 objfile_name (objfile), ex.message);
9e35dae4
DJ
1126 else
1127 error (_("Cannot find thread-local storage for %s, "
1128 "executable file %s:\n%s"),
1129 target_pid_to_str (ptid),
4262abfb 1130 objfile_name (objfile), ex.message);
9e35dae4
DJ
1131 break;
1132 default:
1133 throw_exception (ex);
1134 break;
1135 }
1136 }
1137 }
1138 /* It wouldn't be wrong here to try a gdbarch method, too; finding
1139 TLS is an ABI-specific thing. But we don't do that yet. */
1140 else
1141 error (_("Cannot find thread-local variables on this target"));
1142
1143 return addr;
1144}
1145
6be7b56e 1146const char *
9b409511 1147target_xfer_status_to_string (enum target_xfer_status err)
6be7b56e
PA
1148{
1149#define CASE(X) case X: return #X
1150 switch (err)
1151 {
1152 CASE(TARGET_XFER_E_IO);
1153 CASE(TARGET_XFER_E_UNAVAILABLE);
1154 default:
1155 return "<unknown>";
1156 }
1157#undef CASE
1158};
1159
1160
c906108c
SS
1161#undef MIN
1162#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
1163
1164/* target_read_string -- read a null terminated string, up to LEN bytes,
1165 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
1166 Set *STRING to a pointer to malloc'd memory containing the data; the caller
1167 is responsible for freeing it. Return the number of bytes successfully
1168 read. */
1169
1170int
fba45db2 1171target_read_string (CORE_ADDR memaddr, char **string, int len, int *errnop)
c906108c 1172{
c2e8b827 1173 int tlen, offset, i;
1b0ba102 1174 gdb_byte buf[4];
c906108c
SS
1175 int errcode = 0;
1176 char *buffer;
1177 int buffer_allocated;
1178 char *bufptr;
1179 unsigned int nbytes_read = 0;
1180
6217bf3e
MS
1181 gdb_assert (string);
1182
c906108c
SS
1183 /* Small for testing. */
1184 buffer_allocated = 4;
1185 buffer = xmalloc (buffer_allocated);
1186 bufptr = buffer;
1187
c906108c
SS
1188 while (len > 0)
1189 {
1190 tlen = MIN (len, 4 - (memaddr & 3));
1191 offset = memaddr & 3;
1192
1b0ba102 1193 errcode = target_read_memory (memaddr & ~3, buf, sizeof buf);
c906108c
SS
1194 if (errcode != 0)
1195 {
1196 /* The transfer request might have crossed the boundary to an
c378eb4e 1197 unallocated region of memory. Retry the transfer, requesting
c906108c
SS
1198 a single byte. */
1199 tlen = 1;
1200 offset = 0;
b8eb5af0 1201 errcode = target_read_memory (memaddr, buf, 1);
c906108c
SS
1202 if (errcode != 0)
1203 goto done;
1204 }
1205
1206 if (bufptr - buffer + tlen > buffer_allocated)
1207 {
1208 unsigned int bytes;
5d502164 1209
c906108c
SS
1210 bytes = bufptr - buffer;
1211 buffer_allocated *= 2;
1212 buffer = xrealloc (buffer, buffer_allocated);
1213 bufptr = buffer + bytes;
1214 }
1215
1216 for (i = 0; i < tlen; i++)
1217 {
1218 *bufptr++ = buf[i + offset];
1219 if (buf[i + offset] == '\000')
1220 {
1221 nbytes_read += i + 1;
1222 goto done;
1223 }
1224 }
1225
1226 memaddr += tlen;
1227 len -= tlen;
1228 nbytes_read += tlen;
1229 }
c5aa993b 1230done:
6217bf3e 1231 *string = buffer;
c906108c
SS
1232 if (errnop != NULL)
1233 *errnop = errcode;
c906108c
SS
1234 return nbytes_read;
1235}
1236
07b82ea5
PA
1237struct target_section_table *
1238target_get_section_table (struct target_ops *target)
1239{
1240 struct target_ops *t;
1241
1242 if (targetdebug)
1243 fprintf_unfiltered (gdb_stdlog, "target_get_section_table ()\n");
1244
1245 for (t = target; t != NULL; t = t->beneath)
1246 if (t->to_get_section_table != NULL)
1247 return (*t->to_get_section_table) (t);
1248
1249 return NULL;
1250}
1251
8db32d44 1252/* Find a section containing ADDR. */
07b82ea5 1253
0542c86d 1254struct target_section *
8db32d44
AC
1255target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
1256{
07b82ea5 1257 struct target_section_table *table = target_get_section_table (target);
0542c86d 1258 struct target_section *secp;
07b82ea5
PA
1259
1260 if (table == NULL)
1261 return NULL;
1262
1263 for (secp = table->sections; secp < table->sections_end; secp++)
8db32d44
AC
1264 {
1265 if (addr >= secp->addr && addr < secp->endaddr)
1266 return secp;
1267 }
1268 return NULL;
1269}
1270
e6e4e701
PA
1271/* Read memory from the live target, even if currently inspecting a
1272 traceframe. The return is the same as that of target_read. */
1273
9b409511 1274static enum target_xfer_status
e6e4e701 1275target_read_live_memory (enum target_object object,
9b409511
YQ
1276 ULONGEST memaddr, gdb_byte *myaddr, ULONGEST len,
1277 ULONGEST *xfered_len)
e6e4e701 1278{
9b409511 1279 enum target_xfer_status ret;
e6e4e701
PA
1280 struct cleanup *cleanup;
1281
1282 /* Switch momentarily out of tfind mode so to access live memory.
1283 Note that this must not clear global state, such as the frame
1284 cache, which must still remain valid for the previous traceframe.
1285 We may be _building_ the frame cache at this point. */
1286 cleanup = make_cleanup_restore_traceframe_number ();
1287 set_traceframe_number (-1);
1288
9b409511
YQ
1289 ret = target_xfer_partial (current_target.beneath, object, NULL,
1290 myaddr, NULL, memaddr, len, xfered_len);
e6e4e701
PA
1291
1292 do_cleanups (cleanup);
1293 return ret;
1294}
1295
1296/* Using the set of read-only target sections of OPS, read live
1297 read-only memory. Note that the actual reads start from the
5657161f
PA
1298 top-most target again.
1299
1300 For interface/parameters/return description see target.h,
1301 to_xfer_partial. */
e6e4e701 1302
9b409511 1303static enum target_xfer_status
e6e4e701
PA
1304memory_xfer_live_readonly_partial (struct target_ops *ops,
1305 enum target_object object,
1306 gdb_byte *readbuf, ULONGEST memaddr,
9b409511 1307 ULONGEST len, ULONGEST *xfered_len)
e6e4e701
PA
1308{
1309 struct target_section *secp;
1310 struct target_section_table *table;
1311
1312 secp = target_section_by_addr (ops, memaddr);
1313 if (secp != NULL
2b2848e2
DE
1314 && (bfd_get_section_flags (secp->the_bfd_section->owner,
1315 secp->the_bfd_section)
e6e4e701
PA
1316 & SEC_READONLY))
1317 {
1318 struct target_section *p;
1319 ULONGEST memend = memaddr + len;
1320
1321 table = target_get_section_table (ops);
1322
1323 for (p = table->sections; p < table->sections_end; p++)
1324 {
1325 if (memaddr >= p->addr)
1326 {
1327 if (memend <= p->endaddr)
1328 {
1329 /* Entire transfer is within this section. */
1330 return target_read_live_memory (object, memaddr,
9b409511 1331 readbuf, len, xfered_len);
e6e4e701
PA
1332 }
1333 else if (memaddr >= p->endaddr)
1334 {
1335 /* This section ends before the transfer starts. */
1336 continue;
1337 }
1338 else
1339 {
1340 /* This section overlaps the transfer. Just do half. */
1341 len = p->endaddr - memaddr;
1342 return target_read_live_memory (object, memaddr,
9b409511 1343 readbuf, len, xfered_len);
e6e4e701
PA
1344 }
1345 }
1346 }
1347 }
1348
9b409511 1349 return TARGET_XFER_EOF;
e6e4e701
PA
1350}
1351
9f713294
YQ
1352/* Read memory from more than one valid target. A core file, for
1353 instance, could have some of memory but delegate other bits to
1354 the target below it. So, we must manually try all targets. */
1355
9b409511 1356static enum target_xfer_status
17fde6d0 1357raw_memory_xfer_partial (struct target_ops *ops, gdb_byte *readbuf,
9b409511
YQ
1358 const gdb_byte *writebuf, ULONGEST memaddr, LONGEST len,
1359 ULONGEST *xfered_len)
9f713294 1360{
9b409511 1361 enum target_xfer_status res;
9f713294
YQ
1362
1363 do
1364 {
1365 res = ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL,
9b409511
YQ
1366 readbuf, writebuf, memaddr, len,
1367 xfered_len);
1368 if (res == TARGET_XFER_OK)
9f713294
YQ
1369 break;
1370
633785ff
MM
1371 /* Stop if the target reports that the memory is not available. */
1372 if (res == TARGET_XFER_E_UNAVAILABLE)
1373 break;
1374
9f713294
YQ
1375 /* We want to continue past core files to executables, but not
1376 past a running target's memory. */
1377 if (ops->to_has_all_memory (ops))
1378 break;
1379
1380 ops = ops->beneath;
1381 }
1382 while (ops != NULL);
1383
1384 return res;
1385}
1386
7f79c47e
DE
1387/* Perform a partial memory transfer.
1388 For docs see target.h, to_xfer_partial. */
cf7a04e8 1389
9b409511 1390static enum target_xfer_status
f0ba3972 1391memory_xfer_partial_1 (struct target_ops *ops, enum target_object object,
17fde6d0 1392 gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST memaddr,
9b409511 1393 ULONGEST len, ULONGEST *xfered_len)
0779438d 1394{
9b409511 1395 enum target_xfer_status res;
cf7a04e8
DJ
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,
9b409511 1414 memaddr, len, xfered_len,
07b82ea5
PA
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
2b2848e2
DE
1429 && (bfd_get_section_flags (secp->the_bfd_section->owner,
1430 secp->the_bfd_section)
cf7a04e8 1431 & SEC_READONLY))
07b82ea5
PA
1432 {
1433 table = target_get_section_table (ops);
1434 return section_table_xfer_memory_partial (readbuf, writebuf,
9b409511 1435 memaddr, len, xfered_len,
07b82ea5
PA
1436 table->sections,
1437 table->sections_end,
1438 NULL);
1439 }
98646950
UW
1440 }
1441
e6e4e701
PA
1442 /* If reading unavailable memory in the context of traceframes, and
1443 this address falls within a read-only section, fallback to
1444 reading from live memory. */
1445 if (readbuf != NULL && get_traceframe_number () != -1)
1446 {
1447 VEC(mem_range_s) *available;
1448
1449 /* If we fail to get the set of available memory, then the
1450 target does not support querying traceframe info, and so we
1451 attempt reading from the traceframe anyway (assuming the
1452 target implements the old QTro packet then). */
1453 if (traceframe_available_memory (&available, memaddr, len))
1454 {
1455 struct cleanup *old_chain;
1456
1457 old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
1458
1459 if (VEC_empty (mem_range_s, available)
1460 || VEC_index (mem_range_s, available, 0)->start != memaddr)
1461 {
1462 /* Don't read into the traceframe's available
1463 memory. */
1464 if (!VEC_empty (mem_range_s, available))
1465 {
1466 LONGEST oldlen = len;
1467
1468 len = VEC_index (mem_range_s, available, 0)->start - memaddr;
1469 gdb_assert (len <= oldlen);
1470 }
1471
1472 do_cleanups (old_chain);
1473
1474 /* This goes through the topmost target again. */
1475 res = memory_xfer_live_readonly_partial (ops, object,
9b409511
YQ
1476 readbuf, memaddr,
1477 len, xfered_len);
1478 if (res == TARGET_XFER_OK)
1479 return TARGET_XFER_OK;
1480 else
1481 {
1482 /* No use trying further, we know some memory starting
1483 at MEMADDR isn't available. */
1484 *xfered_len = len;
1485 return TARGET_XFER_E_UNAVAILABLE;
1486 }
e6e4e701
PA
1487 }
1488
1489 /* Don't try to read more than how much is available, in
1490 case the target implements the deprecated QTro packet to
1491 cater for older GDBs (the target's knowledge of read-only
1492 sections may be outdated by now). */
1493 len = VEC_index (mem_range_s, available, 0)->length;
1494
1495 do_cleanups (old_chain);
1496 }
1497 }
1498
cf7a04e8
DJ
1499 /* Try GDB's internal data cache. */
1500 region = lookup_mem_region (memaddr);
4b5752d0
VP
1501 /* region->hi == 0 means there's no upper bound. */
1502 if (memaddr + len < region->hi || region->hi == 0)
cf7a04e8
DJ
1503 reg_len = len;
1504 else
1505 reg_len = region->hi - memaddr;
1506
1507 switch (region->attrib.mode)
1508 {
1509 case MEM_RO:
1510 if (writebuf != NULL)
2ed4b548 1511 return TARGET_XFER_E_IO;
cf7a04e8
DJ
1512 break;
1513
1514 case MEM_WO:
1515 if (readbuf != NULL)
2ed4b548 1516 return TARGET_XFER_E_IO;
cf7a04e8 1517 break;
a76d924d
DJ
1518
1519 case MEM_FLASH:
1520 /* We only support writing to flash during "load" for now. */
1521 if (writebuf != NULL)
1522 error (_("Writing to flash memory forbidden in this context"));
1523 break;
4b5752d0
VP
1524
1525 case MEM_NONE:
2ed4b548 1526 return TARGET_XFER_E_IO;
cf7a04e8
DJ
1527 }
1528
6c95b8df
PA
1529 if (!ptid_equal (inferior_ptid, null_ptid))
1530 inf = find_inferior_pid (ptid_get_pid (inferior_ptid));
1531 else
1532 inf = NULL;
4e5d721f
DE
1533
1534 if (inf != NULL
2f4d8875
PA
1535 /* The dcache reads whole cache lines; that doesn't play well
1536 with reading from a trace buffer, because reading outside of
1537 the collected memory range fails. */
1538 && get_traceframe_number () == -1
4e5d721f 1539 && (region->attrib.cache
29453a14
YQ
1540 || (stack_cache_enabled_p () && object == TARGET_OBJECT_STACK_MEMORY)
1541 || (code_cache_enabled_p () && object == TARGET_OBJECT_CODE_MEMORY)))
cf7a04e8 1542 {
2a2f9fe4 1543 DCACHE *dcache = target_dcache_get_or_init ();
9b409511 1544 int l;
2a2f9fe4 1545
cf7a04e8 1546 if (readbuf != NULL)
9b409511 1547 l = dcache_xfer_memory (ops, dcache, memaddr, readbuf, reg_len, 0);
cf7a04e8
DJ
1548 else
1549 /* FIXME drow/2006-08-09: If we're going to preserve const
1550 correctness dcache_xfer_memory should take readbuf and
1551 writebuf. */
9b409511 1552 l = dcache_xfer_memory (ops, dcache, memaddr, (void *) writebuf,
cf7a04e8 1553 reg_len, 1);
9b409511
YQ
1554 if (l <= 0)
1555 return TARGET_XFER_E_IO;
cf7a04e8 1556 else
9b409511
YQ
1557 {
1558 *xfered_len = (ULONGEST) l;
1559 return TARGET_XFER_OK;
1560 }
cf7a04e8
DJ
1561 }
1562
1563 /* If none of those methods found the memory we wanted, fall back
1564 to a target partial transfer. Normally a single call to
1565 to_xfer_partial is enough; if it doesn't recognize an object
1566 it will call the to_xfer_partial of the next target down.
1567 But for memory this won't do. Memory is the only target
9b409511
YQ
1568 object which can be read from more than one valid target.
1569 A core file, for instance, could have some of memory but
1570 delegate other bits to the target below it. So, we must
1571 manually try all targets. */
1572
1573 res = raw_memory_xfer_partial (ops, readbuf, writebuf, memaddr, reg_len,
1574 xfered_len);
cf7a04e8 1575
41dcd03f
DE
1576 /* Make sure the cache gets updated no matter what - if we are writing
1577 to the stack. Even if this write is not tagged as such, we still need
1578 to update the cache. */
1579
9b409511 1580 if (res == TARGET_XFER_OK
41dcd03f
DE
1581 && inf != NULL
1582 && writebuf != NULL
f2de9785 1583 && target_dcache_init_p ()
41dcd03f 1584 && !region->attrib.cache
29453a14
YQ
1585 && ((stack_cache_enabled_p () && object != TARGET_OBJECT_STACK_MEMORY)
1586 || (code_cache_enabled_p () && object != TARGET_OBJECT_CODE_MEMORY)))
41dcd03f 1587 {
f2de9785 1588 DCACHE *dcache = target_dcache_get ();
2a2f9fe4 1589
9b409511 1590 dcache_update (dcache, memaddr, (void *) writebuf, reg_len);
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
9b409511 1601static enum target_xfer_status
f0ba3972 1602memory_xfer_partial (struct target_ops *ops, enum target_object object,
9b409511
YQ
1603 gdb_byte *readbuf, const gdb_byte *writebuf,
1604 ULONGEST memaddr, ULONGEST len, ULONGEST *xfered_len)
f0ba3972 1605{
9b409511 1606 enum target_xfer_status res;
f0ba3972
PA
1607
1608 /* Zero length requests are ok and require no work. */
1609 if (len == 0)
9b409511 1610 return TARGET_XFER_EOF;
f0ba3972
PA
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 {
9b409511
YQ
1617 res = memory_xfer_partial_1 (ops, object, readbuf, NULL, memaddr, len,
1618 xfered_len);
f0ba3972 1619
9b409511 1620 if (res == TARGET_XFER_OK && !show_memory_breakpoints)
f0ba3972
PA
1621 breakpoint_xfer_memory (readbuf, NULL, NULL, memaddr, res);
1622 }
1623 else
1624 {
1625 void *buf;
1626 struct cleanup *old_chain;
1627
67c059c2
AB
1628 /* A large write request is likely to be partially satisfied
1629 by memory_xfer_partial_1. We will continually malloc
1630 and free a copy of the entire write request for breakpoint
1631 shadow handling even though we only end up writing a small
1632 subset of it. Cap writes to 4KB to mitigate this. */
1633 len = min (4096, len);
1634
f0ba3972
PA
1635 buf = xmalloc (len);
1636 old_chain = make_cleanup (xfree, buf);
1637 memcpy (buf, writebuf, len);
1638
1639 breakpoint_xfer_memory (NULL, buf, writebuf, memaddr, len);
9b409511
YQ
1640 res = memory_xfer_partial_1 (ops, object, NULL, buf, memaddr, len,
1641 xfered_len);
f0ba3972
PA
1642
1643 do_cleanups (old_chain);
1644 }
1645
1646 return res;
1647}
1648
8defab1a
DJ
1649static void
1650restore_show_memory_breakpoints (void *arg)
1651{
1652 show_memory_breakpoints = (uintptr_t) arg;
1653}
1654
1655struct cleanup *
1656make_show_memory_breakpoints_cleanup (int show)
1657{
1658 int current = show_memory_breakpoints;
8defab1a 1659
5d502164 1660 show_memory_breakpoints = show;
8defab1a
DJ
1661 return make_cleanup (restore_show_memory_breakpoints,
1662 (void *) (uintptr_t) current);
1663}
1664
7f79c47e
DE
1665/* For docs see target.h, to_xfer_partial. */
1666
9b409511 1667enum target_xfer_status
27394598
AC
1668target_xfer_partial (struct target_ops *ops,
1669 enum target_object object, const char *annex,
4ac248ca 1670 gdb_byte *readbuf, const gdb_byte *writebuf,
9b409511
YQ
1671 ULONGEST offset, ULONGEST len,
1672 ULONGEST *xfered_len)
27394598 1673{
9b409511 1674 enum target_xfer_status retval;
27394598
AC
1675
1676 gdb_assert (ops->to_xfer_partial != NULL);
cf7a04e8 1677
ce6d0892
YQ
1678 /* Transfer is done when LEN is zero. */
1679 if (len == 0)
9b409511 1680 return TARGET_XFER_EOF;
ce6d0892 1681
d914c394
SS
1682 if (writebuf && !may_write_memory)
1683 error (_("Writing to memory is not allowed (addr %s, len %s)"),
1684 core_addr_to_string_nz (offset), plongest (len));
1685
9b409511
YQ
1686 *xfered_len = 0;
1687
cf7a04e8
DJ
1688 /* If this is a memory transfer, let the memory-specific code
1689 have a look at it instead. Memory transfers are more
1690 complicated. */
29453a14
YQ
1691 if (object == TARGET_OBJECT_MEMORY || object == TARGET_OBJECT_STACK_MEMORY
1692 || object == TARGET_OBJECT_CODE_MEMORY)
4e5d721f 1693 retval = memory_xfer_partial (ops, object, readbuf,
9b409511 1694 writebuf, offset, len, xfered_len);
9f713294 1695 else if (object == TARGET_OBJECT_RAW_MEMORY)
cf7a04e8 1696 {
9f713294 1697 /* Request the normal memory object from other layers. */
9b409511
YQ
1698 retval = raw_memory_xfer_partial (ops, readbuf, writebuf, offset, len,
1699 xfered_len);
cf7a04e8 1700 }
9f713294
YQ
1701 else
1702 retval = ops->to_xfer_partial (ops, object, annex, readbuf,
9b409511 1703 writebuf, offset, len, xfered_len);
cf7a04e8 1704
27394598
AC
1705 if (targetdebug)
1706 {
1707 const unsigned char *myaddr = NULL;
1708
1709 fprintf_unfiltered (gdb_stdlog,
3e43a32a 1710 "%s:target_xfer_partial "
9b409511 1711 "(%d, %s, %s, %s, %s, %s) = %d, %s",
27394598
AC
1712 ops->to_shortname,
1713 (int) object,
1714 (annex ? annex : "(null)"),
53b71562
JB
1715 host_address_to_string (readbuf),
1716 host_address_to_string (writebuf),
0b1553bc 1717 core_addr_to_string_nz (offset),
9b409511
YQ
1718 pulongest (len), retval,
1719 pulongest (*xfered_len));
27394598
AC
1720
1721 if (readbuf)
1722 myaddr = readbuf;
1723 if (writebuf)
1724 myaddr = writebuf;
9b409511 1725 if (retval == TARGET_XFER_OK && myaddr != NULL)
27394598
AC
1726 {
1727 int i;
2bc416ba 1728
27394598 1729 fputs_unfiltered (", bytes =", gdb_stdlog);
9b409511 1730 for (i = 0; i < *xfered_len; i++)
27394598 1731 {
53b71562 1732 if ((((intptr_t) &(myaddr[i])) & 0xf) == 0)
27394598
AC
1733 {
1734 if (targetdebug < 2 && i > 0)
1735 {
1736 fprintf_unfiltered (gdb_stdlog, " ...");
1737 break;
1738 }
1739 fprintf_unfiltered (gdb_stdlog, "\n");
1740 }
2bc416ba 1741
27394598
AC
1742 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
1743 }
1744 }
2bc416ba 1745
27394598
AC
1746 fputc_unfiltered ('\n', gdb_stdlog);
1747 }
9b409511
YQ
1748
1749 /* Check implementations of to_xfer_partial update *XFERED_LEN
1750 properly. Do assertion after printing debug messages, so that we
1751 can find more clues on assertion failure from debugging messages. */
1752 if (retval == TARGET_XFER_OK || retval == TARGET_XFER_E_UNAVAILABLE)
1753 gdb_assert (*xfered_len > 0);
1754
27394598
AC
1755 return retval;
1756}
1757
578d3588
PA
1758/* Read LEN bytes of target memory at address MEMADDR, placing the
1759 results in GDB's memory at MYADDR. Returns either 0 for success or
9b409511 1760 TARGET_XFER_E_IO if any error occurs.
c906108c
SS
1761
1762 If an error occurs, no guarantee is made about the contents of the data at
1763 MYADDR. In particular, the caller should not depend upon partial reads
1764 filling the buffer with good data. There is no way for the caller to know
1765 how much good data might have been transfered anyway. Callers that can
cf7a04e8 1766 deal with partial reads should call target_read (which will retry until
c378eb4e 1767 it makes no progress, and then return how much was transferred). */
c906108c
SS
1768
1769int
1b162304 1770target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
c906108c 1771{
c35b1492
PA
1772 /* Dispatch to the topmost target, not the flattened current_target.
1773 Memory accesses check target->to_has_(all_)memory, and the
1774 flattened target doesn't inherit those. */
1775 if (target_read (current_target.beneath, TARGET_OBJECT_MEMORY, NULL,
cf7a04e8
DJ
1776 myaddr, memaddr, len) == len)
1777 return 0;
0779438d 1778 else
578d3588 1779 return TARGET_XFER_E_IO;
c906108c
SS
1780}
1781
aee4bf85
PA
1782/* Like target_read_memory, but specify explicitly that this is a read
1783 from the target's raw memory. That is, this read bypasses the
1784 dcache, breakpoint shadowing, etc. */
1785
1786int
1787target_read_raw_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
1788{
1789 /* See comment in target_read_memory about why the request starts at
1790 current_target.beneath. */
1791 if (target_read (current_target.beneath, TARGET_OBJECT_RAW_MEMORY, NULL,
1792 myaddr, memaddr, len) == len)
1793 return 0;
1794 else
1795 return TARGET_XFER_E_IO;
1796}
1797
4e5d721f
DE
1798/* Like target_read_memory, but specify explicitly that this is a read from
1799 the target's stack. This may trigger different cache behavior. */
1800
1801int
45aa4659 1802target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
4e5d721f 1803{
aee4bf85
PA
1804 /* See comment in target_read_memory about why the request starts at
1805 current_target.beneath. */
4e5d721f
DE
1806 if (target_read (current_target.beneath, TARGET_OBJECT_STACK_MEMORY, NULL,
1807 myaddr, memaddr, len) == len)
1808 return 0;
1809 else
578d3588 1810 return TARGET_XFER_E_IO;
4e5d721f
DE
1811}
1812
29453a14
YQ
1813/* Like target_read_memory, but specify explicitly that this is a read from
1814 the target's code. This may trigger different cache behavior. */
1815
1816int
1817target_read_code (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
1818{
aee4bf85
PA
1819 /* See comment in target_read_memory about why the request starts at
1820 current_target.beneath. */
29453a14
YQ
1821 if (target_read (current_target.beneath, TARGET_OBJECT_CODE_MEMORY, NULL,
1822 myaddr, memaddr, len) == len)
1823 return 0;
1824 else
1825 return TARGET_XFER_E_IO;
1826}
1827
7f79c47e 1828/* Write LEN bytes from MYADDR to target memory at address MEMADDR.
9b409511 1829 Returns either 0 for success or TARGET_XFER_E_IO if any
578d3588
PA
1830 error occurs. If an error occurs, no guarantee is made about how
1831 much data got written. Callers that can deal with partial writes
1832 should call target_write. */
7f79c47e 1833
c906108c 1834int
45aa4659 1835target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
c906108c 1836{
aee4bf85
PA
1837 /* See comment in target_read_memory about why the request starts at
1838 current_target.beneath. */
c35b1492 1839 if (target_write (current_target.beneath, TARGET_OBJECT_MEMORY, NULL,
cf7a04e8
DJ
1840 myaddr, memaddr, len) == len)
1841 return 0;
0779438d 1842 else
578d3588 1843 return TARGET_XFER_E_IO;
c906108c 1844}
c5aa993b 1845
f0ba3972 1846/* Write LEN bytes from MYADDR to target raw memory at address
9b409511 1847 MEMADDR. Returns either 0 for success or TARGET_XFER_E_IO
578d3588
PA
1848 if any error occurs. If an error occurs, no guarantee is made
1849 about how much data got written. Callers that can deal with
1850 partial writes should call target_write. */
f0ba3972
PA
1851
1852int
45aa4659 1853target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
f0ba3972 1854{
aee4bf85
PA
1855 /* See comment in target_read_memory about why the request starts at
1856 current_target.beneath. */
f0ba3972
PA
1857 if (target_write (current_target.beneath, TARGET_OBJECT_RAW_MEMORY, NULL,
1858 myaddr, memaddr, len) == len)
1859 return 0;
1860 else
578d3588 1861 return TARGET_XFER_E_IO;
f0ba3972
PA
1862}
1863
fd79ecee
DJ
1864/* Fetch the target's memory map. */
1865
1866VEC(mem_region_s) *
1867target_memory_map (void)
1868{
1869 VEC(mem_region_s) *result;
1870 struct mem_region *last_one, *this_one;
1871 int ix;
1872 struct target_ops *t;
1873
1874 if (targetdebug)
1875 fprintf_unfiltered (gdb_stdlog, "target_memory_map ()\n");
1876
1877 for (t = current_target.beneath; t != NULL; t = t->beneath)
1878 if (t->to_memory_map != NULL)
1879 break;
1880
1881 if (t == NULL)
1882 return NULL;
1883
1884 result = t->to_memory_map (t);
1885 if (result == NULL)
1886 return NULL;
1887
1888 qsort (VEC_address (mem_region_s, result),
1889 VEC_length (mem_region_s, result),
1890 sizeof (struct mem_region), mem_region_cmp);
1891
1892 /* Check that regions do not overlap. Simultaneously assign
1893 a numbering for the "mem" commands to use to refer to
1894 each region. */
1895 last_one = NULL;
1896 for (ix = 0; VEC_iterate (mem_region_s, result, ix, this_one); ix++)
1897 {
1898 this_one->number = ix;
1899
1900 if (last_one && last_one->hi > this_one->lo)
1901 {
1902 warning (_("Overlapping regions in memory map: ignoring"));
1903 VEC_free (mem_region_s, result);
1904 return NULL;
1905 }
1906 last_one = this_one;
1907 }
1908
1909 return result;
1910}
1911
a76d924d
DJ
1912void
1913target_flash_erase (ULONGEST address, LONGEST length)
1914{
1915 struct target_ops *t;
1916
1917 for (t = current_target.beneath; t != NULL; t = t->beneath)
1918 if (t->to_flash_erase != NULL)
5d502164
MS
1919 {
1920 if (targetdebug)
1921 fprintf_unfiltered (gdb_stdlog, "target_flash_erase (%s, %s)\n",
1922 hex_string (address), phex (length, 0));
1923 t->to_flash_erase (t, address, length);
1924 return;
1925 }
a76d924d
DJ
1926
1927 tcomplain ();
1928}
1929
1930void
1931target_flash_done (void)
1932{
1933 struct target_ops *t;
1934
1935 for (t = current_target.beneath; t != NULL; t = t->beneath)
1936 if (t->to_flash_done != NULL)
5d502164
MS
1937 {
1938 if (targetdebug)
1939 fprintf_unfiltered (gdb_stdlog, "target_flash_done\n");
1940 t->to_flash_done (t);
1941 return;
1942 }
a76d924d
DJ
1943
1944 tcomplain ();
1945}
1946
920d2a44
AC
1947static void
1948show_trust_readonly (struct ui_file *file, int from_tty,
1949 struct cmd_list_element *c, const char *value)
1950{
3e43a32a
MS
1951 fprintf_filtered (file,
1952 _("Mode for reading from readonly sections is %s.\n"),
920d2a44
AC
1953 value);
1954}
3a11626d 1955
1e3ff5ad
AC
1956/* More generic transfers. */
1957
9b409511 1958static enum target_xfer_status
8aa91c1e 1959default_xfer_partial (struct target_ops *ops, enum target_object object,
2bc416ba 1960 const char *annex, gdb_byte *readbuf,
9b409511
YQ
1961 const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
1962 ULONGEST *xfered_len)
0088c768
AC
1963{
1964 if (object == TARGET_OBJECT_MEMORY
c8e73a31
AC
1965 && ops->deprecated_xfer_memory != NULL)
1966 /* If available, fall back to the target's
1967 "deprecated_xfer_memory" method. */
0088c768 1968 {
4b8a223f 1969 int xfered = -1;
5d502164 1970
0088c768 1971 errno = 0;
4b8a223f
AC
1972 if (writebuf != NULL)
1973 {
1974 void *buffer = xmalloc (len);
1975 struct cleanup *cleanup = make_cleanup (xfree, buffer);
5d502164 1976
4b8a223f 1977 memcpy (buffer, writebuf, len);
c8e73a31
AC
1978 xfered = ops->deprecated_xfer_memory (offset, buffer, len,
1979 1/*write*/, NULL, ops);
4b8a223f
AC
1980 do_cleanups (cleanup);
1981 }
1982 if (readbuf != NULL)
244e85c8
MS
1983 xfered = ops->deprecated_xfer_memory (offset, readbuf, len,
1984 0/*read*/, NULL, ops);
0088c768 1985 if (xfered > 0)
9b409511
YQ
1986 {
1987 *xfered_len = (ULONGEST) xfered;
1988 return TARGET_XFER_E_IO;
1989 }
0088c768 1990 else if (xfered == 0 && errno == 0)
c8e73a31
AC
1991 /* "deprecated_xfer_memory" uses 0, cross checked against
1992 ERRNO as one indication of an error. */
9b409511 1993 return TARGET_XFER_EOF;
0088c768 1994 else
9b409511 1995 return TARGET_XFER_E_IO;
0088c768 1996 }
0088c768 1997 else
6b84065d
TT
1998 {
1999 gdb_assert (ops->beneath != NULL);
2000 return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
2001 readbuf, writebuf, offset, len,
2002 xfered_len);
2003 }
0088c768
AC
2004}
2005
7f79c47e 2006/* Target vector read/write partial wrapper functions. */
0088c768 2007
9b409511 2008static enum target_xfer_status
1e3ff5ad
AC
2009target_read_partial (struct target_ops *ops,
2010 enum target_object object,
1b0ba102 2011 const char *annex, gdb_byte *buf,
9b409511
YQ
2012 ULONGEST offset, ULONGEST len,
2013 ULONGEST *xfered_len)
1e3ff5ad 2014{
9b409511
YQ
2015 return target_xfer_partial (ops, object, annex, buf, NULL, offset, len,
2016 xfered_len);
1e3ff5ad
AC
2017}
2018
8a55ffb0 2019static enum target_xfer_status
1e3ff5ad
AC
2020target_write_partial (struct target_ops *ops,
2021 enum target_object object,
1b0ba102 2022 const char *annex, const gdb_byte *buf,
9b409511 2023 ULONGEST offset, LONGEST len, ULONGEST *xfered_len)
1e3ff5ad 2024{
9b409511
YQ
2025 return target_xfer_partial (ops, object, annex, NULL, buf, offset, len,
2026 xfered_len);
1e3ff5ad
AC
2027}
2028
2029/* Wrappers to perform the full transfer. */
7f79c47e
DE
2030
2031/* For docs on target_read see target.h. */
2032
1e3ff5ad
AC
2033LONGEST
2034target_read (struct target_ops *ops,
2035 enum target_object object,
1b0ba102 2036 const char *annex, gdb_byte *buf,
1e3ff5ad
AC
2037 ULONGEST offset, LONGEST len)
2038{
2039 LONGEST xfered = 0;
5d502164 2040
1e3ff5ad
AC
2041 while (xfered < len)
2042 {
9b409511
YQ
2043 ULONGEST xfered_len;
2044 enum target_xfer_status status;
2045
2046 status = target_read_partial (ops, object, annex,
2047 (gdb_byte *) buf + xfered,
2048 offset + xfered, len - xfered,
2049 &xfered_len);
5d502164 2050
1e3ff5ad 2051 /* Call an observer, notifying them of the xfer progress? */
9b409511 2052 if (status == TARGET_XFER_EOF)
13547ab6 2053 return xfered;
9b409511
YQ
2054 else if (status == TARGET_XFER_OK)
2055 {
2056 xfered += xfered_len;
2057 QUIT;
2058 }
2059 else
0088c768 2060 return -1;
9b409511 2061
1e3ff5ad
AC
2062 }
2063 return len;
2064}
2065
f1a507a1
JB
2066/* Assuming that the entire [begin, end) range of memory cannot be
2067 read, try to read whatever subrange is possible to read.
2068
2069 The function returns, in RESULT, either zero or one memory block.
2070 If there's a readable subrange at the beginning, it is completely
2071 read and returned. Any further readable subrange will not be read.
2072 Otherwise, if there's a readable subrange at the end, it will be
2073 completely read and returned. Any readable subranges before it
2074 (obviously, not starting at the beginning), will be ignored. In
2075 other cases -- either no readable subrange, or readable subrange(s)
2076 that is neither at the beginning, or end, nothing is returned.
2077
2078 The purpose of this function is to handle a read across a boundary
2079 of accessible memory in a case when memory map is not available.
2080 The above restrictions are fine for this case, but will give
2081 incorrect results if the memory is 'patchy'. However, supporting
2082 'patchy' memory would require trying to read every single byte,
2083 and it seems unacceptable solution. Explicit memory map is
2084 recommended for this case -- and target_read_memory_robust will
2085 take care of reading multiple ranges then. */
8dedea02
VP
2086
2087static void
3e43a32a
MS
2088read_whatever_is_readable (struct target_ops *ops,
2089 ULONGEST begin, ULONGEST end,
8dedea02 2090 VEC(memory_read_result_s) **result)
d5086790 2091{
f1a507a1 2092 gdb_byte *buf = xmalloc (end - begin);
8dedea02
VP
2093 ULONGEST current_begin = begin;
2094 ULONGEST current_end = end;
2095 int forward;
2096 memory_read_result_s r;
9b409511 2097 ULONGEST xfered_len;
8dedea02
VP
2098
2099 /* If we previously failed to read 1 byte, nothing can be done here. */
2100 if (end - begin <= 1)
13b3fd9b
MS
2101 {
2102 xfree (buf);
2103 return;
2104 }
8dedea02
VP
2105
2106 /* Check that either first or the last byte is readable, and give up
c378eb4e 2107 if not. This heuristic is meant to permit reading accessible memory
8dedea02
VP
2108 at the boundary of accessible region. */
2109 if (target_read_partial (ops, TARGET_OBJECT_MEMORY, NULL,
9b409511 2110 buf, begin, 1, &xfered_len) == TARGET_XFER_OK)
8dedea02
VP
2111 {
2112 forward = 1;
2113 ++current_begin;
2114 }
2115 else if (target_read_partial (ops, TARGET_OBJECT_MEMORY, NULL,
9b409511
YQ
2116 buf + (end-begin) - 1, end - 1, 1,
2117 &xfered_len) == TARGET_XFER_OK)
8dedea02
VP
2118 {
2119 forward = 0;
2120 --current_end;
2121 }
2122 else
2123 {
13b3fd9b 2124 xfree (buf);
8dedea02
VP
2125 return;
2126 }
2127
2128 /* Loop invariant is that the [current_begin, current_end) was previously
2129 found to be not readable as a whole.
2130
2131 Note loop condition -- if the range has 1 byte, we can't divide the range
2132 so there's no point trying further. */
2133 while (current_end - current_begin > 1)
2134 {
2135 ULONGEST first_half_begin, first_half_end;
2136 ULONGEST second_half_begin, second_half_end;
2137 LONGEST xfer;
8dedea02 2138 ULONGEST middle = current_begin + (current_end - current_begin)/2;
f1a507a1 2139
8dedea02
VP
2140 if (forward)
2141 {
2142 first_half_begin = current_begin;
2143 first_half_end = middle;
2144 second_half_begin = middle;
2145 second_half_end = current_end;
2146 }
2147 else
2148 {
2149 first_half_begin = middle;
2150 first_half_end = current_end;
2151 second_half_begin = current_begin;
2152 second_half_end = middle;
2153 }
2154
2155 xfer = target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2156 buf + (first_half_begin - begin),
2157 first_half_begin,
2158 first_half_end - first_half_begin);
2159
2160 if (xfer == first_half_end - first_half_begin)
2161 {
c378eb4e 2162 /* This half reads up fine. So, the error must be in the
3e43a32a 2163 other half. */
8dedea02
VP
2164 current_begin = second_half_begin;
2165 current_end = second_half_end;
2166 }
2167 else
2168 {
c378eb4e
MS
2169 /* This half is not readable. Because we've tried one byte, we
2170 know some part of this half if actually redable. Go to the next
8dedea02
VP
2171 iteration to divide again and try to read.
2172
2173 We don't handle the other half, because this function only tries
2174 to read a single readable subrange. */
2175 current_begin = first_half_begin;
2176 current_end = first_half_end;
2177 }
2178 }
2179
2180 if (forward)
2181 {
2182 /* The [begin, current_begin) range has been read. */
2183 r.begin = begin;
2184 r.end = current_begin;
2185 r.data = buf;
2186 }
2187 else
2188 {
2189 /* The [current_end, end) range has been read. */
2190 LONGEST rlen = end - current_end;
f1a507a1 2191
8dedea02
VP
2192 r.data = xmalloc (rlen);
2193 memcpy (r.data, buf + current_end - begin, rlen);
2194 r.begin = current_end;
2195 r.end = end;
2196 xfree (buf);
2197 }
2198 VEC_safe_push(memory_read_result_s, (*result), &r);
2199}
2200
2201void
2202free_memory_read_result_vector (void *x)
2203{
2204 VEC(memory_read_result_s) *v = x;
2205 memory_read_result_s *current;
2206 int ix;
2207
2208 for (ix = 0; VEC_iterate (memory_read_result_s, v, ix, current); ++ix)
2209 {
2210 xfree (current->data);
2211 }
2212 VEC_free (memory_read_result_s, v);
2213}
2214
2215VEC(memory_read_result_s) *
2216read_memory_robust (struct target_ops *ops, ULONGEST offset, LONGEST len)
2217{
2218 VEC(memory_read_result_s) *result = 0;
2219
2220 LONGEST xfered = 0;
d5086790
VP
2221 while (xfered < len)
2222 {
8dedea02
VP
2223 struct mem_region *region = lookup_mem_region (offset + xfered);
2224 LONGEST rlen;
5d502164 2225
8dedea02
VP
2226 /* If there is no explicit region, a fake one should be created. */
2227 gdb_assert (region);
2228
2229 if (region->hi == 0)
2230 rlen = len - xfered;
2231 else
2232 rlen = region->hi - offset;
2233
2234 if (region->attrib.mode == MEM_NONE || region->attrib.mode == MEM_WO)
d5086790 2235 {
c378eb4e 2236 /* Cannot read this region. Note that we can end up here only
8dedea02
VP
2237 if the region is explicitly marked inaccessible, or
2238 'inaccessible-by-default' is in effect. */
2239 xfered += rlen;
2240 }
2241 else
2242 {
2243 LONGEST to_read = min (len - xfered, rlen);
2244 gdb_byte *buffer = (gdb_byte *)xmalloc (to_read);
2245
2246 LONGEST xfer = target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2247 (gdb_byte *) buffer,
2248 offset + xfered, to_read);
2249 /* Call an observer, notifying them of the xfer progress? */
d5086790 2250 if (xfer <= 0)
d5086790 2251 {
c378eb4e 2252 /* Got an error reading full chunk. See if maybe we can read
8dedea02
VP
2253 some subrange. */
2254 xfree (buffer);
3e43a32a
MS
2255 read_whatever_is_readable (ops, offset + xfered,
2256 offset + xfered + to_read, &result);
8dedea02 2257 xfered += to_read;
d5086790 2258 }
8dedea02
VP
2259 else
2260 {
2261 struct memory_read_result r;
2262 r.data = buffer;
2263 r.begin = offset + xfered;
2264 r.end = r.begin + xfer;
2265 VEC_safe_push (memory_read_result_s, result, &r);
2266 xfered += xfer;
2267 }
2268 QUIT;
d5086790 2269 }
d5086790 2270 }
8dedea02 2271 return result;
d5086790
VP
2272}
2273
8dedea02 2274
cf7a04e8
DJ
2275/* An alternative to target_write with progress callbacks. */
2276
1e3ff5ad 2277LONGEST
cf7a04e8
DJ
2278target_write_with_progress (struct target_ops *ops,
2279 enum target_object object,
2280 const char *annex, const gdb_byte *buf,
2281 ULONGEST offset, LONGEST len,
2282 void (*progress) (ULONGEST, void *), void *baton)
1e3ff5ad
AC
2283{
2284 LONGEST xfered = 0;
a76d924d
DJ
2285
2286 /* Give the progress callback a chance to set up. */
2287 if (progress)
2288 (*progress) (0, baton);
2289
1e3ff5ad
AC
2290 while (xfered < len)
2291 {
9b409511
YQ
2292 ULONGEST xfered_len;
2293 enum target_xfer_status status;
2294
2295 status = target_write_partial (ops, object, annex,
2296 (gdb_byte *) buf + xfered,
2297 offset + xfered, len - xfered,
2298 &xfered_len);
cf7a04e8 2299
9b409511 2300 if (status == TARGET_XFER_EOF)
13547ab6 2301 return xfered;
9b409511 2302 if (TARGET_XFER_STATUS_ERROR_P (status))
0088c768 2303 return -1;
cf7a04e8 2304
9b409511 2305 gdb_assert (status == TARGET_XFER_OK);
cf7a04e8 2306 if (progress)
9b409511 2307 (*progress) (xfered_len, baton);
cf7a04e8 2308
9b409511 2309 xfered += xfered_len;
1e3ff5ad
AC
2310 QUIT;
2311 }
2312 return len;
2313}
2314
7f79c47e
DE
2315/* For docs on target_write see target.h. */
2316
cf7a04e8
DJ
2317LONGEST
2318target_write (struct target_ops *ops,
2319 enum target_object object,
2320 const char *annex, const gdb_byte *buf,
2321 ULONGEST offset, LONGEST len)
2322{
2323 return target_write_with_progress (ops, object, annex, buf, offset, len,
2324 NULL, NULL);
2325}
2326
159f81f3
DJ
2327/* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
2328 the size of the transferred data. PADDING additional bytes are
2329 available in *BUF_P. This is a helper function for
2330 target_read_alloc; see the declaration of that function for more
2331 information. */
13547ab6 2332
159f81f3
DJ
2333static LONGEST
2334target_read_alloc_1 (struct target_ops *ops, enum target_object object,
2335 const char *annex, gdb_byte **buf_p, int padding)
13547ab6
DJ
2336{
2337 size_t buf_alloc, buf_pos;
2338 gdb_byte *buf;
13547ab6
DJ
2339
2340 /* This function does not have a length parameter; it reads the
2341 entire OBJECT). Also, it doesn't support objects fetched partly
2342 from one target and partly from another (in a different stratum,
2343 e.g. a core file and an executable). Both reasons make it
2344 unsuitable for reading memory. */
2345 gdb_assert (object != TARGET_OBJECT_MEMORY);
2346
2347 /* Start by reading up to 4K at a time. The target will throttle
2348 this number down if necessary. */
2349 buf_alloc = 4096;
2350 buf = xmalloc (buf_alloc);
2351 buf_pos = 0;
2352 while (1)
2353 {
9b409511
YQ
2354 ULONGEST xfered_len;
2355 enum target_xfer_status status;
2356
2357 status = target_read_partial (ops, object, annex, &buf[buf_pos],
2358 buf_pos, buf_alloc - buf_pos - padding,
2359 &xfered_len);
2360
2361 if (status == TARGET_XFER_EOF)
13547ab6
DJ
2362 {
2363 /* Read all there was. */
2364 if (buf_pos == 0)
2365 xfree (buf);
2366 else
2367 *buf_p = buf;
2368 return buf_pos;
2369 }
9b409511
YQ
2370 else if (status != TARGET_XFER_OK)
2371 {
2372 /* An error occurred. */
2373 xfree (buf);
2374 return TARGET_XFER_E_IO;
2375 }
13547ab6 2376
9b409511 2377 buf_pos += xfered_len;
13547ab6
DJ
2378
2379 /* If the buffer is filling up, expand it. */
2380 if (buf_alloc < buf_pos * 2)
2381 {
2382 buf_alloc *= 2;
2383 buf = xrealloc (buf, buf_alloc);
2384 }
2385
2386 QUIT;
2387 }
2388}
2389
159f81f3
DJ
2390/* Read OBJECT/ANNEX using OPS. Store the result in *BUF_P and return
2391 the size of the transferred data. See the declaration in "target.h"
2392 function for more information about the return value. */
2393
2394LONGEST
2395target_read_alloc (struct target_ops *ops, enum target_object object,
2396 const char *annex, gdb_byte **buf_p)
2397{
2398 return target_read_alloc_1 (ops, object, annex, buf_p, 0);
2399}
2400
2401/* Read OBJECT/ANNEX using OPS. The result is NUL-terminated and
2402 returned as a string, allocated using xmalloc. If an error occurs
2403 or the transfer is unsupported, NULL is returned. Empty objects
2404 are returned as allocated but empty strings. A warning is issued
2405 if the result contains any embedded NUL bytes. */
2406
2407char *
2408target_read_stralloc (struct target_ops *ops, enum target_object object,
2409 const char *annex)
2410{
39086a0e
PA
2411 gdb_byte *buffer;
2412 char *bufstr;
7313baad 2413 LONGEST i, transferred;
159f81f3 2414
39086a0e
PA
2415 transferred = target_read_alloc_1 (ops, object, annex, &buffer, 1);
2416 bufstr = (char *) buffer;
159f81f3
DJ
2417
2418 if (transferred < 0)
2419 return NULL;
2420
2421 if (transferred == 0)
2422 return xstrdup ("");
2423
39086a0e 2424 bufstr[transferred] = 0;
7313baad
UW
2425
2426 /* Check for embedded NUL bytes; but allow trailing NULs. */
39086a0e
PA
2427 for (i = strlen (bufstr); i < transferred; i++)
2428 if (bufstr[i] != 0)
7313baad
UW
2429 {
2430 warning (_("target object %d, annex %s, "
2431 "contained unexpected null characters"),
2432 (int) object, annex ? annex : "(none)");
2433 break;
2434 }
159f81f3 2435
39086a0e 2436 return bufstr;
159f81f3
DJ
2437}
2438
b6591e8b
AC
2439/* Memory transfer methods. */
2440
2441void
1b0ba102 2442get_target_memory (struct target_ops *ops, CORE_ADDR addr, gdb_byte *buf,
b6591e8b
AC
2443 LONGEST len)
2444{
07b82ea5
PA
2445 /* This method is used to read from an alternate, non-current
2446 target. This read must bypass the overlay support (as symbols
2447 don't match this target), and GDB's internal cache (wrong cache
2448 for this target). */
2449 if (target_read (ops, TARGET_OBJECT_RAW_MEMORY, NULL, buf, addr, len)
b6591e8b 2450 != len)
578d3588 2451 memory_error (TARGET_XFER_E_IO, addr);
b6591e8b
AC
2452}
2453
2454ULONGEST
5d502164
MS
2455get_target_memory_unsigned (struct target_ops *ops, CORE_ADDR addr,
2456 int len, enum bfd_endian byte_order)
b6591e8b 2457{
f6519ebc 2458 gdb_byte buf[sizeof (ULONGEST)];
b6591e8b
AC
2459
2460 gdb_assert (len <= sizeof (buf));
2461 get_target_memory (ops, addr, buf, len);
e17a4113 2462 return extract_unsigned_integer (buf, len, byte_order);
b6591e8b
AC
2463}
2464
3db08215
MM
2465/* See target.h. */
2466
d914c394
SS
2467int
2468target_insert_breakpoint (struct gdbarch *gdbarch,
2469 struct bp_target_info *bp_tgt)
2470{
2471 if (!may_insert_breakpoints)
2472 {
2473 warning (_("May not insert breakpoints"));
2474 return 1;
2475 }
2476
6b84065d
TT
2477 return current_target.to_insert_breakpoint (&current_target,
2478 gdbarch, bp_tgt);
d914c394
SS
2479}
2480
3db08215
MM
2481/* See target.h. */
2482
d914c394 2483int
6b84065d
TT
2484target_remove_breakpoint (struct gdbarch *gdbarch,
2485 struct bp_target_info *bp_tgt)
d914c394
SS
2486{
2487 /* This is kind of a weird case to handle, but the permission might
2488 have been changed after breakpoints were inserted - in which case
2489 we should just take the user literally and assume that any
2490 breakpoints should be left in place. */
2491 if (!may_insert_breakpoints)
2492 {
2493 warning (_("May not remove breakpoints"));
2494 return 1;
2495 }
2496
6b84065d
TT
2497 return current_target.to_remove_breakpoint (&current_target,
2498 gdbarch, bp_tgt);
d914c394
SS
2499}
2500
c906108c 2501static void
fba45db2 2502target_info (char *args, int from_tty)
c906108c
SS
2503{
2504 struct target_ops *t;
c906108c 2505 int has_all_mem = 0;
c5aa993b 2506
c906108c 2507 if (symfile_objfile != NULL)
4262abfb
JK
2508 printf_unfiltered (_("Symbols from \"%s\".\n"),
2509 objfile_name (symfile_objfile));
c906108c 2510
258b763a 2511 for (t = target_stack; t != NULL; t = t->beneath)
c906108c 2512 {
c35b1492 2513 if (!(*t->to_has_memory) (t))
c906108c
SS
2514 continue;
2515
c5aa993b 2516 if ((int) (t->to_stratum) <= (int) dummy_stratum)
c906108c
SS
2517 continue;
2518 if (has_all_mem)
3e43a32a
MS
2519 printf_unfiltered (_("\tWhile running this, "
2520 "GDB does not access memory from...\n"));
c5aa993b
JM
2521 printf_unfiltered ("%s:\n", t->to_longname);
2522 (t->to_files_info) (t);
c35b1492 2523 has_all_mem = (*t->to_has_all_memory) (t);
c906108c
SS
2524 }
2525}
2526
fd79ecee
DJ
2527/* This function is called before any new inferior is created, e.g.
2528 by running a program, attaching, or connecting to a target.
2529 It cleans up any state from previous invocations which might
2530 change between runs. This is a subset of what target_preopen
2531 resets (things which might change between targets). */
2532
2533void
2534target_pre_inferior (int from_tty)
2535{
c378eb4e 2536 /* Clear out solib state. Otherwise the solib state of the previous
b9db4ced 2537 inferior might have survived and is entirely wrong for the new
c378eb4e 2538 target. This has been observed on GNU/Linux using glibc 2.3. How
b9db4ced
UW
2539 to reproduce:
2540
2541 bash$ ./foo&
2542 [1] 4711
2543 bash$ ./foo&
2544 [1] 4712
2545 bash$ gdb ./foo
2546 [...]
2547 (gdb) attach 4711
2548 (gdb) detach
2549 (gdb) attach 4712
2550 Cannot access memory at address 0xdeadbeef
2551 */
b9db4ced 2552
50c71eaf
PA
2553 /* In some OSs, the shared library list is the same/global/shared
2554 across inferiors. If code is shared between processes, so are
2555 memory regions and features. */
f5656ead 2556 if (!gdbarch_has_global_solist (target_gdbarch ()))
50c71eaf
PA
2557 {
2558 no_shared_libraries (NULL, from_tty);
2559
2560 invalidate_target_mem_regions ();
424163ea 2561
50c71eaf
PA
2562 target_clear_description ();
2563 }
8ffcbaaf
YQ
2564
2565 agent_capability_invalidate ();
fd79ecee
DJ
2566}
2567
b8fa0bfa
PA
2568/* Callback for iterate_over_inferiors. Gets rid of the given
2569 inferior. */
2570
2571static int
2572dispose_inferior (struct inferior *inf, void *args)
2573{
2574 struct thread_info *thread;
2575
2576 thread = any_thread_of_process (inf->pid);
2577 if (thread)
2578 {
2579 switch_to_thread (thread->ptid);
2580
2581 /* Core inferiors actually should be detached, not killed. */
2582 if (target_has_execution)
2583 target_kill ();
2584 else
2585 target_detach (NULL, 0);
2586 }
2587
2588 return 0;
2589}
2590
c906108c
SS
2591/* This is to be called by the open routine before it does
2592 anything. */
2593
2594void
fba45db2 2595target_preopen (int from_tty)
c906108c 2596{
c5aa993b 2597 dont_repeat ();
c906108c 2598
b8fa0bfa 2599 if (have_inferiors ())
c5aa993b 2600 {
adf40b2e 2601 if (!from_tty
b8fa0bfa
PA
2602 || !have_live_inferiors ()
2603 || query (_("A program is being debugged already. Kill it? ")))
2604 iterate_over_inferiors (dispose_inferior, NULL);
c906108c 2605 else
8a3fe4f8 2606 error (_("Program not killed."));
c906108c
SS
2607 }
2608
2609 /* Calling target_kill may remove the target from the stack. But if
2610 it doesn't (which seems like a win for UDI), remove it now. */
87ab71f0
PA
2611 /* Leave the exec target, though. The user may be switching from a
2612 live process to a core of the same program. */
460014f5 2613 pop_all_targets_above (file_stratum);
fd79ecee
DJ
2614
2615 target_pre_inferior (from_tty);
c906108c
SS
2616}
2617
2618/* Detach a target after doing deferred register stores. */
2619
2620void
52554a0e 2621target_detach (const char *args, int from_tty)
c906108c 2622{
136d6dae
VP
2623 struct target_ops* t;
2624
f5656ead 2625 if (gdbarch_has_global_breakpoints (target_gdbarch ()))
50c71eaf
PA
2626 /* Don't remove global breakpoints here. They're removed on
2627 disconnection from the target. */
2628 ;
2629 else
2630 /* If we're in breakpoints-always-inserted mode, have to remove
2631 them before detaching. */
dfd4cc63 2632 remove_breakpoints_pid (ptid_get_pid (inferior_ptid));
74960c60 2633
24291992
PA
2634 prepare_for_detach ();
2635
09da0d0a
TT
2636 current_target.to_detach (&current_target, args, from_tty);
2637 if (targetdebug)
2638 fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n",
2639 args, from_tty);
c906108c
SS
2640}
2641
6ad8ae5c
DJ
2642void
2643target_disconnect (char *args, int from_tty)
2644{
597320e7
DJ
2645 struct target_ops *t;
2646
50c71eaf
PA
2647 /* If we're in breakpoints-always-inserted mode or if breakpoints
2648 are global across processes, we have to remove them before
2649 disconnecting. */
74960c60
VP
2650 remove_breakpoints ();
2651
597320e7
DJ
2652 for (t = current_target.beneath; t != NULL; t = t->beneath)
2653 if (t->to_disconnect != NULL)
2654 {
2655 if (targetdebug)
2656 fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
2657 args, from_tty);
2658 t->to_disconnect (t, args, from_tty);
2659 return;
2660 }
2661
2662 tcomplain ();
6ad8ae5c
DJ
2663}
2664
117de6a9 2665ptid_t
47608cb1 2666target_wait (ptid_t ptid, struct target_waitstatus *status, int options)
117de6a9
PA
2667{
2668 struct target_ops *t;
6b84065d
TT
2669 ptid_t retval = (current_target.to_wait) (&current_target, ptid,
2670 status, options);
117de6a9 2671
6b84065d 2672 if (targetdebug)
117de6a9 2673 {
6b84065d
TT
2674 char *status_string;
2675 char *options_string;
117de6a9 2676
6b84065d
TT
2677 status_string = target_waitstatus_to_string (status);
2678 options_string = target_options_to_string (options);
2679 fprintf_unfiltered (gdb_stdlog,
2680 "target_wait (%d, status, options={%s})"
2681 " = %d, %s\n",
2682 ptid_get_pid (ptid), options_string,
2683 ptid_get_pid (retval), status_string);
2684 xfree (status_string);
2685 xfree (options_string);
117de6a9
PA
2686 }
2687
6b84065d 2688 return retval;
117de6a9
PA
2689}
2690
2691char *
2692target_pid_to_str (ptid_t ptid)
2693{
2694 struct target_ops *t;
2695
2696 for (t = current_target.beneath; t != NULL; t = t->beneath)
2697 {
2698 if (t->to_pid_to_str != NULL)
2699 return (*t->to_pid_to_str) (t, ptid);
2700 }
2701
2702 return normal_pid_to_str (ptid);
2703}
2704
4694da01
TT
2705char *
2706target_thread_name (struct thread_info *info)
2707{
2708 struct target_ops *t;
2709
2710 for (t = current_target.beneath; t != NULL; t = t->beneath)
2711 {
2712 if (t->to_thread_name != NULL)
503a628d 2713 return (*t->to_thread_name) (t, info);
4694da01
TT
2714 }
2715
2716 return NULL;
2717}
2718
e1ac3328 2719void
2ea28649 2720target_resume (ptid_t ptid, int step, enum gdb_signal signal)
e1ac3328 2721{
28439f5e
PA
2722 struct target_ops *t;
2723
4e5d721f 2724 target_dcache_invalidate ();
28439f5e 2725
6b84065d
TT
2726 current_target.to_resume (&current_target, ptid, step, signal);
2727 if (targetdebug)
2728 fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n",
2729 ptid_get_pid (ptid),
2730 step ? "step" : "continue",
2731 gdb_signal_to_name (signal));
28439f5e 2732
6b84065d
TT
2733 registers_changed_ptid (ptid);
2734 set_executing (ptid, 1);
2735 set_running (ptid, 1);
2736 clear_inline_frame_state (ptid);
e1ac3328 2737}
2455069d
UW
2738
2739void
2740target_pass_signals (int numsigs, unsigned char *pass_signals)
2741{
2742 struct target_ops *t;
2743
2744 for (t = current_target.beneath; t != NULL; t = t->beneath)
2745 {
2746 if (t->to_pass_signals != NULL)
2747 {
2748 if (targetdebug)
2749 {
2750 int i;
2751
2752 fprintf_unfiltered (gdb_stdlog, "target_pass_signals (%d, {",
2753 numsigs);
2754
2755 for (i = 0; i < numsigs; i++)
2756 if (pass_signals[i])
2757 fprintf_unfiltered (gdb_stdlog, " %s",
2ea28649 2758 gdb_signal_to_name (i));
2455069d
UW
2759
2760 fprintf_unfiltered (gdb_stdlog, " })\n");
2761 }
2762
94bedb42 2763 (*t->to_pass_signals) (t, numsigs, pass_signals);
2455069d
UW
2764 return;
2765 }
2766 }
2767}
2768
9b224c5e
PA
2769void
2770target_program_signals (int numsigs, unsigned char *program_signals)
2771{
2772 struct target_ops *t;
2773
2774 for (t = current_target.beneath; t != NULL; t = t->beneath)
2775 {
2776 if (t->to_program_signals != NULL)
2777 {
2778 if (targetdebug)
2779 {
2780 int i;
2781
2782 fprintf_unfiltered (gdb_stdlog, "target_program_signals (%d, {",
2783 numsigs);
2784
2785 for (i = 0; i < numsigs; i++)
2786 if (program_signals[i])
2787 fprintf_unfiltered (gdb_stdlog, " %s",
2ea28649 2788 gdb_signal_to_name (i));
9b224c5e
PA
2789
2790 fprintf_unfiltered (gdb_stdlog, " })\n");
2791 }
2792
daf5e9b6 2793 (*t->to_program_signals) (t, numsigs, program_signals);
9b224c5e
PA
2794 return;
2795 }
2796 }
2797}
2798
ee057212
DJ
2799/* Look through the list of possible targets for a target that can
2800 follow forks. */
2801
2802int
07107ca6 2803target_follow_fork (int follow_child, int detach_fork)
ee057212
DJ
2804{
2805 struct target_ops *t;
2806
2807 for (t = current_target.beneath; t != NULL; t = t->beneath)
2808 {
2809 if (t->to_follow_fork != NULL)
2810 {
07107ca6 2811 int retval = t->to_follow_fork (t, follow_child, detach_fork);
5d502164 2812
ee057212 2813 if (targetdebug)
07107ca6
LM
2814 fprintf_unfiltered (gdb_stdlog,
2815 "target_follow_fork (%d, %d) = %d\n",
2816 follow_child, detach_fork, retval);
ee057212
DJ
2817 return retval;
2818 }
2819 }
2820
2821 /* Some target returned a fork event, but did not know how to follow it. */
2822 internal_error (__FILE__, __LINE__,
9b20d036 2823 _("could not find a target to follow fork"));
ee057212
DJ
2824}
2825
136d6dae
VP
2826void
2827target_mourn_inferior (void)
2828{
2829 struct target_ops *t;
5d502164 2830
136d6dae
VP
2831 for (t = current_target.beneath; t != NULL; t = t->beneath)
2832 {
2833 if (t->to_mourn_inferior != NULL)
2834 {
2835 t->to_mourn_inferior (t);
947b8855
PA
2836 if (targetdebug)
2837 fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
efbd6e75
JB
2838
2839 /* We no longer need to keep handles on any of the object files.
2840 Make sure to release them to avoid unnecessarily locking any
2841 of them while we're not actually debugging. */
2842 bfd_cache_close_all ();
2843
136d6dae
VP
2844 return;
2845 }
2846 }
2847
2848 internal_error (__FILE__, __LINE__,
9b20d036 2849 _("could not find a target to follow mourn inferior"));
136d6dae
VP
2850}
2851
424163ea
DJ
2852/* Look for a target which can describe architectural features, starting
2853 from TARGET. If we find one, return its description. */
2854
2855const struct target_desc *
2856target_read_description (struct target_ops *target)
2857{
2858 struct target_ops *t;
2859
2860 for (t = target; t != NULL; t = t->beneath)
2861 if (t->to_read_description != NULL)
2862 {
2863 const struct target_desc *tdesc;
2864
2865 tdesc = t->to_read_description (t);
2866 if (tdesc)
2867 return tdesc;
2868 }
2869
2870 return NULL;
2871}
2872
08388c79
DE
2873/* The default implementation of to_search_memory.
2874 This implements a basic search of memory, reading target memory and
2875 performing the search here (as opposed to performing the search in on the
2876 target side with, for example, gdbserver). */
2877
2878int
2879simple_search_memory (struct target_ops *ops,
2880 CORE_ADDR start_addr, ULONGEST search_space_len,
2881 const gdb_byte *pattern, ULONGEST pattern_len,
2882 CORE_ADDR *found_addrp)
2883{
2884 /* NOTE: also defined in find.c testcase. */
2885#define SEARCH_CHUNK_SIZE 16000
2886 const unsigned chunk_size = SEARCH_CHUNK_SIZE;
2887 /* Buffer to hold memory contents for searching. */
2888 gdb_byte *search_buf;
2889 unsigned search_buf_size;
2890 struct cleanup *old_cleanups;
2891
2892 search_buf_size = chunk_size + pattern_len - 1;
2893
2894 /* No point in trying to allocate a buffer larger than the search space. */
2895 if (search_space_len < search_buf_size)
2896 search_buf_size = search_space_len;
2897
2898 search_buf = malloc (search_buf_size);
2899 if (search_buf == NULL)
5e1471f5 2900 error (_("Unable to allocate memory to perform the search."));
08388c79
DE
2901 old_cleanups = make_cleanup (free_current_contents, &search_buf);
2902
2903 /* Prime the search buffer. */
2904
2905 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2906 search_buf, start_addr, search_buf_size) != search_buf_size)
2907 {
b3dc46ff
AB
2908 warning (_("Unable to access %s bytes of target "
2909 "memory at %s, halting search."),
2910 pulongest (search_buf_size), hex_string (start_addr));
08388c79
DE
2911 do_cleanups (old_cleanups);
2912 return -1;
2913 }
2914
2915 /* Perform the search.
2916
2917 The loop is kept simple by allocating [N + pattern-length - 1] bytes.
2918 When we've scanned N bytes we copy the trailing bytes to the start and
2919 read in another N bytes. */
2920
2921 while (search_space_len >= pattern_len)
2922 {
2923 gdb_byte *found_ptr;
2924 unsigned nr_search_bytes = min (search_space_len, search_buf_size);
2925
2926 found_ptr = memmem (search_buf, nr_search_bytes,
2927 pattern, pattern_len);
2928
2929 if (found_ptr != NULL)
2930 {
2931 CORE_ADDR found_addr = start_addr + (found_ptr - search_buf);
5d502164 2932
08388c79
DE
2933 *found_addrp = found_addr;
2934 do_cleanups (old_cleanups);
2935 return 1;
2936 }
2937
2938 /* Not found in this chunk, skip to next chunk. */
2939
2940 /* Don't let search_space_len wrap here, it's unsigned. */
2941 if (search_space_len >= chunk_size)
2942 search_space_len -= chunk_size;
2943 else
2944 search_space_len = 0;
2945
2946 if (search_space_len >= pattern_len)
2947 {
2948 unsigned keep_len = search_buf_size - chunk_size;
8a35fb51 2949 CORE_ADDR read_addr = start_addr + chunk_size + keep_len;
08388c79
DE
2950 int nr_to_read;
2951
2952 /* Copy the trailing part of the previous iteration to the front
2953 of the buffer for the next iteration. */
2954 gdb_assert (keep_len == pattern_len - 1);
2955 memcpy (search_buf, search_buf + chunk_size, keep_len);
2956
2957 nr_to_read = min (search_space_len - keep_len, chunk_size);
2958
2959 if (target_read (ops, TARGET_OBJECT_MEMORY, NULL,
2960 search_buf + keep_len, read_addr,
2961 nr_to_read) != nr_to_read)
2962 {
b3dc46ff 2963 warning (_("Unable to access %s bytes of target "
9b20d036 2964 "memory at %s, halting search."),
b3dc46ff 2965 plongest (nr_to_read),
08388c79
DE
2966 hex_string (read_addr));
2967 do_cleanups (old_cleanups);
2968 return -1;
2969 }
2970
2971 start_addr += chunk_size;
2972 }
2973 }
2974
2975 /* Not found. */
2976
2977 do_cleanups (old_cleanups);
2978 return 0;
2979}
2980
2981/* Search SEARCH_SPACE_LEN bytes beginning at START_ADDR for the
2982 sequence of bytes in PATTERN with length PATTERN_LEN.
2983
2984 The result is 1 if found, 0 if not found, and -1 if there was an error
2985 requiring halting of the search (e.g. memory read error).
2986 If the pattern is found the address is recorded in FOUND_ADDRP. */
2987
2988int
2989target_search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
2990 const gdb_byte *pattern, ULONGEST pattern_len,
2991 CORE_ADDR *found_addrp)
2992{
2993 struct target_ops *t;
2994 int found;
2995
2996 /* We don't use INHERIT to set current_target.to_search_memory,
2997 so we have to scan the target stack and handle targetdebug
2998 ourselves. */
2999
3000 if (targetdebug)
3001 fprintf_unfiltered (gdb_stdlog, "target_search_memory (%s, ...)\n",
3002 hex_string (start_addr));
3003
3004 for (t = current_target.beneath; t != NULL; t = t->beneath)
3005 if (t->to_search_memory != NULL)
3006 break;
3007
3008 if (t != NULL)
3009 {
3010 found = t->to_search_memory (t, start_addr, search_space_len,
3011 pattern, pattern_len, found_addrp);
3012 }
3013 else
3014 {
3015 /* If a special version of to_search_memory isn't available, use the
3016 simple version. */
c35b1492 3017 found = simple_search_memory (current_target.beneath,
08388c79
DE
3018 start_addr, search_space_len,
3019 pattern, pattern_len, found_addrp);
3020 }
3021
3022 if (targetdebug)
3023 fprintf_unfiltered (gdb_stdlog, " = %d\n", found);
3024
3025 return found;
3026}
3027
8edfe269
DJ
3028/* Look through the currently pushed targets. If none of them will
3029 be able to restart the currently running process, issue an error
3030 message. */
3031
3032void
3033target_require_runnable (void)
3034{
3035 struct target_ops *t;
3036
3037 for (t = target_stack; t != NULL; t = t->beneath)
3038 {
3039 /* If this target knows how to create a new program, then
3040 assume we will still be able to after killing the current
3041 one. Either killing and mourning will not pop T, or else
3042 find_default_run_target will find it again. */
3043 if (t->to_create_inferior != NULL)
3044 return;
3045
3046 /* Do not worry about thread_stratum targets that can not
3047 create inferiors. Assume they will be pushed again if
3048 necessary, and continue to the process_stratum. */
85e747d2
UW
3049 if (t->to_stratum == thread_stratum
3050 || t->to_stratum == arch_stratum)
8edfe269
DJ
3051 continue;
3052
3e43a32a
MS
3053 error (_("The \"%s\" target does not support \"run\". "
3054 "Try \"help target\" or \"continue\"."),
8edfe269
DJ
3055 t->to_shortname);
3056 }
3057
3058 /* This function is only called if the target is running. In that
3059 case there should have been a process_stratum target and it
c378eb4e 3060 should either know how to create inferiors, or not... */
9b20d036 3061 internal_error (__FILE__, __LINE__, _("No targets found"));
8edfe269
DJ
3062}
3063
c906108c
SS
3064/* Look through the list of possible targets for a target that can
3065 execute a run or attach command without any other data. This is
3066 used to locate the default process stratum.
3067
5f667f2d
PA
3068 If DO_MESG is not NULL, the result is always valid (error() is
3069 called for errors); else, return NULL on error. */
c906108c
SS
3070
3071static struct target_ops *
fba45db2 3072find_default_run_target (char *do_mesg)
c906108c
SS
3073{
3074 struct target_ops **t;
3075 struct target_ops *runable = NULL;
3076 int count;
3077
3078 count = 0;
3079
3080 for (t = target_structs; t < target_structs + target_struct_size;
3081 ++t)
3082 {
c5aa993b 3083 if ((*t)->to_can_run && target_can_run (*t))
c906108c
SS
3084 {
3085 runable = *t;
3086 ++count;
3087 }
3088 }
3089
3090 if (count != 1)
5f667f2d
PA
3091 {
3092 if (do_mesg)
3093 error (_("Don't know how to %s. Try \"help target\"."), do_mesg);
3094 else
3095 return NULL;
3096 }
c906108c
SS
3097
3098 return runable;
3099}
3100
3101void
136d6dae 3102find_default_attach (struct target_ops *ops, char *args, int from_tty)
c906108c
SS
3103{
3104 struct target_ops *t;
3105
c5aa993b 3106 t = find_default_run_target ("attach");
136d6dae 3107 (t->to_attach) (t, args, from_tty);
c906108c
SS
3108 return;
3109}
3110
c906108c 3111void
136d6dae
VP
3112find_default_create_inferior (struct target_ops *ops,
3113 char *exec_file, char *allargs, char **env,
c27cda74 3114 int from_tty)
c906108c
SS
3115{
3116 struct target_ops *t;
3117
c5aa993b 3118 t = find_default_run_target ("run");
136d6dae 3119 (t->to_create_inferior) (t, exec_file, allargs, env, from_tty);
c906108c
SS
3120 return;
3121}
3122
2c0b251b 3123static int
6a109b6b 3124find_default_can_async_p (struct target_ops *ignore)
b84876c2
PA
3125{
3126 struct target_ops *t;
3127
5f667f2d
PA
3128 /* This may be called before the target is pushed on the stack;
3129 look for the default process stratum. If there's none, gdb isn't
3130 configured with a native debugger, and target remote isn't
3131 connected yet. */
3132 t = find_default_run_target (NULL);
6b84065d 3133 if (t && t->to_can_async_p != delegate_can_async_p)
6a109b6b 3134 return (t->to_can_async_p) (t);
b84876c2
PA
3135 return 0;
3136}
3137
2c0b251b 3138static int
6a109b6b 3139find_default_is_async_p (struct target_ops *ignore)
b84876c2
PA
3140{
3141 struct target_ops *t;
3142
5f667f2d
PA
3143 /* This may be called before the target is pushed on the stack;
3144 look for the default process stratum. If there's none, gdb isn't
3145 configured with a native debugger, and target remote isn't
3146 connected yet. */
3147 t = find_default_run_target (NULL);
6b84065d 3148 if (t && t->to_is_async_p != delegate_is_async_p)
6a109b6b 3149 return (t->to_is_async_p) (t);
b84876c2
PA
3150 return 0;
3151}
3152
2c0b251b 3153static int
2a9a2795 3154find_default_supports_non_stop (struct target_ops *self)
9908b566
VP
3155{
3156 struct target_ops *t;
3157
3158 t = find_default_run_target (NULL);
3159 if (t && t->to_supports_non_stop)
2a9a2795 3160 return (t->to_supports_non_stop) (t);
9908b566
VP
3161 return 0;
3162}
3163
3164int
2c0b251b 3165target_supports_non_stop (void)
9908b566
VP
3166{
3167 struct target_ops *t;
5d502164 3168
9908b566
VP
3169 for (t = &current_target; t != NULL; t = t->beneath)
3170 if (t->to_supports_non_stop)
2a9a2795 3171 return t->to_supports_non_stop (t);
9908b566
VP
3172
3173 return 0;
3174}
3175
145b16a9
UW
3176/* Implement the "info proc" command. */
3177
451b7c33 3178int
145b16a9
UW
3179target_info_proc (char *args, enum info_proc_what what)
3180{
3181 struct target_ops *t;
3182
3183 /* If we're already connected to something that can get us OS
3184 related data, use it. Otherwise, try using the native
3185 target. */
3186 if (current_target.to_stratum >= process_stratum)
3187 t = current_target.beneath;
3188 else
3189 t = find_default_run_target (NULL);
3190
3191 for (; t != NULL; t = t->beneath)
3192 {
3193 if (t->to_info_proc != NULL)
3194 {
3195 t->to_info_proc (t, args, what);
3196
3197 if (targetdebug)
3198 fprintf_unfiltered (gdb_stdlog,
3199 "target_info_proc (\"%s\", %d)\n", args, what);
3200
451b7c33 3201 return 1;
145b16a9
UW
3202 }
3203 }
3204
451b7c33 3205 return 0;
145b16a9
UW
3206}
3207
03583c20 3208static int
2bfc0540 3209find_default_supports_disable_randomization (struct target_ops *self)
03583c20
UW
3210{
3211 struct target_ops *t;
3212
3213 t = find_default_run_target (NULL);
3214 if (t && t->to_supports_disable_randomization)
2bfc0540 3215 return (t->to_supports_disable_randomization) (t);
03583c20
UW
3216 return 0;
3217}
3218
3219int
3220target_supports_disable_randomization (void)
3221{
3222 struct target_ops *t;
3223
3224 for (t = &current_target; t != NULL; t = t->beneath)
3225 if (t->to_supports_disable_randomization)
2bfc0540 3226 return t->to_supports_disable_randomization (t);
03583c20
UW
3227
3228 return 0;
3229}
9908b566 3230
07e059b5
VP
3231char *
3232target_get_osdata (const char *type)
3233{
07e059b5
VP
3234 struct target_ops *t;
3235
739ef7fb
PA
3236 /* If we're already connected to something that can get us OS
3237 related data, use it. Otherwise, try using the native
3238 target. */
3239 if (current_target.to_stratum >= process_stratum)
6d097e65 3240 t = current_target.beneath;
739ef7fb
PA
3241 else
3242 t = find_default_run_target ("get OS data");
07e059b5
VP
3243
3244 if (!t)
3245 return NULL;
3246
6d097e65 3247 return target_read_stralloc (t, TARGET_OBJECT_OSDATA, type);
07e059b5
VP
3248}
3249
6c95b8df
PA
3250/* Determine the current address space of thread PTID. */
3251
3252struct address_space *
3253target_thread_address_space (ptid_t ptid)
3254{
c0694254 3255 struct address_space *aspace;
6c95b8df 3256 struct inferior *inf;
c0694254
PA
3257 struct target_ops *t;
3258
3259 for (t = current_target.beneath; t != NULL; t = t->beneath)
3260 {
3261 if (t->to_thread_address_space != NULL)
3262 {
3263 aspace = t->to_thread_address_space (t, ptid);
3264 gdb_assert (aspace);
6c95b8df 3265
c0694254
PA
3266 if (targetdebug)
3267 fprintf_unfiltered (gdb_stdlog,
3268 "target_thread_address_space (%s) = %d\n",
3269 target_pid_to_str (ptid),
3270 address_space_num (aspace));
3271 return aspace;
3272 }
3273 }
6c95b8df
PA
3274
3275 /* Fall-back to the "main" address space of the inferior. */
3276 inf = find_inferior_pid (ptid_get_pid (ptid));
3277
3278 if (inf == NULL || inf->aspace == NULL)
3e43a32a 3279 internal_error (__FILE__, __LINE__,
9b20d036
MS
3280 _("Can't determine the current "
3281 "address space of thread %s\n"),
6c95b8df
PA
3282 target_pid_to_str (ptid));
3283
3284 return inf->aspace;
3285}
3286
7313baad
UW
3287
3288/* Target file operations. */
3289
3290static struct target_ops *
3291default_fileio_target (void)
3292{
3293 /* If we're already connected to something that can perform
3294 file I/O, use it. Otherwise, try using the native target. */
3295 if (current_target.to_stratum >= process_stratum)
3296 return current_target.beneath;
3297 else
3298 return find_default_run_target ("file I/O");
3299}
3300
3301/* Open FILENAME on the target, using FLAGS and MODE. Return a
3302 target file descriptor, or -1 if an error occurs (and set
3303 *TARGET_ERRNO). */
3304int
3305target_fileio_open (const char *filename, int flags, int mode,
3306 int *target_errno)
3307{
3308 struct target_ops *t;
3309
3310 for (t = default_fileio_target (); t != NULL; t = t->beneath)
3311 {
3312 if (t->to_fileio_open != NULL)
3313 {
cd897586 3314 int fd = t->to_fileio_open (t, filename, flags, mode, target_errno);
7313baad
UW
3315
3316 if (targetdebug)
3317 fprintf_unfiltered (gdb_stdlog,
3318 "target_fileio_open (%s,0x%x,0%o) = %d (%d)\n",
3319 filename, flags, mode,
3320 fd, fd != -1 ? 0 : *target_errno);
3321 return fd;
3322 }
3323 }
3324
3325 *target_errno = FILEIO_ENOSYS;
3326 return -1;
3327}
3328
3329/* Write up to LEN bytes from WRITE_BUF to FD on the target.
3330 Return the number of bytes written, or -1 if an error occurs
3331 (and set *TARGET_ERRNO). */
3332int
3333target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
3334 ULONGEST offset, int *target_errno)
3335{
3336 struct target_ops *t;
3337
3338 for (t = default_fileio_target (); t != NULL; t = t->beneath)
3339 {
3340 if (t->to_fileio_pwrite != NULL)
3341 {
0d866f62 3342 int ret = t->to_fileio_pwrite (t, fd, write_buf, len, offset,
7313baad
UW
3343 target_errno);
3344
3345 if (targetdebug)
3346 fprintf_unfiltered (gdb_stdlog,
a71b5a38 3347 "target_fileio_pwrite (%d,...,%d,%s) "
7313baad 3348 "= %d (%d)\n",
a71b5a38 3349 fd, len, pulongest (offset),
7313baad
UW
3350 ret, ret != -1 ? 0 : *target_errno);
3351 return ret;
3352 }
3353 }
3354
3355 *target_errno = FILEIO_ENOSYS;
3356 return -1;
3357}
3358
3359/* Read up to LEN bytes FD on the target into READ_BUF.
3360 Return the number of bytes read, or -1 if an error occurs
3361 (and set *TARGET_ERRNO). */
3362int
3363target_fileio_pread (int fd, gdb_byte *read_buf, int len,
3364 ULONGEST offset, int *target_errno)
3365{
3366 struct target_ops *t;
3367
3368 for (t = default_fileio_target (); t != NULL; t = t->beneath)
3369 {
3370 if (t->to_fileio_pread != NULL)
3371 {
a3be983c 3372 int ret = t->to_fileio_pread (t, fd, read_buf, len, offset,
7313baad
UW
3373 target_errno);
3374
3375 if (targetdebug)
3376 fprintf_unfiltered (gdb_stdlog,
a71b5a38 3377 "target_fileio_pread (%d,...,%d,%s) "
7313baad 3378 "= %d (%d)\n",
a71b5a38 3379 fd, len, pulongest (offset),
7313baad
UW
3380 ret, ret != -1 ? 0 : *target_errno);
3381 return ret;
3382 }
3383 }
3384
3385 *target_errno = FILEIO_ENOSYS;
3386 return -1;
3387}
3388
3389/* Close FD on the target. Return 0, or -1 if an error occurs
3390 (and set *TARGET_ERRNO). */
3391int
3392target_fileio_close (int fd, int *target_errno)
3393{
3394 struct target_ops *t;
3395
3396 for (t = default_fileio_target (); t != NULL; t = t->beneath)
3397 {
3398 if (t->to_fileio_close != NULL)
3399 {
df39ea25 3400 int ret = t->to_fileio_close (t, fd, target_errno);
7313baad
UW
3401
3402 if (targetdebug)
3403 fprintf_unfiltered (gdb_stdlog,
3404 "target_fileio_close (%d) = %d (%d)\n",
3405 fd, ret, ret != -1 ? 0 : *target_errno);
3406 return ret;
3407 }
3408 }
3409
3410 *target_errno = FILEIO_ENOSYS;
3411 return -1;
3412}
3413
3414/* Unlink FILENAME on the target. Return 0, or -1 if an error
3415 occurs (and set *TARGET_ERRNO). */
3416int
3417target_fileio_unlink (const char *filename, int *target_errno)
3418{
3419 struct target_ops *t;
3420
3421 for (t = default_fileio_target (); t != NULL; t = t->beneath)
3422 {
3423 if (t->to_fileio_unlink != NULL)
3424 {
dbbca37d 3425 int ret = t->to_fileio_unlink (t, filename, target_errno);
7313baad
UW
3426
3427 if (targetdebug)
3428 fprintf_unfiltered (gdb_stdlog,
3429 "target_fileio_unlink (%s) = %d (%d)\n",
3430 filename, ret, ret != -1 ? 0 : *target_errno);
3431 return ret;
3432 }
3433 }
3434
3435 *target_errno = FILEIO_ENOSYS;
3436 return -1;
3437}
3438
b9e7b9c3
UW
3439/* Read value of symbolic link FILENAME on the target. Return a
3440 null-terminated string allocated via xmalloc, or NULL if an error
3441 occurs (and set *TARGET_ERRNO). */
3442char *
3443target_fileio_readlink (const char *filename, int *target_errno)
3444{
3445 struct target_ops *t;
3446
3447 for (t = default_fileio_target (); t != NULL; t = t->beneath)
3448 {
3449 if (t->to_fileio_readlink != NULL)
3450 {
fab5aa7c 3451 char *ret = t->to_fileio_readlink (t, filename, target_errno);
b9e7b9c3
UW
3452
3453 if (targetdebug)
3454 fprintf_unfiltered (gdb_stdlog,
3455 "target_fileio_readlink (%s) = %s (%d)\n",
3456 filename, ret? ret : "(nil)",
3457 ret? 0 : *target_errno);
3458 return ret;
3459 }
3460 }
3461
3462 *target_errno = FILEIO_ENOSYS;
3463 return NULL;
3464}
3465
7313baad
UW
3466static void
3467target_fileio_close_cleanup (void *opaque)
3468{
3469 int fd = *(int *) opaque;
3470 int target_errno;
3471
3472 target_fileio_close (fd, &target_errno);
3473}
3474
3475/* Read target file FILENAME. Store the result in *BUF_P and
3476 return the size of the transferred data. PADDING additional bytes are
3477 available in *BUF_P. This is a helper function for
3478 target_fileio_read_alloc; see the declaration of that function for more
3479 information. */
3480
3481static LONGEST
3482target_fileio_read_alloc_1 (const char *filename,
3483 gdb_byte **buf_p, int padding)
3484{
3485 struct cleanup *close_cleanup;
3486 size_t buf_alloc, buf_pos;
3487 gdb_byte *buf;
3488 LONGEST n;
3489 int fd;
3490 int target_errno;
3491
3492 fd = target_fileio_open (filename, FILEIO_O_RDONLY, 0700, &target_errno);
3493 if (fd == -1)
3494 return -1;
3495
3496 close_cleanup = make_cleanup (target_fileio_close_cleanup, &fd);
3497
3498 /* Start by reading up to 4K at a time. The target will throttle
3499 this number down if necessary. */
3500 buf_alloc = 4096;
3501 buf = xmalloc (buf_alloc);
3502 buf_pos = 0;
3503 while (1)
3504 {
3505 n = target_fileio_pread (fd, &buf[buf_pos],
3506 buf_alloc - buf_pos - padding, buf_pos,
3507 &target_errno);
3508 if (n < 0)
3509 {
3510 /* An error occurred. */
3511 do_cleanups (close_cleanup);
3512 xfree (buf);
3513 return -1;
3514 }
3515 else if (n == 0)
3516 {
3517 /* Read all there was. */
3518 do_cleanups (close_cleanup);
3519 if (buf_pos == 0)
3520 xfree (buf);
3521 else
3522 *buf_p = buf;
3523 return buf_pos;
3524 }
3525
3526 buf_pos += n;
3527
3528 /* If the buffer is filling up, expand it. */
3529 if (buf_alloc < buf_pos * 2)
3530 {
3531 buf_alloc *= 2;
3532 buf = xrealloc (buf, buf_alloc);
3533 }
3534
3535 QUIT;
3536 }
3537}
3538
3539/* Read target file FILENAME. Store the result in *BUF_P and return
3540 the size of the transferred data. See the declaration in "target.h"
3541 function for more information about the return value. */
3542
3543LONGEST
3544target_fileio_read_alloc (const char *filename, gdb_byte **buf_p)
3545{
3546 return target_fileio_read_alloc_1 (filename, buf_p, 0);
3547}
3548
3549/* Read target file FILENAME. The result is NUL-terminated and
3550 returned as a string, allocated using xmalloc. If an error occurs
3551 or the transfer is unsupported, NULL is returned. Empty objects
3552 are returned as allocated but empty strings. A warning is issued
3553 if the result contains any embedded NUL bytes. */
3554
3555char *
3556target_fileio_read_stralloc (const char *filename)
3557{
39086a0e
PA
3558 gdb_byte *buffer;
3559 char *bufstr;
7313baad
UW
3560 LONGEST i, transferred;
3561
39086a0e
PA
3562 transferred = target_fileio_read_alloc_1 (filename, &buffer, 1);
3563 bufstr = (char *) buffer;
7313baad
UW
3564
3565 if (transferred < 0)
3566 return NULL;
3567
3568 if (transferred == 0)
3569 return xstrdup ("");
3570
39086a0e 3571 bufstr[transferred] = 0;
7313baad
UW
3572
3573 /* Check for embedded NUL bytes; but allow trailing NULs. */
39086a0e
PA
3574 for (i = strlen (bufstr); i < transferred; i++)
3575 if (bufstr[i] != 0)
7313baad
UW
3576 {
3577 warning (_("target file %s "
3578 "contained unexpected null characters"),
3579 filename);
3580 break;
3581 }
3582
39086a0e 3583 return bufstr;
7313baad
UW
3584}
3585
3586
e0d24f8d 3587static int
31568a15
TT
3588default_region_ok_for_hw_watchpoint (struct target_ops *self,
3589 CORE_ADDR addr, int len)
e0d24f8d 3590{
f5656ead 3591 return (len <= gdbarch_ptr_bit (target_gdbarch ()) / TARGET_CHAR_BIT);
ccaa32c7
GS
3592}
3593
5009afc5
AS
3594static int
3595default_watchpoint_addr_within_range (struct target_ops *target,
3596 CORE_ADDR addr,
3597 CORE_ADDR start, int length)
3598{
3599 return addr >= start && addr < start + length;
3600}
3601
c2250ad1
UW
3602static struct gdbarch *
3603default_thread_architecture (struct target_ops *ops, ptid_t ptid)
3604{
f5656ead 3605 return target_gdbarch ();
c2250ad1
UW
3606}
3607
c906108c 3608static int
fba45db2 3609return_zero (void)
c906108c
SS
3610{
3611 return 0;
3612}
3613
3614static int
fba45db2 3615return_one (void)
c906108c
SS
3616{
3617 return 1;
3618}
3619
ccaa32c7
GS
3620static int
3621return_minus_one (void)
3622{
3623 return -1;
3624}
3625
1b67eb02
AS
3626static void *
3627return_null (void)
3628{
3629 return 0;
3630}
3631
ed9a39eb
JM
3632/*
3633 * Find the next target down the stack from the specified target.
3634 */
3635
3636struct target_ops *
fba45db2 3637find_target_beneath (struct target_ops *t)
ed9a39eb 3638{
258b763a 3639 return t->beneath;
ed9a39eb
JM
3640}
3641
8b06beed
TT
3642/* See target.h. */
3643
3644struct target_ops *
3645find_target_at (enum strata stratum)
3646{
3647 struct target_ops *t;
3648
3649 for (t = current_target.beneath; t != NULL; t = t->beneath)
3650 if (t->to_stratum == stratum)
3651 return t;
3652
3653 return NULL;
3654}
3655
c906108c
SS
3656\f
3657/* The inferior process has died. Long live the inferior! */
3658
3659void
fba45db2 3660generic_mourn_inferior (void)
c906108c 3661{
7f9f62ba 3662 ptid_t ptid;
c906108c 3663
7f9f62ba 3664 ptid = inferior_ptid;
39f77062 3665 inferior_ptid = null_ptid;
7f9f62ba 3666
f59f708a
PA
3667 /* Mark breakpoints uninserted in case something tries to delete a
3668 breakpoint while we delete the inferior's threads (which would
3669 fail, since the inferior is long gone). */
3670 mark_breakpoints_out ();
3671
7f9f62ba
PA
3672 if (!ptid_equal (ptid, null_ptid))
3673 {
3674 int pid = ptid_get_pid (ptid);
6c95b8df 3675 exit_inferior (pid);
7f9f62ba
PA
3676 }
3677
f59f708a
PA
3678 /* Note this wipes step-resume breakpoints, so needs to be done
3679 after exit_inferior, which ends up referencing the step-resume
3680 breakpoints through clear_thread_inferior_resources. */
c906108c 3681 breakpoint_init_inferior (inf_exited);
f59f708a 3682
c906108c
SS
3683 registers_changed ();
3684
c906108c
SS
3685 reopen_exec_file ();
3686 reinit_frame_cache ();
3687
9a4105ab
AC
3688 if (deprecated_detach_hook)
3689 deprecated_detach_hook ();
c906108c
SS
3690}
3691\f
fd0a2a6f
MK
3692/* Convert a normal process ID to a string. Returns the string in a
3693 static buffer. */
c906108c
SS
3694
3695char *
39f77062 3696normal_pid_to_str (ptid_t ptid)
c906108c 3697{
fd0a2a6f 3698 static char buf[32];
c906108c 3699
5fff8fc0 3700 xsnprintf (buf, sizeof buf, "process %d", ptid_get_pid (ptid));
c906108c
SS
3701 return buf;
3702}
3703
2c0b251b 3704static char *
117de6a9
PA
3705dummy_pid_to_str (struct target_ops *ops, ptid_t ptid)
3706{
3707 return normal_pid_to_str (ptid);
3708}
3709
9b4eba8e
HZ
3710/* Error-catcher for target_find_memory_regions. */
3711static int
2e73927c
TT
3712dummy_find_memory_regions (struct target_ops *self,
3713 find_memory_region_ftype ignore1, void *ignore2)
be4d1333 3714{
9b4eba8e 3715 error (_("Command not implemented for this target."));
be4d1333
MS
3716 return 0;
3717}
3718
9b4eba8e
HZ
3719/* Error-catcher for target_make_corefile_notes. */
3720static char *
fc6691b2
TT
3721dummy_make_corefile_notes (struct target_ops *self,
3722 bfd *ignore1, int *ignore2)
be4d1333 3723{
9b4eba8e 3724 error (_("Command not implemented for this target."));
be4d1333
MS
3725 return NULL;
3726}
3727
6b04bdb7
MS
3728/* Error-catcher for target_get_bookmark. */
3729static gdb_byte *
dd0e2830 3730dummy_get_bookmark (struct target_ops *self, char *ignore1, int ignore2)
6b04bdb7
MS
3731{
3732 tcomplain ();
3733 return NULL;
3734}
3735
3736/* Error-catcher for target_goto_bookmark. */
3737static void
3c80fb48 3738dummy_goto_bookmark (struct target_ops *self, gdb_byte *ignore, int from_tty)
6b04bdb7
MS
3739{
3740 tcomplain ();
3741}
3742
c906108c
SS
3743/* Set up the handful of non-empty slots needed by the dummy target
3744 vector. */
3745
3746static void
fba45db2 3747init_dummy_target (void)
c906108c
SS
3748{
3749 dummy_target.to_shortname = "None";
3750 dummy_target.to_longname = "None";
3751 dummy_target.to_doc = "";
c906108c 3752 dummy_target.to_create_inferior = find_default_create_inferior;
9908b566 3753 dummy_target.to_supports_non_stop = find_default_supports_non_stop;
03583c20
UW
3754 dummy_target.to_supports_disable_randomization
3755 = find_default_supports_disable_randomization;
117de6a9 3756 dummy_target.to_pid_to_str = dummy_pid_to_str;
c906108c 3757 dummy_target.to_stratum = dummy_stratum;
be4d1333
MS
3758 dummy_target.to_find_memory_regions = dummy_find_memory_regions;
3759 dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
6b04bdb7
MS
3760 dummy_target.to_get_bookmark = dummy_get_bookmark;
3761 dummy_target.to_goto_bookmark = dummy_goto_bookmark;
c35b1492
PA
3762 dummy_target.to_has_all_memory = (int (*) (struct target_ops *)) return_zero;
3763 dummy_target.to_has_memory = (int (*) (struct target_ops *)) return_zero;
3764 dummy_target.to_has_stack = (int (*) (struct target_ops *)) return_zero;
3765 dummy_target.to_has_registers = (int (*) (struct target_ops *)) return_zero;
aeaec162
TT
3766 dummy_target.to_has_execution
3767 = (int (*) (struct target_ops *, ptid_t)) return_zero;
c906108c 3768 dummy_target.to_magic = OPS_MAGIC;
1101cb7b
TT
3769
3770 install_dummy_methods (&dummy_target);
c906108c 3771}
c906108c 3772\f
c906108c 3773static void
fba45db2 3774debug_to_open (char *args, int from_tty)
c906108c
SS
3775{
3776 debug_target.to_open (args, from_tty);
3777
96baa820 3778 fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
c906108c
SS
3779}
3780
f1c07ab0 3781void
460014f5 3782target_close (struct target_ops *targ)
f1c07ab0 3783{
7fdc1521
TT
3784 gdb_assert (!target_is_pushed (targ));
3785
f1c07ab0 3786 if (targ->to_xclose != NULL)
460014f5 3787 targ->to_xclose (targ);
f1c07ab0 3788 else if (targ->to_close != NULL)
de90e03d 3789 targ->to_close (targ);
947b8855
PA
3790
3791 if (targetdebug)
460014f5 3792 fprintf_unfiltered (gdb_stdlog, "target_close ()\n");
f1c07ab0
AC
3793}
3794
136d6dae
VP
3795void
3796target_attach (char *args, int from_tty)
3797{
e9a29200
TT
3798 current_target.to_attach (&current_target, args, from_tty);
3799 if (targetdebug)
3800 fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n",
3801 args, from_tty);
136d6dae
VP
3802}
3803
28439f5e
PA
3804int
3805target_thread_alive (ptid_t ptid)
c906108c 3806{
28439f5e 3807 struct target_ops *t;
5d502164 3808
28439f5e
PA
3809 for (t = current_target.beneath; t != NULL; t = t->beneath)
3810 {
3811 if (t->to_thread_alive != NULL)
3812 {
3813 int retval;
c906108c 3814
28439f5e
PA
3815 retval = t->to_thread_alive (t, ptid);
3816 if (targetdebug)
3817 fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
dfd4cc63 3818 ptid_get_pid (ptid), retval);
28439f5e
PA
3819
3820 return retval;
3821 }
3822 }
3823
3824 return 0;
3825}
3826
3827void
3828target_find_new_threads (void)
3829{
3830 struct target_ops *t;
5d502164 3831
28439f5e
PA
3832 for (t = current_target.beneath; t != NULL; t = t->beneath)
3833 {
3834 if (t->to_find_new_threads != NULL)
3835 {
3836 t->to_find_new_threads (t);
3837 if (targetdebug)
3838 fprintf_unfiltered (gdb_stdlog, "target_find_new_threads ()\n");
3839
3840 return;
3841 }
3842 }
c906108c
SS
3843}
3844
d914c394
SS
3845void
3846target_stop (ptid_t ptid)
3847{
3848 if (!may_stop)
3849 {
3850 warning (_("May not interrupt or stop the target, ignoring attempt"));
3851 return;
3852 }
3853
1eab8a48 3854 (*current_target.to_stop) (&current_target, ptid);
d914c394
SS
3855}
3856
c906108c 3857static void
f045800c 3858debug_to_post_attach (struct target_ops *self, int pid)
c906108c 3859{
f045800c 3860 debug_target.to_post_attach (&debug_target, pid);
c906108c 3861
28439f5e 3862 fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
c906108c
SS
3863}
3864
09826ec5
PA
3865/* Concatenate ELEM to LIST, a comma separate list, and return the
3866 result. The LIST incoming argument is released. */
3867
3868static char *
3869str_comma_list_concat_elem (char *list, const char *elem)
3870{
3871 if (list == NULL)
3872 return xstrdup (elem);
3873 else
3874 return reconcat (list, list, ", ", elem, (char *) NULL);
3875}
3876
3877/* Helper for target_options_to_string. If OPT is present in
3878 TARGET_OPTIONS, append the OPT_STR (string version of OPT) in RET.
3879 Returns the new resulting string. OPT is removed from
3880 TARGET_OPTIONS. */
3881
3882static char *
3883do_option (int *target_options, char *ret,
3884 int opt, char *opt_str)
3885{
3886 if ((*target_options & opt) != 0)
3887 {
3888 ret = str_comma_list_concat_elem (ret, opt_str);
3889 *target_options &= ~opt;
3890 }
3891
3892 return ret;
3893}
3894
3895char *
3896target_options_to_string (int target_options)
3897{
3898 char *ret = NULL;
3899
3900#define DO_TARG_OPTION(OPT) \
3901 ret = do_option (&target_options, ret, OPT, #OPT)
3902
3903 DO_TARG_OPTION (TARGET_WNOHANG);
3904
3905 if (target_options != 0)
3906 ret = str_comma_list_concat_elem (ret, "unknown???");
3907
3908 if (ret == NULL)
3909 ret = xstrdup ("");
3910 return ret;
3911}
3912
bf0c5130 3913static void
56be3814
UW
3914debug_print_register (const char * func,
3915 struct regcache *regcache, int regno)
bf0c5130 3916{
f8d29908 3917 struct gdbarch *gdbarch = get_regcache_arch (regcache);
5d502164 3918
bf0c5130 3919 fprintf_unfiltered (gdb_stdlog, "%s ", func);
f8d29908 3920 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
f8d29908
UW
3921 && gdbarch_register_name (gdbarch, regno) != NULL
3922 && gdbarch_register_name (gdbarch, regno)[0] != '\0')
3923 fprintf_unfiltered (gdb_stdlog, "(%s)",
3924 gdbarch_register_name (gdbarch, regno));
bf0c5130
AC
3925 else
3926 fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
0ff58721 3927 if (regno >= 0 && regno < gdbarch_num_regs (gdbarch))
bf0c5130 3928 {
e17a4113 3929 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
f8d29908 3930 int i, size = register_size (gdbarch, regno);
e362b510 3931 gdb_byte buf[MAX_REGISTER_SIZE];
5d502164 3932
0ff58721 3933 regcache_raw_collect (regcache, regno, buf);
bf0c5130 3934 fprintf_unfiltered (gdb_stdlog, " = ");
81c4a259 3935 for (i = 0; i < size; i++)
bf0c5130
AC
3936 {
3937 fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
3938 }
81c4a259 3939 if (size <= sizeof (LONGEST))
bf0c5130 3940 {
e17a4113 3941 ULONGEST val = extract_unsigned_integer (buf, size, byte_order);
5d502164 3942
0b1553bc
UW
3943 fprintf_unfiltered (gdb_stdlog, " %s %s",
3944 core_addr_to_string_nz (val), plongest (val));
bf0c5130
AC
3945 }
3946 }
3947 fprintf_unfiltered (gdb_stdlog, "\n");
3948}
3949
28439f5e
PA
3950void
3951target_fetch_registers (struct regcache *regcache, int regno)
c906108c 3952{
28439f5e 3953 struct target_ops *t;
5d502164 3954
28439f5e
PA
3955 for (t = current_target.beneath; t != NULL; t = t->beneath)
3956 {
3957 if (t->to_fetch_registers != NULL)
3958 {
3959 t->to_fetch_registers (t, regcache, regno);
3960 if (targetdebug)
3961 debug_print_register ("target_fetch_registers", regcache, regno);
3962 return;
3963 }
3964 }
c906108c
SS
3965}
3966
28439f5e
PA
3967void
3968target_store_registers (struct regcache *regcache, int regno)
c906108c 3969{
28439f5e 3970 struct target_ops *t;
5d502164 3971
d914c394
SS
3972 if (!may_write_registers)
3973 error (_("Writing to registers is not allowed (regno %d)"), regno);
3974
6b84065d
TT
3975 current_target.to_store_registers (&current_target, regcache, regno);
3976 if (targetdebug)
28439f5e 3977 {
6b84065d 3978 debug_print_register ("target_store_registers", regcache, regno);
28439f5e 3979 }
c906108c
SS
3980}
3981
dc146f7c
VP
3982int
3983target_core_of_thread (ptid_t ptid)
3984{
3985 struct target_ops *t;
3986
3987 for (t = current_target.beneath; t != NULL; t = t->beneath)
3988 {
3989 if (t->to_core_of_thread != NULL)
3990 {
3991 int retval = t->to_core_of_thread (t, ptid);
5d502164 3992
dc146f7c 3993 if (targetdebug)
3e43a32a
MS
3994 fprintf_unfiltered (gdb_stdlog,
3995 "target_core_of_thread (%d) = %d\n",
dfd4cc63 3996 ptid_get_pid (ptid), retval);
dc146f7c
VP
3997 return retval;
3998 }
3999 }
4000
4001 return -1;
4002}
4003
4a5e7a5b
PA
4004int
4005target_verify_memory (const gdb_byte *data, CORE_ADDR memaddr, ULONGEST size)
4006{
4007 struct target_ops *t;
4008
4009 for (t = current_target.beneath; t != NULL; t = t->beneath)
4010 {
4011 if (t->to_verify_memory != NULL)
4012 {
4013 int retval = t->to_verify_memory (t, data, memaddr, size);
5d502164 4014
4a5e7a5b 4015 if (targetdebug)
3e43a32a
MS
4016 fprintf_unfiltered (gdb_stdlog,
4017 "target_verify_memory (%s, %s) = %d\n",
f5656ead 4018 paddress (target_gdbarch (), memaddr),
4a5e7a5b
PA
4019 pulongest (size),
4020 retval);
4021 return retval;
4022 }
4023 }
4024
4025 tcomplain ();
4026}
4027
9c06b0b4
TJB
4028/* The documentation for this function is in its prototype declaration in
4029 target.h. */
4030
4031int
4032target_insert_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask, int rw)
4033{
4034 struct target_ops *t;
4035
4036 for (t = current_target.beneath; t != NULL; t = t->beneath)
4037 if (t->to_insert_mask_watchpoint != NULL)
4038 {
4039 int ret;
4040
4041 ret = t->to_insert_mask_watchpoint (t, addr, mask, rw);
4042
4043 if (targetdebug)
4044 fprintf_unfiltered (gdb_stdlog, "\
4045target_insert_mask_watchpoint (%s, %s, %d) = %d\n",
4046 core_addr_to_string (addr),
4047 core_addr_to_string (mask), rw, ret);
4048
4049 return ret;
4050 }
4051
4052 return 1;
4053}
4054
4055/* The documentation for this function is in its prototype declaration in
4056 target.h. */
4057
4058int
4059target_remove_mask_watchpoint (CORE_ADDR addr, CORE_ADDR mask, int rw)
4060{
4061 struct target_ops *t;
4062
4063 for (t = current_target.beneath; t != NULL; t = t->beneath)
4064 if (t->to_remove_mask_watchpoint != NULL)
4065 {
4066 int ret;
4067
4068 ret = t->to_remove_mask_watchpoint (t, addr, mask, rw);
4069
4070 if (targetdebug)
4071 fprintf_unfiltered (gdb_stdlog, "\
4072target_remove_mask_watchpoint (%s, %s, %d) = %d\n",
4073 core_addr_to_string (addr),
4074 core_addr_to_string (mask), rw, ret);
4075
4076 return ret;
4077 }
4078
4079 return 1;
4080}
4081
4082/* The documentation for this function is in its prototype declaration
4083 in target.h. */
4084
4085int
4086target_masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask)
4087{
4088 struct target_ops *t;
4089
4090 for (t = current_target.beneath; t != NULL; t = t->beneath)
4091 if (t->to_masked_watch_num_registers != NULL)
4092 return t->to_masked_watch_num_registers (t, addr, mask);
4093
4094 return -1;
4095}
4096
f1310107
TJB
4097/* The documentation for this function is in its prototype declaration
4098 in target.h. */
4099
4100int
4101target_ranged_break_num_registers (void)
4102{
4103 struct target_ops *t;
4104
4105 for (t = current_target.beneath; t != NULL; t = t->beneath)
4106 if (t->to_ranged_break_num_registers != NULL)
4107 return t->to_ranged_break_num_registers (t);
4108
4109 return -1;
4110}
4111
02d27625
MM
4112/* See target.h. */
4113
02d27625
MM
4114struct btrace_target_info *
4115target_enable_btrace (ptid_t ptid)
4116{
4117 struct target_ops *t;
4118
4119 for (t = current_target.beneath; t != NULL; t = t->beneath)
4120 if (t->to_enable_btrace != NULL)
e3c49f88 4121 return t->to_enable_btrace (t, ptid);
02d27625
MM
4122
4123 tcomplain ();
4124 return NULL;
4125}
4126
4127/* See target.h. */
4128
4129void
4130target_disable_btrace (struct btrace_target_info *btinfo)
4131{
4132 struct target_ops *t;
4133
4134 for (t = current_target.beneath; t != NULL; t = t->beneath)
4135 if (t->to_disable_btrace != NULL)
d92f7ee3 4136 {
25e95349 4137 t->to_disable_btrace (t, btinfo);
d92f7ee3
SDJ
4138 return;
4139 }
02d27625
MM
4140
4141 tcomplain ();
4142}
4143
4144/* See target.h. */
4145
4146void
4147target_teardown_btrace (struct btrace_target_info *btinfo)
4148{
4149 struct target_ops *t;
4150
4151 for (t = current_target.beneath; t != NULL; t = t->beneath)
4152 if (t->to_teardown_btrace != NULL)
d92f7ee3 4153 {
1777056d 4154 t->to_teardown_btrace (t, btinfo);
d92f7ee3
SDJ
4155 return;
4156 }
02d27625
MM
4157
4158 tcomplain ();
4159}
4160
4161/* See target.h. */
4162
969c39fb
MM
4163enum btrace_error
4164target_read_btrace (VEC (btrace_block_s) **btrace,
4165 struct btrace_target_info *btinfo,
02d27625
MM
4166 enum btrace_read_type type)
4167{
4168 struct target_ops *t;
4169
4170 for (t = current_target.beneath; t != NULL; t = t->beneath)
4171 if (t->to_read_btrace != NULL)
39c49f83 4172 return t->to_read_btrace (t, btrace, btinfo, type);
02d27625
MM
4173
4174 tcomplain ();
969c39fb 4175 return BTRACE_ERR_NOT_SUPPORTED;
02d27625
MM
4176}
4177
d02ed0bb
MM
4178/* See target.h. */
4179
7c1687a9
MM
4180void
4181target_stop_recording (void)
4182{
4183 struct target_ops *t;
4184
4185 for (t = current_target.beneath; t != NULL; t = t->beneath)
4186 if (t->to_stop_recording != NULL)
4187 {
c6cd7c02 4188 t->to_stop_recording (t);
7c1687a9
MM
4189 return;
4190 }
4191
4192 /* This is optional. */
4193}
4194
4195/* See target.h. */
4196
d02ed0bb
MM
4197void
4198target_info_record (void)
4199{
4200 struct target_ops *t;
4201
4202 for (t = current_target.beneath; t != NULL; t = t->beneath)
4203 if (t->to_info_record != NULL)
4204 {
630d6a4a 4205 t->to_info_record (t);
d02ed0bb
MM
4206 return;
4207 }
4208
4209 tcomplain ();
4210}
4211
4212/* See target.h. */
4213
4214void
85e1311a 4215target_save_record (const char *filename)
d02ed0bb
MM
4216{
4217 struct target_ops *t;
4218
4219 for (t = current_target.beneath; t != NULL; t = t->beneath)
4220 if (t->to_save_record != NULL)
4221 {
1390f529 4222 t->to_save_record (t, filename);
d02ed0bb
MM
4223 return;
4224 }
4225
4226 tcomplain ();
4227}
4228
4229/* See target.h. */
4230
4231int
4232target_supports_delete_record (void)
4233{
4234 struct target_ops *t;
4235
4236 for (t = current_target.beneath; t != NULL; t = t->beneath)
4237 if (t->to_delete_record != NULL)
4238 return 1;
4239
4240 return 0;
4241}
4242
4243/* See target.h. */
4244
4245void
4246target_delete_record (void)
4247{
4248 struct target_ops *t;
4249
4250 for (t = current_target.beneath; t != NULL; t = t->beneath)
4251 if (t->to_delete_record != NULL)
4252 {
d1b55219 4253 t->to_delete_record (t);
d02ed0bb
MM
4254 return;
4255 }
4256
4257 tcomplain ();
4258}
4259
4260/* See target.h. */
4261
4262int
4263target_record_is_replaying (void)
4264{
4265 struct target_ops *t;
4266
4267 for (t = current_target.beneath; t != NULL; t = t->beneath)
4268 if (t->to_record_is_replaying != NULL)
1c63c994 4269 return t->to_record_is_replaying (t);
d02ed0bb
MM
4270
4271 return 0;
4272}
4273
4274/* See target.h. */
4275
4276void
4277target_goto_record_begin (void)
4278{
4279 struct target_ops *t;
4280
4281 for (t = current_target.beneath; t != NULL; t = t->beneath)
4282 if (t->to_goto_record_begin != NULL)
4283 {
08475817 4284 t->to_goto_record_begin (t);
d02ed0bb
MM
4285 return;
4286 }
4287
4288 tcomplain ();
4289}
4290
4291/* See target.h. */
4292
4293void
4294target_goto_record_end (void)
4295{
4296 struct target_ops *t;
4297
4298 for (t = current_target.beneath; t != NULL; t = t->beneath)
4299 if (t->to_goto_record_end != NULL)
4300 {
307a1b91 4301 t->to_goto_record_end (t);
d02ed0bb
MM
4302 return;
4303 }
4304
4305 tcomplain ();
4306}
4307
4308/* See target.h. */
4309
4310void
4311target_goto_record (ULONGEST insn)
4312{
4313 struct target_ops *t;
4314
4315 for (t = current_target.beneath; t != NULL; t = t->beneath)
4316 if (t->to_goto_record != NULL)
4317 {
606183ac 4318 t->to_goto_record (t, insn);
d02ed0bb
MM
4319 return;
4320 }
4321
4322 tcomplain ();
4323}
4324
67c86d06
MM
4325/* See target.h. */
4326
4327void
4328target_insn_history (int size, int flags)
4329{
4330 struct target_ops *t;
4331
4332 for (t = current_target.beneath; t != NULL; t = t->beneath)
4333 if (t->to_insn_history != NULL)
4334 {
7a6c5609 4335 t->to_insn_history (t, size, flags);
67c86d06
MM
4336 return;
4337 }
4338
4339 tcomplain ();
4340}
4341
4342/* See target.h. */
4343
4344void
4345target_insn_history_from (ULONGEST from, int size, int flags)
4346{
4347 struct target_ops *t;
4348
4349 for (t = current_target.beneath; t != NULL; t = t->beneath)
4350 if (t->to_insn_history_from != NULL)
4351 {
9abc3ff3 4352 t->to_insn_history_from (t, from, size, flags);
67c86d06
MM
4353 return;
4354 }
4355
4356 tcomplain ();
4357}
4358
4359/* See target.h. */
4360
4361void
4362target_insn_history_range (ULONGEST begin, ULONGEST end, int flags)
4363{
4364 struct target_ops *t;
4365
4366 for (t = current_target.beneath; t != NULL; t = t->beneath)
4367 if (t->to_insn_history_range != NULL)
4368 {
4e99c6b7 4369 t->to_insn_history_range (t, begin, end, flags);
67c86d06
MM
4370 return;
4371 }
4372
4373 tcomplain ();
4374}
4375
15984c13
MM
4376/* See target.h. */
4377
4378void
4379target_call_history (int size, int flags)
4380{
4381 struct target_ops *t;
4382
4383 for (t = current_target.beneath; t != NULL; t = t->beneath)
4384 if (t->to_call_history != NULL)
4385 {
5df2fcba 4386 t->to_call_history (t, size, flags);
15984c13
MM
4387 return;
4388 }
4389
4390 tcomplain ();
4391}
4392
4393/* See target.h. */
4394
4395void
4396target_call_history_from (ULONGEST begin, int size, int flags)
4397{
4398 struct target_ops *t;
4399
4400 for (t = current_target.beneath; t != NULL; t = t->beneath)
4401 if (t->to_call_history_from != NULL)
4402 {
ec0aea04 4403 t->to_call_history_from (t, begin, size, flags);
15984c13
MM
4404 return;
4405 }
4406
4407 tcomplain ();
4408}
4409
4410/* See target.h. */
4411
4412void
4413target_call_history_range (ULONGEST begin, ULONGEST end, int flags)
4414{
4415 struct target_ops *t;
4416
4417 for (t = current_target.beneath; t != NULL; t = t->beneath)
4418 if (t->to_call_history_range != NULL)
4419 {
f0d960ea 4420 t->to_call_history_range (t, begin, end, flags);
15984c13
MM
4421 return;
4422 }
4423
4424 tcomplain ();
4425}
4426
c906108c 4427static void
f32dbf8c 4428debug_to_prepare_to_store (struct target_ops *self, struct regcache *regcache)
c906108c 4429{
f32dbf8c 4430 debug_target.to_prepare_to_store (&debug_target, regcache);
c906108c 4431
96baa820 4432 fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
c906108c
SS
4433}
4434
ea001bdc
MM
4435/* See target.h. */
4436
4437const struct frame_unwind *
4438target_get_unwinder (void)
4439{
4440 struct target_ops *t;
4441
4442 for (t = current_target.beneath; t != NULL; t = t->beneath)
4443 if (t->to_get_unwinder != NULL)
4444 return t->to_get_unwinder;
4445
4446 return NULL;
4447}
4448
4449/* See target.h. */
4450
4451const struct frame_unwind *
4452target_get_tailcall_unwinder (void)
4453{
4454 struct target_ops *t;
4455
4456 for (t = current_target.beneath; t != NULL; t = t->beneath)
4457 if (t->to_get_tailcall_unwinder != NULL)
4458 return t->to_get_tailcall_unwinder;
4459
4460 return NULL;
4461}
4462
118e6252
MM
4463/* See target.h. */
4464
4465CORE_ADDR
4466forward_target_decr_pc_after_break (struct target_ops *ops,
4467 struct gdbarch *gdbarch)
4468{
4469 for (; ops != NULL; ops = ops->beneath)
4470 if (ops->to_decr_pc_after_break != NULL)
4471 return ops->to_decr_pc_after_break (ops, gdbarch);
4472
4473 return gdbarch_decr_pc_after_break (gdbarch);
4474}
4475
4476/* See target.h. */
4477
4478CORE_ADDR
4479target_decr_pc_after_break (struct gdbarch *gdbarch)
4480{
4481 return forward_target_decr_pc_after_break (current_target.beneath, gdbarch);
4482}
4483
c906108c 4484static int
961cb7b5 4485deprecated_debug_xfer_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len,
c8e73a31
AC
4486 int write, struct mem_attrib *attrib,
4487 struct target_ops *target)
c906108c
SS
4488{
4489 int retval;
4490
c8e73a31
AC
4491 retval = debug_target.deprecated_xfer_memory (memaddr, myaddr, len, write,
4492 attrib, target);
c906108c 4493
96baa820 4494 fprintf_unfiltered (gdb_stdlog,
53b71562 4495 "target_xfer_memory (%s, xxx, %d, %s, xxx) = %d",
f5656ead 4496 paddress (target_gdbarch (), memaddr), len,
5af949e3 4497 write ? "write" : "read", retval);
c906108c 4498
c906108c
SS
4499 if (retval > 0)
4500 {
4501 int i;
4502
96baa820 4503 fputs_unfiltered (", bytes =", gdb_stdlog);
c906108c
SS
4504 for (i = 0; i < retval; i++)
4505 {
53b71562 4506 if ((((intptr_t) &(myaddr[i])) & 0xf) == 0)
333dabeb
DJ
4507 {
4508 if (targetdebug < 2 && i > 0)
4509 {
4510 fprintf_unfiltered (gdb_stdlog, " ...");
4511 break;
4512 }
4513 fprintf_unfiltered (gdb_stdlog, "\n");
4514 }
2bc416ba 4515
96baa820 4516 fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
c906108c
SS
4517 }
4518 }
4519
96baa820 4520 fputc_unfiltered ('\n', gdb_stdlog);
c906108c
SS
4521
4522 return retval;
4523}
4524
4525static void
fba45db2 4526debug_to_files_info (struct target_ops *target)
c906108c
SS
4527{
4528 debug_target.to_files_info (target);
4529
96baa820 4530 fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
c906108c
SS
4531}
4532
4533static int
3db08215 4534debug_to_insert_breakpoint (struct target_ops *ops, struct gdbarch *gdbarch,
a6d9a66e 4535 struct bp_target_info *bp_tgt)
c906108c
SS
4536{
4537 int retval;
4538
6b84065d 4539 retval = debug_target.to_insert_breakpoint (&debug_target, gdbarch, bp_tgt);
c906108c 4540
96baa820 4541 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4542 "target_insert_breakpoint (%s, xxx) = %ld\n",
4543 core_addr_to_string (bp_tgt->placed_address),
104c1213 4544 (unsigned long) retval);
c906108c
SS
4545 return retval;
4546}
4547
4548static int
3db08215 4549debug_to_remove_breakpoint (struct target_ops *ops, struct gdbarch *gdbarch,
a6d9a66e 4550 struct bp_target_info *bp_tgt)
c906108c
SS
4551{
4552 int retval;
4553
6b84065d 4554 retval = debug_target.to_remove_breakpoint (&debug_target, gdbarch, bp_tgt);
c906108c 4555
96baa820 4556 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4557 "target_remove_breakpoint (%s, xxx) = %ld\n",
4558 core_addr_to_string (bp_tgt->placed_address),
104c1213 4559 (unsigned long) retval);
c906108c
SS
4560 return retval;
4561}
4562
ccaa32c7 4563static int
5461485a
TT
4564debug_to_can_use_hw_breakpoint (struct target_ops *self,
4565 int type, int cnt, int from_tty)
ccaa32c7
GS
4566{
4567 int retval;
4568
5461485a
TT
4569 retval = debug_target.to_can_use_hw_breakpoint (&debug_target,
4570 type, cnt, from_tty);
ccaa32c7
GS
4571
4572 fprintf_unfiltered (gdb_stdlog,
4573 "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
4574 (unsigned long) type,
4575 (unsigned long) cnt,
4576 (unsigned long) from_tty,
4577 (unsigned long) retval);
4578 return retval;
4579}
4580
e0d24f8d 4581static int
31568a15
TT
4582debug_to_region_ok_for_hw_watchpoint (struct target_ops *self,
4583 CORE_ADDR addr, int len)
e0d24f8d
WZ
4584{
4585 CORE_ADDR retval;
4586
31568a15
TT
4587 retval = debug_target.to_region_ok_for_hw_watchpoint (&debug_target,
4588 addr, len);
e0d24f8d
WZ
4589
4590 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4591 "target_region_ok_for_hw_watchpoint (%s, %ld) = %s\n",
4592 core_addr_to_string (addr), (unsigned long) len,
4593 core_addr_to_string (retval));
e0d24f8d
WZ
4594 return retval;
4595}
4596
0cf6dd15 4597static int
c3a5ff89
TT
4598debug_to_can_accel_watchpoint_condition (struct target_ops *self,
4599 CORE_ADDR addr, int len, int rw,
0cf6dd15
TJB
4600 struct expression *cond)
4601{
4602 int retval;
4603
c3a5ff89
TT
4604 retval = debug_target.to_can_accel_watchpoint_condition (&debug_target,
4605 addr, len,
3e43a32a 4606 rw, cond);
0cf6dd15
TJB
4607
4608 fprintf_unfiltered (gdb_stdlog,
3e43a32a
MS
4609 "target_can_accel_watchpoint_condition "
4610 "(%s, %d, %d, %s) = %ld\n",
bd91e7ae
OS
4611 core_addr_to_string (addr), len, rw,
4612 host_address_to_string (cond), (unsigned long) retval);
0cf6dd15
TJB
4613 return retval;
4614}
4615
ccaa32c7 4616static int
6a109b6b 4617debug_to_stopped_by_watchpoint (struct target_ops *ops)
ccaa32c7
GS
4618{
4619 int retval;
4620
6a109b6b 4621 retval = debug_target.to_stopped_by_watchpoint (&debug_target);
ccaa32c7
GS
4622
4623 fprintf_unfiltered (gdb_stdlog,
d92524f1 4624 "target_stopped_by_watchpoint () = %ld\n",
ccaa32c7
GS
4625 (unsigned long) retval);
4626 return retval;
4627}
4628
4aa7a7f5
JJ
4629static int
4630debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
ccaa32c7 4631{
4aa7a7f5 4632 int retval;
ccaa32c7 4633
4aa7a7f5 4634 retval = debug_target.to_stopped_data_address (target, addr);
ccaa32c7
GS
4635
4636 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4637 "target_stopped_data_address ([%s]) = %ld\n",
4638 core_addr_to_string (*addr),
4aa7a7f5 4639 (unsigned long)retval);
ccaa32c7
GS
4640 return retval;
4641}
4642
5009afc5
AS
4643static int
4644debug_to_watchpoint_addr_within_range (struct target_ops *target,
4645 CORE_ADDR addr,
4646 CORE_ADDR start, int length)
4647{
4648 int retval;
4649
4650 retval = debug_target.to_watchpoint_addr_within_range (target, addr,
4651 start, length);
4652
4653 fprintf_filtered (gdb_stdlog,
bd91e7ae
OS
4654 "target_watchpoint_addr_within_range (%s, %s, %d) = %d\n",
4655 core_addr_to_string (addr), core_addr_to_string (start),
4656 length, retval);
5009afc5
AS
4657 return retval;
4658}
4659
ccaa32c7 4660static int
23a26771
TT
4661debug_to_insert_hw_breakpoint (struct target_ops *self,
4662 struct gdbarch *gdbarch,
a6d9a66e 4663 struct bp_target_info *bp_tgt)
ccaa32c7
GS
4664{
4665 int retval;
4666
23a26771
TT
4667 retval = debug_target.to_insert_hw_breakpoint (&debug_target,
4668 gdbarch, bp_tgt);
ccaa32c7
GS
4669
4670 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4671 "target_insert_hw_breakpoint (%s, xxx) = %ld\n",
4672 core_addr_to_string (bp_tgt->placed_address),
ccaa32c7
GS
4673 (unsigned long) retval);
4674 return retval;
4675}
4676
4677static int
a64dc96c
TT
4678debug_to_remove_hw_breakpoint (struct target_ops *self,
4679 struct gdbarch *gdbarch,
a6d9a66e 4680 struct bp_target_info *bp_tgt)
ccaa32c7
GS
4681{
4682 int retval;
4683
a64dc96c
TT
4684 retval = debug_target.to_remove_hw_breakpoint (&debug_target,
4685 gdbarch, bp_tgt);
ccaa32c7
GS
4686
4687 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4688 "target_remove_hw_breakpoint (%s, xxx) = %ld\n",
4689 core_addr_to_string (bp_tgt->placed_address),
ccaa32c7
GS
4690 (unsigned long) retval);
4691 return retval;
4692}
4693
4694static int
7bb99c53
TT
4695debug_to_insert_watchpoint (struct target_ops *self,
4696 CORE_ADDR addr, int len, int type,
0cf6dd15 4697 struct expression *cond)
ccaa32c7
GS
4698{
4699 int retval;
4700
7bb99c53
TT
4701 retval = debug_target.to_insert_watchpoint (&debug_target,
4702 addr, len, type, cond);
ccaa32c7
GS
4703
4704 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4705 "target_insert_watchpoint (%s, %d, %d, %s) = %ld\n",
4706 core_addr_to_string (addr), len, type,
4707 host_address_to_string (cond), (unsigned long) retval);
ccaa32c7
GS
4708 return retval;
4709}
4710
4711static int
11b5219a
TT
4712debug_to_remove_watchpoint (struct target_ops *self,
4713 CORE_ADDR addr, int len, int type,
0cf6dd15 4714 struct expression *cond)
ccaa32c7
GS
4715{
4716 int retval;
4717
11b5219a
TT
4718 retval = debug_target.to_remove_watchpoint (&debug_target,
4719 addr, len, type, cond);
ccaa32c7
GS
4720
4721 fprintf_unfiltered (gdb_stdlog,
bd91e7ae
OS
4722 "target_remove_watchpoint (%s, %d, %d, %s) = %ld\n",
4723 core_addr_to_string (addr), len, type,
4724 host_address_to_string (cond), (unsigned long) retval);
ccaa32c7
GS
4725 return retval;
4726}
4727
c906108c 4728static void
c42bf286 4729debug_to_terminal_init (struct target_ops *self)
c906108c 4730{
c42bf286 4731 debug_target.to_terminal_init (&debug_target);
c906108c 4732
96baa820 4733 fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
c906108c
SS
4734}
4735
4736static void
d2f640d4 4737debug_to_terminal_inferior (struct target_ops *self)
c906108c 4738{
d2f640d4 4739 debug_target.to_terminal_inferior (&debug_target);
c906108c 4740
96baa820 4741 fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
c906108c
SS
4742}
4743
4744static void
2e1e1a19 4745debug_to_terminal_ours_for_output (struct target_ops *self)
c906108c 4746{
2e1e1a19 4747 debug_target.to_terminal_ours_for_output (&debug_target);
c906108c 4748
96baa820 4749 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
c906108c
SS
4750}
4751
4752static void
e3594fd1 4753debug_to_terminal_ours (struct target_ops *self)
c906108c 4754{
e3594fd1 4755 debug_target.to_terminal_ours (&debug_target);
c906108c 4756
96baa820 4757 fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
c906108c
SS
4758}
4759
a790ad35 4760static void
ae3bd431 4761debug_to_terminal_save_ours (struct target_ops *self)
a790ad35 4762{
ae3bd431 4763 debug_target.to_terminal_save_ours (&debug_target);
a790ad35
SC
4764
4765 fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
4766}
4767
c906108c 4768static void
0a4f40a2
TT
4769debug_to_terminal_info (struct target_ops *self,
4770 const char *arg, int from_tty)
c906108c 4771{
0a4f40a2 4772 debug_target.to_terminal_info (&debug_target, arg, from_tty);
c906108c 4773
96baa820 4774 fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
c906108c
SS
4775 from_tty);
4776}
4777
c906108c 4778static void
71a9f134 4779debug_to_load (struct target_ops *self, char *args, int from_tty)
c906108c 4780{
71a9f134 4781 debug_target.to_load (&debug_target, args, from_tty);
c906108c 4782
96baa820 4783 fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
c906108c
SS
4784}
4785
c906108c 4786static void
2e97a79e 4787debug_to_post_startup_inferior (struct target_ops *self, ptid_t ptid)
c906108c 4788{
2e97a79e 4789 debug_target.to_post_startup_inferior (&debug_target, ptid);
c906108c 4790
96baa820 4791 fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
dfd4cc63 4792 ptid_get_pid (ptid));
c906108c
SS
4793}
4794
77b06cd7 4795static int
a863b201 4796debug_to_insert_fork_catchpoint (struct target_ops *self, int pid)
c906108c 4797{
77b06cd7
TJB
4798 int retval;
4799
a863b201 4800 retval = debug_target.to_insert_fork_catchpoint (&debug_target, pid);
77b06cd7
TJB
4801
4802 fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d) = %d\n",
4803 pid, retval);
c906108c 4804
77b06cd7 4805 return retval;
c906108c
SS
4806}
4807
4808static int
973fc227 4809debug_to_remove_fork_catchpoint (struct target_ops *self, int pid)
c906108c 4810{
c5aa993b 4811 int retval;
c906108c 4812
973fc227 4813 retval = debug_target.to_remove_fork_catchpoint (&debug_target, pid);
c906108c 4814
96baa820 4815 fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
c5aa993b 4816 pid, retval);
c906108c
SS
4817
4818 return retval;
4819}
4820
77b06cd7 4821static int
3ecc7da0 4822debug_to_insert_vfork_catchpoint (struct target_ops *self, int pid)
c906108c 4823{
77b06cd7
TJB
4824 int retval;
4825
3ecc7da0 4826 retval = debug_target.to_insert_vfork_catchpoint (&debug_target, pid);
c906108c 4827
77b06cd7
TJB
4828 fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d) = %d\n",
4829 pid, retval);
4830
4831 return retval;
c906108c
SS
4832}
4833
4834static int
e98cf0cd 4835debug_to_remove_vfork_catchpoint (struct target_ops *self, int pid)
c906108c 4836{
c5aa993b 4837 int retval;
c906108c 4838
e98cf0cd 4839 retval = debug_target.to_remove_vfork_catchpoint (&debug_target, pid);
c906108c 4840
96baa820 4841 fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
c5aa993b 4842 pid, retval);
c906108c
SS
4843
4844 return retval;
4845}
4846
77b06cd7 4847static int
ba025e51 4848debug_to_insert_exec_catchpoint (struct target_ops *self, int pid)
c906108c 4849{
77b06cd7
TJB
4850 int retval;
4851
ba025e51 4852 retval = debug_target.to_insert_exec_catchpoint (&debug_target, pid);
c906108c 4853
77b06cd7
TJB
4854 fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d) = %d\n",
4855 pid, retval);
4856
4857 return retval;
c906108c
SS
4858}
4859
4860static int
758e29d2 4861debug_to_remove_exec_catchpoint (struct target_ops *self, int pid)
c906108c 4862{
c5aa993b 4863 int retval;
c906108c 4864
758e29d2 4865 retval = debug_target.to_remove_exec_catchpoint (&debug_target, pid);
c906108c 4866
96baa820 4867 fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
c5aa993b 4868 pid, retval);
c906108c
SS
4869
4870 return retval;
4871}
4872
c906108c 4873static int
d796e1d6
TT
4874debug_to_has_exited (struct target_ops *self,
4875 int pid, int wait_status, int *exit_status)
c906108c 4876{
c5aa993b 4877 int has_exited;
c906108c 4878
d796e1d6
TT
4879 has_exited = debug_target.to_has_exited (&debug_target,
4880 pid, wait_status, exit_status);
c906108c 4881
96baa820 4882 fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
c5aa993b 4883 pid, wait_status, *exit_status, has_exited);
c906108c
SS
4884
4885 return has_exited;
4886}
4887
c906108c 4888static int
da82bd6b 4889debug_to_can_run (struct target_ops *self)
c906108c
SS
4890{
4891 int retval;
4892
da82bd6b 4893 retval = debug_target.to_can_run (&debug_target);
c906108c 4894
96baa820 4895 fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
c906108c
SS
4896
4897 return retval;
4898}
4899
c2250ad1
UW
4900static struct gdbarch *
4901debug_to_thread_architecture (struct target_ops *ops, ptid_t ptid)
4902{
4903 struct gdbarch *retval;
4904
4905 retval = debug_target.to_thread_architecture (ops, ptid);
4906
3e43a32a
MS
4907 fprintf_unfiltered (gdb_stdlog,
4908 "target_thread_architecture (%s) = %s [%s]\n",
4909 target_pid_to_str (ptid),
4910 host_address_to_string (retval),
c2250ad1
UW
4911 gdbarch_bfd_arch_info (retval)->printable_name);
4912 return retval;
4913}
4914
c906108c 4915static void
1eab8a48 4916debug_to_stop (struct target_ops *self, ptid_t ptid)
c906108c 4917{
1eab8a48 4918 debug_target.to_stop (&debug_target, ptid);
c906108c 4919
94cc34af
PA
4920 fprintf_unfiltered (gdb_stdlog, "target_stop (%s)\n",
4921 target_pid_to_str (ptid));
c906108c
SS
4922}
4923
96baa820 4924static void
1aac633b 4925debug_to_rcmd (struct target_ops *self, char *command,
d9fcf2fb 4926 struct ui_file *outbuf)
96baa820 4927{
1aac633b 4928 debug_target.to_rcmd (&debug_target, command, outbuf);
96baa820
JM
4929 fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
4930}
4931
c906108c 4932static char *
8dd27370 4933debug_to_pid_to_exec_file (struct target_ops *self, int pid)
c906108c 4934{
c5aa993b 4935 char *exec_file;
c906108c 4936
8dd27370 4937 exec_file = debug_target.to_pid_to_exec_file (&debug_target, pid);
c906108c 4938
96baa820 4939 fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
c5aa993b 4940 pid, exec_file);
c906108c
SS
4941
4942 return exec_file;
4943}
4944
c906108c 4945static void
fba45db2 4946setup_target_debug (void)
c906108c
SS
4947{
4948 memcpy (&debug_target, &current_target, sizeof debug_target);
4949
4950 current_target.to_open = debug_to_open;
c906108c 4951 current_target.to_post_attach = debug_to_post_attach;
c906108c 4952 current_target.to_prepare_to_store = debug_to_prepare_to_store;
c8e73a31 4953 current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory;
c906108c
SS
4954 current_target.to_files_info = debug_to_files_info;
4955 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
4956 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
ccaa32c7
GS
4957 current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
4958 current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
4959 current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
4960 current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
4961 current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
4962 current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
4963 current_target.to_stopped_data_address = debug_to_stopped_data_address;
3e43a32a
MS
4964 current_target.to_watchpoint_addr_within_range
4965 = debug_to_watchpoint_addr_within_range;
4966 current_target.to_region_ok_for_hw_watchpoint
4967 = debug_to_region_ok_for_hw_watchpoint;
4968 current_target.to_can_accel_watchpoint_condition
4969 = debug_to_can_accel_watchpoint_condition;
c906108c
SS
4970 current_target.to_terminal_init = debug_to_terminal_init;
4971 current_target.to_terminal_inferior = debug_to_terminal_inferior;
3e43a32a
MS
4972 current_target.to_terminal_ours_for_output
4973 = debug_to_terminal_ours_for_output;
c906108c 4974 current_target.to_terminal_ours = debug_to_terminal_ours;
a790ad35 4975 current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
c906108c 4976 current_target.to_terminal_info = debug_to_terminal_info;
c906108c 4977 current_target.to_load = debug_to_load;
c906108c 4978 current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
c906108c
SS
4979 current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
4980 current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
4981 current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
4982 current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
c906108c
SS
4983 current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
4984 current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
c906108c 4985 current_target.to_has_exited = debug_to_has_exited;
c906108c 4986 current_target.to_can_run = debug_to_can_run;
c906108c 4987 current_target.to_stop = debug_to_stop;
96baa820 4988 current_target.to_rcmd = debug_to_rcmd;
c906108c 4989 current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
c2250ad1 4990 current_target.to_thread_architecture = debug_to_thread_architecture;
c906108c 4991}
c906108c 4992\f
c5aa993b
JM
4993
4994static char targ_desc[] =
3e43a32a
MS
4995"Names of targets and files being debugged.\nShows the entire \
4996stack of targets currently in use (including the exec-file,\n\
c906108c
SS
4997core-file, and process, if any), as well as the symbol file name.";
4998
a53f3625
TT
4999static void
5000default_rcmd (struct target_ops *self, char *command, struct ui_file *output)
5001{
5002 error (_("\"monitor\" command not supported by this target."));
5003}
5004
96baa820
JM
5005static void
5006do_monitor_command (char *cmd,
5007 int from_tty)
5008{
96baa820
JM
5009 target_rcmd (cmd, gdb_stdtarg);
5010}
5011
87680a14
JB
5012/* Print the name of each layers of our target stack. */
5013
5014static void
5015maintenance_print_target_stack (char *cmd, int from_tty)
5016{
5017 struct target_ops *t;
5018
5019 printf_filtered (_("The current target stack is:\n"));
5020
5021 for (t = target_stack; t != NULL; t = t->beneath)
5022 {
5023 printf_filtered (" - %s (%s)\n", t->to_shortname, t->to_longname);
5024 }
5025}
5026
c6ebd6cf
VP
5027/* Controls if async mode is permitted. */
5028int target_async_permitted = 0;
5029
5030/* The set command writes to this variable. If the inferior is
b5419e49 5031 executing, target_async_permitted is *not* updated. */
c6ebd6cf
VP
5032static int target_async_permitted_1 = 0;
5033
5034static void
9401a810
PA
5035set_target_async_command (char *args, int from_tty,
5036 struct cmd_list_element *c)
c6ebd6cf 5037{
c35b1492 5038 if (have_live_inferiors ())
c6ebd6cf
VP
5039 {
5040 target_async_permitted_1 = target_async_permitted;
5041 error (_("Cannot change this setting while the inferior is running."));
5042 }
5043
5044 target_async_permitted = target_async_permitted_1;
5045}
5046
5047static void
9401a810
PA
5048show_target_async_command (struct ui_file *file, int from_tty,
5049 struct cmd_list_element *c,
5050 const char *value)
c6ebd6cf 5051{
3e43a32a
MS
5052 fprintf_filtered (file,
5053 _("Controlling the inferior in "
5054 "asynchronous mode is %s.\n"), value);
c6ebd6cf
VP
5055}
5056
d914c394
SS
5057/* Temporary copies of permission settings. */
5058
5059static int may_write_registers_1 = 1;
5060static int may_write_memory_1 = 1;
5061static int may_insert_breakpoints_1 = 1;
5062static int may_insert_tracepoints_1 = 1;
5063static int may_insert_fast_tracepoints_1 = 1;
5064static int may_stop_1 = 1;
5065
5066/* Make the user-set values match the real values again. */
5067
5068void
5069update_target_permissions (void)
5070{
5071 may_write_registers_1 = may_write_registers;
5072 may_write_memory_1 = may_write_memory;
5073 may_insert_breakpoints_1 = may_insert_breakpoints;
5074 may_insert_tracepoints_1 = may_insert_tracepoints;
5075 may_insert_fast_tracepoints_1 = may_insert_fast_tracepoints;
5076 may_stop_1 = may_stop;
5077}
5078
5079/* The one function handles (most of) the permission flags in the same
5080 way. */
5081
5082static void
5083set_target_permissions (char *args, int from_tty,
5084 struct cmd_list_element *c)
5085{
5086 if (target_has_execution)
5087 {
5088 update_target_permissions ();
5089 error (_("Cannot change this setting while the inferior is running."));
5090 }
5091
5092 /* Make the real values match the user-changed values. */
5093 may_write_registers = may_write_registers_1;
5094 may_insert_breakpoints = may_insert_breakpoints_1;
5095 may_insert_tracepoints = may_insert_tracepoints_1;
5096 may_insert_fast_tracepoints = may_insert_fast_tracepoints_1;
5097 may_stop = may_stop_1;
5098 update_observer_mode ();
5099}
5100
5101/* Set memory write permission independently of observer mode. */
5102
5103static void
5104set_write_memory_permission (char *args, int from_tty,
5105 struct cmd_list_element *c)
5106{
5107 /* Make the real values match the user-changed values. */
5108 may_write_memory = may_write_memory_1;
5109 update_observer_mode ();
5110}
5111
5112
c906108c 5113void
fba45db2 5114initialize_targets (void)
c906108c
SS
5115{
5116 init_dummy_target ();
5117 push_target (&dummy_target);
5118
5119 add_info ("target", target_info, targ_desc);
5120 add_info ("files", target_info, targ_desc);
5121
ccce17b0 5122 add_setshow_zuinteger_cmd ("target", class_maintenance, &targetdebug, _("\
85c07804
AC
5123Set target debugging."), _("\
5124Show target debugging."), _("\
333dabeb
DJ
5125When non-zero, target debugging is enabled. Higher numbers are more\n\
5126verbose. Changes do not take effect until the next \"run\" or \"target\"\n\
85c07804 5127command."),
ccce17b0
YQ
5128 NULL,
5129 show_targetdebug,
5130 &setdebuglist, &showdebuglist);
3a11626d 5131
2bc416ba 5132 add_setshow_boolean_cmd ("trust-readonly-sections", class_support,
7915a72c
AC
5133 &trust_readonly, _("\
5134Set mode for reading from readonly sections."), _("\
5135Show mode for reading from readonly sections."), _("\
3a11626d
MS
5136When this mode is on, memory reads from readonly sections (such as .text)\n\
5137will be read from the object file instead of from the target. This will\n\
7915a72c 5138result in significant performance improvement for remote targets."),
2c5b56ce 5139 NULL,
920d2a44 5140 show_trust_readonly,
e707bbc2 5141 &setlist, &showlist);
96baa820
JM
5142
5143 add_com ("monitor", class_obscure, do_monitor_command,
1bedd215 5144 _("Send a command to the remote monitor (remote targets only)."));
96baa820 5145
87680a14
JB
5146 add_cmd ("target-stack", class_maintenance, maintenance_print_target_stack,
5147 _("Print the name of each layer of the internal target stack."),
5148 &maintenanceprintlist);
5149
c6ebd6cf
VP
5150 add_setshow_boolean_cmd ("target-async", no_class,
5151 &target_async_permitted_1, _("\
5152Set whether gdb controls the inferior in asynchronous mode."), _("\
5153Show whether gdb controls the inferior in asynchronous mode."), _("\
5154Tells gdb whether to control the inferior in asynchronous mode."),
9401a810
PA
5155 set_target_async_command,
5156 show_target_async_command,
c6ebd6cf
VP
5157 &setlist,
5158 &showlist);
5159
d914c394
SS
5160 add_setshow_boolean_cmd ("may-write-registers", class_support,
5161 &may_write_registers_1, _("\
5162Set permission to write into registers."), _("\
5163Show permission to write into registers."), _("\
5164When this permission is on, GDB may write into the target's registers.\n\
5165Otherwise, any sort of write attempt will result in an error."),
5166 set_target_permissions, NULL,
5167 &setlist, &showlist);
5168
5169 add_setshow_boolean_cmd ("may-write-memory", class_support,
5170 &may_write_memory_1, _("\
5171Set permission to write into target memory."), _("\
5172Show permission to write into target memory."), _("\
5173When this permission is on, GDB may write into the target's memory.\n\
5174Otherwise, any sort of write attempt will result in an error."),
5175 set_write_memory_permission, NULL,
5176 &setlist, &showlist);
5177
5178 add_setshow_boolean_cmd ("may-insert-breakpoints", class_support,
5179 &may_insert_breakpoints_1, _("\
5180Set permission to insert breakpoints in the target."), _("\
5181Show permission to insert breakpoints in the target."), _("\
5182When this permission is on, GDB may insert breakpoints in the program.\n\
5183Otherwise, any sort of insertion attempt will result in an error."),
5184 set_target_permissions, NULL,
5185 &setlist, &showlist);
5186
5187 add_setshow_boolean_cmd ("may-insert-tracepoints", class_support,
5188 &may_insert_tracepoints_1, _("\
5189Set permission to insert tracepoints in the target."), _("\
5190Show permission to insert tracepoints in the target."), _("\
5191When this permission is on, GDB may insert tracepoints in the program.\n\
5192Otherwise, any sort of insertion attempt will result in an error."),
5193 set_target_permissions, NULL,
5194 &setlist, &showlist);
5195
5196 add_setshow_boolean_cmd ("may-insert-fast-tracepoints", class_support,
5197 &may_insert_fast_tracepoints_1, _("\
5198Set permission to insert fast tracepoints in the target."), _("\
5199Show permission to insert fast tracepoints in the target."), _("\
5200When this permission is on, GDB may insert fast tracepoints.\n\
5201Otherwise, any sort of insertion attempt will result in an error."),
5202 set_target_permissions, NULL,
5203 &setlist, &showlist);
5204
5205 add_setshow_boolean_cmd ("may-interrupt", class_support,
5206 &may_stop_1, _("\
5207Set permission to interrupt or signal the target."), _("\
5208Show permission to interrupt or signal the target."), _("\
5209When this permission is on, GDB may interrupt/stop the target's execution.\n\
5210Otherwise, any attempt to interrupt or stop will be ignored."),
5211 set_target_permissions, NULL,
5212 &setlist, &showlist);
c906108c 5213}