/* *INDENT-OFF* */ /* ATTR_FORMAT confuses indent, avoid running it for now */
/* Basic, host-specific, and target-specific definitions for GDB.
- Copyright (C) 1986, 1989, 1991-1996, 1998-2000
+ Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+ 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
Free Software Foundation, Inc.
This file is part of GDB.
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. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#ifndef DEFS_H
#define DEFS_H
-#include "config.h" /* Generated by configure */
+#include "config.h" /* Generated by configure. */
+
+#include <sys/types.h>
#include <stdio.h>
-#include <errno.h> /* System call error return status */
+#include <errno.h> /* System call error return status. */
#include <limits.h>
#ifdef HAVE_STDDEF_H
#include <stddef.h>
-#else
-#include <sys/types.h> /* for size_t */
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-/* Just in case they're not defined in stdio.h. */
+#include <fcntl.h>
+
+/* First include ansidecl.h so we can use the various macro definitions
+ here and in all subsequent file inclusions. */
+
+#include "ansidecl.h"
+
+#include "gdb_locale.h"
+
+/* For ``enum target_signal''. */
+#include "gdb/signals.h"
+
+/* Just in case they're not defined in stdio.h. */
#ifndef SEEK_SET
#define SEEK_SET 0
#define SEEK_CUR 1
#endif
-/* First include ansidecl.h so we can use the various macro definitions
- here and in all subsequent file inclusions. */
+/* The O_BINARY flag is defined in fcntl.h on some non-Posix platforms.
+ It is used as an access modifier in calls to open(), where it acts
+ similarly to the "b" character in fopen()'s MODE argument. On Posix
+ platforms it should be a no-op, so it is defined as 0 here. This
+ ensures that the symbol may be used freely elsewhere in gdb. */
-#include "ansidecl.h"
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
-#include <stdarg.h> /* for va_list */
+#include <stdarg.h> /* For va_list. */
#include "libiberty.h"
-/* libiberty.h can't declare this one, but evidently we can. */
-extern char *strsignal (int);
-
-#include "progress.h"
-
-#ifdef USE_MMALLOC
-#include "mmalloc.h"
-#endif
+/* Rather than duplicate all the logic in BFD for figuring out what
+ types to use (which can be pretty complicated), symply define them
+ in terms of the corresponding type from BFD. */
-/* For BFD64 and bfd_vma. */
#include "bfd.h"
-/* An address in the program being debugged. Host byte order. Rather
- than duplicate all the logic in BFD which figures out what type
- this is (long, long long, etc.) and whether it needs to be 64
- bits (the host/target interactions are subtle), we just use
- bfd_vma. */
+/* A byte from the program being debugged. */
+typedef bfd_byte gdb_byte;
+/* An address in the program being debugged. Host byte order. */
typedef bfd_vma CORE_ADDR;
/* This is to make sure that LONGEST is at least as big as CORE_ADDR. */
#endif /* ! LONGEST */
-extern int core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs);
-extern int core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs);
-
-
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif
issue is found that we spend the effort on algorithmic
optimizations than micro-optimizing.'' J.T. */
-#define STRCMP(a,b) (*(a) == *(b) ? strcmp ((a), (b)) : (int)*(a) - (int)*(b))
-#define STREQ(a,b) (*(a) == *(b) ? !strcmp ((a), (b)) : 0)
-#define STREQN(a,b,c) (*(a) == *(b) ? !strncmp ((a), (b), (c)) : 0)
+/* NOTE: cagney/2003-11-23: All instances of STREQ[N] covered by
+ testing GDB on a stabs system have been replaced by equivalent
+ str[n]cmp calls. To avoid the possability of introducing bugs when
+ making untested changes, the remaining references were deprecated
+ rather than replaced. */
+
+/* DISCLAIMER: cagney/2003-11-23: Simplified definition of these
+ macros so that they just map directly onto strcmp equivalent. I'm
+ not responsible for any breakage due to code that relied on the old
+ underlying implementation. */
-/* The character GNU C++ uses to build identifiers that must be unique from
- the program's identifiers (such as $this and $$vptr). */
-#define CPLUS_MARKER '$' /* May be overridden to '.' for SysV */
+#define DEPRECATED_STREQ(a,b) (strcmp ((a), (b)) == 0)
+#define DEPRECATED_STREQN(a,b,c) (strncmp ((a), (b), (c)) == 0)
/* Check if a character is one of the commonly used C++ marker characters. */
extern int is_cplus_marker (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;
+/* System root path, used to find libraries etc. */
+extern char *gdb_sysroot;
+
+/* Search path for separate debug files. */
+extern char *debug_file_directory;
+
extern int quit_flag;
extern int immediate_quit;
extern int sevenbit_strings;
#else
#define QUIT { \
if (quit_flag) quit (); \
- if (interactive_hook) interactive_hook (); \
- PROGRESS (1); \
+ if (deprecated_interactive_hook) deprecated_interactive_hook (); \
}
#endif
language_auto, /* Placeholder for automatic setting */
language_c, /* C */
language_cplus, /* C++ */
+ language_objc, /* Objective-C */
language_java, /* Java */
- language_chill, /* Chill */
language_fortran, /* Fortran */
language_m2, /* Modula-2 */
language_asm, /* Assembly language */
- language_scm /* Scheme / Guile */
+ language_pascal, /* Pascal */
+ language_ada, /* Ada */
+ language_minimal, /* All other languages, minimal support only */
+ nr_languages
};
enum precision_type
unspecified_precision
};
+/* A generic, not quite boolean, enumeration. */
+enum auto_boolean
+{
+ AUTO_BOOLEAN_TRUE,
+ AUTO_BOOLEAN_FALSE,
+ AUTO_BOOLEAN_AUTO
+};
+
+/* Potential ways that a function can return a value of a given type. */
+enum return_value_convention
+{
+ /* Where the return value has been squeezed into one or more
+ registers. */
+ RETURN_VALUE_REGISTER_CONVENTION,
+ /* Commonly known as the "struct return convention". The caller
+ passes an additional hidden first parameter to the caller. That
+ parameter contains the address at which the value being returned
+ should be stored. While typically, and historically, used for
+ large structs, this is convention is applied to values of many
+ different types. */
+ RETURN_VALUE_STRUCT_CONVENTION,
+ /* Like the "struct return convention" above, but where the ABI
+ guarantees that the called function stores the address at which
+ the value being returned is stored in a well-defined location,
+ such as a register or memory slot in the stack frame. Don't use
+ this if the ABI doesn't explicitly guarantees this. */
+ RETURN_VALUE_ABI_RETURNS_ADDRESS,
+ /* Like the "struct return convention" above, but where the ABI
+ guarantees that the address at which the value being returned is
+ stored will be available in a well-defined location, such as a
+ register or memory slot in the stack frame. Don't use this if
+ the ABI doesn't explicitly guarantees this. */
+ RETURN_VALUE_ABI_PRESERVES_ADDRESS,
+};
+
/* 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
struct cleanup
{
struct cleanup *next;
- void (*function) (PTR);
- PTR arg;
+ void (*function) (void *);
+ void *arg;
};
works everywhere we use it. */
#ifndef ATTR_NORETURN
-#if defined(__GNUC__) && __GNUC__ >= 2 && __GNUC_MINOR__ >= 7
+#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
#define ATTR_NORETURN __attribute__ ((noreturn))
#else
#define ATTR_NORETURN /* nothing */
#endif
#ifndef ATTR_FORMAT
-#if defined(__GNUC__) && __GNUC__ >= 2 && __GNUC_MINOR__ >= 4
+#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) /* nothing */
#endif
#endif
+/* Be conservative and use enum bitfields only with GCC.
+ This is copied from gcc 3.3.1, system.h. */
+
+#if defined(__GNUC__) && (__GNUC__ >= 2)
+#define ENUM_BITFIELD(TYPE) enum TYPE
+#else
+#define ENUM_BITFIELD(TYPE) unsigned int
+#endif
+
/* Needed for various prototypes */
struct symtab;
struct breakpoint;
-
-/* From blockframe.c */
-
-extern int inside_entry_func (CORE_ADDR);
-
-extern int inside_entry_file (CORE_ADDR addr);
-
-extern int inside_main_func (CORE_ADDR pc);
-
-/* From ch-lang.c, for the moment. (FIXME) */
-
-extern char *chill_demangle (const char *);
+struct frame_info;
/* From utils.c */
extern int strcmp_iw (const char *, const char *);
-extern int subset_compare (char *, char *);
+extern int strcmp_iw_ordered (const char *, const char *);
-extern char *safe_strerror (int);
+extern int streq (const char *, const char *);
-extern char *safe_strsignal (int);
+extern int subset_compare (char *, char *);
-extern void init_malloc (void *);
+extern char *safe_strerror (int);
-extern void request_quit (int);
+#define ALL_CLEANUPS ((struct cleanup *)0)
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_exec_error_cleanups (struct cleanup *);
extern void discard_my_cleanups (struct cleanup **, struct cleanup *);
-/* DEPRECATED: cagney/2000-03-04: Do not use this typedef to cast
- function pointers so that they match the argument to the various
- cleanup functions. Post GDB 5.0, this typedef will be
- deleted. [Editors note: cagney was the person that added most of
- those type casts] */
-typedef void (*make_cleanup_func) (void *);
-
/* NOTE: cagney/2000-03-04: This typedef is strictly for the
make_cleanup function declarations below. Do not use this typedef
as a cast when passing functions into the make_cleanup() code.
struct ui_file;
extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *);
+struct section_addr_info;
+extern struct cleanup *(make_cleanup_free_section_addr_info
+ (struct section_addr_info *));
+
+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 **,
extern void restore_final_cleanups (struct cleanup *);
extern void restore_my_cleanups (struct cleanup **, struct cleanup *);
-extern void free_current_contents (char **);
+extern void free_current_contents (void *);
extern void null_cleanup (void *);
extern int myread (int, char *, int);
-extern int query (char *, ...) ATTR_FORMAT (printf, 1, 2);
-
-#if !defined (USE_MMALLOC)
-/* NOTE: cagney/2000-03-04: The mmalloc functions need to use PTR
- rather than void* so that they are consistent with
- ../mmalloc/mmalloc.h. */
-extern PTR mcalloc (PTR, size_t, size_t);
-extern PTR mmalloc (PTR, size_t);
-extern PTR mrealloc (PTR, PTR, size_t);
-extern void mfree (PTR, PTR);
-#endif
+extern int query (const char *, ...) ATTR_FORMAT (printf, 1, 2);
+extern int nquery (const char *, ...) ATTR_FORMAT (printf, 1, 2);
+extern int yquery (const char *, ...) ATTR_FORMAT (printf, 1, 2);
extern void init_page_info (void);
+extern char *gdb_realpath (const char *);
+extern char *xfullpath (const char *);
+
+extern unsigned long gnu_debuglink_crc32 (unsigned long crc,
+ unsigned char *buf, size_t len);
+
+ULONGEST strtoulst (const char *num, const char **trailer, int base);
+
+char *ldirname (const char *filename);
+
/* From demangle.c */
extern void set_demangling_style (char *);
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);
\f
/* Annotation stuff. */
/* Normal results */
extern struct ui_file *gdb_stdout;
+/* Input stream */
+extern struct ui_file *gdb_stdin;
/* Serious error notifications */
extern struct ui_file *gdb_stderr;
/* Log/debug/trace messages that should bypass normal stdout/stderr
- filtering. For momement, always call this stream using
+ filtering. For moment, always call this stream using
*_unfiltered. In the very near future that restriction shall be
removed - either call shall be unfiltered. (cagney 1999-06-13). */
extern struct ui_file *gdb_stdlog;
/* Target output that should bypass normal stdout/stderr filtering.
- For momement, always call this stream using *_unfiltered. In the
+ For moment, always call this stream using *_unfiltered. In the
very near future that restriction shall be removed - either call
shall be unfiltered. (cagney 1999-07-02). */
extern struct ui_file *gdb_stdtarg;
-
-#if defined(TUI)
-#include "tui.h"
-#include "tuiCommand.h"
-#include "tuiData.h"
-#include "tuiIO.h"
-#include "tuiLayout.h"
-#include "tuiWin.h"
-#endif
+extern struct ui_file *gdb_stdtargerr;
+extern struct ui_file *gdb_stdtargin;
#include "ui-file.h"
-/* More generic printf like operations */
+/* More generic printf like operations. Filtered versions may return
+ non-locally on error. */
extern void fputs_filtered (const char *, 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_filtered_tabular (char *string, int width, int right);
+
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 fputstr_unfiltered (const char *str, int quotr, struct ui_file * stream);
+extern void fputstrn_filtered (const char *str, int n, int quotr, struct ui_file * stream);
+
extern void fputstrn_unfiltered (const char *str, int n, int quotr, struct ui_file * stream);
/* Display the host ADDR on STREAM formatted as ``0x%x''. */
-extern void gdb_print_host_address (void *addr, struct ui_file *stream);
+extern void gdb_print_host_address (const void *addr, struct ui_file *stream);
/* Convert a CORE_ADDR into a HEX string. paddr() is like %08lx.
paddr_nz() is like %lx. paddr_u() is like %lu. paddr_width() is
extern char *paddr_u (CORE_ADDR addr);
extern char *paddr_d (LONGEST addr);
-typedef bfd_vma t_reg;
-extern char *preg (t_reg reg);
-extern char *preg_nz (t_reg reg);
+/* Like 0x%lx, replaces deprecated_print_address_numeric. */
+extern const char *paddress (CORE_ADDR addr);
+
+extern char *phex (ULONGEST l, int sizeof_l);
+extern char *phex_nz (ULONGEST l, int sizeof_l);
+extern char *int_string (LONGEST, int, int, int, int);
+
+/* Like paddr() only print/scan raw CORE_ADDR. The output from
+ core_addr_to_string() can be passed direct to
+ string_to_core_addr(). */
+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);
+
+/* Return a string that contains a number formatted as a hex
+ string. */
+extern char *hex_string (LONGEST);
+extern char *hex_string_custom (LONGEST, int);
extern void fprintf_symbol_filtered (struct ui_file *, char *,
enum language, int);
-extern NORETURN void perror_with_name (char *) ATTR_NORETURN;
+extern NORETURN void perror_with_name (const char *) ATTR_NORETURN;
-extern void print_sys_errmsg (char *, int);
+extern void print_sys_errmsg (const char *, int);
/* 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
/* Remote targets may wish to use this as their load function. */
extern void generic_load (char *name, int from_tty);
-/* Summarise a download */
+/* Report on STREAM the performance of memory transfer operation,
+ such as 'load'.
+ DATA_COUNT is the number of bytes transferred.
+ WRITE_COUNT is the number of separate write operations, or 0,
+ if that information is not available.
+ START_TIME is the time at which an operation was started.
+ END_TIME is the time at which an operation ended. */
+struct timeval;
extern void print_transfer_performance (struct ui_file *stream,
unsigned long data_count,
unsigned long write_count,
- unsigned long time_count);
+ const struct timeval *start_time,
+ const struct timeval *end_time);
/* From top.c */
extern char *gdb_readline (char *);
+extern char *gdb_readline_wrapper (char *);
+
extern char *command_line_input (char *, int, char *);
extern void print_prompt (void);
int *line,
int *unmapped);
-extern void print_address_numeric (CORE_ADDR, int, struct ui_file *);
+extern void deprecated_print_address_numeric (CORE_ADDR, int, struct ui_file *);
extern void print_address (CORE_ADDR, struct ui_file *);
/* From source.c */
-extern int openp (char *, int, char *, int, int, char **);
+#define OPF_TRY_CWD_FIRST 0x01
+#define OPF_SEARCH_IN_PATH 0x02
+
+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 add_path (char *, char **, int);
+
extern void directory_command (char *, int);
+extern void directory_switch (char *, int);
+
+extern char *source_path;
+
extern void init_source_path (void);
-extern char *symtab_to_filename (struct symtab *);
+extern void init_last_source_visited (void);
/* From exec.c */
bfd_signed_vma data_off,
bfd_signed_vma bss_off);
-/* From findvar.c */
-
-extern int read_relative_register_raw_bytes (int, char *);
+/* Take over the 'find_mapped_memory' vector from exec.c. */
+extern void exec_set_find_memory_regions (int (*) (int (*) (CORE_ADDR,
+ unsigned long,
+ int, int, int,
+ void *),
+ void *));
/* Possible lvalue types. Like enum language, this should be in
value.h, but needs to be here for the same reason. */
{
/* Not an lval. */
not_lval,
- /* In memory. Could be a saved register. */
+ /* In memory. */
lval_memory,
- /* In a register. */
+ /* In a register. Registers are relative to a frame. */
lval_register,
/* In a gdb internal variable. */
lval_internalvar,
/* Part of a gdb internal variable (structure field). */
- lval_internalvar_component,
- /* In a register series in a frame not the current one, which may have been
- partially saved or saved in different places (otherwise would be
- lval_register or lval_memory). */
- lval_reg_frame_relative
+ lval_internalvar_component
};
-struct frame_info;
-
-void default_get_saved_register (char *raw_buffer, int *optimized,
- CORE_ADDR * addrp,
- struct frame_info *frame, int regnum,
- enum lval_type *lval);
-
-/* From readline (but not in any readline .h files). */
-
-extern char *tilde_expand (char *);
-
/* Control types for commands */
enum misc_command_type
continue_control,
while_control,
if_control,
+ commands_control,
invalid_control
};
struct continuation_arg *arg_list;
struct continuation *next;
};
-struct continuation continuation;
/* In infrun.c. */
extern struct continuation *cmd_continuation;
/* Use the default setting which the user has specified. */
Val_pretty_default
};
+
+/* The ptid struct is a collection of the various "ids" necessary
+ for identifying the inferior. This consists of the process id
+ (pid), thread id (tid), and other fields necessary for uniquely
+ identifying the inferior process/thread being debugged. When
+ manipulating ptids, the constructors, accessors, and predicate
+ declared in inferior.h should be used. These are as follows:
+
+ ptid_build - Make a new ptid from a pid, lwp, and tid.
+ pid_to_ptid - Make a new ptid from just a pid.
+ ptid_get_pid - Fetch the pid component of a ptid.
+ ptid_get_lwp - Fetch the lwp component of a ptid.
+ ptid_get_tid - Fetch the tid component of a ptid.
+ ptid_equal - Test to see if two ptids are equal.
+
+ Please do NOT access the struct ptid members directly (except, of
+ course, in the implementation of the above ptid manipulation
+ functions). */
+
+struct ptid
+ {
+ /* Process id */
+ int pid;
+
+ /* Lightweight process id */
+ long lwp;
+
+ /* Thread id */
+ long tid;
+ };
+
+typedef struct ptid ptid_t;
+
\f
-/* Host machine definition. This will be a symlink to one of the
- xm-*.h files, built by the `configure' script. */
+/* Optional host machine definition. Pure autoconf targets will not
+ need a "xm.h" file. This will be a symlink to one of the xm-*.h
+ files, built by the `configure' script. */
+#ifdef GDB_XM_FILE
#include "xm.h"
+#endif
-/* Native machine support. This will be a symlink to one of the
- nm-*.h files, built by the `configure' script. */
+/* Optional native machine support. Non-native (and possibly pure
+ multi-arch) targets do not need a "nm.h" file. This will be a
+ symlink to one of the nm-*.h files, built by the `configure'
+ script. */
+#ifdef GDB_NM_FILE
#include "nm.h"
+#endif
-/* Target machine definition. This will be a symlink to one of the
+/* Optional target machine definition. Pure multi-arch configurations
+ do not need a "tm.h" file. This will be a symlink to one of the
tm-*.h files, built by the `configure' script. */
+#ifdef GDB_TM_FILE
#include "tm.h"
-
-/* If the xm.h file did not define the mode string used to open the
- files, assume that binary files are opened the same way as text
- files */
-#ifndef FOPEN_RB
-#include "fopen-same.h"
#endif
-/* Microsoft C can't deal with const pointers */
-
-#ifdef _MSC_VER
-#define CONST_PTR
-#else
-#define CONST_PTR const
+/* Assume that fopen accepts the letter "b" in the mode string.
+ It is demanded by ISO C9X, and should be supported on all
+ platforms that claim to have a standard-conforming C library. On
+ true POSIX systems it will be ignored and have no effect. There
+ may still be systems without a standard-conforming C library where
+ an ISO C9X compiler (GCC) is available. Known examples are SunOS
+ 4.x and 4.3BSD. This assumption means these systems are no longer
+ supported. */
+#ifndef FOPEN_RB
+# include "fopen-bin.h"
#endif
-/*
- * Allow things in gdb to be declared "volatile". If compiling ANSI, it
- * just works. If compiling with gcc but non-ansi, redefine to __volatile__.
- * If non-ansi, non-gcc, then eliminate "volatile" entirely, making those
- * objects be read-write rather than read-only.
- */
-
-#ifndef volatile
-#ifndef __STDC__
-#ifdef __GNUC__
-#define volatile __volatile__
-#else
-#define volatile /* nothing */
-#endif /* GNUC */
-#endif /* STDC */
-#endif /* volatile */
-
/* Defaults for system-wide constants (if not defined by xm.h, we fake it).
FIXME: Assumes 2's complement arithmetic */
#endif
#if !defined (ULONGEST_MAX)
-#define ULONGEST_MAX (~(ULONGEST)0) /* 0xFFFFFFFFFFFFFFFF for 32-bits */
+#define ULONGEST_MAX (~(ULONGEST)0) /* 0xFFFFFFFFFFFFFFFF for 64-bits */
#endif
-#if !defined (LONGEST_MAX) /* 0x7FFFFFFFFFFFFFFF for 32-bits */
+#if !defined (LONGEST_MAX) /* 0x7FFFFFFFFFFFFFFF for 64-bits */
#define LONGEST_MAX ((LONGEST)(ULONGEST_MAX >> 1))
#endif
/* Assorted functions we can declare, now that const and volatile are
defined. */
-extern char *savestring (const char *, int);
+extern char *savestring (const char *, size_t);
-extern char *msavestring (void *, const char *, int);
+/* xmalloc(), xrealloc() and xcalloc() have already been declared in
+ "libiberty.h". */
+extern void xfree (void *);
-extern char *strsave (const char *);
+/* Like xmalloc, but zero the memory. */
+extern void *xzalloc (size_t);
-extern char *mstrsave (void *, const char *);
+/* Utility macros to allocate typed memory. Avoids errors like:
+ struct foo *foo = xmalloc (sizeof struct bar); and memset (foo,
+ sizeof (struct foo), 0). */
+#define XZALLOC(TYPE) ((TYPE*) xzalloc (sizeof (TYPE)))
+#define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
+#define XCALLOC(NMEMB, TYPE) ((TYPE*) xcalloc ((NMEMB), sizeof (TYPE)))
-/* FIXME; was long, but this causes compile errors in msvc if already
- defined */
-#ifdef _MSC_VER
-extern PTR xmmalloc (PTR, size_t);
-extern PTR xmrealloc (PTR, PTR, size_t);
-#else
-extern PTR xmmalloc (PTR, long);
-extern PTR xmrealloc (PTR, PTR, long);
-#endif
+/* Like asprintf/vasprintf but get an internal_error if the call
+ fails. */
+extern void xasprintf (char **ret, const char *format, ...) ATTR_FORMAT (printf, 2, 3);
+extern void xvasprintf (char **ret, const char *format, va_list ap)
+ ATTR_FORMAT (printf, 2, 0);
+
+/* Like asprintf and vasprintf, but return the string, throw an error
+ if no memory. */
+extern char *xstrprintf (const char *format, ...) ATTR_FORMAT (printf, 1, 2);
+extern char *xstrvprintf (const char *format, va_list ap)
+ ATTR_FORMAT (printf, 1, 0);
+
+/* Like snprintf, but throw an error if the output buffer is too small. */
+extern int xsnprintf (char *str, size_t size, const char *format, ...)
+ ATTR_FORMAT (printf, 3, 4);
extern int parse_escape (char **);
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;
+extern NORETURN void verror (const char *fmt, va_list ap)
+ ATTR_NORETURN ATTR_FORMAT (printf, 1, 0);
-/* DEPRECATED: Use error(), verror() or error_stream(). */
-extern NORETURN void error_begin (void);
+extern NORETURN void error (const char *fmt, ...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
extern NORETURN void error_stream (struct ui_file *) ATTR_NORETURN;
-/* Returns a freshly allocate buffer containing the last error
- message. */
-extern char *error_last_message (void);
+extern NORETURN void vfatal (const char *fmt, va_list ap)
+ ATTR_NORETURN ATTR_FORMAT (printf, 1, 0);
-extern NORETURN void internal_verror (const char *, va_list ap) ATTR_NORETURN;
+extern NORETURN void fatal (const char *fmt, ...) ATTR_NORETURN ATTR_FORMAT (printf, 1, 2);
-extern NORETURN void internal_error (char *, ...) ATTR_NORETURN;
+extern NORETURN void internal_verror (const char *file, int line,
+ const char *, va_list ap)
+ ATTR_NORETURN ATTR_FORMAT (printf, 3, 0);
-extern NORETURN void nomem (long) ATTR_NORETURN;
+extern NORETURN void internal_error (const char *file, int line,
+ const char *, ...) ATTR_NORETURN ATTR_FORMAT (printf, 3, 4);
-/* Reasons for calling return_to_top_level. Note: enum value 0 is
- reserved for internal use as the return value from an initial
- setjmp(). */
+extern void internal_vwarning (const char *file, int line,
+ const char *, va_list ap)
+ ATTR_FORMAT (printf, 3, 0);
-enum return_reason
- {
- /* User interrupt. */
- RETURN_QUIT = 1,
- /* Any other error. */
- RETURN_ERROR
- };
+extern void internal_warning (const char *file, int line,
+ const char *, ...) ATTR_FORMAT (printf, 3, 4);
-#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 return_to_top_level (enum return_reason) ATTR_NORETURN;
-
-/* If CATCH_ERRORS_FTYPE throws an error, catch_errors() returns zero
- otherwize the result from CATCH_ERRORS_FTYPE is returned. It is
- probably useful for CATCH_ERRORS_FTYPE to always return a non-zero
- value. It's unfortunate that, catch_errors() does not return an
- indication of the exact exception that it caught - quit_flag might
- help. */
-
-typedef int (catch_errors_ftype) (PTR);
-extern int catch_errors (catch_errors_ftype *, PTR, char *, return_mask);
-
-/* Template to catch_errors() that wraps calls to command
- functions. */
-
-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_begin (void);
+extern NORETURN void nomem (long) ATTR_NORETURN;
extern void warning (const char *, ...) ATTR_FORMAT (printf, 1, 2);
+extern void vwarning (const char *, va_list args) ATTR_FORMAT (printf, 1, 0);
+
+/* List of known OS ABIs. If you change this, make sure to update the
+ table in osabi.c. */
+enum gdb_osabi
+{
+ GDB_OSABI_UNINITIALIZED = -1, /* For struct gdbarch_info. */
+
+ GDB_OSABI_UNKNOWN = 0, /* keep this zero */
+
+ GDB_OSABI_SVR4,
+ GDB_OSABI_HURD,
+ GDB_OSABI_SOLARIS,
+ GDB_OSABI_OSF1,
+ GDB_OSABI_LINUX,
+ GDB_OSABI_FREEBSD_AOUT,
+ GDB_OSABI_FREEBSD_ELF,
+ GDB_OSABI_NETBSD_AOUT,
+ GDB_OSABI_NETBSD_ELF,
+ GDB_OSABI_OPENBSD_ELF,
+ GDB_OSABI_WINCE,
+ GDB_OSABI_GO32,
+ GDB_OSABI_IRIX,
+ GDB_OSABI_INTERIX,
+ GDB_OSABI_HPUX_ELF,
+ GDB_OSABI_HPUX_SOM,
+
+ GDB_OSABI_QNXNTO,
+
+ GDB_OSABI_CYGWIN,
+ GDB_OSABI_AIX,
+
+ GDB_OSABI_INVALID /* keep this last */
+};
+
/* Global functions from other, non-gdb GNU thingies.
Libiberty thingies are no longer declared here. We include libiberty.h
above, instead. */
-#ifndef GETENV_PROVIDED
-extern char *getenv (const char *);
-#endif
-
/* From other system libraries */
#ifdef HAVE_STDDEF_H
#endif
#ifdef HAVE_STDLIB_H
-#if defined(_MSC_VER) && !defined(__cplusplus)
-/* msvc defines these in stdlib.h for c code */
-#undef min
-#undef max
-#endif
#include <stdlib.h>
#endif
#ifndef min
#endif
-/* We take the address of fclose later, but some stdio's forget
- to declare this. We can't always declare it since there's
- no way to declare the parameters without upsetting some compiler
- somewhere. */
-
-#ifndef FCLOSE_PROVIDED
-extern int fclose (FILE *);
-#endif
-
#ifndef atof
extern double atof (const char *); /* X3.159-1989 4.10.1.1 */
#endif
-#ifndef MALLOC_INCOMPATIBLE
-
-#ifdef NEED_DECLARATION_MALLOC
-extern PTR malloc ();
-#endif
-
-#ifdef NEED_DECLARATION_REALLOC
-extern PTR realloc ();
-#endif
-
-#ifdef NEED_DECLARATION_FREE
-extern void free ();
-#endif
-
-#endif /* MALLOC_INCOMPATIBLE */
-
/* Various possibilities for alloca. */
#ifndef alloca
#ifdef __GNUC__
/* 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)
extern void *alloca ();
-#else /* Don't use void *. */
-extern char *alloca ();
-#endif /* Don't use void *. */
#endif /* Not _AIX */
#endif /* Not HAVE_ALLOCA_H */
#endif /* Not GNU C */
#endif /* alloca not defined */
-/* HOST_BYTE_ORDER must be defined to one of these. */
-
-#ifdef HAVE_ENDIAN_H
-#include <endian.h>
-#endif
-
-#if !defined (BIG_ENDIAN)
-#define BIG_ENDIAN 4321
-#endif
-
-#if !defined (LITTLE_ENDIAN)
-#define LITTLE_ENDIAN 1234
-#endif
-
/* Dynamic target-system-dependent parameters for GDB. */
#include "gdbarch.h"
+/* Maximum size of a register. Something small, but large enough for
+ all known ISAs. If it turns out to be too small, make it bigger. */
+
+enum { MAX_REGISTER_SIZE = 16 };
+
/* Static target-system-dependent parameters for GDB. */
/* Number of bits in a char or unsigned char for the target machine.
#define TARGET_CHAR_BIT 8
#endif
-/* Number of bits in a short or unsigned short for the target machine. */
-#if !defined (TARGET_SHORT_BIT)
-#define TARGET_SHORT_BIT (2 * TARGET_CHAR_BIT)
-#endif
-
-/* Number of bits in an int or unsigned int for the target machine. */
-#if !defined (TARGET_INT_BIT)
-#define TARGET_INT_BIT (4 * TARGET_CHAR_BIT)
-#endif
-
-/* Number of bits in a long or unsigned long for the target machine. */
-#if !defined (TARGET_LONG_BIT)
-#define TARGET_LONG_BIT (4 * TARGET_CHAR_BIT)
-#endif
-
-/* Number of bits in a long long or unsigned long long for the target machine. */
-#if !defined (TARGET_LONG_LONG_BIT)
-#define TARGET_LONG_LONG_BIT (2 * TARGET_LONG_BIT)
-#endif
-
-/* Number of bits in a float for the target machine. */
-#if !defined (TARGET_FLOAT_BIT)
-#define TARGET_FLOAT_BIT (4 * TARGET_CHAR_BIT)
-#endif
-
-/* Number of bits in a double for the target machine. */
-#if !defined (TARGET_DOUBLE_BIT)
-#define TARGET_DOUBLE_BIT (8 * TARGET_CHAR_BIT)
-#endif
-
-/* Number of bits in a long double for the target machine. */
-#if !defined (TARGET_LONG_DOUBLE_BIT)
-#define TARGET_LONG_DOUBLE_BIT (2 * TARGET_DOUBLE_BIT)
-#endif
-
-/* Number of bits in a pointer for the target machine */
-#if !defined (TARGET_PTR_BIT)
-#define TARGET_PTR_BIT TARGET_INT_BIT
-#endif
-
-/* Number of bits in a BFD_VMA for the target object file format. */
-#if !defined (TARGET_BFD_VMA_BIT)
-#define TARGET_BFD_VMA_BIT TARGET_PTR_BIT
-#endif
-
/* If we picked up a copy of CHAR_BIT from a configuration file
(which may get it by including <limits.h>) then use it to set
the number of bits in a host char. If not, use the same size
from byte/word byte order. */
#if !defined (BITS_BIG_ENDIAN)
-#define BITS_BIG_ENDIAN (TARGET_BYTE_ORDER == BIG_ENDIAN)
+#define BITS_BIG_ENDIAN (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
#endif
/* In findvar.c. */
-extern LONGEST extract_signed_integer (void *, int);
+extern LONGEST extract_signed_integer (const gdb_byte *, int);
-extern ULONGEST extract_unsigned_integer (void *, int);
+extern ULONGEST extract_unsigned_integer (const gdb_byte *, int);
-extern int extract_long_unsigned_integer (void *, int, LONGEST *);
+extern int extract_long_unsigned_integer (const gdb_byte *, int, LONGEST *);
-extern CORE_ADDR extract_address (void *, int);
+extern CORE_ADDR extract_typed_address (const gdb_byte *buf,
+ struct type *type);
-extern void store_signed_integer (void *, int, LONGEST);
+extern void store_signed_integer (gdb_byte *, int, LONGEST);
-extern void store_unsigned_integer (void *, int, ULONGEST);
+extern void store_unsigned_integer (gdb_byte *, int, ULONGEST);
-extern void store_address (void *, int, LONGEST);
+extern void store_typed_address (gdb_byte *buf, struct type *type,
+ CORE_ADDR addr);
-/* Setup definitions for host and target floating point formats. We need to
- consider the format for `float', `double', and `long double' for both target
- and host. We need to do this so that we know what kind of conversions need
- to be done when converting target numbers to and from the hosts DOUBLEST
- data type. */
-
-/* This is used to indicate that we don't know the format of the floating point
- number. Typically, this is useful for native ports, where the actual format
- is irrelevant, since no conversions will be taking place. */
-
-extern const struct floatformat floatformat_unknown;
-
-#if HOST_BYTE_ORDER == BIG_ENDIAN
-#ifndef HOST_FLOAT_FORMAT
-#define HOST_FLOAT_FORMAT &floatformat_ieee_single_big
-#endif
-#ifndef HOST_DOUBLE_FORMAT
-#define HOST_DOUBLE_FORMAT &floatformat_ieee_double_big
-#endif
-#else /* LITTLE_ENDIAN */
-#ifndef HOST_FLOAT_FORMAT
-#define HOST_FLOAT_FORMAT &floatformat_ieee_single_little
-#endif
-#ifndef HOST_DOUBLE_FORMAT
-#define HOST_DOUBLE_FORMAT &floatformat_ieee_double_little
-#endif
-#endif
-
-#ifndef HOST_LONG_DOUBLE_FORMAT
-#define HOST_LONG_DOUBLE_FORMAT &floatformat_unknown
-#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
-#define TARGET_LONG_DOUBLE_FORMAT &floatformat_unknown
-#endif
-
-/* Use `long double' if the host compiler supports it. (Note that this is not
- necessarily any longer than `double'. On SunOS/gcc, it's the same as
- double.) This is necessary because GDB internally converts all floating
- point values to the widest type supported by the host.
-
- There are problems however, when the target `long double' is longer than the
- host's `long double'. In general, we'll probably reduce the precision of
- any such values and print a warning. */
-
-#ifdef HAVE_LONG_DOUBLE
-typedef long double DOUBLEST;
-#else
-typedef double DOUBLEST;
-#endif
-
-extern void floatformat_to_doublest (const struct floatformat *,
- char *, DOUBLEST *);
-extern void floatformat_from_doublest (const struct floatformat *,
- DOUBLEST *, char *);
-extern DOUBLEST extract_floating (void *, int);
-
-extern void store_floating (void *, int, DOUBLEST);
\f
-/* On some machines there are bits in addresses which are not really
- part of the address, but are used by the kernel, the hardware, etc.
- for special purposes. ADDR_BITS_REMOVE takes out any such bits
- so we get a "real" address such as one would find in a symbol
- table. This is used only for addresses of instructions, and even then
- I'm not sure it's used in all contexts. It exists to deal with there
- being a few stray bits in the PC which would mislead us, not as some sort
- of generic thing to handle alignment or segmentation (it's possible it
- should be in TARGET_READ_PC instead). */
-#if !defined (ADDR_BITS_REMOVE)
-#define ADDR_BITS_REMOVE(addr) (addr)
-#endif /* No ADDR_BITS_REMOVE. */
-
/* From valops.c */
-extern CORE_ADDR push_bytes (CORE_ADDR, char *, int);
-
-extern CORE_ADDR push_word (CORE_ADDR, ULONGEST);
-
extern int watchdog;
/* Hooks for alternate command interfaces. */
-#ifdef UI_OUT
/* The name of the interpreter if specified on the command line. */
extern char *interpreter_p;
-#endif
/* If a given interpreter matches INTERPRETER_P then it should update
- command_loop_hook and init_ui_hook with the per-interpreter
- implementation. */
-/* FIXME: command_loop_hook and init_ui_hook should be moved here. */
+ deprecated_command_loop_hook and deprecated_init_ui_hook with the
+ per-interpreter implementation. */
+/* FIXME: deprecated_command_loop_hook and deprecated_init_ui_hook
+ should be moved here. */
struct target_waitstatus;
struct cmd_list_element;
-/* Should the asynchronous variant of the interpreter (using the
- event-loop) be enabled? */
-extern int event_loop_p;
-
-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 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 int (*target_wait_hook) (int pid, struct target_waitstatus * status);
-
-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 (*deprecated_pre_add_symbol_hook) (const char *);
+extern void (*deprecated_post_add_symbol_hook) (void);
+extern void (*selected_frame_level_changed_hook) (int);
+extern int (*deprecated_ui_loop_hook) (int signo);
+extern void (*deprecated_init_ui_hook) (char *argv0);
+extern void (*deprecated_command_loop_hook) (void);
+extern void (*deprecated_show_load_progress) (const char *section,
+ unsigned long section_sent,
+ unsigned long section_size,
+ unsigned long total_sent,
+ unsigned long total_size);
+extern void (*deprecated_print_frame_info_listing_hook) (struct symtab * s,
+ int line, int stopline,
+ int noerror);
+extern int (*deprecated_query_hook) (const char *, va_list)
+ ATTRIBUTE_FPTR_PRINTF(1,0);
+extern void (*deprecated_warning_hook) (const char *, va_list)
+ ATTRIBUTE_FPTR_PRINTF(1,0);
+extern void (*deprecated_flush_hook) (struct ui_file * stream);
+extern void (*deprecated_create_breakpoint_hook) (struct breakpoint * b);
+extern void (*deprecated_delete_breakpoint_hook) (struct breakpoint * bpt);
+extern void (*deprecated_modify_breakpoint_hook) (struct breakpoint * bpt);
+extern void (*deprecated_interactive_hook) (void);
+extern void (*deprecated_readline_begin_hook) (char *, ...)
+ ATTRIBUTE_FPTR_PRINTF_1;
+extern char *(*deprecated_readline_hook) (char *);
+extern void (*deprecated_readline_end_hook) (void);
+extern void (*deprecated_register_changed_hook) (int regno);
+extern void (*deprecated_memory_changed_hook) (CORE_ADDR addr, int len);
+extern void (*deprecated_context_hook) (int);
+extern ptid_t (*deprecated_target_wait_hook) (ptid_t ptid,
+ struct target_waitstatus * status);
+
+extern void (*deprecated_attach_hook) (void);
+extern void (*deprecated_detach_hook) (void);
+extern void (*deprecated_call_command_hook) (struct cmd_list_element * c,
+ char *cmd, int from_tty);
+
+extern void (*deprecated_set_hook) (struct cmd_list_element * c);
+
+extern void (*deprecated_error_hook) (void);
+
+extern void (*deprecated_error_begin_hook) (void);
+
+extern int (*deprecated_ui_load_progress_hook) (const char *section,
+ unsigned long num);
/* Inhibit window interface if non-zero. */
/* FIXME, this doesn't work very well if host and executable
filesystems conventions are different. */
-#ifndef DIRNAME_SEPARATOR
-#define DIRNAME_SEPARATOR ':'
+#ifdef __MSDOS__
+# define CANT_FORK
+# define GLOBAL_CURDIR
+# define DIRNAME_SEPARATOR ';'
#endif
-#ifndef SLASH_P
-#if defined(__GO32__)||defined(_WIN32)
-#define SLASH_P(X) ((X)=='\\')
-#else
-#define SLASH_P(X) ((X)=='/')
-#endif
+#if !defined (__CYGWIN__) && defined (_WIN32)
+# define DIRNAME_SEPARATOR ';'
#endif
-#ifndef SLASH_CHAR
-#if defined(__GO32__)||defined(_WIN32)
-#define SLASH_CHAR '\\'
-#else
-#define SLASH_CHAR '/'
-#endif
+#ifndef DIRNAME_SEPARATOR
+#define DIRNAME_SEPARATOR ':'
#endif
#ifndef SLASH_STRING
-#if defined(__GO32__)||defined(_WIN32)
-#define SLASH_STRING "\\"
-#else
#define SLASH_STRING "/"
#endif
-#endif
-
-#ifndef ROOTED_P
-#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. */
+/* Provide default definitions of PIDGET, TIDGET, and MERGEPID.
+ The name ``TIDGET'' is a historical accident. Many uses of TIDGET
+ in the code actually refer to a lightweight process id, i.e,
+ something that can be considered a process id in its own right for
+ certain purposes. */
#ifndef PIDGET
-#define PIDGET(PID) (PID)
-#define TIDGET(PID) 0
-#define MERGEPID(PID, TID) (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
+#define PIDGET(PTID) (ptid_get_pid (PTID))
+#define TIDGET(PTID) (ptid_get_lwp (PTID))
+#define MERGEPID(PID, TID) ptid_build (PID, TID, 0)
#endif
/* Define well known filenos if the system does not define them. */
#define ISATTY(FP) (isatty (fileno (FP)))
#endif
-\f
-/* FIXME: cagney/1999-12-13: The following will be moved to gdb.h /
- libgdb.h or gdblib.h. */
-
-/* Return-code (RC) from a gdb library call. (The abreviation RC is
- taken from the sim/common directory.) */
-
-enum gdb_rc {
- /* The operation failed. The failure message can be fetched by
- calling ``char *error_last_message(void)''. The value is
- determined by the catch_errors() interface. */
- /* NOTE: Since ``defs.h:catch_errors()'' does not return an error /
- internal / quit indication it is not possible to return that
- here. */
- GDB_RC_FAIL = 0,
- /* No error occured but nothing happened. Due to the catch_errors()
- interface, this must be non-zero. */
- GDB_RC_NONE = 1,
- /* The operation was successful. Due to the catch_errors()
- interface, this must be non-zero. */
- GDB_RC_OK = 2
-};
+/* Ensure that V is aligned to an N byte boundary (B's assumed to be a
+ power of 2). Round up/down when necessary. Examples of correct
+ use include:
+ addr = align_up (addr, 8); -- VALUE needs 8 byte alignment
+ write_memory (addr, value, len);
+ addr += len;
-/* Print the specified breakpoint on GDB_STDOUT. (Eventually this
- function will ``print'' the object on ``output''). */
-enum gdb_rc gdb_breakpoint_query (/* struct {ui,gdb}_out *output, */ int bnum);
+ and:
-/* Create a breakpoint at ADDRESS (a GDB source and line). */
-enum gdb_rc gdb_breakpoint (char *address, char *condition,
- int hardwareflag, int tempflag,
- int thread, int ignore_count);
-enum gdb_rc gdb_thread_select (/* output object */ char *tidstr);
+ sp = align_down (sp - len, 16); -- Keep SP 16 byte aligned
+ write_memory (sp, value, len);
-#ifdef UI_OUT
-/* Print a list of known thread ids. */
-enum gdb_rc gdb_list_thread_ids (/* output object */);
+ Note that uses such as:
+
+ write_memory (addr, value, len);
+ addr += align_up (len, 8);
+
+ and:
+
+ sp -= align_up (len, 8);
+ write_memory (sp, value, len);
+
+ are typically not correct as they don't ensure that the address (SP
+ or ADDR) is correctly aligned (relying on previous alignment to
+ keep things right). This is also why the methods are called
+ "align_..." instead of "round_..." as the latter reads better with
+ this incorrect coding style. */
+
+extern ULONGEST align_up (ULONGEST v, int n);
+extern ULONGEST align_down (ULONGEST v, int n);
+
+/* Allocation and deallocation functions for the libiberty hash table
+ which use obstacks. */
+void *hashtab_obstack_allocate (void *data, size_t size, size_t count);
+void dummy_obstack_deallocate (void *object, void *data);
-/* Switch thread and print notification. */
-#endif
#endif /* #ifndef DEFS_H */