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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [target.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* Interface between GDB and target environments, including files and processes
2
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3
   2000, 2001, 2002 Free Software Foundation, Inc.
4
   Contributed by Cygnus Support.  Written by John Gilmore.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 2 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program; if not, write to the Free Software
20
   Foundation, Inc., 59 Temple Place - Suite 330,
21
   Boston, MA 02111-1307, USA.  */
22
 
23
#if !defined (TARGET_H)
24
#define TARGET_H
25
 
26
/* This include file defines the interface between the main part
27
   of the debugger, and the part which is target-specific, or
28
   specific to the communications interface between us and the
29
   target.
30
 
31
   A TARGET is an interface between the debugger and a particular
32
   kind of file or process.  Targets can be STACKED in STRATA,
33
   so that more than one target can potentially respond to a request.
34
   In particular, memory accesses will walk down the stack of targets
35
   until they find a target that is interested in handling that particular
36
   address.  STRATA are artificial boundaries on the stack, within
37
   which particular kinds of targets live.  Strata exist so that
38
   people don't get confused by pushing e.g. a process target and then
39
   a file target, and wondering why they can't see the current values
40
   of variables any more (the file target is handling them and they
41
   never get to the process target).  So when you push a file target,
42
   it goes into the file stratum, which is always below the process
43
   stratum.  */
44
 
45
#include "bfd.h"
46
#include "symtab.h"
47
#include "dcache.h"
48
#include "memattr.h"
49
 
50
enum strata
51
  {
52
    dummy_stratum,              /* The lowest of the low */
53
    file_stratum,               /* Executable files, etc */
54
    core_stratum,               /* Core dump files */
55
    download_stratum,           /* Downloading of remote targets */
56
    process_stratum,            /* Executing processes */
57
    thread_stratum              /* Executing threads */
58
  };
59
 
60
enum thread_control_capabilities
61
  {
62
    tc_none = 0,         /* Default: can't control thread execution.  */
63
    tc_schedlock = 1,           /* Can lock the thread scheduler.  */
64
    tc_switch = 2               /* Can switch the running thread on demand.  */
65
  };
66
 
67
/* Stuff for target_wait.  */
68
 
69
/* Generally, what has the program done?  */
70
enum target_waitkind
71
  {
72
    /* The program has exited.  The exit status is in value.integer.  */
73
    TARGET_WAITKIND_EXITED,
74
 
75
    /* The program has stopped with a signal.  Which signal is in
76
       value.sig.  */
77
    TARGET_WAITKIND_STOPPED,
78
 
79
    /* The program has terminated with a signal.  Which signal is in
80
       value.sig.  */
81
    TARGET_WAITKIND_SIGNALLED,
82
 
83
    /* The program is letting us know that it dynamically loaded something
84
       (e.g. it called load(2) on AIX).  */
85
    TARGET_WAITKIND_LOADED,
86
 
87
    /* The program has forked.  A "related" process' ID is in
88
       value.related_pid.  I.e., if the child forks, value.related_pid
89
       is the parent's ID.  */
90
 
91
    TARGET_WAITKIND_FORKED,
92
 
93
    /* The program has vforked.  A "related" process's ID is in
94
       value.related_pid.  */
95
 
96
    TARGET_WAITKIND_VFORKED,
97
 
98
    /* The program has exec'ed a new executable file.  The new file's
99
       pathname is pointed to by value.execd_pathname.  */
100
 
101
    TARGET_WAITKIND_EXECD,
102
 
103
    /* The program has entered or returned from a system call.  On
104
       HP-UX, this is used in the hardware watchpoint implementation.
105
       The syscall's unique integer ID number is in value.syscall_id */
106
 
107
    TARGET_WAITKIND_SYSCALL_ENTRY,
108
    TARGET_WAITKIND_SYSCALL_RETURN,
109
 
110
    /* Nothing happened, but we stopped anyway.  This perhaps should be handled
111
       within target_wait, but I'm not sure target_wait should be resuming the
112
       inferior.  */
113
    TARGET_WAITKIND_SPURIOUS,
114
 
115
    /* This is used for target async and extended-async
116
       only. Remote_async_wait() returns this when there is an event
117
       on the inferior, but the rest of the world is not interested in
118
       it. The inferior has not stopped, but has just sent some output
119
       to the console, for instance. In this case, we want to go back
120
       to the event loop and wait there for another event from the
121
       inferior, rather than being stuck in the remote_async_wait()
122
       function. This way the event loop is responsive to other events,
123
       like for instance the user typing.  */
124
    TARGET_WAITKIND_IGNORE
125
  };
126
 
127
struct target_waitstatus
128
  {
129
    enum target_waitkind kind;
130
 
131
    /* Forked child pid, execd pathname, exit status or signal number.  */
132
    union
133
      {
134
        int integer;
135
        enum target_signal sig;
136
        int related_pid;
137
        char *execd_pathname;
138
        int syscall_id;
139
      }
140
    value;
141
  };
142
 
143
/* Possible types of events that the inferior handler will have to
144
   deal with.  */
145
enum inferior_event_type
146
  {
147
    /* There is a request to quit the inferior, abandon it.  */
148
    INF_QUIT_REQ,
149
    /* Process a normal inferior event which will result in target_wait
150
       being called.  */
151
    INF_REG_EVENT,
152
    /* Deal with an error on the inferior.  */
153
    INF_ERROR,
154
    /* We are called because a timer went off.  */
155
    INF_TIMER,
156
    /* We are called to do stuff after the inferior stops.  */
157
    INF_EXEC_COMPLETE,
158
    /* We are called to do some stuff after the inferior stops, but we
159
       are expected to reenter the proceed() and
160
       handle_inferior_event() functions. This is used only in case of
161
       'step n' like commands.  */
162
    INF_EXEC_CONTINUE
163
  };
164
 
165
/* Return the string for a signal.  */
166
extern char *target_signal_to_string (enum target_signal);
167
 
168
/* Return the name (SIGHUP, etc.) for a signal.  */
169
extern char *target_signal_to_name (enum target_signal);
170
 
171
/* Given a name (SIGHUP, etc.), return its signal.  */
172
enum target_signal target_signal_from_name (char *);
173
 
174
 
175
/* If certain kinds of activity happen, target_wait should perform
176
   callbacks.  */
177
/* Right now we just call (*TARGET_ACTIVITY_FUNCTION) if I/O is possible
178
   on TARGET_ACTIVITY_FD.  */
179
extern int target_activity_fd;
180
/* Returns zero to leave the inferior alone, one to interrupt it.  */
181
extern int (*target_activity_function) (void);
182
 
183
struct thread_info;             /* fwd decl for parameter list below: */
184
 
185
struct target_ops
186
  {
187
    char *to_shortname;         /* Name this target type */
188
    char *to_longname;          /* Name for printing */
189
    char *to_doc;               /* Documentation.  Does not include trailing
190
                                   newline, and starts with a one-line descrip-
191
                                   tion (probably similar to to_longname).  */
192
    void (*to_open) (char *, int);
193
    void (*to_close) (int);
194
    void (*to_attach) (char *, int);
195
    void (*to_post_attach) (int);
196
    void (*to_require_attach) (char *, int);
197
    void (*to_detach) (char *, int);
198
    void (*to_require_detach) (int, char *, int);
199
    void (*to_resume) (ptid_t, int, enum target_signal);
200
    ptid_t (*to_wait) (ptid_t, struct target_waitstatus *);
201
    void (*to_post_wait) (ptid_t, int);
202
    void (*to_fetch_registers) (int);
203
    void (*to_store_registers) (int);
204
    void (*to_prepare_to_store) (void);
205
 
206
    /* Transfer LEN bytes of memory between GDB address MYADDR and
207
       target address MEMADDR.  If WRITE, transfer them to the target, else
208
       transfer them from the target.  TARGET is the target from which we
209
       get this function.
210
 
211
       Return value, N, is one of the following:
212
 
213
 
214
       error which prevented us from doing it (FIXME: What about bfd_error?).
215
 
216
       positive (call it N) means that we have transferred N bytes
217
       starting at MEMADDR.  We might be able to handle more bytes
218
       beyond this length, but no promises.
219
 
220
       negative (call its absolute value N) means that we cannot
221
       transfer right at MEMADDR, but we could transfer at least
222
       something at MEMADDR + N.  */
223
 
224
    int (*to_xfer_memory) (CORE_ADDR memaddr, char *myaddr,
225
                           int len, int write,
226
                           struct mem_attrib *attrib,
227
                           struct target_ops *target);
228
 
229
#if 0
230
    /* Enable this after 4.12.  */
231
 
232
    /* Search target memory.  Start at STARTADDR and take LEN bytes of
233
       target memory, and them with MASK, and compare to DATA.  If they
234
       match, set *ADDR_FOUND to the address we found it at, store the data
235
       we found at LEN bytes starting at DATA_FOUND, and return.  If
236
       not, add INCREMENT to the search address and keep trying until
237
       the search address is outside of the range [LORANGE,HIRANGE).
238
 
239
       If we don't find anything, set *ADDR_FOUND to (CORE_ADDR)0 and
240
       return.  */
241
 
242
    void (*to_search) (int len, char *data, char *mask,
243
                       CORE_ADDR startaddr, int increment,
244
                       CORE_ADDR lorange, CORE_ADDR hirange,
245
                       CORE_ADDR * addr_found, char *data_found);
246
 
247
#define target_search(len, data, mask, startaddr, increment, lorange, hirange, addr_found, data_found)  \
248
    (*current_target.to_search) (len, data, mask, startaddr, increment, \
249
                                 lorange, hirange, addr_found, data_found)
250
#endif                          /* 0 */
251
 
252
    void (*to_files_info) (struct target_ops *);
253
    int (*to_insert_breakpoint) (CORE_ADDR, char *);
254
    int (*to_remove_breakpoint) (CORE_ADDR, char *);
255
    int (*to_can_use_hw_breakpoint) (int, int, int);
256
    int (*to_insert_hw_breakpoint) (CORE_ADDR, char *);
257
    int (*to_remove_hw_breakpoint) (CORE_ADDR, char *);
258
    int (*to_remove_watchpoint) (CORE_ADDR, int, int);
259
    int (*to_insert_watchpoint) (CORE_ADDR, int, int);
260
    int (*to_stopped_by_watchpoint) (void);
261
    CORE_ADDR (*to_stopped_data_address) (void);
262
    int (*to_region_size_ok_for_hw_watchpoint) (int);
263
    void (*to_terminal_init) (void);
264
    void (*to_terminal_inferior) (void);
265
    void (*to_terminal_ours_for_output) (void);
266
    void (*to_terminal_ours) (void);
267
    void (*to_terminal_save_ours) (void);
268
    void (*to_terminal_info) (char *, int);
269
    void (*to_kill) (void);
270
    void (*to_load) (char *, int);
271
    int (*to_lookup_symbol) (char *, CORE_ADDR *);
272
    void (*to_create_inferior) (char *, char *, char **);
273
    void (*to_post_startup_inferior) (ptid_t);
274
    void (*to_acknowledge_created_inferior) (int);
275
    void (*to_clone_and_follow_inferior) (int, int *);
276
    void (*to_post_follow_inferior_by_clone) (void);
277
    int (*to_insert_fork_catchpoint) (int);
278
    int (*to_remove_fork_catchpoint) (int);
279
    int (*to_insert_vfork_catchpoint) (int);
280
    int (*to_remove_vfork_catchpoint) (int);
281
    int (*to_has_forked) (int, int *);
282
    int (*to_has_vforked) (int, int *);
283
    int (*to_can_follow_vfork_prior_to_exec) (void);
284
    void (*to_post_follow_vfork) (int, int, int, int);
285
    int (*to_insert_exec_catchpoint) (int);
286
    int (*to_remove_exec_catchpoint) (int);
287
    int (*to_has_execd) (int, char **);
288
    int (*to_reported_exec_events_per_exec_call) (void);
289
    int (*to_has_syscall_event) (int, enum target_waitkind *, int *);
290
    int (*to_has_exited) (int, int, int *);
291
    void (*to_mourn_inferior) (void);
292
    int (*to_can_run) (void);
293
    void (*to_notice_signals) (ptid_t ptid);
294
    int (*to_thread_alive) (ptid_t ptid);
295
    void (*to_find_new_threads) (void);
296
    char *(*to_pid_to_str) (ptid_t);
297
    char *(*to_extra_thread_info) (struct thread_info *);
298
    void (*to_stop) (void);
299
    int (*to_query) (int /*char */ , char *, char *, int *);
300
    void (*to_rcmd) (char *command, struct ui_file *output);
301
    struct symtab_and_line *(*to_enable_exception_callback) (enum
302
                                                             exception_event_kind,
303
                                                             int);
304
    struct exception_event_record *(*to_get_current_exception_event) (void);
305
    char *(*to_pid_to_exec_file) (int pid);
306
    enum strata to_stratum;
307
    struct target_ops
308
     *DONT_USE;                 /* formerly to_next */
309
    int to_has_all_memory;
310
    int to_has_memory;
311
    int to_has_stack;
312
    int to_has_registers;
313
    int to_has_execution;
314
    int to_has_thread_control;  /* control thread execution */
315
    struct section_table
316
     *to_sections;
317
    struct section_table
318
     *to_sections_end;
319
    /* ASYNC target controls */
320
    int (*to_can_async_p) (void);
321
    int (*to_is_async_p) (void);
322
    void (*to_async) (void (*cb) (enum inferior_event_type, void *context),
323
                      void *context);
324
    int to_async_mask_value;
325
    int (*to_find_memory_regions) (int (*) (CORE_ADDR,
326
                                            unsigned long,
327
                                            int, int, int,
328
                                            void *),
329
                                   void *);
330
    char * (*to_make_corefile_notes) (bfd *, int *);
331
    int to_magic;
332
    /* Need sub-structure for target machine related rather than comm related?
333
     */
334
  };
335
 
336
/* Magic number for checking ops size.  If a struct doesn't end with this
337
   number, somebody changed the declaration but didn't change all the
338
   places that initialize one.  */
339
 
340
#define OPS_MAGIC       3840
341
 
342
/* The ops structure for our "current" target process.  This should
343
   never be NULL.  If there is no target, it points to the dummy_target.  */
344
 
345
extern struct target_ops current_target;
346
 
347
/* An item on the target stack.  */
348
 
349
struct target_stack_item
350
  {
351
    struct target_stack_item *next;
352
    struct target_ops *target_ops;
353
  };
354
 
355
/* The target stack.  */
356
 
357
extern struct target_stack_item *target_stack;
358
 
359
/* Define easy words for doing these operations on our current target.  */
360
 
361
#define target_shortname        (current_target.to_shortname)
362
#define target_longname         (current_target.to_longname)
363
 
364
/* The open routine takes the rest of the parameters from the command,
365
   and (if successful) pushes a new target onto the stack.
366
   Targets should supply this routine, if only to provide an error message.  */
367
 
368
#define target_open(name, from_tty)                                     \
369
  do {                                                                  \
370
    dcache_invalidate (target_dcache);                                  \
371
    (*current_target.to_open) (name, from_tty);                         \
372
  } while (0)
373
 
374
/* Does whatever cleanup is required for a target that we are no longer
375
   going to be calling.  Argument says whether we are quitting gdb and
376
   should not get hung in case of errors, or whether we want a clean
377
   termination even if it takes a while.  This routine is automatically
378
   always called just before a routine is popped off the target stack.
379
   Closing file descriptors and freeing memory are typical things it should
380
   do.  */
381
 
382
#define target_close(quitting)  \
383
     (*current_target.to_close) (quitting)
384
 
385
/* Attaches to a process on the target side.  Arguments are as passed
386
   to the `attach' command by the user.  This routine can be called
387
   when the target is not on the target-stack, if the target_can_run
388
   routine returns 1; in that case, it must push itself onto the stack.
389
   Upon exit, the target should be ready for normal operations, and
390
   should be ready to deliver the status of the process immediately
391
   (without waiting) to an upcoming target_wait call.  */
392
 
393
#define target_attach(args, from_tty)   \
394
     (*current_target.to_attach) (args, from_tty)
395
 
396
/* The target_attach operation places a process under debugger control,
397
   and stops the process.
398
 
399
   This operation provides a target-specific hook that allows the
400
   necessary bookkeeping to be performed after an attach completes.  */
401
#define target_post_attach(pid) \
402
     (*current_target.to_post_attach) (pid)
403
 
404
/* Attaches to a process on the target side, if not already attached.
405
   (If already attached, takes no action.)
406
 
407
   This operation can be used to follow the child process of a fork.
408
   On some targets, such child processes of an original inferior process
409
   are automatically under debugger control, and thus do not require an
410
   actual attach operation.  */
411
 
412
#define target_require_attach(args, from_tty)   \
413
     (*current_target.to_require_attach) (args, from_tty)
414
 
415
/* Takes a program previously attached to and detaches it.
416
   The program may resume execution (some targets do, some don't) and will
417
   no longer stop on signals, etc.  We better not have left any breakpoints
418
   in the program or it'll die when it hits one.  ARGS is arguments
419
   typed by the user (e.g. a signal to send the process).  FROM_TTY
420
   says whether to be verbose or not.  */
421
 
422
extern void target_detach (char *, int);
423
 
424
/* Detaches from a process on the target side, if not already dettached.
425
   (If already detached, takes no action.)
426
 
427
   This operation can be used to follow the parent process of a fork.
428
   On some targets, such child processes of an original inferior process
429
   are automatically under debugger control, and thus do require an actual
430
   detach operation.
431
 
432
   PID is the process id of the child to detach from.
433
   ARGS is arguments typed by the user (e.g. a signal to send the process).
434
   FROM_TTY says whether to be verbose or not.  */
435
 
436
#define target_require_detach(pid, args, from_tty)      \
437
     (*current_target.to_require_detach) (pid, args, from_tty)
438
 
439
/* Resume execution of the target process PTID.  STEP says whether to
440
   single-step or to run free; SIGGNAL is the signal to be given to
441
   the target, or TARGET_SIGNAL_0 for no signal.  The caller may not
442
   pass TARGET_SIGNAL_DEFAULT.  */
443
 
444
#define target_resume(ptid, step, siggnal)                              \
445
  do {                                                                  \
446
    dcache_invalidate(target_dcache);                                   \
447
    (*current_target.to_resume) (ptid, step, siggnal);                  \
448
  } while (0)
449
 
450
/* Wait for process pid to do something.  PTID = -1 to wait for any
451
   pid to do something.  Return pid of child, or -1 in case of error;
452
   store status through argument pointer STATUS.  Note that it is
453
   _NOT_ OK to throw_exception() out of target_wait() without popping
454
   the debugging target from the stack; GDB isn't prepared to get back
455
   to the prompt with a debugging target but without the frame cache,
456
   stop_pc, etc., set up.  */
457
 
458
#define target_wait(ptid, status)               \
459
     (*current_target.to_wait) (ptid, status)
460
 
461
/* The target_wait operation waits for a process event to occur, and
462
   thereby stop the process.
463
 
464
   On some targets, certain events may happen in sequences.  gdb's
465
   correct response to any single event of such a sequence may require
466
   knowledge of what earlier events in the sequence have been seen.
467
 
468
   This operation provides a target-specific hook that allows the
469
   necessary bookkeeping to be performed to track such sequences.  */
470
 
471
#define target_post_wait(ptid, status) \
472
     (*current_target.to_post_wait) (ptid, status)
473
 
474
/* Fetch at least register REGNO, or all regs if regno == -1.  No result.  */
475
 
476
#define target_fetch_registers(regno)   \
477
     (*current_target.to_fetch_registers) (regno)
478
 
479
/* Store at least register REGNO, or all regs if REGNO == -1.
480
   It can store as many registers as it wants to, so target_prepare_to_store
481
   must have been previously called.  Calls error() if there are problems.  */
482
 
483
#define target_store_registers(regs)    \
484
     (*current_target.to_store_registers) (regs)
485
 
486
/* Get ready to modify the registers array.  On machines which store
487
   individual registers, this doesn't need to do anything.  On machines
488
   which store all the registers in one fell swoop, this makes sure
489
   that REGISTERS contains all the registers from the program being
490
   debugged.  */
491
 
492
#define target_prepare_to_store()       \
493
     (*current_target.to_prepare_to_store) ()
494
 
495
extern DCACHE *target_dcache;
496
 
497
extern int do_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
498
                           struct mem_attrib *attrib);
499
 
500
extern int target_read_string (CORE_ADDR, char **, int, int *);
501
 
502
extern int target_read_memory (CORE_ADDR memaddr, char *myaddr, int len);
503
 
504
extern int target_write_memory (CORE_ADDR memaddr, char *myaddr, int len);
505
 
506
extern int xfer_memory (CORE_ADDR, char *, int, int,
507
                        struct mem_attrib *, struct target_ops *);
508
 
509
extern int child_xfer_memory (CORE_ADDR, char *, int, int,
510
                              struct mem_attrib *, struct target_ops *);
511
 
512
/* Make a single attempt at transfering LEN bytes.  On a successful
513
   transfer, the number of bytes actually transfered is returned and
514
   ERR is set to 0.  When a transfer fails, -1 is returned (the number
515
   of bytes actually transfered is not defined) and ERR is set to a
516
   non-zero error indication.  */
517
 
518
extern int
519
target_read_memory_partial (CORE_ADDR addr, char *buf, int len, int *err);
520
 
521
extern int
522
target_write_memory_partial (CORE_ADDR addr, char *buf, int len, int *err);
523
 
524
extern char *child_pid_to_exec_file (int);
525
 
526
extern char *child_core_file_to_sym_file (char *);
527
 
528
#if defined(CHILD_POST_ATTACH)
529
extern void child_post_attach (int);
530
#endif
531
 
532
extern void child_post_wait (ptid_t, int);
533
 
534
extern void child_post_startup_inferior (ptid_t);
535
 
536
extern void child_acknowledge_created_inferior (int);
537
 
538
extern void child_clone_and_follow_inferior (int, int *);
539
 
540
extern void child_post_follow_inferior_by_clone (void);
541
 
542
extern int child_insert_fork_catchpoint (int);
543
 
544
extern int child_remove_fork_catchpoint (int);
545
 
546
extern int child_insert_vfork_catchpoint (int);
547
 
548
extern int child_remove_vfork_catchpoint (int);
549
 
550
extern int child_has_forked (int, int *);
551
 
552
extern int child_has_vforked (int, int *);
553
 
554
extern void child_acknowledge_created_inferior (int);
555
 
556
extern int child_can_follow_vfork_prior_to_exec (void);
557
 
558
extern void child_post_follow_vfork (int, int, int, int);
559
 
560
extern int child_insert_exec_catchpoint (int);
561
 
562
extern int child_remove_exec_catchpoint (int);
563
 
564
extern int child_has_execd (int, char **);
565
 
566
extern int child_reported_exec_events_per_exec_call (void);
567
 
568
extern int child_has_syscall_event (int, enum target_waitkind *, int *);
569
 
570
extern int child_has_exited (int, int, int *);
571
 
572
extern int child_thread_alive (ptid_t);
573
 
574
/* From exec.c */
575
 
576
extern void print_section_info (struct target_ops *, bfd *);
577
 
578
/* Print a line about the current target.  */
579
 
580
#define target_files_info()     \
581
     (*current_target.to_files_info) (&current_target)
582
 
583
/* Insert a breakpoint at address ADDR in the target machine.
584
   SAVE is a pointer to memory allocated for saving the
585
   target contents.  It is guaranteed by the caller to be long enough
586
   to save "sizeof BREAKPOINT" bytes.  Result is 0 for success, or
587
   an errno value.  */
588
 
589
#define target_insert_breakpoint(addr, save)    \
590
     (*current_target.to_insert_breakpoint) (addr, save)
591
 
592
/* Remove a breakpoint at address ADDR in the target machine.
593
   SAVE is a pointer to the same save area
594
   that was previously passed to target_insert_breakpoint.
595
   Result is 0 for success, or an errno value.  */
596
 
597
#define target_remove_breakpoint(addr, save)    \
598
     (*current_target.to_remove_breakpoint) (addr, save)
599
 
600
/* Initialize the terminal settings we record for the inferior,
601
   before we actually run the inferior.  */
602
 
603
#define target_terminal_init() \
604
     (*current_target.to_terminal_init) ()
605
 
606
/* Put the inferior's terminal settings into effect.
607
   This is preparation for starting or resuming the inferior.  */
608
 
609
#define target_terminal_inferior() \
610
     (*current_target.to_terminal_inferior) ()
611
 
612
/* Put some of our terminal settings into effect,
613
   enough to get proper results from our output,
614
   but do not change into or out of RAW mode
615
   so that no input is discarded.
616
 
617
   After doing this, either terminal_ours or terminal_inferior
618
   should be called to get back to a normal state of affairs.  */
619
 
620
#define target_terminal_ours_for_output() \
621
     (*current_target.to_terminal_ours_for_output) ()
622
 
623
/* Put our terminal settings into effect.
624
   First record the inferior's terminal settings
625
   so they can be restored properly later.  */
626
 
627
#define target_terminal_ours() \
628
     (*current_target.to_terminal_ours) ()
629
 
630
/* Save our terminal settings.
631
   This is called from TUI after entering or leaving the curses
632
   mode.  Since curses modifies our terminal this call is here
633
   to take this change into account.  */
634
 
635
#define target_terminal_save_ours() \
636
     (*current_target.to_terminal_save_ours) ()
637
 
638
/* Print useful information about our terminal status, if such a thing
639
   exists.  */
640
 
641
#define target_terminal_info(arg, from_tty) \
642
     (*current_target.to_terminal_info) (arg, from_tty)
643
 
644
/* Kill the inferior process.   Make it go away.  */
645
 
646
#define target_kill() \
647
     (*current_target.to_kill) ()
648
 
649
/* Load an executable file into the target process.  This is expected
650
   to not only bring new code into the target process, but also to
651
   update GDB's symbol tables to match.  */
652
 
653
extern void target_load (char *arg, int from_tty);
654
 
655
/* Look up a symbol in the target's symbol table.  NAME is the symbol
656
   name.  ADDRP is a CORE_ADDR * pointing to where the value of the
657
   symbol should be returned.  The result is 0 if successful, nonzero
658
   if the symbol does not exist in the target environment.  This
659
   function should not call error() if communication with the target
660
   is interrupted, since it is called from symbol reading, but should
661
   return nonzero, possibly doing a complain().  */
662
 
663
#define target_lookup_symbol(name, addrp) \
664
     (*current_target.to_lookup_symbol) (name, addrp)
665
 
666
/* Start an inferior process and set inferior_ptid to its pid.
667
   EXEC_FILE is the file to run.
668
   ALLARGS is a string containing the arguments to the program.
669
   ENV is the environment vector to pass.  Errors reported with error().
670
   On VxWorks and various standalone systems, we ignore exec_file.  */
671
 
672
#define target_create_inferior(exec_file, args, env)    \
673
     (*current_target.to_create_inferior) (exec_file, args, env)
674
 
675
 
676
/* Some targets (such as ttrace-based HPUX) don't allow us to request
677
   notification of inferior events such as fork and vork immediately
678
   after the inferior is created.  (This because of how gdb gets an
679
   inferior created via invoking a shell to do it.  In such a scenario,
680
   if the shell init file has commands in it, the shell will fork and
681
   exec for each of those commands, and we will see each such fork
682
   event.  Very bad.)
683
 
684
   Such targets will supply an appropriate definition for this function.  */
685
 
686
#define target_post_startup_inferior(ptid) \
687
     (*current_target.to_post_startup_inferior) (ptid)
688
 
689
/* On some targets, the sequence of starting up an inferior requires
690
   some synchronization between gdb and the new inferior process, PID.  */
691
 
692
#define target_acknowledge_created_inferior(pid) \
693
     (*current_target.to_acknowledge_created_inferior) (pid)
694
 
695
/* An inferior process has been created via a fork() or similar
696
   system call.  This function will clone the debugger, then ensure
697
   that CHILD_PID is attached to by that debugger.
698
 
699
   FOLLOWED_CHILD is set TRUE on return *for the clone debugger only*,
700
   and FALSE otherwise.  (The original and clone debuggers can use this
701
   to determine which they are, if need be.)
702
 
703
   (This is not a terribly useful feature without a GUI to prevent
704
   the two debuggers from competing for shell input.)  */
705
 
706
#define target_clone_and_follow_inferior(child_pid,followed_child) \
707
     (*current_target.to_clone_and_follow_inferior) (child_pid, followed_child)
708
 
709
/* This operation is intended to be used as the last in a sequence of
710
   steps taken when following both parent and child of a fork.  This
711
   is used by a clone of the debugger, which will follow the child.
712
 
713
   The original debugger has detached from this process, and the
714
   clone has attached to it.
715
 
716
   On some targets, this requires a bit of cleanup to make it work
717
   correctly.  */
718
 
719
#define target_post_follow_inferior_by_clone() \
720
     (*current_target.to_post_follow_inferior_by_clone) ()
721
 
722
/* On some targets, we can catch an inferior fork or vfork event when
723
   it occurs.  These functions insert/remove an already-created
724
   catchpoint for such events.  */
725
 
726
#define target_insert_fork_catchpoint(pid) \
727
     (*current_target.to_insert_fork_catchpoint) (pid)
728
 
729
#define target_remove_fork_catchpoint(pid) \
730
     (*current_target.to_remove_fork_catchpoint) (pid)
731
 
732
#define target_insert_vfork_catchpoint(pid) \
733
     (*current_target.to_insert_vfork_catchpoint) (pid)
734
 
735
#define target_remove_vfork_catchpoint(pid) \
736
     (*current_target.to_remove_vfork_catchpoint) (pid)
737
 
738
/* Returns TRUE if PID has invoked the fork() system call.  And,
739
   also sets CHILD_PID to the process id of the other ("child")
740
   inferior process that was created by that call.  */
741
 
742
#define target_has_forked(pid,child_pid) \
743
     (*current_target.to_has_forked) (pid,child_pid)
744
 
745
/* Returns TRUE if PID has invoked the vfork() system call.  And,
746
   also sets CHILD_PID to the process id of the other ("child")
747
   inferior process that was created by that call.  */
748
 
749
#define target_has_vforked(pid,child_pid) \
750
     (*current_target.to_has_vforked) (pid,child_pid)
751
 
752
/* Some platforms (such as pre-10.20 HP-UX) don't allow us to do
753
   anything to a vforked child before it subsequently calls exec().
754
   On such platforms, we say that the debugger cannot "follow" the
755
   child until it has vforked.
756
 
757
   This function should be defined to return 1 by those targets
758
   which can allow the debugger to immediately follow a vforked
759
   child, and 0 if they cannot.  */
760
 
761
#define target_can_follow_vfork_prior_to_exec() \
762
     (*current_target.to_can_follow_vfork_prior_to_exec) ()
763
 
764
/* An inferior process has been created via a vfork() system call.
765
   The debugger has followed the parent, the child, or both.  The
766
   process of setting up for that follow may have required some
767
   target-specific trickery to track the sequence of reported events.
768
   If so, this function should be defined by those targets that
769
   require the debugger to perform cleanup or initialization after
770
   the vfork follow.  */
771
 
772
#define target_post_follow_vfork(parent_pid,followed_parent,child_pid,followed_child) \
773
     (*current_target.to_post_follow_vfork) (parent_pid,followed_parent,child_pid,followed_child)
774
 
775
/* On some targets, we can catch an inferior exec event when it
776
   occurs.  These functions insert/remove an already-created
777
   catchpoint for such events.  */
778
 
779
#define target_insert_exec_catchpoint(pid) \
780
     (*current_target.to_insert_exec_catchpoint) (pid)
781
 
782
#define target_remove_exec_catchpoint(pid) \
783
     (*current_target.to_remove_exec_catchpoint) (pid)
784
 
785
/* Returns TRUE if PID has invoked a flavor of the exec() system call.
786
   And, also sets EXECD_PATHNAME to the pathname of the executable
787
   file that was passed to exec(), and is now being executed.  */
788
 
789
#define target_has_execd(pid,execd_pathname) \
790
     (*current_target.to_has_execd) (pid,execd_pathname)
791
 
792
/* Returns the number of exec events that are reported when a process
793
   invokes a flavor of the exec() system call on this target, if exec
794
   events are being reported.  */
795
 
796
#define target_reported_exec_events_per_exec_call() \
797
     (*current_target.to_reported_exec_events_per_exec_call) ()
798
 
799
/* Returns TRUE if PID has reported a syscall event.  And, also sets
800
   KIND to the appropriate TARGET_WAITKIND_, and sets SYSCALL_ID to
801
   the unique integer ID of the syscall.  */
802
 
803
#define target_has_syscall_event(pid,kind,syscall_id) \
804
     (*current_target.to_has_syscall_event) (pid,kind,syscall_id)
805
 
806
/* Returns TRUE if PID has exited.  And, also sets EXIT_STATUS to the
807
   exit code of PID, if any.  */
808
 
809
#define target_has_exited(pid,wait_status,exit_status) \
810
     (*current_target.to_has_exited) (pid,wait_status,exit_status)
811
 
812
/* The debugger has completed a blocking wait() call.  There is now
813
   some process event that must be processed.  This function should
814
   be defined by those targets that require the debugger to perform
815
   cleanup or internal state changes in response to the process event.  */
816
 
817
/* The inferior process has died.  Do what is right.  */
818
 
819
#define target_mourn_inferior() \
820
     (*current_target.to_mourn_inferior) ()
821
 
822
/* Does target have enough data to do a run or attach command? */
823
 
824
#define target_can_run(t) \
825
     ((t)->to_can_run) ()
826
 
827
/* post process changes to signal handling in the inferior.  */
828
 
829
#define target_notice_signals(ptid) \
830
     (*current_target.to_notice_signals) (ptid)
831
 
832
/* Check to see if a thread is still alive.  */
833
 
834
#define target_thread_alive(ptid) \
835
     (*current_target.to_thread_alive) (ptid)
836
 
837
/* Query for new threads and add them to the thread list.  */
838
 
839
#define target_find_new_threads() \
840
     (*current_target.to_find_new_threads) (); \
841
 
842
/* Make target stop in a continuable fashion.  (For instance, under
843
   Unix, this should act like SIGSTOP).  This function is normally
844
   used by GUIs to implement a stop button.  */
845
 
846
#define target_stop current_target.to_stop
847
 
848
/* Queries the target side for some information.  The first argument is a
849
   letter specifying the type of the query, which is used to determine who
850
   should process it.  The second argument is a string that specifies which
851
   information is desired and the third is a buffer that carries back the
852
   response from the target side. The fourth parameter is the size of the
853
   output buffer supplied.  */
854
 
855
#define target_query(query_type, query, resp_buffer, bufffer_size)      \
856
     (*current_target.to_query) (query_type, query, resp_buffer, bufffer_size)
857
 
858
/* Send the specified COMMAND to the target's monitor
859
   (shell,interpreter) for execution.  The result of the query is
860
   placed in OUTBUF.  */
861
 
862
#define target_rcmd(command, outbuf) \
863
     (*current_target.to_rcmd) (command, outbuf)
864
 
865
 
866
/* Get the symbol information for a breakpointable routine called when
867
   an exception event occurs.
868
   Intended mainly for C++, and for those
869
   platforms/implementations where such a callback mechanism is available,
870
   e.g. HP-UX with ANSI C++ (aCC).  Some compilers (e.g. g++) support
871
   different mechanisms for debugging exceptions.  */
872
 
873
#define target_enable_exception_callback(kind, enable) \
874
     (*current_target.to_enable_exception_callback) (kind, enable)
875
 
876
/* Get the current exception event kind -- throw or catch, etc.  */
877
 
878
#define target_get_current_exception_event() \
879
     (*current_target.to_get_current_exception_event) ()
880
 
881
/* Pointer to next target in the chain, e.g. a core file and an exec file.  */
882
 
883
#define target_next \
884
     (current_target.to_next)
885
 
886
/* Does the target include all of memory, or only part of it?  This
887
   determines whether we look up the target chain for other parts of
888
   memory if this target can't satisfy a request.  */
889
 
890
#define target_has_all_memory   \
891
     (current_target.to_has_all_memory)
892
 
893
/* Does the target include memory?  (Dummy targets don't.)  */
894
 
895
#define target_has_memory       \
896
     (current_target.to_has_memory)
897
 
898
/* Does the target have a stack?  (Exec files don't, VxWorks doesn't, until
899
   we start a process.)  */
900
 
901
#define target_has_stack        \
902
     (current_target.to_has_stack)
903
 
904
/* Does the target have registers?  (Exec files don't.)  */
905
 
906
#define target_has_registers    \
907
     (current_target.to_has_registers)
908
 
909
/* Does the target have execution?  Can we make it jump (through
910
   hoops), or pop its stack a few times?  FIXME: If this is to work that
911
   way, it needs to check whether an inferior actually exists.
912
   remote-udi.c and probably other targets can be the current target
913
   when the inferior doesn't actually exist at the moment.  Right now
914
   this just tells us whether this target is *capable* of execution.  */
915
 
916
#define target_has_execution    \
917
     (current_target.to_has_execution)
918
 
919
/* Can the target support the debugger control of thread execution?
920
   a) Can it lock the thread scheduler?
921
   b) Can it switch the currently running thread?  */
922
 
923
#define target_can_lock_scheduler \
924
     (current_target.to_has_thread_control & tc_schedlock)
925
 
926
#define target_can_switch_threads \
927
     (current_target.to_has_thread_control & tc_switch)
928
 
929
/* Can the target support asynchronous execution? */
930
#define target_can_async_p() (current_target.to_can_async_p ())
931
 
932
/* Is the target in asynchronous execution mode? */
933
#define target_is_async_p() (current_target.to_is_async_p())
934
 
935
/* Put the target in async mode with the specified callback function. */
936
#define target_async(CALLBACK,CONTEXT) \
937
     (current_target.to_async((CALLBACK), (CONTEXT)))
938
 
939
/* This is to be used ONLY within run_stack_dummy(). It
940
   provides a workaround, to have inferior function calls done in
941
   sychronous mode, even though the target is asynchronous. After
942
   target_async_mask(0) is called, calls to target_can_async_p() will
943
   return FALSE , so that target_resume() will not try to start the
944
   target asynchronously. After the inferior stops, we IMMEDIATELY
945
   restore the previous nature of the target, by calling
946
   target_async_mask(1). After that, target_can_async_p() will return
947
   TRUE. ANY OTHER USE OF THIS FEATURE IS DEPRECATED.
948
 
949
   FIXME ezannoni 1999-12-13: we won't need this once we move
950
   the turning async on and off to the single execution commands,
951
   from where it is done currently, in remote_resume().  */
952
 
953
#define target_async_mask_value \
954
     (current_target.to_async_mask_value)
955
 
956
extern int target_async_mask (int mask);
957
 
958
extern void target_link (char *, CORE_ADDR *);
959
 
960
/* Converts a process id to a string.  Usually, the string just contains
961
   `process xyz', but on some systems it may contain
962
   `process xyz thread abc'.  */
963
 
964
#undef target_pid_to_str
965
#define target_pid_to_str(PID) current_target.to_pid_to_str (PID)
966
 
967
#ifndef target_tid_to_str
968
#define target_tid_to_str(PID) \
969
     target_pid_to_str (PID)
970
extern char *normal_pid_to_str (ptid_t ptid);
971
#endif
972
 
973
/* Return a short string describing extra information about PID,
974
   e.g. "sleeping", "runnable", "running on LWP 3".  Null return value
975
   is okay.  */
976
 
977
#define target_extra_thread_info(TP) \
978
     (current_target.to_extra_thread_info (TP))
979
 
980
/*
981
 * New Objfile Event Hook:
982
 *
983
 * Sometimes a GDB component wants to get notified whenever a new
984
 * objfile is loaded.  Mainly this is used by thread-debugging
985
 * implementations that need to know when symbols for the target
986
 * thread implemenation are available.
987
 *
988
 * The old way of doing this is to define a macro 'target_new_objfile'
989
 * that points to the function that you want to be called on every
990
 * objfile/shlib load.
991
 *
992
 * The new way is to grab the function pointer, 'target_new_objfile_hook',
993
 * and point it to the function that you want to be called on every
994
 * objfile/shlib load.
995
 *
996
 * If multiple clients are willing to be cooperative, they can each
997
 * save a pointer to the previous value of target_new_objfile_hook
998
 * before modifying it, and arrange for their function to call the
999
 * previous function in the chain.  In that way, multiple clients
1000
 * can receive this notification (something like with signal handlers).
1001
 */
1002
 
1003
extern void (*target_new_objfile_hook) (struct objfile *);
1004
 
1005
#ifndef target_pid_or_tid_to_str
1006
#define target_pid_or_tid_to_str(ID) \
1007
     target_pid_to_str (ID)
1008
#endif
1009
 
1010
/* Attempts to find the pathname of the executable file
1011
   that was run to create a specified process.
1012
 
1013
   The process PID must be stopped when this operation is used.
1014
 
1015
   If the executable file cannot be determined, NULL is returned.
1016
 
1017
   Else, a pointer to a character string containing the pathname
1018
   is returned.  This string should be copied into a buffer by
1019
   the client if the string will not be immediately used, or if
1020
   it must persist.  */
1021
 
1022
#define target_pid_to_exec_file(pid) \
1023
     (current_target.to_pid_to_exec_file) (pid)
1024
 
1025
/*
1026
 * Iterator function for target memory regions.
1027
 * Calls a callback function once for each memory region 'mapped'
1028
 * in the child process.  Defined as a simple macro rather than
1029
 * as a function macro so that it can be tested for nullity.
1030
 */
1031
 
1032
#define target_find_memory_regions(FUNC, DATA) \
1033
     (current_target.to_find_memory_regions) (FUNC, DATA)
1034
 
1035
/*
1036
 * Compose corefile .note section.
1037
 */
1038
 
1039
#define target_make_corefile_notes(BFD, SIZE_P) \
1040
     (current_target.to_make_corefile_notes) (BFD, SIZE_P)
1041
 
1042
/* Hook to call target-dependent code after reading in a new symbol table.  */
1043
 
1044
#ifndef TARGET_SYMFILE_POSTREAD
1045
#define TARGET_SYMFILE_POSTREAD(OBJFILE)
1046
#endif
1047
 
1048
/* Hook to call target dependent code just after inferior target process has
1049
   started.  */
1050
 
1051
#ifndef TARGET_CREATE_INFERIOR_HOOK
1052
#define TARGET_CREATE_INFERIOR_HOOK(PID)
1053
#endif
1054
 
1055
/* Hardware watchpoint interfaces.  */
1056
 
1057
/* Returns non-zero if we were stopped by a hardware watchpoint (memory read or
1058
   write).  */
1059
 
1060
#ifndef STOPPED_BY_WATCHPOINT
1061
#define STOPPED_BY_WATCHPOINT(w) \
1062
   (*current_target.to_stopped_by_watchpoint) ()
1063
#endif
1064
 
1065
/* HP-UX supplies these operations, which respectively disable and enable
1066
   the memory page-protections that are used to implement hardware watchpoints
1067
   on that platform.  See wait_for_inferior's use of these.  */
1068
 
1069
#if !defined(TARGET_DISABLE_HW_WATCHPOINTS)
1070
#define TARGET_DISABLE_HW_WATCHPOINTS(pid)
1071
#endif
1072
 
1073
#if !defined(TARGET_ENABLE_HW_WATCHPOINTS)
1074
#define TARGET_ENABLE_HW_WATCHPOINTS(pid)
1075
#endif
1076
 
1077
/* Provide defaults for hardware watchpoint functions.  */
1078
 
1079
/* If the *_hw_beakpoint functions have not been defined
1080
   elsewhere use the definitions in the target vector.  */
1081
 
1082
/* Returns non-zero if we can set a hardware watchpoint of type TYPE.  TYPE is
1083
   one of bp_hardware_watchpoint, bp_read_watchpoint, bp_write_watchpoint, or
1084
   bp_hardware_breakpoint.  CNT is the number of such watchpoints used so far
1085
   (including this one?).  OTHERTYPE is who knows what...  */
1086
 
1087
#ifndef TARGET_CAN_USE_HARDWARE_WATCHPOINT
1088
#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(TYPE,CNT,OTHERTYPE) \
1089
 (*current_target.to_can_use_hw_breakpoint) (TYPE, CNT, OTHERTYPE);
1090
#endif
1091
 
1092
#if !defined(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT)
1093
#define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(byte_count) \
1094
    (*current_target.to_region_size_ok_for_hw_watchpoint) (byte_count)
1095
#endif
1096
 
1097
 
1098
/* Set/clear a hardware watchpoint starting at ADDR, for LEN bytes.  TYPE is 0
1099
   for write, 1 for read, and 2 for read/write accesses.  Returns 0 for
1100
   success, non-zero for failure.  */
1101
 
1102
#ifndef target_insert_watchpoint
1103
#define target_insert_watchpoint(addr, len, type)       \
1104
     (*current_target.to_insert_watchpoint) (addr, len, type)
1105
 
1106
#define target_remove_watchpoint(addr, len, type)       \
1107
     (*current_target.to_remove_watchpoint) (addr, len, type)
1108
#endif
1109
 
1110
#ifndef target_insert_hw_breakpoint
1111
#define target_insert_hw_breakpoint(addr, save) \
1112
     (*current_target.to_insert_hw_breakpoint) (addr, save)
1113
 
1114
#define target_remove_hw_breakpoint(addr, save) \
1115
     (*current_target.to_remove_hw_breakpoint) (addr, save)
1116
#endif
1117
 
1118
#ifndef target_stopped_data_address
1119
#define target_stopped_data_address() \
1120
    (*current_target.to_stopped_data_address) ()
1121
#endif
1122
 
1123
/* If defined, then we need to decr pc by this much after a hardware break-
1124
   point.  Presumably this overrides DECR_PC_AFTER_BREAK...  */
1125
 
1126
#ifndef DECR_PC_AFTER_HW_BREAK
1127
#define DECR_PC_AFTER_HW_BREAK 0
1128
#endif
1129
 
1130
/* Sometimes gdb may pick up what appears to be a valid target address
1131
   from a minimal symbol, but the value really means, essentially,
1132
   "This is an index into a table which is populated when the inferior
1133
   is run.  Therefore, do not attempt to use this as a PC."  */
1134
 
1135
#if !defined(PC_REQUIRES_RUN_BEFORE_USE)
1136
#define PC_REQUIRES_RUN_BEFORE_USE(pc) (0)
1137
#endif
1138
 
1139
/* This will only be defined by a target that supports catching vfork events,
1140
   such as HP-UX.
1141
 
1142
   On some targets (such as HP-UX 10.20 and earlier), resuming a newly vforked
1143
   child process after it has exec'd, causes the parent process to resume as
1144
   well.  To prevent the parent from running spontaneously, such targets should
1145
   define this to a function that prevents that from happening.  */
1146
#if !defined(ENSURE_VFORKING_PARENT_REMAINS_STOPPED)
1147
#define ENSURE_VFORKING_PARENT_REMAINS_STOPPED(PID) (0)
1148
#endif
1149
 
1150
/* This will only be defined by a target that supports catching vfork events,
1151
   such as HP-UX.
1152
 
1153
   On some targets (such as HP-UX 10.20 and earlier), a newly vforked child
1154
   process must be resumed when it delivers its exec event, before the parent
1155
   vfork event will be delivered to us.  */
1156
 
1157
#if !defined(RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK)
1158
#define RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK() (0)
1159
#endif
1160
 
1161
/* Routines for maintenance of the target structures...
1162
 
1163
   add_target:   Add a target to the list of all possible targets.
1164
 
1165
   push_target:  Make this target the top of the stack of currently used
1166
   targets, within its particular stratum of the stack.  Result
1167
   is 0 if now atop the stack, nonzero if not on top (maybe
1168
   should warn user).
1169
 
1170
   unpush_target: Remove this from the stack of currently used targets,
1171
   no matter where it is on the list.  Returns 0 if no
1172
   change, 1 if removed from stack.
1173
 
1174
   pop_target:   Remove the top thing on the stack of current targets.  */
1175
 
1176
extern void add_target (struct target_ops *);
1177
 
1178
extern int push_target (struct target_ops *);
1179
 
1180
extern int unpush_target (struct target_ops *);
1181
 
1182
extern void target_preopen (int);
1183
 
1184
extern void pop_target (void);
1185
 
1186
/* Struct section_table maps address ranges to file sections.  It is
1187
   mostly used with BFD files, but can be used without (e.g. for handling
1188
   raw disks, or files not in formats handled by BFD).  */
1189
 
1190
struct section_table
1191
  {
1192
    CORE_ADDR addr;             /* Lowest address in section */
1193
    CORE_ADDR endaddr;          /* 1+highest address in section */
1194
 
1195
    sec_ptr the_bfd_section;
1196
 
1197
    bfd *bfd;                   /* BFD file pointer */
1198
  };
1199
 
1200
/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
1201
   Returns 0 if OK, 1 on error.  */
1202
 
1203
extern int
1204
build_section_table (bfd *, struct section_table **, struct section_table **);
1205
 
1206
/* From mem-break.c */
1207
 
1208
extern int memory_remove_breakpoint (CORE_ADDR, char *);
1209
 
1210
extern int memory_insert_breakpoint (CORE_ADDR, char *);
1211
 
1212
extern int default_memory_remove_breakpoint (CORE_ADDR, char *);
1213
 
1214
extern int default_memory_insert_breakpoint (CORE_ADDR, char *);
1215
 
1216
extern const unsigned char *memory_breakpoint_from_pc (CORE_ADDR *pcptr,
1217
                                                       int *lenptr);
1218
 
1219
 
1220
/* From target.c */
1221
 
1222
extern void initialize_targets (void);
1223
 
1224
extern void noprocess (void);
1225
 
1226
extern void find_default_attach (char *, int);
1227
 
1228
extern void find_default_require_attach (char *, int);
1229
 
1230
extern void find_default_require_detach (int, char *, int);
1231
 
1232
extern void find_default_create_inferior (char *, char *, char **);
1233
 
1234
extern void find_default_clone_and_follow_inferior (int, int *);
1235
 
1236
extern struct target_ops *find_run_target (void);
1237
 
1238
extern struct target_ops *find_core_target (void);
1239
 
1240
extern struct target_ops *find_target_beneath (struct target_ops *);
1241
 
1242
extern int
1243
target_resize_to_sections (struct target_ops *target, int num_added);
1244
 
1245
extern void remove_target_sections (bfd *abfd);
1246
 
1247
 
1248
/* Stuff that should be shared among the various remote targets.  */
1249
 
1250
/* Debugging level.  0 is off, and non-zero values mean to print some debug
1251
   information (higher values, more information).  */
1252
extern int remote_debug;
1253
 
1254
/* Speed in bits per second, or -1 which means don't mess with the speed.  */
1255
extern int baud_rate;
1256
/* Timeout limit for response from target. */
1257
extern int remote_timeout;
1258
 
1259
 
1260
/* Functions for helping to write a native target.  */
1261
 
1262
/* This is for native targets which use a unix/POSIX-style waitstatus.  */
1263
extern void store_waitstatus (struct target_waitstatus *, int);
1264
 
1265
/* Predicate to target_signal_to_host(). Return non-zero if the enum
1266
   targ_signal SIGNO has an equivalent ``host'' representation.  */
1267
/* FIXME: cagney/1999-11-22: The name below was chosen in preference
1268
   to the shorter target_signal_p() because it is far less ambigious.
1269
   In this context ``target_signal'' refers to GDB's internal
1270
   representation of the target's set of signals while ``host signal''
1271
   refers to the target operating system's signal.  Confused?  */
1272
 
1273
extern int target_signal_to_host_p (enum target_signal signo);
1274
 
1275
/* Convert between host signal numbers and enum target_signal's.
1276
   target_signal_to_host() returns 0 and prints a warning() on GDB's
1277
   console if SIGNO has no equivalent host representation.  */
1278
/* FIXME: cagney/1999-11-22: Here ``host'' is used incorrectly, it is
1279
   refering to the target operating system's signal numbering.
1280
   Similarly, ``enum target_signal'' is named incorrectly, ``enum
1281
   gdb_signal'' would probably be better as it is refering to GDB's
1282
   internal representation of a target operating system's signal.  */
1283
 
1284
extern enum target_signal target_signal_from_host (int);
1285
extern int target_signal_to_host (enum target_signal);
1286
 
1287
/* Convert from a number used in a GDB command to an enum target_signal.  */
1288
extern enum target_signal target_signal_from_command (int);
1289
 
1290
/* Any target can call this to switch to remote protocol (in remote.c). */
1291
extern void push_remote_target (char *name, int from_tty);
1292
 
1293
/* Imported from machine dependent code */
1294
 
1295
/* Blank target vector entries are initialized to target_ignore. */
1296
void target_ignore (void);
1297
 
1298
#endif /* !defined (TARGET_H) */

powered by: WebSVN 2.1.0

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