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