Not part of the sources
[deliverable/binutils-gdb.git] / gdb / gdbcore.h
index b03e66c373a930eac5ddeed70a7a3cf6a53a902a..6501e3098b969fa37cbb1bb63546c1473f7382da 100644 (file)
 /* Machine independent variables that describe the core file under GDB.
-   Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
+   Copyright 1986, 1987, 1989, 1990, 1992, 1995 Free Software Foundation, Inc.
 
-GDB is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY.  No author or distributor accepts responsibility to anyone
-for the consequences of using it or for whether it serves any
-particular purpose or works at all, unless he says so in writing.
-Refer to the GDB General Public License for full details.
+This file is part of GDB.
 
-Everyone is granted permission to copy, modify and redistribute GDB,
-but only under the conditions described in the GDB General Public
-License.  A copy of this license is supposed to have been given to you
-along with GDB so you can know your rights and responsibilities.  It
-should be in a file named COPYING.  Among other things, the copyright
-notice and this notice must be preserved on all copies.
+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 2 of the License, or
+(at your option) any later version.
 
-In other words, go ahead and share GDB, but don't try to stop
-anyone else from sharing it farther.  Help stamp out software hoarding!
-*/
+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.
 
-/* File names of core file and executable file.  */
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
-extern char *corefile;
-extern char *execfile;
+/* Interface routines for core, executable, etc.  */
 
-/* Descriptors on which core file and executable file are open.
-   Note that the execchan is closed when an inferior is created
-   and reopened if the inferior dies or is killed.  */
+#if !defined (GDBCORE_H)
+#define GDBCORE_H 1
 
-extern int corechan;
-extern int execchan;
+#include "bfd.h"
 
-/* Last modification time of executable file.
-   Also used in source.c to compare against mtime of a source file.  */
+/* Return the name of the executable file as a string.
+   ERR nonzero means get error if there is none specified;
+   otherwise return 0 in that case.  */
 
-extern int exec_mtime;
+extern char *get_exec_file PARAMS ((int err));
 
-/* Virtual addresses of bounds of the two areas of memory in the core file.  */
+/* Nonzero if there is a core file.  */
 
-extern CORE_ADDR data_start;
-extern CORE_ADDR data_end;
-extern CORE_ADDR stack_start;
-extern CORE_ADDR stack_end;
+extern int have_core_file_p PARAMS ((void));
 
-/* Virtual addresses of bounds of two areas of memory in the exec file.
-   Note that the data area in the exec file is used only when there is no core file.  */
+/* Read "memory data" from whatever target or inferior we have.
+   Returns zero if successful, errno value if not.  EIO is used for
+   address out of bounds.  If breakpoints are inserted, returns shadow
+   contents, not the breakpoints themselves.  From breakpoint.c.  */
 
-extern CORE_ADDR text_start;
-extern CORE_ADDR text_end;
+extern int read_memory_nobpt PARAMS ((CORE_ADDR memaddr, char *myaddr,
+                                     unsigned len));
 
-extern CORE_ADDR exec_data_start;
-extern CORE_ADDR exec_data_end;
+/* Report a memory error with error().  */
 
-/* Address in executable file of start of text area data.  */
+extern void memory_error PARAMS ((int status, CORE_ADDR memaddr));
 
-extern int text_offset;
+/* Like target_read_memory, but report an error if can't read.  */
 
-/* Address in executable file of start of data area data.  */
+extern void read_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
 
-extern int exec_data_offset;
+extern void read_memory_section PARAMS ((CORE_ADDR memaddr, char *myaddr,
+                                        int len, asection *bfd_section));
 
-/* Address in core file of start of data area data.  */
+/* Read an integer from debugged memory, given address and number of
+   bytes.  */
 
-extern int data_offset;
+extern LONGEST read_memory_integer PARAMS ((CORE_ADDR memaddr, int len));
 
-/* Address in core file of start of stack area data.  */
+/* Read an unsigned integer from debugged memory, given address and
+   number of bytes.  */
 
-extern int stack_offset;
+extern ULONGEST read_memory_unsigned_integer PARAMS ((CORE_ADDR memaddr, int len));
+
+/* Read a null-terminated string from the debuggee's memory, given address,
+ * a buffer into which to place the string, and the maximum available space */ 
+extern void read_memory_string PARAMS ((CORE_ADDR, char *, int));
+
+/* This takes a char *, not void *.  This is probably right, because
+   passing in an int * or whatever is wrong with respect to
+   byteswapping, alignment, different sizes for host vs. target types,
+   etc.  */
+
+extern void write_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
+
+extern void generic_search PARAMS ((int len, char *data, char *mask,
+                                   CORE_ADDR startaddr, int increment,
+                                   CORE_ADDR lorange, CORE_ADDR hirange,
+                                   CORE_ADDR *addr_found, char *data_found));
+\f
+/* Hook for `exec_file_command' command to call.  */
+
+extern void (*exec_file_display_hook) PARAMS ((char *filename));
+
+/* Hook for "file_command", which is more useful than above
+   (because it is invoked AFTER symbols are read, not before) */
+
+extern void (*file_changed_hook) PARAMS ((char *filename));
+
+extern void specify_exec_file_hook PARAMS ((void (*hook) (char *filename)));
+
+/* Binary File Diddlers for the exec and core files */
+
+extern bfd *core_bfd;
+extern bfd *exec_bfd;
+
+/* Whether to open exec and core files read-only or read-write.  */
+
+extern int write_files;
+
+extern void core_file_command PARAMS ((char *filename, int from_tty));
+
+extern void exec_file_attach PARAMS ((char *filename, int from_tty));
+
+extern void exec_file_command PARAMS ((char *filename, int from_tty));
+
+extern void validate_files PARAMS ((void));
+
+extern CORE_ADDR register_addr PARAMS ((int regno, CORE_ADDR blockend));
+
+extern void registers_fetched PARAMS ((void));
+
+#if !defined (KERNEL_U_ADDR)
+extern CORE_ADDR kernel_u_addr;
+#define KERNEL_U_ADDR kernel_u_addr
+#endif
+
+/* The target vector for core files. */
+
+extern struct target_ops core_ops;
+
+/* The current default bfd target.  */
+
+extern char *gnutarget;
+
+extern void set_gnutarget PARAMS ((char *));
+
+/* Structure to keep track of core register reading functions for
+   various core file types.  */
+
+struct core_fns {
+
+  /* BFD flavour that we handle.  Note that bfd_target_unknown_flavour matches
+     anything, and if there is no better match, this function will be called
+     as the default. */
+
+  enum bfd_flavour core_flavour;
+
+  /* Extract the register values out of the core file and store them where
+     `read_register' will find them.
+
+     CORE_REG_SECT points to the register values themselves, read into
+     memory.
+
+     CORE_REG_SIZE is the size of that area.
+
+     WHICH says which set of registers we are handling (0 = int, 2 = float on
+     machines where they are discontiguous).
+
+     REG_ADDR is the offset from u.u_ar0 to the register values relative to
+     core_reg_sect.  This is used with old-fashioned core files to locate the
+     registers in a large upage-plus-stack ".reg" section.  Original upage
+     address X is at location core_reg_sect+x+reg_addr. */
+
+  void (*core_read_registers) PARAMS ((char *core_reg_sect, unsigned core_reg_size,
+                                 int which, CORE_ADDR reg_addr));
+
+  /* Finds the next struct core_fns.  They are allocated and initialized
+     in whatever module implements the functions pointed to; an 
+     initializer calls add_core_fns to add them to the global chain.  */
+
+  struct core_fns *next;
+
+};
+
+extern void add_core_fns PARAMS ((struct core_fns *cf));
+
+#endif /* !defined (GDBCORE_H) */
This page took 0.024143 seconds and 4 git commands to generate.