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