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