OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [gdb/] [target.c] - Blame information for rev 866

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 jeremybenn
/* Select target systems and architectures at runtime for GDB.
2
 
3
   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4
   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
5
   Free Software Foundation, Inc.
6
 
7
   Contributed by Cygnus Support.
8
 
9
   This file is part of GDB.
10
 
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
13
   the Free Software Foundation; either version 3 of the License, or
14
   (at your option) any later version.
15
 
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.
20
 
21
   You should have received a copy of the GNU General Public License
22
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
23
 
24
#include "defs.h"
25
#include <errno.h>
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"
34
#include "gdb_wait.h"
35
#include "dcache.h"
36
#include <signal.h>
37
#include "regcache.h"
38
#include "gdb_assert.h"
39
#include "gdbcore.h"
40
#include "exceptions.h"
41
#include "target-descriptions.h"
42
 
43
static void target_info (char *, int);
44
 
45
static void maybe_kill_then_attach (char *, int);
46
 
47
static void kill_or_be_killed (int);
48
 
49
static void default_terminal_info (char *, int);
50
 
51
static int default_region_ok_for_hw_watchpoint (CORE_ADDR, int);
52
 
53
static int nosymbol (char *, CORE_ADDR *);
54
 
55
static void tcomplain (void) ATTR_NORETURN;
56
 
57
static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
58
 
59
static int return_zero (void);
60
 
61
static int return_one (void);
62
 
63
static int return_minus_one (void);
64
 
65
void target_ignore (void);
66
 
67
static void target_command (char *, int);
68
 
69
static struct target_ops *find_default_run_target (char *);
70
 
71
static void nosupport_runtime (void);
72
 
73
static LONGEST default_xfer_partial (struct target_ops *ops,
74
                                     enum target_object object,
75
                                     const char *annex, gdb_byte *readbuf,
76
                                     const gdb_byte *writebuf,
77
                                     ULONGEST offset, LONGEST len);
78
 
79
static LONGEST current_xfer_partial (struct target_ops *ops,
80
                                     enum target_object object,
81
                                     const char *annex, gdb_byte *readbuf,
82
                                     const gdb_byte *writebuf,
83
                                     ULONGEST offset, LONGEST len);
84
 
85
static LONGEST target_xfer_partial (struct target_ops *ops,
86
                                    enum target_object object,
87
                                    const char *annex,
88
                                    void *readbuf, const void *writebuf,
89
                                    ULONGEST offset, LONGEST len);
90
 
91
static void init_dummy_target (void);
92
 
93
static struct target_ops debug_target;
94
 
95
static void debug_to_open (char *, int);
96
 
97
static void debug_to_close (int);
98
 
99
static void debug_to_attach (char *, int);
100
 
101
static void debug_to_detach (char *, int);
102
 
103
static void debug_to_resume (ptid_t, int, enum target_signal);
104
 
105
static ptid_t debug_to_wait (ptid_t, struct target_waitstatus *);
106
 
107
static void debug_to_fetch_registers (struct regcache *, int);
108
 
109
static void debug_to_store_registers (struct regcache *, int);
110
 
111
static void debug_to_prepare_to_store (struct regcache *);
112
 
113
static void debug_to_files_info (struct target_ops *);
114
 
115
static int debug_to_insert_breakpoint (struct bp_target_info *);
116
 
117
static int debug_to_remove_breakpoint (struct bp_target_info *);
118
 
119
static int debug_to_can_use_hw_breakpoint (int, int, int);
120
 
121
static int debug_to_insert_hw_breakpoint (struct bp_target_info *);
122
 
123
static int debug_to_remove_hw_breakpoint (struct bp_target_info *);
124
 
125
static int debug_to_insert_watchpoint (CORE_ADDR, int, int);
126
 
127
static int debug_to_remove_watchpoint (CORE_ADDR, int, int);
128
 
129
static int debug_to_stopped_by_watchpoint (void);
130
 
131
static int debug_to_stopped_data_address (struct target_ops *, CORE_ADDR *);
132
 
133
static int debug_to_region_ok_for_hw_watchpoint (CORE_ADDR, int);
134
 
135
static void debug_to_terminal_init (void);
136
 
137
static void debug_to_terminal_inferior (void);
138
 
139
static void debug_to_terminal_ours_for_output (void);
140
 
141
static void debug_to_terminal_save_ours (void);
142
 
143
static void debug_to_terminal_ours (void);
144
 
145
static void debug_to_terminal_info (char *, int);
146
 
147
static void debug_to_kill (void);
148
 
149
static void debug_to_load (char *, int);
150
 
151
static int debug_to_lookup_symbol (char *, CORE_ADDR *);
152
 
153
static void debug_to_mourn_inferior (void);
154
 
155
static int debug_to_can_run (void);
156
 
157
static void debug_to_notice_signals (ptid_t);
158
 
159
static int debug_to_thread_alive (ptid_t);
160
 
161
static void debug_to_stop (void);
162
 
163
/* NOTE: cagney/2004-09-29: Many targets reference this variable in
164
   wierd and mysterious ways.  Putting the variable here lets those
165
   wierd and mysterious ways keep building while they are being
166
   converted to the inferior inheritance structure.  */
167
struct target_ops deprecated_child_ops;
168
 
169
/* Pointer to array of target architecture structures; the size of the
170
   array; the current index into the array; the allocated size of the
171
   array.  */
172
struct target_ops **target_structs;
173
unsigned target_struct_size;
174
unsigned target_struct_index;
175
unsigned target_struct_allocsize;
176
#define DEFAULT_ALLOCSIZE       10
177
 
178
/* The initial current target, so that there is always a semi-valid
179
   current target.  */
180
 
181
static struct target_ops dummy_target;
182
 
183
/* Top of target stack.  */
184
 
185
static struct target_ops *target_stack;
186
 
187
/* The target structure we are currently using to talk to a process
188
   or file or whatever "inferior" we have.  */
189
 
190
struct target_ops current_target;
191
 
192
/* Command list for target.  */
193
 
194
static struct cmd_list_element *targetlist = NULL;
195
 
196
/* Nonzero if we are debugging an attached outside process
197
   rather than an inferior.  */
198
 
199
int attach_flag;
200
 
201
/* Nonzero if we should trust readonly sections from the
202
   executable when reading memory.  */
203
 
204
static int trust_readonly = 0;
205
 
206
/* Non-zero if we want to see trace of target level stuff.  */
207
 
208
static int targetdebug = 0;
209
static void
210
show_targetdebug (struct ui_file *file, int from_tty,
211
                  struct cmd_list_element *c, const char *value)
212
{
213
  fprintf_filtered (file, _("Target debugging is %s.\n"), value);
214
}
215
 
216
static void setup_target_debug (void);
217
 
218
DCACHE *target_dcache;
219
 
220
/* The user just typed 'target' without the name of a target.  */
221
 
222
static void
223
target_command (char *arg, int from_tty)
224
{
225
  fputs_filtered ("Argument required (target name).  Try `help target'\n",
226
                  gdb_stdout);
227
}
228
 
229
/* Add a possible target architecture to the list.  */
230
 
231
void
232
add_target (struct target_ops *t)
233
{
234
  /* Provide default values for all "must have" methods.  */
235
  if (t->to_xfer_partial == NULL)
236
    t->to_xfer_partial = default_xfer_partial;
237
 
238
  if (!target_structs)
239
    {
240
      target_struct_allocsize = DEFAULT_ALLOCSIZE;
241
      target_structs = (struct target_ops **) xmalloc
242
        (target_struct_allocsize * sizeof (*target_structs));
243
    }
244
  if (target_struct_size >= target_struct_allocsize)
245
    {
246
      target_struct_allocsize *= 2;
247
      target_structs = (struct target_ops **)
248
        xrealloc ((char *) target_structs,
249
                  target_struct_allocsize * sizeof (*target_structs));
250
    }
251
  target_structs[target_struct_size++] = t;
252
 
253
  if (targetlist == NULL)
254
    add_prefix_cmd ("target", class_run, target_command, _("\
255
Connect to a target machine or process.\n\
256
The first argument is the type or protocol of the target machine.\n\
257
Remaining arguments are interpreted by the target protocol.  For more\n\
258
information on the arguments for a particular protocol, type\n\
259
`help target ' followed by the protocol name."),
260
                    &targetlist, "target ", 0, &cmdlist);
261
  add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
262
}
263
 
264
/* Stub functions */
265
 
266
void
267
target_ignore (void)
268
{
269
}
270
 
271
void
272
target_load (char *arg, int from_tty)
273
{
274
  dcache_invalidate (target_dcache);
275
  (*current_target.to_load) (arg, from_tty);
276
}
277
 
278
static int
279
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
280
          struct target_ops *t)
281
{
282
  errno = EIO;                  /* Can't read/write this location */
283
  return 0;                      /* No bytes handled */
284
}
285
 
286
static void
287
tcomplain (void)
288
{
289
  error (_("You can't do that when your target is `%s'"),
290
         current_target.to_shortname);
291
}
292
 
293
void
294
noprocess (void)
295
{
296
  error (_("You can't do that without a process to debug."));
297
}
298
 
299
static int
300
nosymbol (char *name, CORE_ADDR *addrp)
301
{
302
  return 1;                     /* Symbol does not exist in target env */
303
}
304
 
305
static void
306
nosupport_runtime (void)
307
{
308
  if (ptid_equal (inferior_ptid, null_ptid))
309
    noprocess ();
310
  else
311
    error (_("No run-time support for this"));
312
}
313
 
314
 
315
static void
316
default_terminal_info (char *args, int from_tty)
317
{
318
  printf_unfiltered (_("No saved terminal information.\n"));
319
}
320
 
321
/* This is the default target_create_inferior and target_attach function.
322
   If the current target is executing, it asks whether to kill it off.
323
   If this function returns without calling error(), it has killed off
324
   the target, and the operation should be attempted.  */
325
 
326
static void
327
kill_or_be_killed (int from_tty)
328
{
329
  if (target_has_execution)
330
    {
331
      printf_unfiltered (_("You are already running a program:\n"));
332
      target_files_info ();
333
      if (query ("Kill it? "))
334
        {
335
          target_kill ();
336
          if (target_has_execution)
337
            error (_("Killing the program did not help."));
338
          return;
339
        }
340
      else
341
        {
342
          error (_("Program not killed."));
343
        }
344
    }
345
  tcomplain ();
346
}
347
 
348
static void
349
maybe_kill_then_attach (char *args, int from_tty)
350
{
351
  kill_or_be_killed (from_tty);
352
  target_attach (args, from_tty);
353
}
354
 
355
static void
356
maybe_kill_then_create_inferior (char *exec, char *args, char **env,
357
                                 int from_tty)
358
{
359
  kill_or_be_killed (0);
360
  target_create_inferior (exec, args, env, from_tty);
361
}
362
 
363
/* Go through the target stack from top to bottom, copying over zero
364
   entries in current_target, then filling in still empty entries.  In
365
   effect, we are doing class inheritance through the pushed target
366
   vectors.
367
 
368
   NOTE: cagney/2003-10-17: The problem with this inheritance, as it
369
   is currently implemented, is that it discards any knowledge of
370
   which target an inherited method originally belonged to.
371
   Consequently, new new target methods should instead explicitly and
372
   locally search the target stack for the target that can handle the
373
   request.  */
374
 
375
static void
376
update_current_target (void)
377
{
378
  struct target_ops *t;
379
 
380
  /* First, reset current's contents.  */
381
  memset (&current_target, 0, sizeof (current_target));
382
 
383
#define INHERIT(FIELD, TARGET) \
384
      if (!current_target.FIELD) \
385
        current_target.FIELD = (TARGET)->FIELD
386
 
387
  for (t = target_stack; t; t = t->beneath)
388
    {
389
      INHERIT (to_shortname, t);
390
      INHERIT (to_longname, t);
391
      INHERIT (to_doc, t);
392
      INHERIT (to_open, t);
393
      INHERIT (to_close, t);
394
      INHERIT (to_attach, t);
395
      INHERIT (to_post_attach, t);
396
      INHERIT (to_detach, t);
397
      /* Do not inherit to_disconnect.  */
398
      INHERIT (to_resume, t);
399
      INHERIT (to_wait, t);
400
      INHERIT (to_fetch_registers, t);
401
      INHERIT (to_store_registers, t);
402
      INHERIT (to_prepare_to_store, t);
403
      INHERIT (deprecated_xfer_memory, t);
404
      INHERIT (to_files_info, t);
405
      INHERIT (to_insert_breakpoint, t);
406
      INHERIT (to_remove_breakpoint, t);
407
      INHERIT (to_can_use_hw_breakpoint, t);
408
      INHERIT (to_insert_hw_breakpoint, t);
409
      INHERIT (to_remove_hw_breakpoint, t);
410
      INHERIT (to_insert_watchpoint, t);
411
      INHERIT (to_remove_watchpoint, t);
412
      INHERIT (to_stopped_data_address, t);
413
      INHERIT (to_stopped_by_watchpoint, t);
414
      INHERIT (to_have_steppable_watchpoint, t);
415
      INHERIT (to_have_continuable_watchpoint, t);
416
      INHERIT (to_region_ok_for_hw_watchpoint, t);
417
      INHERIT (to_terminal_init, t);
418
      INHERIT (to_terminal_inferior, t);
419
      INHERIT (to_terminal_ours_for_output, t);
420
      INHERIT (to_terminal_ours, t);
421
      INHERIT (to_terminal_save_ours, t);
422
      INHERIT (to_terminal_info, t);
423
      INHERIT (to_kill, t);
424
      INHERIT (to_load, t);
425
      INHERIT (to_lookup_symbol, t);
426
      INHERIT (to_create_inferior, t);
427
      INHERIT (to_post_startup_inferior, t);
428
      INHERIT (to_acknowledge_created_inferior, t);
429
      INHERIT (to_insert_fork_catchpoint, t);
430
      INHERIT (to_remove_fork_catchpoint, t);
431
      INHERIT (to_insert_vfork_catchpoint, t);
432
      INHERIT (to_remove_vfork_catchpoint, t);
433
      /* Do not inherit to_follow_fork.  */
434
      INHERIT (to_insert_exec_catchpoint, t);
435
      INHERIT (to_remove_exec_catchpoint, t);
436
      INHERIT (to_reported_exec_events_per_exec_call, t);
437
      INHERIT (to_has_exited, t);
438
      INHERIT (to_mourn_inferior, t);
439
      INHERIT (to_can_run, t);
440
      INHERIT (to_notice_signals, t);
441
      INHERIT (to_thread_alive, t);
442
      INHERIT (to_find_new_threads, t);
443
      INHERIT (to_pid_to_str, t);
444
      INHERIT (to_extra_thread_info, t);
445
      INHERIT (to_stop, t);
446
      /* Do not inherit to_xfer_partial.  */
447
      INHERIT (to_rcmd, t);
448
      INHERIT (to_pid_to_exec_file, t);
449
      INHERIT (to_log_command, t);
450
      INHERIT (to_stratum, t);
451
      INHERIT (to_has_all_memory, t);
452
      INHERIT (to_has_memory, t);
453
      INHERIT (to_has_stack, t);
454
      INHERIT (to_has_registers, t);
455
      INHERIT (to_has_execution, t);
456
      INHERIT (to_has_thread_control, t);
457
      INHERIT (to_sections, t);
458
      INHERIT (to_sections_end, t);
459
      INHERIT (to_can_async_p, t);
460
      INHERIT (to_is_async_p, t);
461
      INHERIT (to_async, t);
462
      INHERIT (to_async_mask_value, t);
463
      INHERIT (to_find_memory_regions, t);
464
      INHERIT (to_make_corefile_notes, t);
465
      INHERIT (to_get_thread_local_address, t);
466
      /* Do not inherit to_read_description.  */
467
      INHERIT (to_magic, t);
468
      /* Do not inherit to_memory_map.  */
469
      /* Do not inherit to_flash_erase.  */
470
      /* Do not inherit to_flash_done.  */
471
    }
472
#undef INHERIT
473
 
474
  /* Clean up a target struct so it no longer has any zero pointers in
475
     it.  Some entries are defaulted to a method that print an error,
476
     others are hard-wired to a standard recursive default.  */
477
 
478
#define de_fault(field, value) \
479
  if (!current_target.field)               \
480
    current_target.field = value
481
 
482
  de_fault (to_open,
483
            (void (*) (char *, int))
484
            tcomplain);
485
  de_fault (to_close,
486
            (void (*) (int))
487
            target_ignore);
488
  de_fault (to_attach,
489
            maybe_kill_then_attach);
490
  de_fault (to_post_attach,
491
            (void (*) (int))
492
            target_ignore);
493
  de_fault (to_detach,
494
            (void (*) (char *, int))
495
            target_ignore);
496
  de_fault (to_resume,
497
            (void (*) (ptid_t, int, enum target_signal))
498
            noprocess);
499
  de_fault (to_wait,
500
            (ptid_t (*) (ptid_t, struct target_waitstatus *))
501
            noprocess);
502
  de_fault (to_fetch_registers,
503
            (void (*) (struct regcache *, int))
504
            target_ignore);
505
  de_fault (to_store_registers,
506
            (void (*) (struct regcache *, int))
507
            noprocess);
508
  de_fault (to_prepare_to_store,
509
            (void (*) (struct regcache *))
510
            noprocess);
511
  de_fault (deprecated_xfer_memory,
512
            (int (*) (CORE_ADDR, gdb_byte *, int, int, struct mem_attrib *, struct target_ops *))
513
            nomemory);
514
  de_fault (to_files_info,
515
            (void (*) (struct target_ops *))
516
            target_ignore);
517
  de_fault (to_insert_breakpoint,
518
            memory_insert_breakpoint);
519
  de_fault (to_remove_breakpoint,
520
            memory_remove_breakpoint);
521
  de_fault (to_can_use_hw_breakpoint,
522
            (int (*) (int, int, int))
523
            return_zero);
524
  de_fault (to_insert_hw_breakpoint,
525
            (int (*) (struct bp_target_info *))
526
            return_minus_one);
527
  de_fault (to_remove_hw_breakpoint,
528
            (int (*) (struct bp_target_info *))
529
            return_minus_one);
530
  de_fault (to_insert_watchpoint,
531
            (int (*) (CORE_ADDR, int, int))
532
            return_minus_one);
533
  de_fault (to_remove_watchpoint,
534
            (int (*) (CORE_ADDR, int, int))
535
            return_minus_one);
536
  de_fault (to_stopped_by_watchpoint,
537
            (int (*) (void))
538
            return_zero);
539
  de_fault (to_stopped_data_address,
540
            (int (*) (struct target_ops *, CORE_ADDR *))
541
            return_zero);
542
  de_fault (to_region_ok_for_hw_watchpoint,
543
            default_region_ok_for_hw_watchpoint);
544
  de_fault (to_terminal_init,
545
            (void (*) (void))
546
            target_ignore);
547
  de_fault (to_terminal_inferior,
548
            (void (*) (void))
549
            target_ignore);
550
  de_fault (to_terminal_ours_for_output,
551
            (void (*) (void))
552
            target_ignore);
553
  de_fault (to_terminal_ours,
554
            (void (*) (void))
555
            target_ignore);
556
  de_fault (to_terminal_save_ours,
557
            (void (*) (void))
558
            target_ignore);
559
  de_fault (to_terminal_info,
560
            default_terminal_info);
561
  de_fault (to_kill,
562
            (void (*) (void))
563
            noprocess);
564
  de_fault (to_load,
565
            (void (*) (char *, int))
566
            tcomplain);
567
  de_fault (to_lookup_symbol,
568
            (int (*) (char *, CORE_ADDR *))
569
            nosymbol);
570
  de_fault (to_create_inferior,
571
            maybe_kill_then_create_inferior);
572
  de_fault (to_post_startup_inferior,
573
            (void (*) (ptid_t))
574
            target_ignore);
575
  de_fault (to_acknowledge_created_inferior,
576
            (void (*) (int))
577
            target_ignore);
578
  de_fault (to_insert_fork_catchpoint,
579
            (void (*) (int))
580
            tcomplain);
581
  de_fault (to_remove_fork_catchpoint,
582
            (int (*) (int))
583
            tcomplain);
584
  de_fault (to_insert_vfork_catchpoint,
585
            (void (*) (int))
586
            tcomplain);
587
  de_fault (to_remove_vfork_catchpoint,
588
            (int (*) (int))
589
            tcomplain);
590
  de_fault (to_insert_exec_catchpoint,
591
            (void (*) (int))
592
            tcomplain);
593
  de_fault (to_remove_exec_catchpoint,
594
            (int (*) (int))
595
            tcomplain);
596
  de_fault (to_reported_exec_events_per_exec_call,
597
            (int (*) (void))
598
            return_one);
599
  de_fault (to_has_exited,
600
            (int (*) (int, int, int *))
601
            return_zero);
602
  de_fault (to_mourn_inferior,
603
            (void (*) (void))
604
            noprocess);
605
  de_fault (to_can_run,
606
            return_zero);
607
  de_fault (to_notice_signals,
608
            (void (*) (ptid_t))
609
            target_ignore);
610
  de_fault (to_thread_alive,
611
            (int (*) (ptid_t))
612
            return_zero);
613
  de_fault (to_find_new_threads,
614
            (void (*) (void))
615
            target_ignore);
616
  de_fault (to_extra_thread_info,
617
            (char *(*) (struct thread_info *))
618
            return_zero);
619
  de_fault (to_stop,
620
            (void (*) (void))
621
            target_ignore);
622
  current_target.to_xfer_partial = current_xfer_partial;
623
  de_fault (to_rcmd,
624
            (void (*) (char *, struct ui_file *))
625
            tcomplain);
626
  de_fault (to_pid_to_exec_file,
627
            (char *(*) (int))
628
            return_zero);
629
  de_fault (to_can_async_p,
630
            (int (*) (void))
631
            return_zero);
632
  de_fault (to_is_async_p,
633
            (int (*) (void))
634
            return_zero);
635
  de_fault (to_async,
636
            (void (*) (void (*) (enum inferior_event_type, void*), void*))
637
            tcomplain);
638
  current_target.to_read_description = NULL;
639
#undef de_fault
640
 
641
  /* Finally, position the target-stack beneath the squashed
642
     "current_target".  That way code looking for a non-inherited
643
     target method can quickly and simply find it.  */
644
  current_target.beneath = target_stack;
645
 
646
  if (targetdebug)
647
    setup_target_debug ();
648
}
649
 
650
/* Mark OPS as a running target.  This reverses the effect
651
   of target_mark_exited.  */
652
 
653
void
654
target_mark_running (struct target_ops *ops)
655
{
656
  struct target_ops *t;
657
 
658
  for (t = target_stack; t != NULL; t = t->beneath)
659
    if (t == ops)
660
      break;
661
  if (t == NULL)
662
    internal_error (__FILE__, __LINE__,
663
                    "Attempted to mark unpushed target \"%s\" as running",
664
                    ops->to_shortname);
665
 
666
  ops->to_has_execution = 1;
667
  ops->to_has_all_memory = 1;
668
  ops->to_has_memory = 1;
669
  ops->to_has_stack = 1;
670
  ops->to_has_registers = 1;
671
 
672
  update_current_target ();
673
}
674
 
675
/* Mark OPS as a non-running target.  This reverses the effect
676
   of target_mark_running.  */
677
 
678
void
679
target_mark_exited (struct target_ops *ops)
680
{
681
  struct target_ops *t;
682
 
683
  for (t = target_stack; t != NULL; t = t->beneath)
684
    if (t == ops)
685
      break;
686
  if (t == NULL)
687
    internal_error (__FILE__, __LINE__,
688
                    "Attempted to mark unpushed target \"%s\" as running",
689
                    ops->to_shortname);
690
 
691
  ops->to_has_execution = 0;
692
  ops->to_has_all_memory = 0;
693
  ops->to_has_memory = 0;
694
  ops->to_has_stack = 0;
695
  ops->to_has_registers = 0;
696
 
697
  update_current_target ();
698
}
699
 
700
/* Push a new target type into the stack of the existing target accessors,
701
   possibly superseding some of the existing accessors.
702
 
703
   Result is zero if the pushed target ended up on top of the stack,
704
   nonzero if at least one target is on top of it.
705
 
706
   Rather than allow an empty stack, we always have the dummy target at
707
   the bottom stratum, so we can call the function vectors without
708
   checking them.  */
709
 
710
int
711
push_target (struct target_ops *t)
712
{
713
  struct target_ops **cur;
714
 
715
  /* Check magic number.  If wrong, it probably means someone changed
716
     the struct definition, but not all the places that initialize one.  */
717
  if (t->to_magic != OPS_MAGIC)
718
    {
719
      fprintf_unfiltered (gdb_stderr,
720
                          "Magic number of %s target struct wrong\n",
721
                          t->to_shortname);
722
      internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
723
    }
724
 
725
  /* Find the proper stratum to install this target in.  */
726
  for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
727
    {
728
      if ((int) (t->to_stratum) >= (int) (*cur)->to_stratum)
729
        break;
730
    }
731
 
732
  /* If there's already targets at this stratum, remove them.  */
733
  /* FIXME: cagney/2003-10-15: I think this should be popping all
734
     targets to CUR, and not just those at this stratum level.  */
735
  while ((*cur) != NULL && t->to_stratum == (*cur)->to_stratum)
736
    {
737
      /* There's already something at this stratum level.  Close it,
738
         and un-hook it from the stack.  */
739
      struct target_ops *tmp = (*cur);
740
      (*cur) = (*cur)->beneath;
741
      tmp->beneath = NULL;
742
      target_close (tmp, 0);
743
    }
744
 
745
  /* We have removed all targets in our stratum, now add the new one.  */
746
  t->beneath = (*cur);
747
  (*cur) = t;
748
 
749
  update_current_target ();
750
 
751
  /* Not on top?  */
752
  return (t != target_stack);
753
}
754
 
755
/* Remove a target_ops vector from the stack, wherever it may be.
756
   Return how many times it was removed (0 or 1).  */
757
 
758
int
759
unpush_target (struct target_ops *t)
760
{
761
  struct target_ops **cur;
762
  struct target_ops *tmp;
763
 
764
  /* Look for the specified target.  Note that we assume that a target
765
     can only occur once in the target stack. */
766
 
767
  for (cur = &target_stack; (*cur) != NULL; cur = &(*cur)->beneath)
768
    {
769
      if ((*cur) == t)
770
        break;
771
    }
772
 
773
  if ((*cur) == NULL)
774
    return 0;                    /* Didn't find target_ops, quit now */
775
 
776
  /* NOTE: cagney/2003-12-06: In '94 the close call was made
777
     unconditional by moving it to before the above check that the
778
     target was in the target stack (something about "Change the way
779
     pushing and popping of targets work to support target overlays
780
     and inheritance").  This doesn't make much sense - only open
781
     targets should be closed.  */
782
  target_close (t, 0);
783
 
784
  /* Unchain the target */
785
  tmp = (*cur);
786
  (*cur) = (*cur)->beneath;
787
  tmp->beneath = NULL;
788
 
789
  update_current_target ();
790
 
791
  return 1;
792
}
793
 
794
void
795
pop_target (void)
796
{
797
  target_close (&current_target, 0);     /* Let it clean up */
798
  if (unpush_target (target_stack) == 1)
799
    return;
800
 
801
  fprintf_unfiltered (gdb_stderr,
802
                      "pop_target couldn't find target %s\n",
803
                      current_target.to_shortname);
804
  internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
805
}
806
 
807
/* Using the objfile specified in OBJFILE, find the address for the
808
   current thread's thread-local storage with offset OFFSET.  */
809
CORE_ADDR
810
target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
811
{
812
  volatile CORE_ADDR addr = 0;
813
 
814
  if (target_get_thread_local_address_p ()
815
      && gdbarch_fetch_tls_load_module_address_p (current_gdbarch))
816
    {
817
      ptid_t ptid = inferior_ptid;
818
      volatile struct gdb_exception ex;
819
 
820
      TRY_CATCH (ex, RETURN_MASK_ALL)
821
        {
822
          CORE_ADDR lm_addr;
823
 
824
          /* Fetch the load module address for this objfile.  */
825
          lm_addr = gdbarch_fetch_tls_load_module_address (current_gdbarch,
826
                                                           objfile);
827
          /* If it's 0, throw the appropriate exception.  */
828
          if (lm_addr == 0)
829
            throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
830
                         _("TLS load module not found"));
831
 
832
          addr = target_get_thread_local_address (ptid, lm_addr, offset);
833
        }
834
      /* If an error occurred, print TLS related messages here.  Otherwise,
835
         throw the error to some higher catcher.  */
836
      if (ex.reason < 0)
837
        {
838
          int objfile_is_library = (objfile->flags & OBJF_SHARED);
839
 
840
          switch (ex.error)
841
            {
842
            case TLS_NO_LIBRARY_SUPPORT_ERROR:
843
              error (_("Cannot find thread-local variables in this thread library."));
844
              break;
845
            case TLS_LOAD_MODULE_NOT_FOUND_ERROR:
846
              if (objfile_is_library)
847
                error (_("Cannot find shared library `%s' in dynamic"
848
                         " linker's load module list"), objfile->name);
849
              else
850
                error (_("Cannot find executable file `%s' in dynamic"
851
                         " linker's load module list"), objfile->name);
852
              break;
853
            case TLS_NOT_ALLOCATED_YET_ERROR:
854
              if (objfile_is_library)
855
                error (_("The inferior has not yet allocated storage for"
856
                         " thread-local variables in\n"
857
                         "the shared library `%s'\n"
858
                         "for %s"),
859
                       objfile->name, target_pid_to_str (ptid));
860
              else
861
                error (_("The inferior has not yet allocated storage for"
862
                         " thread-local variables in\n"
863
                         "the executable `%s'\n"
864
                         "for %s"),
865
                       objfile->name, target_pid_to_str (ptid));
866
              break;
867
            case TLS_GENERIC_ERROR:
868
              if (objfile_is_library)
869
                error (_("Cannot find thread-local storage for %s, "
870
                         "shared library %s:\n%s"),
871
                       target_pid_to_str (ptid),
872
                       objfile->name, ex.message);
873
              else
874
                error (_("Cannot find thread-local storage for %s, "
875
                         "executable file %s:\n%s"),
876
                       target_pid_to_str (ptid),
877
                       objfile->name, ex.message);
878
              break;
879
            default:
880
              throw_exception (ex);
881
              break;
882
            }
883
        }
884
    }
885
  /* It wouldn't be wrong here to try a gdbarch method, too; finding
886
     TLS is an ABI-specific thing.  But we don't do that yet.  */
887
  else
888
    error (_("Cannot find thread-local variables on this target"));
889
 
890
  return addr;
891
}
892
 
893
#undef  MIN
894
#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
895
 
896
/* target_read_string -- read a null terminated string, up to LEN bytes,
897
   from MEMADDR in target.  Set *ERRNOP to the errno code, or 0 if successful.
898
   Set *STRING to a pointer to malloc'd memory containing the data; the caller
899
   is responsible for freeing it.  Return the number of bytes successfully
900
   read.  */
901
 
902
int
903
target_read_string (CORE_ADDR memaddr, char **string, int len, int *errnop)
904
{
905
  int tlen, origlen, offset, i;
906
  gdb_byte buf[4];
907
  int errcode = 0;
908
  char *buffer;
909
  int buffer_allocated;
910
  char *bufptr;
911
  unsigned int nbytes_read = 0;
912
 
913
  gdb_assert (string);
914
 
915
  /* Small for testing.  */
916
  buffer_allocated = 4;
917
  buffer = xmalloc (buffer_allocated);
918
  bufptr = buffer;
919
 
920
  origlen = len;
921
 
922
  while (len > 0)
923
    {
924
      tlen = MIN (len, 4 - (memaddr & 3));
925
      offset = memaddr & 3;
926
 
927
      errcode = target_read_memory (memaddr & ~3, buf, sizeof buf);
928
      if (errcode != 0)
929
        {
930
          /* The transfer request might have crossed the boundary to an
931
             unallocated region of memory. Retry the transfer, requesting
932
             a single byte.  */
933
          tlen = 1;
934
          offset = 0;
935
          errcode = target_read_memory (memaddr, buf, 1);
936
          if (errcode != 0)
937
            goto done;
938
        }
939
 
940
      if (bufptr - buffer + tlen > buffer_allocated)
941
        {
942
          unsigned int bytes;
943
          bytes = bufptr - buffer;
944
          buffer_allocated *= 2;
945
          buffer = xrealloc (buffer, buffer_allocated);
946
          bufptr = buffer + bytes;
947
        }
948
 
949
      for (i = 0; i < tlen; i++)
950
        {
951
          *bufptr++ = buf[i + offset];
952
          if (buf[i + offset] == '\000')
953
            {
954
              nbytes_read += i + 1;
955
              goto done;
956
            }
957
        }
958
 
959
      memaddr += tlen;
960
      len -= tlen;
961
      nbytes_read += tlen;
962
    }
963
done:
964
  *string = buffer;
965
  if (errnop != NULL)
966
    *errnop = errcode;
967
  return nbytes_read;
968
}
969
 
970
/* Find a section containing ADDR.  */
971
struct section_table *
972
target_section_by_addr (struct target_ops *target, CORE_ADDR addr)
973
{
974
  struct section_table *secp;
975
  for (secp = target->to_sections;
976
       secp < target->to_sections_end;
977
       secp++)
978
    {
979
      if (addr >= secp->addr && addr < secp->endaddr)
980
        return secp;
981
    }
982
  return NULL;
983
}
984
 
985
/* Perform a partial memory transfer.  The arguments and return
986
   value are just as for target_xfer_partial.  */
987
 
988
static LONGEST
989
memory_xfer_partial (struct target_ops *ops, void *readbuf, const void *writebuf,
990
                     ULONGEST memaddr, LONGEST len)
991
{
992
  LONGEST res;
993
  int reg_len;
994
  struct mem_region *region;
995
 
996
  /* Zero length requests are ok and require no work.  */
997
  if (len == 0)
998
    return 0;
999
 
1000
  /* Try the executable file, if "trust-readonly-sections" is set.  */
1001
  if (readbuf != NULL && trust_readonly)
1002
    {
1003
      struct section_table *secp;
1004
 
1005
      secp = target_section_by_addr (ops, memaddr);
1006
      if (secp != NULL
1007
          && (bfd_get_section_flags (secp->bfd, secp->the_bfd_section)
1008
              & SEC_READONLY))
1009
        return xfer_memory (memaddr, readbuf, len, 0, NULL, ops);
1010
    }
1011
 
1012
  /* Likewise for accesses to unmapped overlay sections.  */
1013
  if (readbuf != NULL && overlay_debugging)
1014
    {
1015
      asection *section = find_pc_overlay (memaddr);
1016
      if (pc_in_unmapped_range (memaddr, section))
1017
        return xfer_memory (memaddr, readbuf, len, 0, NULL, ops);
1018
    }
1019
 
1020
  /* Try GDB's internal data cache.  */
1021
  region = lookup_mem_region (memaddr);
1022
  /* region->hi == 0 means there's no upper bound.  */
1023
  if (memaddr + len < region->hi || region->hi == 0)
1024
    reg_len = len;
1025
  else
1026
    reg_len = region->hi - memaddr;
1027
 
1028
  switch (region->attrib.mode)
1029
    {
1030
    case MEM_RO:
1031
      if (writebuf != NULL)
1032
        return -1;
1033
      break;
1034
 
1035
    case MEM_WO:
1036
      if (readbuf != NULL)
1037
        return -1;
1038
      break;
1039
 
1040
    case MEM_FLASH:
1041
      /* We only support writing to flash during "load" for now.  */
1042
      if (writebuf != NULL)
1043
        error (_("Writing to flash memory forbidden in this context"));
1044
      break;
1045
 
1046
    case MEM_NONE:
1047
      return -1;
1048
    }
1049
 
1050
  if (region->attrib.cache)
1051
    {
1052
      /* FIXME drow/2006-08-09: This call discards OPS, so the raw
1053
         memory request will start back at current_target.  */
1054
      if (readbuf != NULL)
1055
        res = dcache_xfer_memory (target_dcache, memaddr, readbuf,
1056
                                  reg_len, 0);
1057
      else
1058
        /* FIXME drow/2006-08-09: If we're going to preserve const
1059
           correctness dcache_xfer_memory should take readbuf and
1060
           writebuf.  */
1061
        res = dcache_xfer_memory (target_dcache, memaddr,
1062
                                  (void *) writebuf,
1063
                                  reg_len, 1);
1064
      if (res <= 0)
1065
        return -1;
1066
      else
1067
        return res;
1068
    }
1069
 
1070
  /* If none of those methods found the memory we wanted, fall back
1071
     to a target partial transfer.  Normally a single call to
1072
     to_xfer_partial is enough; if it doesn't recognize an object
1073
     it will call the to_xfer_partial of the next target down.
1074
     But for memory this won't do.  Memory is the only target
1075
     object which can be read from more than one valid target.
1076
     A core file, for instance, could have some of memory but
1077
     delegate other bits to the target below it.  So, we must
1078
     manually try all targets.  */
1079
 
1080
  do
1081
    {
1082
      res = ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL,
1083
                                  readbuf, writebuf, memaddr, reg_len);
1084
      if (res > 0)
1085
        return res;
1086
 
1087
      /* We want to continue past core files to executables, but not
1088
         past a running target's memory.  */
1089
      if (ops->to_has_all_memory)
1090
        return res;
1091
 
1092
      ops = ops->beneath;
1093
    }
1094
  while (ops != NULL);
1095
 
1096
  /* If we still haven't got anything, return the last error.  We
1097
     give up.  */
1098
  return res;
1099
}
1100
 
1101
static LONGEST
1102
target_xfer_partial (struct target_ops *ops,
1103
                     enum target_object object, const char *annex,
1104
                     void *readbuf, const void *writebuf,
1105
                     ULONGEST offset, LONGEST len)
1106
{
1107
  LONGEST retval;
1108
 
1109
  gdb_assert (ops->to_xfer_partial != NULL);
1110
 
1111
  /* If this is a memory transfer, let the memory-specific code
1112
     have a look at it instead.  Memory transfers are more
1113
     complicated.  */
1114
  if (object == TARGET_OBJECT_MEMORY)
1115
    retval = memory_xfer_partial (ops, readbuf, writebuf, offset, len);
1116
  else
1117
    {
1118
      enum target_object raw_object = object;
1119
 
1120
      /* If this is a raw memory transfer, request the normal
1121
         memory object from other layers.  */
1122
      if (raw_object == TARGET_OBJECT_RAW_MEMORY)
1123
        raw_object = TARGET_OBJECT_MEMORY;
1124
 
1125
      retval = ops->to_xfer_partial (ops, raw_object, annex, readbuf,
1126
                                     writebuf, offset, len);
1127
    }
1128
 
1129
  if (targetdebug)
1130
    {
1131
      const unsigned char *myaddr = NULL;
1132
 
1133
      fprintf_unfiltered (gdb_stdlog,
1134
                          "%s:target_xfer_partial (%d, %s, 0x%lx,  0x%lx,  0x%s, %s) = %s",
1135
                          ops->to_shortname,
1136
                          (int) object,
1137
                          (annex ? annex : "(null)"),
1138
                          (long) readbuf, (long) writebuf,
1139
                          paddr_nz (offset), paddr_d (len), paddr_d (retval));
1140
 
1141
      if (readbuf)
1142
        myaddr = readbuf;
1143
      if (writebuf)
1144
        myaddr = writebuf;
1145
      if (retval > 0 && myaddr != NULL)
1146
        {
1147
          int i;
1148
 
1149
          fputs_unfiltered (", bytes =", gdb_stdlog);
1150
          for (i = 0; i < retval; i++)
1151
            {
1152
              if ((((long) &(myaddr[i])) & 0xf) == 0)
1153
                {
1154
                  if (targetdebug < 2 && i > 0)
1155
                    {
1156
                      fprintf_unfiltered (gdb_stdlog, " ...");
1157
                      break;
1158
                    }
1159
                  fprintf_unfiltered (gdb_stdlog, "\n");
1160
                }
1161
 
1162
              fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
1163
            }
1164
        }
1165
 
1166
      fputc_unfiltered ('\n', gdb_stdlog);
1167
    }
1168
  return retval;
1169
}
1170
 
1171
/* Read LEN bytes of target memory at address MEMADDR, placing the results in
1172
   GDB's memory at MYADDR.  Returns either 0 for success or an errno value
1173
   if any error occurs.
1174
 
1175
   If an error occurs, no guarantee is made about the contents of the data at
1176
   MYADDR.  In particular, the caller should not depend upon partial reads
1177
   filling the buffer with good data.  There is no way for the caller to know
1178
   how much good data might have been transfered anyway.  Callers that can
1179
   deal with partial reads should call target_read (which will retry until
1180
   it makes no progress, and then return how much was transferred). */
1181
 
1182
int
1183
target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
1184
{
1185
  if (target_read (&current_target, TARGET_OBJECT_MEMORY, NULL,
1186
                   myaddr, memaddr, len) == len)
1187
    return 0;
1188
  else
1189
    return EIO;
1190
}
1191
 
1192
int
1193
target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
1194
{
1195
  if (target_write (&current_target, TARGET_OBJECT_MEMORY, NULL,
1196
                    myaddr, memaddr, len) == len)
1197
    return 0;
1198
  else
1199
    return EIO;
1200
}
1201
 
1202
/* Fetch the target's memory map.  */
1203
 
1204
VEC(mem_region_s) *
1205
target_memory_map (void)
1206
{
1207
  VEC(mem_region_s) *result;
1208
  struct mem_region *last_one, *this_one;
1209
  int ix;
1210
  struct target_ops *t;
1211
 
1212
  if (targetdebug)
1213
    fprintf_unfiltered (gdb_stdlog, "target_memory_map ()\n");
1214
 
1215
  for (t = current_target.beneath; t != NULL; t = t->beneath)
1216
    if (t->to_memory_map != NULL)
1217
      break;
1218
 
1219
  if (t == NULL)
1220
    return NULL;
1221
 
1222
  result = t->to_memory_map (t);
1223
  if (result == NULL)
1224
    return NULL;
1225
 
1226
  qsort (VEC_address (mem_region_s, result),
1227
         VEC_length (mem_region_s, result),
1228
         sizeof (struct mem_region), mem_region_cmp);
1229
 
1230
  /* Check that regions do not overlap.  Simultaneously assign
1231
     a numbering for the "mem" commands to use to refer to
1232
     each region.  */
1233
  last_one = NULL;
1234
  for (ix = 0; VEC_iterate (mem_region_s, result, ix, this_one); ix++)
1235
    {
1236
      this_one->number = ix;
1237
 
1238
      if (last_one && last_one->hi > this_one->lo)
1239
        {
1240
          warning (_("Overlapping regions in memory map: ignoring"));
1241
          VEC_free (mem_region_s, result);
1242
          return NULL;
1243
        }
1244
      last_one = this_one;
1245
    }
1246
 
1247
  return result;
1248
}
1249
 
1250
void
1251
target_flash_erase (ULONGEST address, LONGEST length)
1252
{
1253
  struct target_ops *t;
1254
 
1255
  for (t = current_target.beneath; t != NULL; t = t->beneath)
1256
    if (t->to_flash_erase != NULL)
1257
        {
1258
          if (targetdebug)
1259
            fprintf_unfiltered (gdb_stdlog, "target_flash_erase (%s, %s)\n",
1260
                                paddr (address), phex (length, 0));
1261
          t->to_flash_erase (t, address, length);
1262
          return;
1263
        }
1264
 
1265
  tcomplain ();
1266
}
1267
 
1268
void
1269
target_flash_done (void)
1270
{
1271
  struct target_ops *t;
1272
 
1273
  for (t = current_target.beneath; t != NULL; t = t->beneath)
1274
    if (t->to_flash_done != NULL)
1275
        {
1276
          if (targetdebug)
1277
            fprintf_unfiltered (gdb_stdlog, "target_flash_done\n");
1278
          t->to_flash_done (t);
1279
          return;
1280
        }
1281
 
1282
  tcomplain ();
1283
}
1284
 
1285
#ifndef target_stopped_data_address_p
1286
int
1287
target_stopped_data_address_p (struct target_ops *target)
1288
{
1289
  if (target->to_stopped_data_address
1290
      == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero)
1291
    return 0;
1292
  if (target->to_stopped_data_address == debug_to_stopped_data_address
1293
      && (debug_target.to_stopped_data_address
1294
          == (int (*) (struct target_ops *, CORE_ADDR *)) return_zero))
1295
    return 0;
1296
  return 1;
1297
}
1298
#endif
1299
 
1300
static void
1301
show_trust_readonly (struct ui_file *file, int from_tty,
1302
                     struct cmd_list_element *c, const char *value)
1303
{
1304
  fprintf_filtered (file, _("\
1305
Mode for reading from readonly sections is %s.\n"),
1306
                    value);
1307
}
1308
 
1309
/* More generic transfers.  */
1310
 
1311
static LONGEST
1312
default_xfer_partial (struct target_ops *ops, enum target_object object,
1313
                      const char *annex, gdb_byte *readbuf,
1314
                      const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1315
{
1316
  if (object == TARGET_OBJECT_MEMORY
1317
      && ops->deprecated_xfer_memory != NULL)
1318
    /* If available, fall back to the target's
1319
       "deprecated_xfer_memory" method.  */
1320
    {
1321
      int xfered = -1;
1322
      errno = 0;
1323
      if (writebuf != NULL)
1324
        {
1325
          void *buffer = xmalloc (len);
1326
          struct cleanup *cleanup = make_cleanup (xfree, buffer);
1327
          memcpy (buffer, writebuf, len);
1328
          xfered = ops->deprecated_xfer_memory (offset, buffer, len,
1329
                                                1/*write*/, NULL, ops);
1330
          do_cleanups (cleanup);
1331
        }
1332
      if (readbuf != NULL)
1333
        xfered = ops->deprecated_xfer_memory (offset, readbuf, len,
1334
                                              0/*read*/, NULL, ops);
1335
      if (xfered > 0)
1336
        return xfered;
1337
      else if (xfered == 0 && errno == 0)
1338
        /* "deprecated_xfer_memory" uses 0, cross checked against
1339
           ERRNO as one indication of an error.  */
1340
        return 0;
1341
      else
1342
        return -1;
1343
    }
1344
  else if (ops->beneath != NULL)
1345
    return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
1346
                                          readbuf, writebuf, offset, len);
1347
  else
1348
    return -1;
1349
}
1350
 
1351
/* The xfer_partial handler for the topmost target.  Unlike the default,
1352
   it does not need to handle memory specially; it just passes all
1353
   requests down the stack.  */
1354
 
1355
static LONGEST
1356
current_xfer_partial (struct target_ops *ops, enum target_object object,
1357
                      const char *annex, gdb_byte *readbuf,
1358
                      const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
1359
{
1360
  if (ops->beneath != NULL)
1361
    return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
1362
                                          readbuf, writebuf, offset, len);
1363
  else
1364
    return -1;
1365
}
1366
 
1367
/* Target vector read/write partial wrapper functions.
1368
 
1369
   NOTE: cagney/2003-10-21: I wonder if having "to_xfer_partial
1370
   (inbuf, outbuf)", instead of separate read/write methods, make life
1371
   easier.  */
1372
 
1373
static LONGEST
1374
target_read_partial (struct target_ops *ops,
1375
                     enum target_object object,
1376
                     const char *annex, gdb_byte *buf,
1377
                     ULONGEST offset, LONGEST len)
1378
{
1379
  return target_xfer_partial (ops, object, annex, buf, NULL, offset, len);
1380
}
1381
 
1382
static LONGEST
1383
target_write_partial (struct target_ops *ops,
1384
                      enum target_object object,
1385
                      const char *annex, const gdb_byte *buf,
1386
                      ULONGEST offset, LONGEST len)
1387
{
1388
  return target_xfer_partial (ops, object, annex, NULL, buf, offset, len);
1389
}
1390
 
1391
/* Wrappers to perform the full transfer.  */
1392
LONGEST
1393
target_read (struct target_ops *ops,
1394
             enum target_object object,
1395
             const char *annex, gdb_byte *buf,
1396
             ULONGEST offset, LONGEST len)
1397
{
1398
  LONGEST xfered = 0;
1399
  while (xfered < len)
1400
    {
1401
      LONGEST xfer = target_read_partial (ops, object, annex,
1402
                                          (gdb_byte *) buf + xfered,
1403
                                          offset + xfered, len - xfered);
1404
      /* Call an observer, notifying them of the xfer progress?  */
1405
      if (xfer == 0)
1406
        return xfered;
1407
      if (xfer < 0)
1408
        return -1;
1409
      xfered += xfer;
1410
      QUIT;
1411
    }
1412
  return len;
1413
}
1414
 
1415
/* An alternative to target_write with progress callbacks.  */
1416
 
1417
LONGEST
1418
target_write_with_progress (struct target_ops *ops,
1419
                            enum target_object object,
1420
                            const char *annex, const gdb_byte *buf,
1421
                            ULONGEST offset, LONGEST len,
1422
                            void (*progress) (ULONGEST, void *), void *baton)
1423
{
1424
  LONGEST xfered = 0;
1425
 
1426
  /* Give the progress callback a chance to set up.  */
1427
  if (progress)
1428
    (*progress) (0, baton);
1429
 
1430
  while (xfered < len)
1431
    {
1432
      LONGEST xfer = target_write_partial (ops, object, annex,
1433
                                           (gdb_byte *) buf + xfered,
1434
                                           offset + xfered, len - xfered);
1435
 
1436
      if (xfer == 0)
1437
        return xfered;
1438
      if (xfer < 0)
1439
        return -1;
1440
 
1441
      if (progress)
1442
        (*progress) (xfer, baton);
1443
 
1444
      xfered += xfer;
1445
      QUIT;
1446
    }
1447
  return len;
1448
}
1449
 
1450
LONGEST
1451
target_write (struct target_ops *ops,
1452
              enum target_object object,
1453
              const char *annex, const gdb_byte *buf,
1454
              ULONGEST offset, LONGEST len)
1455
{
1456
  return target_write_with_progress (ops, object, annex, buf, offset, len,
1457
                                     NULL, NULL);
1458
}
1459
 
1460
/* Read OBJECT/ANNEX using OPS.  Store the result in *BUF_P and return
1461
   the size of the transferred data.  PADDING additional bytes are
1462
   available in *BUF_P.  This is a helper function for
1463
   target_read_alloc; see the declaration of that function for more
1464
   information.  */
1465
 
1466
static LONGEST
1467
target_read_alloc_1 (struct target_ops *ops, enum target_object object,
1468
                     const char *annex, gdb_byte **buf_p, int padding)
1469
{
1470
  size_t buf_alloc, buf_pos;
1471
  gdb_byte *buf;
1472
  LONGEST n;
1473
 
1474
  /* This function does not have a length parameter; it reads the
1475
     entire OBJECT).  Also, it doesn't support objects fetched partly
1476
     from one target and partly from another (in a different stratum,
1477
     e.g. a core file and an executable).  Both reasons make it
1478
     unsuitable for reading memory.  */
1479
  gdb_assert (object != TARGET_OBJECT_MEMORY);
1480
 
1481
  /* Start by reading up to 4K at a time.  The target will throttle
1482
     this number down if necessary.  */
1483
  buf_alloc = 4096;
1484
  buf = xmalloc (buf_alloc);
1485
  buf_pos = 0;
1486
  while (1)
1487
    {
1488
      n = target_read_partial (ops, object, annex, &buf[buf_pos],
1489
                               buf_pos, buf_alloc - buf_pos - padding);
1490
      if (n < 0)
1491
        {
1492
          /* An error occurred.  */
1493
          xfree (buf);
1494
          return -1;
1495
        }
1496
      else if (n == 0)
1497
        {
1498
          /* Read all there was.  */
1499
          if (buf_pos == 0)
1500
            xfree (buf);
1501
          else
1502
            *buf_p = buf;
1503
          return buf_pos;
1504
        }
1505
 
1506
      buf_pos += n;
1507
 
1508
      /* If the buffer is filling up, expand it.  */
1509
      if (buf_alloc < buf_pos * 2)
1510
        {
1511
          buf_alloc *= 2;
1512
          buf = xrealloc (buf, buf_alloc);
1513
        }
1514
 
1515
      QUIT;
1516
    }
1517
}
1518
 
1519
/* Read OBJECT/ANNEX using OPS.  Store the result in *BUF_P and return
1520
   the size of the transferred data.  See the declaration in "target.h"
1521
   function for more information about the return value.  */
1522
 
1523
LONGEST
1524
target_read_alloc (struct target_ops *ops, enum target_object object,
1525
                   const char *annex, gdb_byte **buf_p)
1526
{
1527
  return target_read_alloc_1 (ops, object, annex, buf_p, 0);
1528
}
1529
 
1530
/* Read OBJECT/ANNEX using OPS.  The result is NUL-terminated and
1531
   returned as a string, allocated using xmalloc.  If an error occurs
1532
   or the transfer is unsupported, NULL is returned.  Empty objects
1533
   are returned as allocated but empty strings.  A warning is issued
1534
   if the result contains any embedded NUL bytes.  */
1535
 
1536
char *
1537
target_read_stralloc (struct target_ops *ops, enum target_object object,
1538
                      const char *annex)
1539
{
1540
  gdb_byte *buffer;
1541
  LONGEST transferred;
1542
 
1543
  transferred = target_read_alloc_1 (ops, object, annex, &buffer, 1);
1544
 
1545
  if (transferred < 0)
1546
    return NULL;
1547
 
1548
  if (transferred == 0)
1549
    return xstrdup ("");
1550
 
1551
  buffer[transferred] = 0;
1552
  if (strlen (buffer) < transferred)
1553
    warning (_("target object %d, annex %s, "
1554
               "contained unexpected null characters"),
1555
             (int) object, annex ? annex : "(none)");
1556
 
1557
  return (char *) buffer;
1558
}
1559
 
1560
/* Memory transfer methods.  */
1561
 
1562
void
1563
get_target_memory (struct target_ops *ops, CORE_ADDR addr, gdb_byte *buf,
1564
                   LONGEST len)
1565
{
1566
  if (target_read (ops, TARGET_OBJECT_MEMORY, NULL, buf, addr, len)
1567
      != len)
1568
    memory_error (EIO, addr);
1569
}
1570
 
1571
ULONGEST
1572
get_target_memory_unsigned (struct target_ops *ops,
1573
                            CORE_ADDR addr, int len)
1574
{
1575
  gdb_byte buf[sizeof (ULONGEST)];
1576
 
1577
  gdb_assert (len <= sizeof (buf));
1578
  get_target_memory (ops, addr, buf, len);
1579
  return extract_unsigned_integer (buf, len);
1580
}
1581
 
1582
static void
1583
target_info (char *args, int from_tty)
1584
{
1585
  struct target_ops *t;
1586
  int has_all_mem = 0;
1587
 
1588
  if (symfile_objfile != NULL)
1589
    printf_unfiltered (_("Symbols from \"%s\".\n"), symfile_objfile->name);
1590
 
1591
  for (t = target_stack; t != NULL; t = t->beneath)
1592
    {
1593
      if (!t->to_has_memory)
1594
        continue;
1595
 
1596
      if ((int) (t->to_stratum) <= (int) dummy_stratum)
1597
        continue;
1598
      if (has_all_mem)
1599
        printf_unfiltered (_("\tWhile running this, GDB does not access memory from...\n"));
1600
      printf_unfiltered ("%s:\n", t->to_longname);
1601
      (t->to_files_info) (t);
1602
      has_all_mem = t->to_has_all_memory;
1603
    }
1604
}
1605
 
1606
/* This function is called before any new inferior is created, e.g.
1607
   by running a program, attaching, or connecting to a target.
1608
   It cleans up any state from previous invocations which might
1609
   change between runs.  This is a subset of what target_preopen
1610
   resets (things which might change between targets).  */
1611
 
1612
void
1613
target_pre_inferior (int from_tty)
1614
{
1615
  invalidate_target_mem_regions ();
1616
 
1617
  target_clear_description ();
1618
}
1619
 
1620
/* This is to be called by the open routine before it does
1621
   anything.  */
1622
 
1623
void
1624
target_preopen (int from_tty)
1625
{
1626
  dont_repeat ();
1627
 
1628
  if (target_has_execution)
1629
    {
1630
      if (!from_tty
1631
          || query (_("A program is being debugged already.  Kill it? ")))
1632
        target_kill ();
1633
      else
1634
        error (_("Program not killed."));
1635
    }
1636
 
1637
  /* Calling target_kill may remove the target from the stack.  But if
1638
     it doesn't (which seems like a win for UDI), remove it now.  */
1639
 
1640
  if (target_has_execution)
1641
    pop_target ();
1642
 
1643
  target_pre_inferior (from_tty);
1644
}
1645
 
1646
/* Detach a target after doing deferred register stores.  */
1647
 
1648
void
1649
target_detach (char *args, int from_tty)
1650
{
1651
  (current_target.to_detach) (args, from_tty);
1652
}
1653
 
1654
void
1655
target_disconnect (char *args, int from_tty)
1656
{
1657
  struct target_ops *t;
1658
 
1659
  for (t = current_target.beneath; t != NULL; t = t->beneath)
1660
    if (t->to_disconnect != NULL)
1661
        {
1662
          if (targetdebug)
1663
            fprintf_unfiltered (gdb_stdlog, "target_disconnect (%s, %d)\n",
1664
                                args, from_tty);
1665
          t->to_disconnect (t, args, from_tty);
1666
          return;
1667
        }
1668
 
1669
  tcomplain ();
1670
}
1671
 
1672
int
1673
target_async_mask (int mask)
1674
{
1675
  int saved_async_masked_status = target_async_mask_value;
1676
  target_async_mask_value = mask;
1677
  return saved_async_masked_status;
1678
}
1679
 
1680
/* Look through the list of possible targets for a target that can
1681
   follow forks.  */
1682
 
1683
int
1684
target_follow_fork (int follow_child)
1685
{
1686
  struct target_ops *t;
1687
 
1688
  for (t = current_target.beneath; t != NULL; t = t->beneath)
1689
    {
1690
      if (t->to_follow_fork != NULL)
1691
        {
1692
          int retval = t->to_follow_fork (t, follow_child);
1693
          if (targetdebug)
1694
            fprintf_unfiltered (gdb_stdlog, "target_follow_fork (%d) = %d\n",
1695
                                follow_child, retval);
1696
          return retval;
1697
        }
1698
    }
1699
 
1700
  /* Some target returned a fork event, but did not know how to follow it.  */
1701
  internal_error (__FILE__, __LINE__,
1702
                  "could not find a target to follow fork");
1703
}
1704
 
1705
/* Look for a target which can describe architectural features, starting
1706
   from TARGET.  If we find one, return its description.  */
1707
 
1708
const struct target_desc *
1709
target_read_description (struct target_ops *target)
1710
{
1711
  struct target_ops *t;
1712
 
1713
  for (t = target; t != NULL; t = t->beneath)
1714
    if (t->to_read_description != NULL)
1715
      {
1716
        const struct target_desc *tdesc;
1717
 
1718
        tdesc = t->to_read_description (t);
1719
        if (tdesc)
1720
          return tdesc;
1721
      }
1722
 
1723
  return NULL;
1724
}
1725
 
1726
/* Look through the list of possible targets for a target that can
1727
   execute a run or attach command without any other data.  This is
1728
   used to locate the default process stratum.
1729
 
1730
   Result is always valid (error() is called for errors).  */
1731
 
1732
static struct target_ops *
1733
find_default_run_target (char *do_mesg)
1734
{
1735
  struct target_ops **t;
1736
  struct target_ops *runable = NULL;
1737
  int count;
1738
 
1739
  count = 0;
1740
 
1741
  for (t = target_structs; t < target_structs + target_struct_size;
1742
       ++t)
1743
    {
1744
      if ((*t)->to_can_run && target_can_run (*t))
1745
        {
1746
          runable = *t;
1747
          ++count;
1748
        }
1749
    }
1750
 
1751
  if (count != 1)
1752
    error (_("Don't know how to %s.  Try \"help target\"."), do_mesg);
1753
 
1754
  return runable;
1755
}
1756
 
1757
void
1758
find_default_attach (char *args, int from_tty)
1759
{
1760
  struct target_ops *t;
1761
 
1762
  t = find_default_run_target ("attach");
1763
  (t->to_attach) (args, from_tty);
1764
  return;
1765
}
1766
 
1767
void
1768
find_default_create_inferior (char *exec_file, char *allargs, char **env,
1769
                              int from_tty)
1770
{
1771
  struct target_ops *t;
1772
 
1773
  t = find_default_run_target ("run");
1774
  (t->to_create_inferior) (exec_file, allargs, env, from_tty);
1775
  return;
1776
}
1777
 
1778
static int
1779
default_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
1780
{
1781
  return (len <= TYPE_LENGTH (builtin_type_void_data_ptr));
1782
}
1783
 
1784
static int
1785
return_zero (void)
1786
{
1787
  return 0;
1788
}
1789
 
1790
static int
1791
return_one (void)
1792
{
1793
  return 1;
1794
}
1795
 
1796
static int
1797
return_minus_one (void)
1798
{
1799
  return -1;
1800
}
1801
 
1802
/*
1803
 * Resize the to_sections pointer.  Also make sure that anyone that
1804
 * was holding on to an old value of it gets updated.
1805
 * Returns the old size.
1806
 */
1807
 
1808
int
1809
target_resize_to_sections (struct target_ops *target, int num_added)
1810
{
1811
  struct target_ops **t;
1812
  struct section_table *old_value;
1813
  int old_count;
1814
 
1815
  old_value = target->to_sections;
1816
 
1817
  if (target->to_sections)
1818
    {
1819
      old_count = target->to_sections_end - target->to_sections;
1820
      target->to_sections = (struct section_table *)
1821
        xrealloc ((char *) target->to_sections,
1822
                  (sizeof (struct section_table)) * (num_added + old_count));
1823
    }
1824
  else
1825
    {
1826
      old_count = 0;
1827
      target->to_sections = (struct section_table *)
1828
        xmalloc ((sizeof (struct section_table)) * num_added);
1829
    }
1830
  target->to_sections_end = target->to_sections + (num_added + old_count);
1831
 
1832
  /* Check to see if anyone else was pointing to this structure.
1833
     If old_value was null, then no one was. */
1834
 
1835
  if (old_value)
1836
    {
1837
      for (t = target_structs; t < target_structs + target_struct_size;
1838
           ++t)
1839
        {
1840
          if ((*t)->to_sections == old_value)
1841
            {
1842
              (*t)->to_sections = target->to_sections;
1843
              (*t)->to_sections_end = target->to_sections_end;
1844
            }
1845
        }
1846
      /* There is a flattened view of the target stack in current_target,
1847
         so its to_sections pointer might also need updating. */
1848
      if (current_target.to_sections == old_value)
1849
        {
1850
          current_target.to_sections = target->to_sections;
1851
          current_target.to_sections_end = target->to_sections_end;
1852
        }
1853
    }
1854
 
1855
  return old_count;
1856
 
1857
}
1858
 
1859
/* Remove all target sections taken from ABFD.
1860
 
1861
   Scan the current target stack for targets whose section tables
1862
   refer to sections from BFD, and remove those sections.  We use this
1863
   when we notice that the inferior has unloaded a shared object, for
1864
   example.  */
1865
void
1866
remove_target_sections (bfd *abfd)
1867
{
1868
  struct target_ops **t;
1869
 
1870
  for (t = target_structs; t < target_structs + target_struct_size; t++)
1871
    {
1872
      struct section_table *src, *dest;
1873
 
1874
      dest = (*t)->to_sections;
1875
      for (src = (*t)->to_sections; src < (*t)->to_sections_end; src++)
1876
        if (src->bfd != abfd)
1877
          {
1878
            /* Keep this section.  */
1879
            if (dest < src) *dest = *src;
1880
            dest++;
1881
          }
1882
 
1883
      /* If we've dropped any sections, resize the section table.  */
1884
      if (dest < src)
1885
        target_resize_to_sections (*t, dest - src);
1886
    }
1887
}
1888
 
1889
 
1890
 
1891
 
1892
/* Find a single runnable target in the stack and return it.  If for
1893
   some reason there is more than one, return NULL.  */
1894
 
1895
struct target_ops *
1896
find_run_target (void)
1897
{
1898
  struct target_ops **t;
1899
  struct target_ops *runable = NULL;
1900
  int count;
1901
 
1902
  count = 0;
1903
 
1904
  for (t = target_structs; t < target_structs + target_struct_size; ++t)
1905
    {
1906
      if ((*t)->to_can_run && target_can_run (*t))
1907
        {
1908
          runable = *t;
1909
          ++count;
1910
        }
1911
    }
1912
 
1913
  return (count == 1 ? runable : NULL);
1914
}
1915
 
1916
/* Find a single core_stratum target in the list of targets and return it.
1917
   If for some reason there is more than one, return NULL.  */
1918
 
1919
struct target_ops *
1920
find_core_target (void)
1921
{
1922
  struct target_ops **t;
1923
  struct target_ops *runable = NULL;
1924
  int count;
1925
 
1926
  count = 0;
1927
 
1928
  for (t = target_structs; t < target_structs + target_struct_size;
1929
       ++t)
1930
    {
1931
      if ((*t)->to_stratum == core_stratum)
1932
        {
1933
          runable = *t;
1934
          ++count;
1935
        }
1936
    }
1937
 
1938
  return (count == 1 ? runable : NULL);
1939
}
1940
 
1941
/*
1942
 * Find the next target down the stack from the specified target.
1943
 */
1944
 
1945
struct target_ops *
1946
find_target_beneath (struct target_ops *t)
1947
{
1948
  return t->beneath;
1949
}
1950
 
1951
 
1952
/* The inferior process has died.  Long live the inferior!  */
1953
 
1954
void
1955
generic_mourn_inferior (void)
1956
{
1957
  extern int show_breakpoint_hit_counts;
1958
 
1959
  inferior_ptid = null_ptid;
1960
  attach_flag = 0;
1961
  breakpoint_init_inferior (inf_exited);
1962
  registers_changed ();
1963
 
1964
  reopen_exec_file ();
1965
  reinit_frame_cache ();
1966
 
1967
  /* It is confusing to the user for ignore counts to stick around
1968
     from previous runs of the inferior.  So clear them.  */
1969
  /* However, it is more confusing for the ignore counts to disappear when
1970
     using hit counts.  So don't clear them if we're counting hits.  */
1971
  if (!show_breakpoint_hit_counts)
1972
    breakpoint_clear_ignore_counts ();
1973
 
1974
  if (deprecated_detach_hook)
1975
    deprecated_detach_hook ();
1976
}
1977
 
1978
/* Helper function for child_wait and the derivatives of child_wait.
1979
   HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1980
   translation of that in OURSTATUS.  */
1981
void
1982
store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
1983
{
1984
  if (WIFEXITED (hoststatus))
1985
    {
1986
      ourstatus->kind = TARGET_WAITKIND_EXITED;
1987
      ourstatus->value.integer = WEXITSTATUS (hoststatus);
1988
    }
1989
  else if (!WIFSTOPPED (hoststatus))
1990
    {
1991
      ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1992
      ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1993
    }
1994
  else
1995
    {
1996
      ourstatus->kind = TARGET_WAITKIND_STOPPED;
1997
      ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1998
    }
1999
}
2000
 
2001
/* Returns zero to leave the inferior alone, one to interrupt it.  */
2002
int (*target_activity_function) (void);
2003
int target_activity_fd;
2004
 
2005
/* Convert a normal process ID to a string.  Returns the string in a
2006
   static buffer.  */
2007
 
2008
char *
2009
normal_pid_to_str (ptid_t ptid)
2010
{
2011
  static char buf[32];
2012
 
2013
  xsnprintf (buf, sizeof buf, "process %d", ptid_get_pid (ptid));
2014
  return buf;
2015
}
2016
 
2017
/* Error-catcher for target_find_memory_regions */
2018
static int dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
2019
{
2020
  error (_("No target."));
2021
  return 0;
2022
}
2023
 
2024
/* Error-catcher for target_make_corefile_notes */
2025
static char * dummy_make_corefile_notes (bfd *ignore1, int *ignore2)
2026
{
2027
  error (_("No target."));
2028
  return NULL;
2029
}
2030
 
2031
/* Set up the handful of non-empty slots needed by the dummy target
2032
   vector.  */
2033
 
2034
static void
2035
init_dummy_target (void)
2036
{
2037
  dummy_target.to_shortname = "None";
2038
  dummy_target.to_longname = "None";
2039
  dummy_target.to_doc = "";
2040
  dummy_target.to_attach = find_default_attach;
2041
  dummy_target.to_create_inferior = find_default_create_inferior;
2042
  dummy_target.to_pid_to_str = normal_pid_to_str;
2043
  dummy_target.to_stratum = dummy_stratum;
2044
  dummy_target.to_find_memory_regions = dummy_find_memory_regions;
2045
  dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
2046
  dummy_target.to_xfer_partial = default_xfer_partial;
2047
  dummy_target.to_magic = OPS_MAGIC;
2048
}
2049
 
2050
static void
2051
debug_to_open (char *args, int from_tty)
2052
{
2053
  debug_target.to_open (args, from_tty);
2054
 
2055
  fprintf_unfiltered (gdb_stdlog, "target_open (%s, %d)\n", args, from_tty);
2056
}
2057
 
2058
static void
2059
debug_to_close (int quitting)
2060
{
2061
  target_close (&debug_target, quitting);
2062
  fprintf_unfiltered (gdb_stdlog, "target_close (%d)\n", quitting);
2063
}
2064
 
2065
void
2066
target_close (struct target_ops *targ, int quitting)
2067
{
2068
  if (targ->to_xclose != NULL)
2069
    targ->to_xclose (targ, quitting);
2070
  else if (targ->to_close != NULL)
2071
    targ->to_close (quitting);
2072
}
2073
 
2074
static void
2075
debug_to_attach (char *args, int from_tty)
2076
{
2077
  debug_target.to_attach (args, from_tty);
2078
 
2079
  fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n", args, from_tty);
2080
}
2081
 
2082
 
2083
static void
2084
debug_to_post_attach (int pid)
2085
{
2086
  debug_target.to_post_attach (pid);
2087
 
2088
  fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
2089
}
2090
 
2091
static void
2092
debug_to_detach (char *args, int from_tty)
2093
{
2094
  debug_target.to_detach (args, from_tty);
2095
 
2096
  fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n", args, from_tty);
2097
}
2098
 
2099
static void
2100
debug_to_resume (ptid_t ptid, int step, enum target_signal siggnal)
2101
{
2102
  debug_target.to_resume (ptid, step, siggnal);
2103
 
2104
  fprintf_unfiltered (gdb_stdlog, "target_resume (%d, %s, %s)\n", PIDGET (ptid),
2105
                      step ? "step" : "continue",
2106
                      target_signal_to_name (siggnal));
2107
}
2108
 
2109
static ptid_t
2110
debug_to_wait (ptid_t ptid, struct target_waitstatus *status)
2111
{
2112
  ptid_t retval;
2113
 
2114
  retval = debug_target.to_wait (ptid, status);
2115
 
2116
  fprintf_unfiltered (gdb_stdlog,
2117
                      "target_wait (%d, status) = %d,   ", PIDGET (ptid),
2118
                      PIDGET (retval));
2119
  fprintf_unfiltered (gdb_stdlog, "status->kind = ");
2120
  switch (status->kind)
2121
    {
2122
    case TARGET_WAITKIND_EXITED:
2123
      fprintf_unfiltered (gdb_stdlog, "exited, status = %d\n",
2124
                          status->value.integer);
2125
      break;
2126
    case TARGET_WAITKIND_STOPPED:
2127
      fprintf_unfiltered (gdb_stdlog, "stopped, signal = %s\n",
2128
                          target_signal_to_name (status->value.sig));
2129
      break;
2130
    case TARGET_WAITKIND_SIGNALLED:
2131
      fprintf_unfiltered (gdb_stdlog, "signalled, signal = %s\n",
2132
                          target_signal_to_name (status->value.sig));
2133
      break;
2134
    case TARGET_WAITKIND_LOADED:
2135
      fprintf_unfiltered (gdb_stdlog, "loaded\n");
2136
      break;
2137
    case TARGET_WAITKIND_FORKED:
2138
      fprintf_unfiltered (gdb_stdlog, "forked\n");
2139
      break;
2140
    case TARGET_WAITKIND_VFORKED:
2141
      fprintf_unfiltered (gdb_stdlog, "vforked\n");
2142
      break;
2143
    case TARGET_WAITKIND_EXECD:
2144
      fprintf_unfiltered (gdb_stdlog, "execd\n");
2145
      break;
2146
    case TARGET_WAITKIND_SPURIOUS:
2147
      fprintf_unfiltered (gdb_stdlog, "spurious\n");
2148
      break;
2149
    default:
2150
      fprintf_unfiltered (gdb_stdlog, "unknown???\n");
2151
      break;
2152
    }
2153
 
2154
  return retval;
2155
}
2156
 
2157
static void
2158
debug_print_register (const char * func,
2159
                      struct regcache *regcache, int regno)
2160
{
2161
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
2162
  fprintf_unfiltered (gdb_stdlog, "%s ", func);
2163
  if (regno >= 0 && regno < gdbarch_num_regs (gdbarch)
2164
                            + gdbarch_num_pseudo_regs (gdbarch)
2165
      && gdbarch_register_name (gdbarch, regno) != NULL
2166
      && gdbarch_register_name (gdbarch, regno)[0] != '\0')
2167
    fprintf_unfiltered (gdb_stdlog, "(%s)",
2168
                        gdbarch_register_name (gdbarch, regno));
2169
  else
2170
    fprintf_unfiltered (gdb_stdlog, "(%d)", regno);
2171
  if (regno >= 0)
2172
    {
2173
      int i, size = register_size (gdbarch, regno);
2174
      unsigned char buf[MAX_REGISTER_SIZE];
2175
      regcache_cooked_read (regcache, regno, buf);
2176
      fprintf_unfiltered (gdb_stdlog, " = ");
2177
      for (i = 0; i < size; i++)
2178
        {
2179
          fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
2180
        }
2181
      if (size <= sizeof (LONGEST))
2182
        {
2183
          ULONGEST val = extract_unsigned_integer (buf, size);
2184
          fprintf_unfiltered (gdb_stdlog, " 0x%s %s",
2185
                              paddr_nz (val), paddr_d (val));
2186
        }
2187
    }
2188
  fprintf_unfiltered (gdb_stdlog, "\n");
2189
}
2190
 
2191
static void
2192
debug_to_fetch_registers (struct regcache *regcache, int regno)
2193
{
2194
  debug_target.to_fetch_registers (regcache, regno);
2195
  debug_print_register ("target_fetch_registers", regcache, regno);
2196
}
2197
 
2198
static void
2199
debug_to_store_registers (struct regcache *regcache, int regno)
2200
{
2201
  debug_target.to_store_registers (regcache, regno);
2202
  debug_print_register ("target_store_registers", regcache, regno);
2203
  fprintf_unfiltered (gdb_stdlog, "\n");
2204
}
2205
 
2206
static void
2207
debug_to_prepare_to_store (struct regcache *regcache)
2208
{
2209
  debug_target.to_prepare_to_store (regcache);
2210
 
2211
  fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
2212
}
2213
 
2214
static int
2215
deprecated_debug_xfer_memory (CORE_ADDR memaddr, bfd_byte *myaddr, int len,
2216
                              int write, struct mem_attrib *attrib,
2217
                              struct target_ops *target)
2218
{
2219
  int retval;
2220
 
2221
  retval = debug_target.deprecated_xfer_memory (memaddr, myaddr, len, write,
2222
                                                attrib, target);
2223
 
2224
  fprintf_unfiltered (gdb_stdlog,
2225
                      "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
2226
                      (unsigned int) memaddr,   /* possable truncate long long */
2227
                      len, write ? "write" : "read", retval);
2228
 
2229
  if (retval > 0)
2230
    {
2231
      int i;
2232
 
2233
      fputs_unfiltered (", bytes =", gdb_stdlog);
2234
      for (i = 0; i < retval; i++)
2235
        {
2236
          if ((((long) &(myaddr[i])) & 0xf) == 0)
2237
            {
2238
              if (targetdebug < 2 && i > 0)
2239
                {
2240
                  fprintf_unfiltered (gdb_stdlog, " ...");
2241
                  break;
2242
                }
2243
              fprintf_unfiltered (gdb_stdlog, "\n");
2244
            }
2245
 
2246
          fprintf_unfiltered (gdb_stdlog, " %02x", myaddr[i] & 0xff);
2247
        }
2248
    }
2249
 
2250
  fputc_unfiltered ('\n', gdb_stdlog);
2251
 
2252
  return retval;
2253
}
2254
 
2255
static void
2256
debug_to_files_info (struct target_ops *target)
2257
{
2258
  debug_target.to_files_info (target);
2259
 
2260
  fprintf_unfiltered (gdb_stdlog, "target_files_info (xxx)\n");
2261
}
2262
 
2263
static int
2264
debug_to_insert_breakpoint (struct bp_target_info *bp_tgt)
2265
{
2266
  int retval;
2267
 
2268
  retval = debug_target.to_insert_breakpoint (bp_tgt);
2269
 
2270
  fprintf_unfiltered (gdb_stdlog,
2271
                      "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
2272
                      (unsigned long) bp_tgt->placed_address,
2273
                      (unsigned long) retval);
2274
  return retval;
2275
}
2276
 
2277
static int
2278
debug_to_remove_breakpoint (struct bp_target_info *bp_tgt)
2279
{
2280
  int retval;
2281
 
2282
  retval = debug_target.to_remove_breakpoint (bp_tgt);
2283
 
2284
  fprintf_unfiltered (gdb_stdlog,
2285
                      "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
2286
                      (unsigned long) bp_tgt->placed_address,
2287
                      (unsigned long) retval);
2288
  return retval;
2289
}
2290
 
2291
static int
2292
debug_to_can_use_hw_breakpoint (int type, int cnt, int from_tty)
2293
{
2294
  int retval;
2295
 
2296
  retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
2297
 
2298
  fprintf_unfiltered (gdb_stdlog,
2299
                      "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
2300
                      (unsigned long) type,
2301
                      (unsigned long) cnt,
2302
                      (unsigned long) from_tty,
2303
                      (unsigned long) retval);
2304
  return retval;
2305
}
2306
 
2307
static int
2308
debug_to_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
2309
{
2310
  CORE_ADDR retval;
2311
 
2312
  retval = debug_target.to_region_ok_for_hw_watchpoint (addr, len);
2313
 
2314
  fprintf_unfiltered (gdb_stdlog,
2315
                      "TARGET_REGION_OK_FOR_HW_WATCHPOINT (%ld, %ld) = 0x%lx\n",
2316
                      (unsigned long) addr,
2317
                      (unsigned long) len,
2318
                      (unsigned long) retval);
2319
  return retval;
2320
}
2321
 
2322
static int
2323
debug_to_stopped_by_watchpoint (void)
2324
{
2325
  int retval;
2326
 
2327
  retval = debug_target.to_stopped_by_watchpoint ();
2328
 
2329
  fprintf_unfiltered (gdb_stdlog,
2330
                      "STOPPED_BY_WATCHPOINT () = %ld\n",
2331
                      (unsigned long) retval);
2332
  return retval;
2333
}
2334
 
2335
static int
2336
debug_to_stopped_data_address (struct target_ops *target, CORE_ADDR *addr)
2337
{
2338
  int retval;
2339
 
2340
  retval = debug_target.to_stopped_data_address (target, addr);
2341
 
2342
  fprintf_unfiltered (gdb_stdlog,
2343
                      "target_stopped_data_address ([0x%lx]) = %ld\n",
2344
                      (unsigned long)*addr,
2345
                      (unsigned long)retval);
2346
  return retval;
2347
}
2348
 
2349
static int
2350
debug_to_insert_hw_breakpoint (struct bp_target_info *bp_tgt)
2351
{
2352
  int retval;
2353
 
2354
  retval = debug_target.to_insert_hw_breakpoint (bp_tgt);
2355
 
2356
  fprintf_unfiltered (gdb_stdlog,
2357
                      "target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
2358
                      (unsigned long) bp_tgt->placed_address,
2359
                      (unsigned long) retval);
2360
  return retval;
2361
}
2362
 
2363
static int
2364
debug_to_remove_hw_breakpoint (struct bp_target_info *bp_tgt)
2365
{
2366
  int retval;
2367
 
2368
  retval = debug_target.to_remove_hw_breakpoint (bp_tgt);
2369
 
2370
  fprintf_unfiltered (gdb_stdlog,
2371
                      "target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
2372
                      (unsigned long) bp_tgt->placed_address,
2373
                      (unsigned long) retval);
2374
  return retval;
2375
}
2376
 
2377
static int
2378
debug_to_insert_watchpoint (CORE_ADDR addr, int len, int type)
2379
{
2380
  int retval;
2381
 
2382
  retval = debug_target.to_insert_watchpoint (addr, len, type);
2383
 
2384
  fprintf_unfiltered (gdb_stdlog,
2385
                      "target_insert_watchpoint (0x%lx, %d, %d) = %ld\n",
2386
                      (unsigned long) addr, len, type, (unsigned long) retval);
2387
  return retval;
2388
}
2389
 
2390
static int
2391
debug_to_remove_watchpoint (CORE_ADDR addr, int len, int type)
2392
{
2393
  int retval;
2394
 
2395
  retval = debug_target.to_remove_watchpoint (addr, len, type);
2396
 
2397
  fprintf_unfiltered (gdb_stdlog,
2398
                      "target_remove_watchpoint (0x%lx, %d, %d) = %ld\n",
2399
                      (unsigned long) addr, len, type, (unsigned long) retval);
2400
  return retval;
2401
}
2402
 
2403
static void
2404
debug_to_terminal_init (void)
2405
{
2406
  debug_target.to_terminal_init ();
2407
 
2408
  fprintf_unfiltered (gdb_stdlog, "target_terminal_init ()\n");
2409
}
2410
 
2411
static void
2412
debug_to_terminal_inferior (void)
2413
{
2414
  debug_target.to_terminal_inferior ();
2415
 
2416
  fprintf_unfiltered (gdb_stdlog, "target_terminal_inferior ()\n");
2417
}
2418
 
2419
static void
2420
debug_to_terminal_ours_for_output (void)
2421
{
2422
  debug_target.to_terminal_ours_for_output ();
2423
 
2424
  fprintf_unfiltered (gdb_stdlog, "target_terminal_ours_for_output ()\n");
2425
}
2426
 
2427
static void
2428
debug_to_terminal_ours (void)
2429
{
2430
  debug_target.to_terminal_ours ();
2431
 
2432
  fprintf_unfiltered (gdb_stdlog, "target_terminal_ours ()\n");
2433
}
2434
 
2435
static void
2436
debug_to_terminal_save_ours (void)
2437
{
2438
  debug_target.to_terminal_save_ours ();
2439
 
2440
  fprintf_unfiltered (gdb_stdlog, "target_terminal_save_ours ()\n");
2441
}
2442
 
2443
static void
2444
debug_to_terminal_info (char *arg, int from_tty)
2445
{
2446
  debug_target.to_terminal_info (arg, from_tty);
2447
 
2448
  fprintf_unfiltered (gdb_stdlog, "target_terminal_info (%s, %d)\n", arg,
2449
                      from_tty);
2450
}
2451
 
2452
static void
2453
debug_to_kill (void)
2454
{
2455
  debug_target.to_kill ();
2456
 
2457
  fprintf_unfiltered (gdb_stdlog, "target_kill ()\n");
2458
}
2459
 
2460
static void
2461
debug_to_load (char *args, int from_tty)
2462
{
2463
  debug_target.to_load (args, from_tty);
2464
 
2465
  fprintf_unfiltered (gdb_stdlog, "target_load (%s, %d)\n", args, from_tty);
2466
}
2467
 
2468
static int
2469
debug_to_lookup_symbol (char *name, CORE_ADDR *addrp)
2470
{
2471
  int retval;
2472
 
2473
  retval = debug_target.to_lookup_symbol (name, addrp);
2474
 
2475
  fprintf_unfiltered (gdb_stdlog, "target_lookup_symbol (%s, xxx)\n", name);
2476
 
2477
  return retval;
2478
}
2479
 
2480
static void
2481
debug_to_create_inferior (char *exec_file, char *args, char **env,
2482
                          int from_tty)
2483
{
2484
  debug_target.to_create_inferior (exec_file, args, env, from_tty);
2485
 
2486
  fprintf_unfiltered (gdb_stdlog, "target_create_inferior (%s, %s, xxx, %d)\n",
2487
                      exec_file, args, from_tty);
2488
}
2489
 
2490
static void
2491
debug_to_post_startup_inferior (ptid_t ptid)
2492
{
2493
  debug_target.to_post_startup_inferior (ptid);
2494
 
2495
  fprintf_unfiltered (gdb_stdlog, "target_post_startup_inferior (%d)\n",
2496
                      PIDGET (ptid));
2497
}
2498
 
2499
static void
2500
debug_to_acknowledge_created_inferior (int pid)
2501
{
2502
  debug_target.to_acknowledge_created_inferior (pid);
2503
 
2504
  fprintf_unfiltered (gdb_stdlog, "target_acknowledge_created_inferior (%d)\n",
2505
                      pid);
2506
}
2507
 
2508
static void
2509
debug_to_insert_fork_catchpoint (int pid)
2510
{
2511
  debug_target.to_insert_fork_catchpoint (pid);
2512
 
2513
  fprintf_unfiltered (gdb_stdlog, "target_insert_fork_catchpoint (%d)\n",
2514
                      pid);
2515
}
2516
 
2517
static int
2518
debug_to_remove_fork_catchpoint (int pid)
2519
{
2520
  int retval;
2521
 
2522
  retval = debug_target.to_remove_fork_catchpoint (pid);
2523
 
2524
  fprintf_unfiltered (gdb_stdlog, "target_remove_fork_catchpoint (%d) = %d\n",
2525
                      pid, retval);
2526
 
2527
  return retval;
2528
}
2529
 
2530
static void
2531
debug_to_insert_vfork_catchpoint (int pid)
2532
{
2533
  debug_target.to_insert_vfork_catchpoint (pid);
2534
 
2535
  fprintf_unfiltered (gdb_stdlog, "target_insert_vfork_catchpoint (%d)\n",
2536
                      pid);
2537
}
2538
 
2539
static int
2540
debug_to_remove_vfork_catchpoint (int pid)
2541
{
2542
  int retval;
2543
 
2544
  retval = debug_target.to_remove_vfork_catchpoint (pid);
2545
 
2546
  fprintf_unfiltered (gdb_stdlog, "target_remove_vfork_catchpoint (%d) = %d\n",
2547
                      pid, retval);
2548
 
2549
  return retval;
2550
}
2551
 
2552
static void
2553
debug_to_insert_exec_catchpoint (int pid)
2554
{
2555
  debug_target.to_insert_exec_catchpoint (pid);
2556
 
2557
  fprintf_unfiltered (gdb_stdlog, "target_insert_exec_catchpoint (%d)\n",
2558
                      pid);
2559
}
2560
 
2561
static int
2562
debug_to_remove_exec_catchpoint (int pid)
2563
{
2564
  int retval;
2565
 
2566
  retval = debug_target.to_remove_exec_catchpoint (pid);
2567
 
2568
  fprintf_unfiltered (gdb_stdlog, "target_remove_exec_catchpoint (%d) = %d\n",
2569
                      pid, retval);
2570
 
2571
  return retval;
2572
}
2573
 
2574
static int
2575
debug_to_reported_exec_events_per_exec_call (void)
2576
{
2577
  int reported_exec_events;
2578
 
2579
  reported_exec_events = debug_target.to_reported_exec_events_per_exec_call ();
2580
 
2581
  fprintf_unfiltered (gdb_stdlog,
2582
                      "target_reported_exec_events_per_exec_call () = %d\n",
2583
                      reported_exec_events);
2584
 
2585
  return reported_exec_events;
2586
}
2587
 
2588
static int
2589
debug_to_has_exited (int pid, int wait_status, int *exit_status)
2590
{
2591
  int has_exited;
2592
 
2593
  has_exited = debug_target.to_has_exited (pid, wait_status, exit_status);
2594
 
2595
  fprintf_unfiltered (gdb_stdlog, "target_has_exited (%d, %d, %d) = %d\n",
2596
                      pid, wait_status, *exit_status, has_exited);
2597
 
2598
  return has_exited;
2599
}
2600
 
2601
static void
2602
debug_to_mourn_inferior (void)
2603
{
2604
  debug_target.to_mourn_inferior ();
2605
 
2606
  fprintf_unfiltered (gdb_stdlog, "target_mourn_inferior ()\n");
2607
}
2608
 
2609
static int
2610
debug_to_can_run (void)
2611
{
2612
  int retval;
2613
 
2614
  retval = debug_target.to_can_run ();
2615
 
2616
  fprintf_unfiltered (gdb_stdlog, "target_can_run () = %d\n", retval);
2617
 
2618
  return retval;
2619
}
2620
 
2621
static void
2622
debug_to_notice_signals (ptid_t ptid)
2623
{
2624
  debug_target.to_notice_signals (ptid);
2625
 
2626
  fprintf_unfiltered (gdb_stdlog, "target_notice_signals (%d)\n",
2627
                      PIDGET (ptid));
2628
}
2629
 
2630
static int
2631
debug_to_thread_alive (ptid_t ptid)
2632
{
2633
  int retval;
2634
 
2635
  retval = debug_target.to_thread_alive (ptid);
2636
 
2637
  fprintf_unfiltered (gdb_stdlog, "target_thread_alive (%d) = %d\n",
2638
                      PIDGET (ptid), retval);
2639
 
2640
  return retval;
2641
}
2642
 
2643
static void
2644
debug_to_find_new_threads (void)
2645
{
2646
  debug_target.to_find_new_threads ();
2647
 
2648
  fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
2649
}
2650
 
2651
static void
2652
debug_to_stop (void)
2653
{
2654
  debug_target.to_stop ();
2655
 
2656
  fprintf_unfiltered (gdb_stdlog, "target_stop ()\n");
2657
}
2658
 
2659
static void
2660
debug_to_rcmd (char *command,
2661
               struct ui_file *outbuf)
2662
{
2663
  debug_target.to_rcmd (command, outbuf);
2664
  fprintf_unfiltered (gdb_stdlog, "target_rcmd (%s, ...)\n", command);
2665
}
2666
 
2667
static char *
2668
debug_to_pid_to_exec_file (int pid)
2669
{
2670
  char *exec_file;
2671
 
2672
  exec_file = debug_target.to_pid_to_exec_file (pid);
2673
 
2674
  fprintf_unfiltered (gdb_stdlog, "target_pid_to_exec_file (%d) = %s\n",
2675
                      pid, exec_file);
2676
 
2677
  return exec_file;
2678
}
2679
 
2680
static void
2681
setup_target_debug (void)
2682
{
2683
  memcpy (&debug_target, &current_target, sizeof debug_target);
2684
 
2685
  current_target.to_open = debug_to_open;
2686
  current_target.to_close = debug_to_close;
2687
  current_target.to_attach = debug_to_attach;
2688
  current_target.to_post_attach = debug_to_post_attach;
2689
  current_target.to_detach = debug_to_detach;
2690
  current_target.to_resume = debug_to_resume;
2691
  current_target.to_wait = debug_to_wait;
2692
  current_target.to_fetch_registers = debug_to_fetch_registers;
2693
  current_target.to_store_registers = debug_to_store_registers;
2694
  current_target.to_prepare_to_store = debug_to_prepare_to_store;
2695
  current_target.deprecated_xfer_memory = deprecated_debug_xfer_memory;
2696
  current_target.to_files_info = debug_to_files_info;
2697
  current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2698
  current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
2699
  current_target.to_can_use_hw_breakpoint = debug_to_can_use_hw_breakpoint;
2700
  current_target.to_insert_hw_breakpoint = debug_to_insert_hw_breakpoint;
2701
  current_target.to_remove_hw_breakpoint = debug_to_remove_hw_breakpoint;
2702
  current_target.to_insert_watchpoint = debug_to_insert_watchpoint;
2703
  current_target.to_remove_watchpoint = debug_to_remove_watchpoint;
2704
  current_target.to_stopped_by_watchpoint = debug_to_stopped_by_watchpoint;
2705
  current_target.to_stopped_data_address = debug_to_stopped_data_address;
2706
  current_target.to_region_ok_for_hw_watchpoint = debug_to_region_ok_for_hw_watchpoint;
2707
  current_target.to_terminal_init = debug_to_terminal_init;
2708
  current_target.to_terminal_inferior = debug_to_terminal_inferior;
2709
  current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2710
  current_target.to_terminal_ours = debug_to_terminal_ours;
2711
  current_target.to_terminal_save_ours = debug_to_terminal_save_ours;
2712
  current_target.to_terminal_info = debug_to_terminal_info;
2713
  current_target.to_kill = debug_to_kill;
2714
  current_target.to_load = debug_to_load;
2715
  current_target.to_lookup_symbol = debug_to_lookup_symbol;
2716
  current_target.to_create_inferior = debug_to_create_inferior;
2717
  current_target.to_post_startup_inferior = debug_to_post_startup_inferior;
2718
  current_target.to_acknowledge_created_inferior = debug_to_acknowledge_created_inferior;
2719
  current_target.to_insert_fork_catchpoint = debug_to_insert_fork_catchpoint;
2720
  current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
2721
  current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
2722
  current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
2723
  current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
2724
  current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
2725
  current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
2726
  current_target.to_has_exited = debug_to_has_exited;
2727
  current_target.to_mourn_inferior = debug_to_mourn_inferior;
2728
  current_target.to_can_run = debug_to_can_run;
2729
  current_target.to_notice_signals = debug_to_notice_signals;
2730
  current_target.to_thread_alive = debug_to_thread_alive;
2731
  current_target.to_find_new_threads = debug_to_find_new_threads;
2732
  current_target.to_stop = debug_to_stop;
2733
  current_target.to_rcmd = debug_to_rcmd;
2734
  current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
2735
}
2736
 
2737
 
2738
static char targ_desc[] =
2739
"Names of targets and files being debugged.\n\
2740
Shows the entire stack of targets currently in use (including the exec-file,\n\
2741
core-file, and process, if any), as well as the symbol file name.";
2742
 
2743
static void
2744
do_monitor_command (char *cmd,
2745
                 int from_tty)
2746
{
2747
  if ((current_target.to_rcmd
2748
       == (void (*) (char *, struct ui_file *)) tcomplain)
2749
      || (current_target.to_rcmd == debug_to_rcmd
2750
          && (debug_target.to_rcmd
2751
              == (void (*) (char *, struct ui_file *)) tcomplain)))
2752
    error (_("\"monitor\" command not supported by this target."));
2753
  target_rcmd (cmd, gdb_stdtarg);
2754
}
2755
 
2756
/* Print the name of each layers of our target stack.  */
2757
 
2758
static void
2759
maintenance_print_target_stack (char *cmd, int from_tty)
2760
{
2761
  struct target_ops *t;
2762
 
2763
  printf_filtered (_("The current target stack is:\n"));
2764
 
2765
  for (t = target_stack; t != NULL; t = t->beneath)
2766
    {
2767
      printf_filtered ("  - %s (%s)\n", t->to_shortname, t->to_longname);
2768
    }
2769
}
2770
 
2771
void
2772
initialize_targets (void)
2773
{
2774
  init_dummy_target ();
2775
  push_target (&dummy_target);
2776
 
2777
  add_info ("target", target_info, targ_desc);
2778
  add_info ("files", target_info, targ_desc);
2779
 
2780
  add_setshow_zinteger_cmd ("target", class_maintenance, &targetdebug, _("\
2781
Set target debugging."), _("\
2782
Show target debugging."), _("\
2783
When non-zero, target debugging is enabled.  Higher numbers are more\n\
2784
verbose.  Changes do not take effect until the next \"run\" or \"target\"\n\
2785
command."),
2786
                            NULL,
2787
                            show_targetdebug,
2788
                            &setdebuglist, &showdebuglist);
2789
 
2790
  add_setshow_boolean_cmd ("trust-readonly-sections", class_support,
2791
                           &trust_readonly, _("\
2792
Set mode for reading from readonly sections."), _("\
2793
Show mode for reading from readonly sections."), _("\
2794
When this mode is on, memory reads from readonly sections (such as .text)\n\
2795
will be read from the object file instead of from the target.  This will\n\
2796
result in significant performance improvement for remote targets."),
2797
                           NULL,
2798
                           show_trust_readonly,
2799
                           &setlist, &showlist);
2800
 
2801
  add_com ("monitor", class_obscure, do_monitor_command,
2802
           _("Send a command to the remote monitor (remote targets only)."));
2803
 
2804
  add_cmd ("target-stack", class_maintenance, maintenance_print_target_stack,
2805
           _("Print the name of each layer of the internal target stack."),
2806
           &maintenanceprintlist);
2807
 
2808
  target_dcache = dcache_init ();
2809
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.