/* 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, 1996, 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
#ifdef QUIT
/* do twice to force compiler warning */
-#define FIXME "FIXME"
-#define FIXME "ignoring redefinition of QUIT"
+#define QUIT_FIXME "FIXME"
+#define QUIT_FIXME "ignoring redefinition of QUIT"
#else
#define QUIT { \
if (quit_flag) quit (); \
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
};
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 */
extern int inside_main_func PARAMS ((CORE_ADDR pc));
+extern void _initialize_blockframe PARAMS ((void));
+
/* From ch-lang.c, for the moment. (FIXME) */
extern char *chill_demangle PARAMS ((const char *));
extern void request_quit PARAMS ((int));
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 discard_cleanups PARAMS ((struct cleanup *));
+extern void discard_final_cleanups PARAMS ((struct cleanup *));
+extern void discard_my_cleanups PARAMS ((struct cleanup **, struct cleanup *));
+
+typedef void (*make_cleanup_func) (void *);
-/* 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.
+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 *));
+make_final_cleanup PARAMS ((void (*function) (void *), 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 **, void (*function) (void *), void *));
-extern struct cleanup *make_cleanup ();
+extern struct cleanup *
+make_run_cleanup PARAMS ((void (*function) (void *), void *));
extern struct cleanup *save_cleanups PARAMS ((void));
+extern struct cleanup *save_final_cleanups PARAMS ((void));
+extern struct cleanup *save_my_cleanups PARAMS ((struct cleanup **));
extern void restore_cleanups PARAMS ((struct cleanup *));
+extern void restore_final_cleanups PARAMS ((struct cleanup *));
+extern void restore_my_cleanups PARAMS ((struct cleanup **, struct cleanup *));
extern void free_current_contents PARAMS ((char **));
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 *));
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 char* preg PARAMS ((t_reg reg));
+extern char* paddr_nz PARAMS ((t_addr addr));
+
+extern char* preg_nz PARAMS ((t_reg reg));
+
extern void fprintf_symbol_filtered PARAMS ((GDB_FILE *, char *,
enum language, int));
-extern void perror_with_name PARAMS ((char *));
+extern NORETURN void perror_with_name PARAMS ((char *)) ATTR_NORETURN;
extern void print_sys_errmsg PARAMS ((char *, int));
+extern void _initialize_stack PARAMS ((void));
+
/* From regex.c or libc. BSD 4.4 declares this with the argument type as
"const char *" in unistd.h, so we can't declare the argument
as "char *". */
extern void print_address PARAMS ((CORE_ADDR, GDB_FILE *));
+extern void _initialize_printcmd PARAMS ((void));
+
/* From source.c */
extern int openp PARAMS ((char *, int, char *, int, int, char **));
#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits */
#endif
+#ifndef LONGEST
+
#ifdef BFD64
/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */
#define LONGEST BFD_HOST_64_BIT
+#define ULONGEST BFD_HOST_U_64_BIT
#else /* No BFD64 */
-/* LONGEST should not be a typedef, because "unsigned LONGEST" needs to work.
- CC_HAS_LONG_LONG is defined if the host compiler supports "long long" */
-
-#ifndef LONGEST
# ifdef CC_HAS_LONG_LONG
# define LONGEST long long
+# define ULONGEST unsigned long long
# else
-# define LONGEST long
+/* BFD_HOST_64_BIT is defined for some hosts that don't have long long
+ (e.g. i386-windows) so try it. */
+# ifdef BFD_HOST_64_BIT
+# define LONGEST BFD_HOST_64_BIT
+# define ULONGEST BFD_HOST_U_64_BIT
+# else
+# define LONGEST long
+# define ULONGEST unsigned long
+# endif
# endif
-#endif
#endif /* No BFD64 */
+#endif /* ! LONGEST */
+
/* Convert a LONGEST to an int. This is used in contexts (e.g. number of
arguments to a function, number in a value history, register number, etc.)
where the value must not be larger than can fit in an int. */
extern char *warning_pre_print;
-extern NORETURN void error PARAMS((char *, ...)) ATTR_NORETURN;
+extern NORETURN void error PARAMS((const char *, ...)) ATTR_NORETURN;
extern void error_begin PARAMS ((void));
extern void warning_begin PARAMS ((void));
-extern void warning PARAMS ((char *, ...))
+extern void warning PARAMS ((const char *, ...))
ATTR_FORMAT(printf, 1, 2);
/* Global functions from other, non-gdb GNU thingies.
# 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 */
#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
extern void set_endian_from_file PARAMS ((bfd *));
+/* The target architecture can be set at run-time. */
+extern int target_architecture_auto;
+extern const bfd_arch_info_type *target_architecture;
+extern void set_architecture_from_file PARAMS ((bfd *));
+/* Notify target of a change to the selected architecture. Zero return
+ status indicates that the target did not like the change. */
+extern int (*target_architecture_hook) PARAMS ((const bfd_arch_info_type *ap));
+extern void set_architecture_from_arch_mach PARAMS ((enum bfd_architecture arch, unsigned long mach));
+
/* 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. */
#if !defined (TARGET_CHAR_BIT)
extern LONGEST extract_signed_integer PARAMS ((void *, int));
-extern unsigned LONGEST extract_unsigned_integer PARAMS ((void *, int));
+extern ULONGEST extract_unsigned_integer PARAMS ((void *, int));
extern int extract_long_unsigned_integer PARAMS ((void *, int, LONGEST *));
extern void store_signed_integer PARAMS ((void *, int, LONGEST));
-extern void store_unsigned_integer PARAMS ((void *, int, unsigned LONGEST));
+extern void store_unsigned_integer PARAMS ((void *, int, ULONGEST));
extern void store_address PARAMS ((void *, int, CORE_ADDR));
extern CORE_ADDR push_bytes PARAMS ((CORE_ADDR, char *, int));
-extern CORE_ADDR push_word PARAMS ((CORE_ADDR, unsigned LONGEST));
+extern CORE_ADDR push_word PARAMS ((CORE_ADDR, ULONGEST));
/* Some parts of gdb might be considered optional, in the sense that they
are not essential for being able to build a working, usable debugger
struct cmd_list_element;
#endif
-extern void (*init_ui_hook) PARAMS ((void));
+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));
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 int (*query_hook) PARAMS ((const char *, va_list));
+extern void (*warning_hook) PARAMS ((const char *, va_list));
extern void (*flush_hook) PARAMS ((FILE *stream));
extern void (*create_breakpoint_hook) PARAMS ((struct breakpoint *b));
extern void (*delete_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 ROOTED_P(X) (SLASH_P((X)[0]))
#endif
+/* On some systems, PIDGET is defined to extract the inferior pid from
+ an internal pid that has the thread id and pid in seperate bit
+ fields. If not defined, then just use the entire internal pid as
+ the actual pid. */
+
+#ifndef PIDGET
+#define PIDGET(pid) (pid)
+#endif
+
#endif /* #ifndef DEFS_H */