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