#ifndef DEFS_H
#define DEFS_H
#include "config.h"
#include <stdio.h>
#include <errno.h>
#include <limits.h>
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#else
#include <sys/types.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "gdb/signals.h"
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
#include "ansidecl.h"
#include <stdarg.h>
#include "libiberty.h"
#include "progress.h"
#include "bfd.h"
#define GDB_MULTI_ARCH_PARTIAL 1
#define GDB_MULTI_ARCH_TM 2
#define GDB_MULTI_ARCH_PURE 3
typedef bfd_vma CORE_ADDR;
#ifndef LONGEST
#ifdef BFD64
#define LONGEST BFD_HOST_64_BIT
#define ULONGEST BFD_HOST_U_64_BIT
#else
#ifdef CC_HAS_LONG_LONG
#define LONGEST long long
#define ULONGEST unsigned long long
#else
#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
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) ((a) > (b) ? (a) : (b))
#endif
#define STREQ(a,b) (*(a) == *(b) ? !strcmp ((a), (b)) : 0)
#define STREQN(a,b,c) (*(a) == *(b) ? !strncmp ((a), (b), (c)) : 0)
#define CPLUS_MARKER '$'
extern int is_cplus_marker (int);
extern int tui_version;
extern int xdb_commands;
extern int dbx_commands;
extern int quit_flag;
extern int immediate_quit;
extern int sevenbit_strings;
extern void quit (void);
#ifdef QUIT
#define QUIT_FIXME "FIXME"
#define QUIT_FIXME "ignoring redefinition of QUIT"
#else
#define QUIT { \
if (quit_flag) quit (); \
if (interactive_hook) interactive_hook (); \
PROGRESS (1); \
}
#endif
enum language
{
language_unknown,
language_auto,
language_c,
language_cplus,
language_objc,
language_objcplus,
language_java,
language_chill,
language_fortran,
language_m2,
language_asm,
language_scm,
language_pascal
};
enum precision_type
{
single_precision,
double_precision,
unspecified_precision
};
struct cleanup
{
struct cleanup *next;
void (*function) (PTR);
PTR arg;
};
#ifndef NORETURN
#if defined(__GNUC__) \
&& (__GNUC__ == 1 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7))
#define NORETURN volatile
#else
#define NORETURN
#endif
#endif
#ifndef ATTR_NORETURN
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
#define ATTR_NORETURN __attribute__ ((noreturn))
#else
#define ATTR_NORETURN
#endif
#endif
#ifndef ATTR_FORMAT
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 4))
#define ATTR_FORMAT(type, x, y) __attribute__ ((format(type, x, y)))
#else
#define ATTR_FORMAT(type, x, y)
#endif
#endif
struct symtab;
struct breakpoint;
struct symtab_and_line;
#ifdef UI_OUT
struct ui_out;
#endif
extern int inside_entry_func (CORE_ADDR);
extern int inside_entry_file (CORE_ADDR addr);
extern int inside_main_func (CORE_ADDR pc);
extern char *chill_demangle (const char *);
extern char *objc_demangle (const char *);
extern void initialize_utils (void);
extern void notice_quit (void);
extern int strcmp_iw (const char *, const char *);
extern int subset_compare (char *, char *);
extern char *safe_strerror (int);
extern void *init_malloc (void *);
extern void init_mmalloc_default_pool (void *);
extern void request_quit (int);
extern void do_cleanups (struct cleanup *);
extern void do_final_cleanups (struct cleanup *);
extern void do_my_cleanups (struct cleanup **, struct cleanup *);
extern void do_run_cleanups (struct cleanup *);
extern void do_exec_cleanups (struct cleanup *);
extern void do_exec_error_cleanups (struct cleanup *);
extern void discard_cleanups (struct cleanup *);
extern void discard_final_cleanups (struct cleanup *);
extern void discard_exec_error_cleanups (struct cleanup *);
extern void discard_my_cleanups (struct cleanup **, struct cleanup *);
typedef void (make_cleanup_ftype) (void *);
extern struct cleanup *make_cleanup (make_cleanup_ftype *, void *);
extern struct cleanup *make_cleanup_freeargv (char **);
struct ui_file;
extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *);
extern struct cleanup *make_cleanup_close (int fd);
extern struct cleanup *make_cleanup_bfd_close (bfd *abfd);
extern struct cleanup *make_final_cleanup (make_cleanup_ftype *, void *);
extern struct cleanup *make_my_cleanup (struct cleanup **,
make_cleanup_ftype *, void *);
extern struct cleanup *make_run_cleanup (make_cleanup_ftype *, void *);
extern struct cleanup *make_exec_cleanup (make_cleanup_ftype *, void *);
extern struct cleanup *make_exec_error_cleanup (make_cleanup_ftype *, void *);
extern struct cleanup *save_cleanups (void);
extern struct cleanup *save_final_cleanups (void);
extern struct cleanup *save_my_cleanups (struct cleanup **);
extern void restore_cleanups (struct cleanup *);
extern void restore_final_cleanups (struct cleanup *);
extern void restore_my_cleanups (struct cleanup **, struct cleanup *);
extern void free_current_contents (void *);
extern void null_cleanup (void *);
extern int myread (int, char *, int);
extern int query (const char *, ...) ATTR_FORMAT (printf, 1, 2);
extern void init_page_info (void);
extern CORE_ADDR host_pointer_to_address (void *ptr);
extern void *address_to_host_pointer (CORE_ADDR addr);
extern char *gdb_realpath (const char *);
extern char *xfullpath (const char *);
extern void set_demangling_style (char *);
struct type;
typedef int (use_struct_convention_fn) (int gcc_p, struct type * value_type);
extern use_struct_convention_fn generic_use_struct_convention;
typedef unsigned char *(breakpoint_from_pc_fn) (CORE_ADDR * pcptr, int *lenptr);
extern int annotation_level;
extern void begin_line (void);
extern void wrap_here (char *);
extern void update_width (void);
extern void reinitialize_more_filter (void);
extern struct ui_file *gdb_stdout;
extern struct ui_file *gdb_stderr;
extern struct ui_file *gdb_stdlog;
extern struct ui_file *gdb_stdtarg;
extern struct ui_file *gdb_null;
#if defined(TUI) && !defined(NOTUI)
#include "tui.h"
#endif
#include "ui-file.h"
extern void fputs_filtered (const char *, struct ui_file *);
extern void fputs_unfiltered (const char *, struct ui_file *);
extern int fputc_filtered (int c, struct ui_file *);
extern int fputc_unfiltered (int c, struct ui_file *);
extern int putchar_filtered (int c);
extern int putchar_unfiltered (int c);
extern void puts_filtered (const char *);
extern void puts_unfiltered (const char *);
extern void puts_debug (char *prefix, char *string, char *suffix);
extern void vprintf_filtered (const char *, va_list) ATTR_FORMAT (printf, 1, 0);
extern void vfprintf_filtered (struct ui_file *, const char *, va_list) ATTR_FORMAT (printf, 2, 0);
extern void fprintf_filtered (struct ui_file *, const char *, ...) ATTR_FORMAT (printf, 2, 3);
extern void fprintfi_filtered (int, struct ui_file *, const char *, ...) ATTR_FORMAT (printf, 3, 4);
extern void printf_filtered (const char *, ...) ATTR_FORMAT (printf, 1, 2);
extern void printfi_filtered (int, const char *, ...) ATTR_FORMAT (printf, 2, 3);
extern void vprintf_unfiltered (const char *, va_list) ATTR_FORMAT (printf, 1, 0);
extern void vfprintf_unfiltered (struct ui_file *, const char *, va_list) ATTR_FORMAT (printf, 2, 0);
extern void fprintf_unfiltered (struct ui_file *, const char *, ...) ATTR_FORMAT (printf, 2, 3);
extern void printf_unfiltered (const char *, ...) ATTR_FORMAT (printf, 1, 2);
extern void print_spaces (int, struct ui_file *);
extern void print_spaces_filtered (int, struct ui_file *);
extern char *n_spaces (int);
extern void fputstr_filtered (const char *str, int quotr, struct ui_file * stream);
extern void fputstr_unfiltered (const char *str, int quotr, struct ui_file * stream);
extern void fputstrn_unfiltered (const char *str, int n, int quotr, struct ui_file * stream);
extern void gdb_print_host_address (void *addr, struct ui_file *stream);
extern int strlen_paddr (void);
extern char *paddr (CORE_ADDR addr);
extern char *paddr_nz (CORE_ADDR addr);
extern char *paddr_u (CORE_ADDR addr);
extern char *paddr_d (LONGEST addr);
extern char *phex (ULONGEST l, int sizeof_l);
extern char *phex_nz (ULONGEST l, int sizeof_l);
extern const char *core_addr_to_string (const CORE_ADDR addr);
extern const char *core_addr_to_string_nz (const CORE_ADDR addr);
extern CORE_ADDR string_to_core_addr (const char *my_string);
extern void fprintf_symbol_filtered (struct ui_file *, char *,
enum language, int);
extern NORETURN void perror_with_name (const char *) ATTR_NORETURN;
extern void print_sys_errmsg (const char *, int);
extern char *re_comp (const char *);
extern void symbol_file_command (char *, int);
extern void generic_load (char *name, int from_tty);
extern void print_transfer_performance (struct ui_file *stream,
unsigned long data_count,
unsigned long write_count,
unsigned long time_count);
typedef void initialize_file_ftype (void);
extern char *gdb_readline (char *);
extern char *command_line_input (char *, int, char *);
extern void print_prompt (void);
extern int input_from_terminal_p (void);
extern int info_verbose;
extern void set_next_address (CORE_ADDR);
extern void print_address_symbolic (CORE_ADDR, struct ui_file *, int,
char *);
extern int build_address_symbolic (CORE_ADDR addr,
int do_demangle,
char **name,
int *offset,
char **filename,
int *line,
int *unmapped);
extern void print_address_numeric (CORE_ADDR, int, struct ui_file *);
extern void print_address (CORE_ADDR, struct ui_file *);
extern int openp (const char *, int, const char *, int, int, char **);
extern int source_full_path_of (char *, char **);
extern void mod_path (char *, char **);
extern void directory_command (char *, int);
extern void init_source_path (void);
extern char *symtab_to_filename (struct symtab *);
extern void exec_set_section_offsets (bfd_signed_vma text_off,
bfd_signed_vma data_off,
bfd_signed_vma bss_off);
extern void exec_set_find_memory_regions (int (*) (int (*) (CORE_ADDR,
unsigned long,
int, int, int,
void *),
void *));
extern int read_relative_register_raw_bytes (int, char *);
enum lval_type
{
not_lval,
lval_memory,
lval_register,
lval_internalvar,
lval_internalvar_component,
lval_reg_frame_relative
};
struct frame_info;
extern char *tilde_expand (char *);
enum misc_command_type
{
ok_command,
end_command,
else_command,
nop_command
};
enum command_control_type
{
simple_control,
break_control,
continue_control,
while_control,
if_control,
invalid_control
};
struct command_line
{
struct command_line *next;
char *line;
enum command_control_type control_type;
int body_count;
struct command_line **body_list;
};
extern struct command_line *read_command_lines (char *, int);
extern void free_command_lines (struct command_line **);
struct continuation_arg
{
struct continuation_arg *next;
union continuation_data {
void *pointer;
int integer;
long longint;
} data;
};
struct continuation
{
void (*continuation_hook) (struct continuation_arg *);
struct continuation_arg *arg_list;
struct continuation *next;
};
typedef struct continuation continuation;
extern struct continuation *cmd_continuation;
extern struct continuation *intermediate_continuation;
extern void add_continuation (void (*)(struct continuation_arg *),
struct continuation_arg *);
extern void do_all_continuations (void);
extern void discard_all_continuations (void);
extern void add_intermediate_continuation (void (*)(struct continuation_arg *),
struct continuation_arg *);
extern void do_all_intermediate_continuations (void);
extern void discard_all_intermediate_continuations (void);
extern char *current_directory;
extern unsigned input_radix;
extern unsigned output_radix;
enum val_prettyprint
{
Val_no_prettyprint = 0,
Val_prettyprint,
Val_pretty_default
};
struct ptid
{
int pid;
long lwp;
long tid;
};
typedef struct ptid ptid_t;
#ifdef GDB_XM_FILE
#include "xm.h"
#endif
#ifdef GDB_NM_FILE
#include "nm.h"
#endif
#ifdef GDB_TM_FILE
#include "tm.h"
#endif
#ifndef GDB_MULTI_ARCH
#define GDB_MULTI_ARCH 0
#endif
#ifndef FOPEN_RB
#include "fopen-same.h"
#endif
#if !defined (UINT_MAX)
#define UINT_MAX ((unsigned int)(~0))
#endif
#if !defined (INT_MAX)
#define INT_MAX ((int)(UINT_MAX >> 1))
#endif
#if !defined (INT_MIN)
#define INT_MIN ((int)((int) ~0 ^ INT_MAX))
#endif
#if !defined (ULONG_MAX)
#define ULONG_MAX ((unsigned long)(~0L))
#endif
#if !defined (LONG_MAX)
#define LONG_MAX ((long)(ULONG_MAX >> 1))
#endif
#if !defined (ULONGEST_MAX)
#define ULONGEST_MAX (~(ULONGEST)0)
#endif
#if !defined (LONGEST_MAX)
#define LONGEST_MAX ((LONGEST)(ULONGEST_MAX >> 1))
#endif
extern int longest_to_int (LONGEST);
extern char *savestring (const char *, size_t);
extern char *msavestring (void *, const char *, size_t);
extern char *mstrsave (void *, const char *);
extern void *xmmalloc (void *md, size_t size);
extern void *xmrealloc (void *md, void *ptr, size_t size);
extern void *xmcalloc (void *md, size_t number, size_t size);
extern void xmfree (void *md, void *ptr);
extern void xfree (void *);
#define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
extern void xasprintf (char **ret, const char *format, ...) ATTR_FORMAT (printf, 2, 3);
extern void xvasprintf (char **ret, const char *format, va_list ap);
extern int parse_escape (char **);
extern char *error_pre_print;
extern char *quit_pre_print;
extern char *warning_pre_print;
extern NORETURN void verror (const char *fmt, va_list ap) ATTR_NORETURN;
extern NORETURN void error (const char *fmt, ...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
extern NORETURN void error_stream (struct ui_file *) ATTR_NORETURN;
extern char *error_last_message (void);
extern NORETURN void internal_verror (const char *file, int line,
const char *, va_list ap) ATTR_NORETURN;
extern NORETURN void internal_error (const char *file, int line,
const char *, ...) ATTR_NORETURN ATTR_FORMAT (printf, 3, 4);
extern NORETURN void nomem (long) ATTR_NORETURN;
enum return_reason
{
RETURN_QUIT = -2,
RETURN_ERROR
};
#define ALL_CLEANUPS ((struct cleanup *)0)
#define RETURN_MASK(reason) (1 << (int)(-reason))
#define RETURN_MASK_QUIT RETURN_MASK (RETURN_QUIT)
#define RETURN_MASK_ERROR RETURN_MASK (RETURN_ERROR)
#define RETURN_MASK_ALL (RETURN_MASK_QUIT | RETURN_MASK_ERROR)
typedef int return_mask;
extern NORETURN void throw_exception (enum return_reason) ATTR_NORETURN;
struct ui_out;
typedef int (catch_exceptions_ftype) (struct ui_out *ui_out, void *args);
extern int catch_exceptions (struct ui_out *uiout,
catch_exceptions_ftype *func, void *func_args,
char *errstring, return_mask mask);
typedef int (catch_errors_ftype) (PTR);
extern int catch_errors (catch_errors_ftype *, void *, char *, return_mask);
typedef void (catch_command_errors_ftype) (char *, int);
extern int catch_command_errors (catch_command_errors_ftype *func, char *command, int from_tty, return_mask);
extern void warning (const char *, ...) ATTR_FORMAT (printf, 1, 2);
extern void vwarning (const char *, va_list args);
#ifndef GETENV_PROVIDED
extern char *getenv (const char *);
#endif
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) ((a) > (b) ? (a) : (b))
#endif
#ifndef FCLOSE_PROVIDED
extern int fclose (FILE *);
#endif
#ifndef atof
extern double atof (const char *);
#endif
#ifndef alloca
#ifdef __GNUC__
#define alloca __builtin_alloca
#else
#ifdef HAVE_ALLOCA_H
#include <alloca.h>
#else
#ifdef _AIX
#pragma alloca
#else
extern void *alloca ();
#endif
#endif
#endif
#endif
#include "gdbarch.h"
#if (GDB_MULTI_ARCH == 0)
#include "arch-utils.h"
#endif
#if !defined (TARGET_CHAR_BIT)
#define TARGET_CHAR_BIT 8
#endif
#if defined (CHAR_BIT)
#define HOST_CHAR_BIT CHAR_BIT
#else
#define HOST_CHAR_BIT TARGET_CHAR_BIT
#endif
#if !defined (BITS_BIG_ENDIAN)
#define BITS_BIG_ENDIAN (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
#endif
extern LONGEST extract_signed_integer (void *, int);
extern ULONGEST extract_unsigned_integer (void *, int);
extern int extract_long_unsigned_integer (void *, int, LONGEST *);
extern CORE_ADDR extract_address (void *, int);
extern CORE_ADDR extract_typed_address (void *buf, struct type *type);
extern void store_signed_integer (void *, int, LONGEST);
extern void store_unsigned_integer (void *, int, ULONGEST);
extern void store_address (void *, int, LONGEST);
extern void store_typed_address (void *buf, struct type *type, CORE_ADDR addr);
extern CORE_ADDR push_bytes (CORE_ADDR, char *, int);
extern CORE_ADDR push_word (CORE_ADDR, ULONGEST);
extern int watchdog;
extern char *interpreter_p;
struct target_waitstatus;
struct cmd_list_element;
extern int event_loop_p;
typedef void * gdb_client_data;
typedef enum {
STATE_NOT_ACTIVE,
STATE_ACTIVE,
STATE_INFERIOR_LOADED,
STATE_INFERIOR_EXITED,
STATE_INFERIOR_LOGICALLY_RUNNING,
STATE_INFERIOR_STOPPED
} Debugger_state;
extern void (*init_ui_hook) (char *argv0);
extern void (*command_loop_hook) (void);
extern void (*show_load_progress) (const char *section,
unsigned long section_sent,
unsigned long section_size,
unsigned long total_sent,
unsigned long total_size);
extern void (*print_frame_info_listing_hook) (struct symtab * s,
int line, int stopline,
int noerror);
extern void (*print_frame_more_info_hook) (struct ui_out *uiout,
struct symtab_and_line *sal,
struct frame_info *fi);
extern struct frame_info *parse_frame_specification (char *frame_exp);
extern int (*query_hook) (const char *, va_list);
extern void (*warning_hook) (const char *, va_list);
extern void (*flush_hook) (struct ui_file * stream);
extern void (*create_breakpoint_hook) (struct breakpoint * b);
extern void (*delete_breakpoint_hook) (struct breakpoint * bpt);
extern void (*modify_breakpoint_hook) (struct breakpoint * bpt);
extern void (*interactive_hook) (void);
extern void (*registers_changed_hook) (void);
extern void (*readline_begin_hook) (char *,...);
extern char *(*readline_hook) (char *);
extern void (*readline_end_hook) (void);
extern void (*register_changed_hook) (int regno);
extern void (*memory_changed_hook) (CORE_ADDR addr, int len);
extern void (*context_hook) (int);
extern ptid_t (*target_wait_hook) (ptid_t ptid,
struct target_waitstatus * status,
gdb_client_data client_data);
extern void (*attach_hook) (void);
extern void (*detach_hook) (void);
extern void (*call_command_hook) (struct cmd_list_element * c,
char *cmd, int from_tty);
extern void (*set_hook) (struct cmd_list_element * c);
extern NORETURN void (*error_hook) (void) ATTR_NORETURN;
extern void (*error_begin_hook) (void);
extern int (*ui_load_progress_hook) (const char *section, unsigned long num);
extern void (*print_source_lines_hook)
(struct symtab *s, int line, int stopline);
extern void (*state_change_hook) (Debugger_state new_state);
extern void (*frame_changed_hook) (int new_frame_number);
extern void (*stack_changed_hook) (void);
extern char * (*command_line_input_hook) (char *, int, char *);
extern void (*stepping_command_hook) (void);
extern void (*continue_command_hook) (void);
extern int (*run_command_hook) (void);
extern int use_windows;
#ifndef DIRNAME_SEPARATOR
#define DIRNAME_SEPARATOR ':'
#endif
#ifndef SLASH_STRING
#define SLASH_STRING "/"
#endif
#ifdef __MSDOS__
# define CANT_FORK
# define GLOBAL_CURDIR
#endif
#ifndef PIDGET
#define PIDGET(PTID) (ptid_get_pid (PTID))
#define TIDGET(PTID) (ptid_get_lwp (PTID))
#define MERGEPID(PID, TID) ptid_build (PID, TID, 0)
#endif
#ifdef __CYGWIN32__
#ifndef __CYGWIN__
#define __CYGWIN__
#endif
#endif
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
#endif
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#ifndef STDERR_FILENO
#define STDERR_FILENO 2
#endif
#ifndef ISATTY
#define ISATTY(FP) (isatty (fileno (FP)))
#endif
#if defined(NeXT_PDO)
#undef environ
#endif
#if (!defined __GNUC__ || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < (defined __cplusplus ? 6 : 4)))
#define __CHECK_FUNCTION ((__const char *) 0)
#else
#define __CHECK_FUNCTION __PRETTY_FUNCTION__
#endif
#define CHECK(expression) \
((void) ((expression) ? 0 : gdb_check (#expression, __FILE__, __LINE__, __CHECK_FUNCTION)))
#define CHECK_FATAL(expression) \
((void) ((expression) ? 0 : gdb_check_fatal (#expression, __FILE__, __LINE__, __CHECK_FUNCTION)))
void gdb_check (const char *str, const char *file, unsigned int line, const char *func);
void gdb_check_fatal (const char *str, const char *file, unsigned int line, const char *func);
#endif