/* Basic, host-specific, and target-specific definitions for GDB.
- Copyright (C) 1986, 1989, 1991, 1992, 1993, 1994, 1995, 1996
+ Copyright (C) 1986, 89, 91, 92, 93, 94, 95, 96, 1998
Free Software Foundation, Inc.
This file is part of GDB.
#include <stdio.h>
#include <errno.h> /* System call error return status */
+#ifdef HAVE_STDDEF_H
+# include <stddef.h>
+#else
+# include <sys/types.h> /* for size_t */
+#endif
+
/* Just in case they're not defined in stdio.h. */
#ifndef SEEK_SET
#include "progress.h"
-#ifndef NO_MMALLOC
+#ifdef USE_MMALLOC
#include "mmalloc.h"
#endif
/* Check if a character is one of the commonly used C++ marker characters. */
extern int is_cplus_marker PARAMS ((int));
+/* use tui interface if non-zero */
+extern int tui_version;
+
+#if defined(TUI)
+/* all invocations of TUIDO should have two sets of parens */
+#define TUIDO(x) tuiDo x
+#else
+#define TUIDO(x)
+#endif
+
+/* enable xdb commands if set */
+extern int xdb_commands;
+
+/* enable dbx commands if set */
+extern int dbx_commands;
+
extern int quit_flag;
extern int immediate_quit;
extern int sevenbit_strings;
all_classes = -2, all_commands = -1,
/* Classes of commands */
no_class = -1, class_run = 0, class_vars, class_stack,
- class_files, class_support, class_info, class_breakpoint,
+ class_files, class_support, class_info, class_breakpoint, class_trace,
class_alias, class_obscure, class_user, class_maintenance,
- class_pseudo
+ class_pseudo, class_tui, class_xdb
};
/* Languages represented in the symbol table and elsewhere.
language_auto, /* Placeholder for automatic setting */
language_c, /* C */
language_cplus, /* C++ */
+ /* start-sanitize-java */
language_java, /* Java */
+ /* end-sanitize-java */
language_chill, /* Chill */
language_fortran, /* Fortran */
language_m2, /* Modula-2 */
language_scm /* Scheme / Guile */
};
+enum precision_type
+{
+ single_precision,
+ double_precision,
+ unspecified_precision
+};
+
/* the cleanup list records things that have to be undone
if an error happens (descriptors to be closed, memory to be freed, etc.)
Each link in the chain records a function to call and an
extern void do_cleanups PARAMS ((struct cleanup *));
extern void do_final_cleanups PARAMS ((struct cleanup *));
extern void do_my_cleanups PARAMS ((struct cleanup **, struct cleanup *));
+extern void do_run_cleanups PARAMS ((struct cleanup *));
extern void discard_cleanups PARAMS ((struct cleanup *));
extern void discard_final_cleanups PARAMS ((struct cleanup *));
extern void discard_my_cleanups PARAMS ((struct cleanup **, struct cleanup *));
-/* The bare make_cleanup function is one of those rare beasts that
- takes almost any type of function as the first arg and anything that
- will fit in a "void *" as the second arg.
+typedef void (*make_cleanup_func) PARAMS ((void *));
+
+extern struct cleanup *make_cleanup PARAMS ((make_cleanup_func, void *));
- Should be, once all calls and called-functions are cleaned up:
-extern struct cleanup *
-make_cleanup PARAMS ((void (*function) (void *), void *));
+extern struct cleanup *make_final_cleanup PARAMS ((make_cleanup_func, void *));
- Until then, lint and/or various type-checking compiler options will
- complain about make_cleanup calls. It'd be wrong to just cast things,
- since the type actually passed when the function is called would be
- wrong. */
+extern struct cleanup *make_my_cleanup PARAMS ((struct cleanup **,
+ make_cleanup_func, void *));
-extern struct cleanup *make_cleanup ();
-extern struct cleanup *
-make_final_cleanup PARAMS ((void (*function) (void *), void *));
-extern struct cleanup *
-make_my_cleanup PARAMS ((struct cleanup **, void (*function) (void *), void *));
+extern struct cleanup *make_run_cleanup PARAMS ((make_cleanup_func, void *));
extern struct cleanup *save_cleanups PARAMS ((void));
extern struct cleanup *save_final_cleanups PARAMS ((void));
extern int query PARAMS((char *, ...))
ATTR_FORMAT(printf, 1, 2);
+#if !defined (USE_MMALLOC)
+extern PTR mmalloc PARAMS ((PTR, size_t));
+extern PTR mrealloc PARAMS ((PTR, PTR, size_t));
+extern void mfree PARAMS ((PTR, PTR));
+#endif
+
/* From demangle.c */
extern void set_demangling_style PARAMS ((char *));
+/* From tm.h */
+
+struct type;
+typedef int (use_struct_convention_fn) PARAMS ((int gcc_p, struct type *value_type));
+extern use_struct_convention_fn generic_use_struct_convention;
+
+typedef unsigned char *(breakpoint_from_pc_fn) PARAMS ((CORE_ADDR *pcptr, int *lenptr));
+
+
\f
/* Annotation stuff. */
extern void reinitialize_more_filter PARAMS ((void));
+/* new */
+enum streamtype
+{
+ afile,
+ astring
+};
+
+/* new */
+typedef struct tui_stream
+{
+ enum streamtype ts_streamtype;
+ FILE *ts_filestream;
+ char *ts_strbuf;
+ int ts_buflen;
+} GDB_FILE;
+
+extern GDB_FILE *gdb_stdout;
+extern GDB_FILE *gdb_stderr;
+
+#if 0
typedef FILE GDB_FILE;
#define gdb_stdout stdout
#define gdb_stderr stderr
+#endif
+
+#if defined(TUI)
+#include "tui.h"
+#include "tuiCommand.h"
+#include "tuiData.h"
+#include "tuiIO.h"
+#include "tuiLayout.h"
+#include "tuiWin.h"
+#endif
+
+extern void gdb_fclose PARAMS ((GDB_FILE **));
extern void gdb_flush PARAMS ((GDB_FILE *));
extern void fputs_unfiltered PARAMS ((const char *, GDB_FILE *));
+extern int fputc_filtered PARAMS ((int c, GDB_FILE *));
+
extern int fputc_unfiltered PARAMS ((int c, GDB_FILE *));
extern int putchar_unfiltered PARAMS ((int c));
extern void puts_unfiltered PARAMS ((const char *));
+extern void puts_debug PARAMS ((char *prefix, char *string, char *suffix));
+
extern void vprintf_filtered PARAMS ((const char *, va_list))
ATTR_FORMAT(printf, 1, 0);
-extern void vfprintf_filtered PARAMS ((FILE *, const char *, va_list))
+extern void vfprintf_filtered PARAMS ((GDB_FILE *, const char *, va_list))
ATTR_FORMAT(printf, 2, 0);
-extern void fprintf_filtered PARAMS ((FILE *, const char *, ...))
+extern void fprintf_filtered PARAMS ((GDB_FILE *, const char *, ...))
ATTR_FORMAT(printf, 2, 3);
-extern void fprintfi_filtered PARAMS ((int, FILE *, const char *, ...))
+extern void fprintfi_filtered PARAMS ((int, GDB_FILE *, const char *, ...))
ATTR_FORMAT(printf, 3, 4);
extern void printf_filtered PARAMS ((const char *, ...))
extern void vprintf_unfiltered PARAMS ((const char *, va_list))
ATTR_FORMAT(printf, 1, 0);
-extern void vfprintf_unfiltered PARAMS ((FILE *, const char *, va_list))
+extern void vfprintf_unfiltered PARAMS ((GDB_FILE *, const char *, va_list))
ATTR_FORMAT(printf, 2, 0);
-extern void fprintf_unfiltered PARAMS ((FILE *, const char *, ...))
+extern void fprintf_unfiltered PARAMS ((GDB_FILE *, const char *, ...))
ATTR_FORMAT(printf, 2, 3);
extern void printf_unfiltered PARAMS ((const char *, ...))
ATTR_FORMAT(printf, 1, 2);
+extern int gdb_file_isatty PARAMS ((GDB_FILE *));
+
+extern GDB_FILE *gdb_file_init_astring PARAMS ((int));
+
+extern void gdb_file_deallocate PARAMS ((GDB_FILE **));
+
+extern char *gdb_file_get_strbuf PARAMS ((GDB_FILE *));
+
+extern void gdb_file_adjust_strbuf PARAMS ((int, GDB_FILE *));
+
extern void print_spaces PARAMS ((int, GDB_FILE *));
extern void print_spaces_filtered PARAMS ((int, GDB_FILE *));
extern int openp PARAMS ((char *, int, char *, int, int, char **));
+extern int source_full_path_of PARAMS ((char *, char **));
+
extern void mod_path PARAMS ((char *, char **));
extern void directory_command PARAMS ((char *, int));
extern int parse_escape PARAMS ((char **));
-extern char *reg_names[];
+/* compat - handle old targets that just define REGISTER_NAMES */
+#ifndef REGISTER_NAME
+extern char *gdb_register_names[];
+#define REGISTER_NAME(i) gdb_register_names[i]
+#endif
/* Message to be printed before the error message, when an error occurs. */
# ifdef __GNUC__
# define alloca __builtin_alloca
# else /* Not GNU C */
-# ifdef sparc
-# include <alloca.h> /* NOTE: Doesn't declare alloca() */
-# endif
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
/* We need to be careful not to declare this in a way which conflicts with
bison. Bison never declares it as char *, but under various circumstances
(like __hpux) we need to use void *. */
-# if defined (__STDC__) || defined (__hpux)
+# if defined (__STDC__) || defined (__hpux)
extern void *alloca ();
-# else /* Don't use void *. */
+# else /* Don't use void *. */
extern char *alloca ();
-# endif /* Don't use void *. */
+# endif /* Don't use void *. */
+# endif /* Not _AIX */
+# endif /* Not HAVE_ALLOCA_H */
# endif /* Not GNU C */
#endif /* alloca not defined */
#define LITTLE_ENDIAN 1234
#endif
-/* Target-system-dependent parameters for GDB. */
-
-#ifdef TARGET_BYTE_ORDER_SELECTABLE
-/* The target endianness is selectable at runtime. Define
- TARGET_BYTE_ORDER to be a variable. The user can use the `set
- endian' command to change it. */
-#undef TARGET_BYTE_ORDER
-#define TARGET_BYTE_ORDER target_byte_order
-extern int target_byte_order;
-/* Nonzero when target_byte_order auto-detected */
-extern int target_byte_order_auto;
-#endif
+/* Dynamic target-system-dependent parameters for GDB. */
+#include "gdbarch.h"
-extern void set_endian_from_file PARAMS ((bfd *));
+/* Static target-system-dependent parameters for GDB. */
/* Number of bits in a char or unsigned char for the target machine.
Just like CHAR_BIT in <limits.h> but describes the target machine. */
from byte/word byte order. */
#if !defined (BITS_BIG_ENDIAN)
-#ifndef TARGET_BYTE_ORDER_SELECTABLE
-
-#if TARGET_BYTE_ORDER == BIG_ENDIAN
-#define BITS_BIG_ENDIAN 1
-#endif /* Big endian. */
-
-#if TARGET_BYTE_ORDER == LITTLE_ENDIAN
-#define BITS_BIG_ENDIAN 0
-#endif /* Little endian. */
-
-#else /* defined (TARGET_BYTE_ORDER_SELECTABLE) */
-
#define BITS_BIG_ENDIAN (TARGET_BYTE_ORDER == BIG_ENDIAN)
-
-#endif /* defined (TARGET_BYTE_ORDER_SELECTABLE) */
-#endif /* BITS_BIG_ENDIAN not defined. */
+#endif
/* In findvar.c. */
extern CORE_ADDR extract_address PARAMS ((void *, int));
-extern void store_signed_integer PARAMS ((void *, int, LONGEST));
+extern void store_signed_integer PARAMS ((PTR, int, LONGEST));
-extern void store_unsigned_integer PARAMS ((void *, int, ULONGEST));
+extern void store_unsigned_integer PARAMS ((PTR, int, ULONGEST));
-extern void store_address PARAMS ((void *, int, CORE_ADDR));
+extern void store_address PARAMS ((PTR, int, LONGEST));
/* Setup definitions for host and target floating point formats. We need to
consider the format for `float', `double', and `long double' for both target
#define HOST_LONG_DOUBLE_FORMAT &floatformat_unknown
#endif
-#ifndef TARGET_BYTE_ORDER_SELECTABLE
-# if TARGET_BYTE_ORDER == BIG_ENDIAN
-# ifndef TARGET_FLOAT_FORMAT
-# define TARGET_FLOAT_FORMAT &floatformat_ieee_single_big
-# endif
-# ifndef TARGET_DOUBLE_FORMAT
-# define TARGET_DOUBLE_FORMAT &floatformat_ieee_double_big
-# endif
-# else /* LITTLE_ENDIAN */
-# ifndef TARGET_FLOAT_FORMAT
-# define TARGET_FLOAT_FORMAT &floatformat_ieee_single_little
-# endif
-# ifndef TARGET_DOUBLE_FORMAT
-# define TARGET_DOUBLE_FORMAT &floatformat_ieee_double_little
-# endif
-# endif
-#else /* TARGET_BYTE_ORDER_SELECTABLE */
-# ifndef TARGET_FLOAT_FORMAT
-# define TARGET_FLOAT_FORMAT (target_byte_order == BIG_ENDIAN \
- ? &floatformat_ieee_single_big \
- : &floatformat_ieee_single_little)
-# endif
-# ifndef TARGET_DOUBLE_FORMAT
-# define TARGET_DOUBLE_FORMAT (target_byte_order == BIG_ENDIAN \
- ? &floatformat_ieee_double_big \
- : &floatformat_ieee_double_little)
-# endif
+#ifndef TARGET_FLOAT_FORMAT
+#define TARGET_FLOAT_FORMAT (TARGET_BYTE_ORDER == BIG_ENDIAN \
+ ? &floatformat_ieee_single_big \
+ : &floatformat_ieee_single_little)
+#endif
+#ifndef TARGET_DOUBLE_FORMAT
+#define TARGET_DOUBLE_FORMAT (TARGET_BYTE_ORDER == BIG_ENDIAN \
+ ? &floatformat_ieee_double_big \
+ : &floatformat_ieee_double_little)
#endif
#ifndef TARGET_LONG_DOUBLE_FORMAT
extern int watchdog;
#endif
-#include "dis-asm.h" /* Get defs for disassemble_info */
-
-extern int dis_asm_read_memory PARAMS ((bfd_vma memaddr, bfd_byte *myaddr,
- int len, disassemble_info *info));
-
-extern void dis_asm_memory_error PARAMS ((int status, bfd_vma memaddr,
- disassemble_info *info));
-
-extern void dis_asm_print_address PARAMS ((bfd_vma addr,
- disassemble_info *info));
-
-extern int (*tm_print_insn) PARAMS ((bfd_vma, disassemble_info*));
-extern disassemble_info tm_print_insn_info;
-
/* Hooks for alternate command interfaces. */
#ifdef __STDC__
extern void (*init_ui_hook) PARAMS ((char *argv0));
extern void (*command_loop_hook) PARAMS ((void));
extern void (*fputs_unfiltered_hook) PARAMS ((const char *linebuffer,
- FILE *stream));
+ GDB_FILE *stream));
extern void (*print_frame_info_listing_hook) PARAMS ((struct symtab *s,
int line, int stopline,
int noerror));
-extern int (*query_hook) PARAMS ((const char *, va_list));
-extern void (*flush_hook) PARAMS ((FILE *stream));
+extern struct frame_info *parse_frame_specification PARAMS ((char *frame_exp));
+extern int (*query_hook) PARAMS ((const char *, va_list));
+extern void (*warning_hook) PARAMS ((const char *, va_list));
+extern void (*flush_hook) PARAMS ((GDB_FILE *stream));
extern void (*create_breakpoint_hook) PARAMS ((struct breakpoint *b));
extern void (*delete_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
extern void (*modify_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
extern void (*readline_begin_hook) PARAMS ((char *, ...));
extern char * (*readline_hook) PARAMS ((char *));
extern void (*readline_end_hook) PARAMS ((void));
-
+extern void (*pc_changed_hook) PARAMS ((void));
+extern void (*context_hook) PARAMS ((int));
extern int (*target_wait_hook) PARAMS ((int pid,
struct target_waitstatus *status));
#define PIDGET(pid) (pid)
#endif
+/* If under Cygwin, provide backwards compatibility with older
+ Cygwin compilers that don't define the current cpp define. */
+#ifdef __CYGWIN32__
+#ifndef __CYGWIN__
+#define __CYGWIN__
+#endif
+#endif
+
#endif /* #ifndef DEFS_H */