* environ.h, expression.h, frame.h, gdbcmd.h, gdbcore.h,

inferior.h, language.h, signame.h, target.h, terminal.h,
tm-68k.h, tm-i386v.h, tm-sparc.h, tm-sun386.h, tm-symmetry.h,
xm-i386v.h, xm-sparc.h: Prototypes for all external functions.
Lint.
This commit is contained in:
John Gilmore
1992-02-21 01:31:56 +00:00
parent 088c3a0b74
commit 75af490bd2
11 changed files with 370 additions and 212 deletions

View File

@ -1,22 +1,25 @@
/* Interface between GDB and target environments, including files and processes
Copyright 1990, 1991 Free Software Foundation, Inc.
Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
Contributed by Cygnus Support. Written by John Gilmore.
This file is part of GDB.
GDB is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GDB is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GDB; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#if !defined (TARGET_H)
#define TARGET_H
/* This include file defines the interface between the main part
of the debugger, and the part which is target-specific, or
@ -37,96 +40,62 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
it goes into the file stratum, which is always below the process
stratum. */
#include "bfd.h"
enum strata {
dummy_stratum, /* The lowest of the low */
file_stratum, /* Executable files, etc */
core_stratum, /* Core dump files */
process_stratum, /* Executing processes */
process_stratum /* Executing processes */
};
struct target_ops {
char *to_shortname; /* Name this target type */
char *to_longname; /* Name for printing */
/* Documentation. Does not include trailing newline, and
starts with a one-line description (probably similar to
to_longname). */
char *to_doc;
#ifdef __STDC__
void (*to_open) (char *name, int from_tty);
void (*to_close) (int quitting);
void (*to_attach) (char *name, int from_tty);
void (*to_detach) (char *args, int from_tty);
void (*to_resume) (int step, int siggnal);
int (*to_wait) (int *status);
int (*to_fetch_registers) (int regno);
int (*to_store_registers) (int regno);
void (*to_prepare_to_store) ();
void (*to_convert_to_virtual) (int regnum, char *from, char *to);
void (*to_convert_from_virtual) (int regnum, char *from, char *to);
int (*to_xfer_memory) (CORE_ADDR memaddr, char *myaddr, int len, int w);
void (*to_files_info) ();
int (*to_insert_breakpoint) (CORE_ADDR addr, char *save);
int (*to_remove_breakpoint) (CORE_ADDR addr, char *save);
void (*to_terminal_init) ();
void (*to_terminal_inferior) ();
void (*to_terminal_ours_for_output) ();
void (*to_terminal_ours) ();
void (*to_terminal_info) (char *arg, int from_tty);
void (*to_kill) (char *arg, int from_tty);
void (*to_load) (char *arg, int from_tty);
void (*to_add_syms) (char *arg, int from_tty);
struct value *(*to_call_function) (struct value *function,
int nargs, struct value **args);
int (*to_lookup_symbol) (char *name, CORE_ADDR *addrp);
void (*to_create_inferior) (char *exec, char *args, char **env);
void (*to_mourn_inferior) ();
enum strata to_stratum;
struct target_ops *to_next;
int to_has_all_memory;
int to_has_memory;
int to_has_stack;
int to_has_registers;
int to_has_execution;
int to_magic;
/* Need sub-structure for target machine related rather than comm related? */
#else /* STDC */
void (*to_open) ();
void (*to_close) ();
void (*to_attach) ();
void (*to_detach) ();
void (*to_resume) ();
int (*to_wait) ();
int (*to_fetch_registers) ();
int (*to_store_registers) ();
void (*to_prepare_to_store) ();
void (*to_convert_to_virtual) ();
void (*to_convert_from_virtual) ();
int (*to_xfer_memory) ();
void (*to_files_info) ();
int (*to_insert_breakpoint) ();
int (*to_remove_breakpoint) ();
void (*to_terminal_init) ();
void (*to_terminal_inferior) ();
void (*to_terminal_ours_for_output) ();
void (*to_terminal_ours) ();
void (*to_terminal_info) ();
void (*to_kill) ();
void (*to_load) ();
void (*to_add_syms) ();
struct value *(*to_call_function) ();
int (*to_lookup_symbol) ();
void (*to_create_inferior) ();
void (*to_mourn_inferior) ();
enum strata to_stratum;
struct target_ops *to_next;
int to_has_all_memory;
int to_has_memory;
int to_has_stack;
int to_has_registers;
int to_has_execution;
int to_magic;
/* Need sub-structure for target machine related rather than comm related? */
#endif
struct target_ops
{
char *to_shortname; /* Name this target type */
char *to_longname; /* Name for printing */
char *to_doc; /* Documentation. Does not include trailing
newline, and starts with a one-line descrip-
tion (probably similar to to_longname). */
void (*to_open) PARAMS ((char *, int));
void (*to_close) PARAMS ((int));
void (*to_attach) PARAMS ((char *, int));
void (*to_detach) PARAMS ((char *, int));
void (*to_resume) PARAMS ((int, int));
int (*to_wait) PARAMS ((int *));
void (*to_fetch_registers) PARAMS ((int));
void (*to_store_registers) PARAMS ((int));
void (*to_prepare_to_store) PARAMS ((void));
void (*to_convert_to_virtual) PARAMS ((int, char *, char *));
void (*to_convert_from_virtual) PARAMS ((int, char *, char *));
int (*to_xfer_memory) PARAMS ((CORE_ADDR, char *, int, int,
struct target_ops *));
void (*to_files_info) PARAMS ((struct target_ops *));
int (*to_insert_breakpoint) PARAMS ((CORE_ADDR, char *));
int (*to_remove_breakpoint) PARAMS ((CORE_ADDR, char *));
void (*to_terminal_init) PARAMS ((void));
void (*to_terminal_inferior) PARAMS ((void));
void (*to_terminal_ours_for_output) PARAMS ((void));
void (*to_terminal_ours) PARAMS ((void));
void (*to_terminal_info) PARAMS ((char *, int));
void (*to_kill) PARAMS ((void));
void (*to_load) PARAMS ((char *, int));
int (*to_lookup_symbol) PARAMS ((char *, CORE_ADDR *));
void (*to_create_inferior) PARAMS ((char *, char *, char **));
void (*to_mourn_inferior) PARAMS ((void));
enum strata to_stratum;
struct target_ops
*to_next;
int to_has_all_memory;
int to_has_memory;
int to_has_stack;
int to_has_registers;
int to_has_execution;
struct section_table
*to_sections;
struct section_table
*to_sections_end;
int to_magic;
/* Need sub-structure for target machine related rather than comm related? */
};
/* Magic number for checking ops size. If a struct doesn't end with this
@ -189,8 +158,7 @@ extern struct target_ops *current_target;
#define target_wait(status) \
(*current_target->to_wait) (status)
/* Fetch register REGNO, or all regs if regno == -1. Result is 0
for success, -1 for problems. */
/* Fetch register REGNO, or all regs if regno == -1. No result. */
#define target_fetch_registers(regno) \
(*current_target->to_fetch_registers) (regno)
@ -227,22 +195,33 @@ extern struct target_ops *current_target;
function which iterates across the various targets. Result is
0 for success, or an errno value. */
#ifdef __STDC__
/* Needs defs.h for CORE_ADDR */
extern int target_read_memory(CORE_ADDR memaddr, char *myaddr, int len);
extern int target_write_memory(CORE_ADDR memaddr, char *myaddr, int len);
extern int target_xfer_memory(CORE_ADDR memaddr, char *myaddr, int len,
int write);
#else
extern int target_read_memory();
extern int target_write_memory();
extern int target_xfer_memory();
#endif
extern int
target_read_string PARAMS ((CORE_ADDR, char *, int));
extern int
target_read_memory PARAMS ((CORE_ADDR, char *, int));
extern int
target_write_memory PARAMS ((CORE_ADDR, char *, int));
extern int
xfer_memory PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
extern int
child_xfer_memory PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
extern int
target_xfer_memory PARAMS ((CORE_ADDR, char *, int, int));
/* From exec.c */
extern void
print_section_info PARAMS ((struct target_ops *, bfd *));
/* Print a line about the current target. */
#define target_files_info() \
(*current_target->to_files_info) ()
(*current_target->to_files_info) (current_target)
/* Insert a breakpoint at address ADDR in the target machine.
SAVE is a pointer to memory allocated for saving the
@ -299,8 +278,8 @@ extern int target_xfer_memory();
/* Kill the inferior process. Make it go away. */
#define target_kill(arg, from_tty) \
(*current_target->to_kill) (arg, from_tty)
#define target_kill() \
(*current_target->to_kill) ()
/* Load an executable file into the target process. This is expected to
not only bring new code into the target process, but also to update
@ -309,23 +288,6 @@ extern int target_xfer_memory();
#define target_load(arg, from_tty) \
(*current_target->to_load) (arg, from_tty)
/* Add the symbols from an executable file into GDB's symbol table, as if
the file had been loaded at a particular address (or set of addresses).
This does not change any state in the target system, only in GDB. */
#define target_add_syms(arg, from_tty) \
(*current_target->to_add_syms) (arg, from_tty)
/* Perform a function call in the inferior.
ARGS is a vector of values of arguments (NARGS of them).
FUNCTION is a value, the function to be called.
Returns a value representing what the function returned.
May fail to return, if a breakpoint or signal is hit
during the execution of the function. */
#define target_call_function(function, nargs, args) \
(*current_target->to_call_function) (function, nargs, args)
/* Look up a symbol in the target's symbol table. NAME is the symbol
name. ADDRP is a CORE_ADDR * pointing to where the value of the symbol
should be returned. The result is 0 if successful, nonzero if the
@ -380,7 +342,7 @@ extern int target_xfer_memory();
(current_target->to_has_registers)
/* Does the target have execution? Can we make it jump (through hoops),
or pop its stack a few times, or set breakpoints? */
or pop its stack a few times? */
#define target_has_execution \
(current_target->to_has_execution)
@ -400,16 +362,53 @@ extern int target_xfer_memory();
pop_target: Remove the top thing on the stack of current targets. */
#ifdef __STDC__
void add_target (struct target_ops *);
int push_target (struct target_ops *);
int unpush_target (struct target_ops *);
void target_preopen (int);
void pop_target (void);
#else
void add_target ();
int push_target ();
int unpush_target ();
void target_preopen ();
void pop_target ();
#endif
extern void
add_target PARAMS ((struct target_ops *));
extern int
push_target PARAMS ((struct target_ops *));
extern int
unpush_target PARAMS ((struct target_ops *));
extern void
target_preopen PARAMS ((int));
extern void
pop_target PARAMS ((void));
/* Struct section_table maps address ranges to file sections. It is
mostly used with BFD files, but can be used without (e.g. for handling
raw disks, or files not in formats handled by BFD). */
struct section_table {
CORE_ADDR addr; /* Lowest address in section */
CORE_ADDR endaddr; /* 1+highest address in section */
sec_ptr sec_ptr; /* BFD section pointer */
bfd *bfd; /* BFD file pointer */
};
/* Builds a section table, given args BFD, SECTABLE_PTR, SECEND_PTR.
Returns 0 if OK, 1 on error. */
extern int
build_section_table PARAMS ((bfd *, struct section_table **,
struct section_table **));
/* From inftarg.c */
extern void
host_convert_from_virtual PARAMS ((int, char *, char *));
extern void
host_convert_to_virtual PARAMS ((int, char *, char *));
/* From mem-break.c */
extern int
memory_remove_breakpoint PARAMS ((CORE_ADDR, char *));
extern int
memory_insert_breakpoint PARAMS ((CORE_ADDR, char *));
#endif /* !defined (TARGET_H) */