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