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