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