diff options
Diffstat (limited to 'gdb/target.h')
-rw-r--r-- | gdb/target.h | 275 |
1 files changed, 137 insertions, 138 deletions
diff --git a/gdb/target.h b/gdb/target.h index 7bc64f0..d4437ad 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -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) */ |