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