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