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