/* *INDENT-OFF* */ /* ATTRIBUTE_PRINTF confuses indent, avoid running it
for now. */
/* Basic, host-specific, and target-specific definitions for GDB.
- Copyright (C) 1986-2016 Free Software Foundation, Inc.
+ Copyright (C) 1986-2022 Free Software Foundation, Inc.
This file is part of GDB.
# error gdbserver should not include gdb/defs.h
#endif
-#include "common-defs.h"
+#include "gdbsupport/common-defs.h"
+
+#undef PACKAGE
+#undef PACKAGE_NAME
+#undef PACKAGE_VERSION
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+
+#include <config.h>
+#include "bfd.h"
#include <sys/types.h>
#include <limits.h>
#include "ui-file.h"
-#include "host-defs.h"
+#include "gdbsupport/host-defs.h"
+#include "gdbsupport/enum-flags.h"
+#include "gdbsupport/array-view.h"
/* Scope types enumerator. List the types of scopes the compiler will
accept. */
COMPILE_I_PRINT_VALUE_SCOPE,
};
+
+template<typename T>
+using RequireLongest = gdb::Requires<gdb::Or<std::is_same<T, LONGEST>,
+ std::is_same<T, ULONGEST>>>;
+
/* Just in case they're not defined in stdio.h. */
#ifndef SEEK_SET
extern int dbx_commands;
/* * System root path, used to find libraries etc. */
-extern char *gdb_sysroot;
+extern std::string gdb_sysroot;
/* * GDB datadir, used to store data files. */
-extern char *gdb_datadir;
+extern std::string gdb_datadir;
-/* * If non-NULL, the possibly relocated path to python's "lib" directory
+/* * If not empty, the possibly relocated path to python's "lib" directory
specified with --with-python. */
-extern char *python_libdir;
+extern std::string python_libdir;
/* * Search path for separate debug files. */
-extern char *debug_file_directory;
+extern std::string debug_file_directory;
/* GDB's SIGINT handler basically sets a flag; code that might take a
long time before it gets back to the event loop, and which ought to
typedef void (quit_handler_ftype) (void);
extern quit_handler_ftype *quit_handler;
-/* Override the current quit handler. Sets NEW_QUIT_HANDLER as
- current quit handler, and installs a cleanup that when run restores
- the previous quit handler. */
-struct cleanup *
- make_cleanup_override_quit_handler (quit_handler_ftype *new_quit_handler);
-
/* The default quit handler. Checks whether Ctrl-C was pressed, and
if so:
Note that there's ambiguity between the mangling schemes of some of
these languages, so some symbols could be successfully demangled by
several languages. For that reason, the constants here are sorted
- in the order we'll attempt demangling them. For example: Java and
- Rust use C++ mangling, so must come after C++; Ada must come last
- (see ada_sniff_from_mangled_name). */
+ in the order we'll attempt demangling them. For example: Rust uses
+ C++ mangling, so must come after C++; Ada must come last (see
+ ada_sniff_from_mangled_name). (Keep this order in sync with the
+ 'languages' array in language.c.) */
enum language
{
language_c, /* C */
language_objc, /* Objective-C */
language_cplus, /* C++ */
- language_java, /* Java */
language_d, /* D */
language_go, /* Go */
language_fortran, /* Fortran */
/* This really belong in utils.c (path-utils.c?), but it references some
globals that are currently only available to main.c. */
-extern char *relocate_gdb_directory (const char *initial, int flag);
+extern std::string relocate_gdb_directory (const char *initial, bool relocatable);
\f
/* Annotation stuff. */
/* From symfile.c */
-extern void symbol_file_command (char *, int);
-
-/* * Remote targets may wish to use this as their load function. */
-extern void generic_load (const char *name, int from_tty);
-
-/* * Report on STREAM the performance of memory transfer operation,
- such as 'load'.
- @param DATA_COUNT is the number of bytes transferred.
- @param WRITE_COUNT is the number of separate write operations, or 0,
- if that information is not available.
- @param START_TIME is the time at which an operation was started.
- @param 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,
- const struct timeval *start_time,
- const struct timeval *end_time);
+extern void symbol_file_command (const char *, int);
/* From top.c */
extern char *gdb_readline_wrapper (const char *);
-extern char *command_line_input (const char *, int, char *);
+extern const char *command_line_input (const char *, const char *);
extern void print_prompt (void);
extern int input_interactive_p (struct ui *);
-extern int info_verbose;
+extern bool info_verbose;
/* From printcmd.c */
extern void set_next_address (struct gdbarch *, CORE_ADDR);
extern int print_address_symbolic (struct gdbarch *, CORE_ADDR,
- struct ui_file *, int, char *);
-
-extern int build_address_symbolic (struct gdbarch *,
- CORE_ADDR addr,
- int do_demangle,
- char **name,
- int *offset,
- char **filename,
- int *line,
- int *unmapped);
+ struct ui_file *, int,
+ const char *);
extern void print_address (struct gdbarch *, CORE_ADDR, struct ui_file *);
extern const char *pc_prefix (CORE_ADDR);
-/* From source.c */
-
-/* See openp function definition for their description. */
-#define OPF_TRY_CWD_FIRST 0x01
-#define OPF_SEARCH_IN_PATH 0x02
-#define OPF_RETURN_REALPATH 0x04
-
-extern int openp (const char *, int, const char *, int, char **);
-
-extern int source_full_path_of (const char *, char **);
-
-extern void mod_path (char *, char **);
-
-extern void add_path (char *, char **, int);
-
-extern void directory_switch (char *, int);
-
-extern char *source_path;
-
-extern void init_source_path (void);
-
/* From exec.c */
/* * Process memory area starting at ADDR with length SIZE. Area is
lval_computed
};
-/* * Control types for commands. */
-
-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,
- commands_control,
- python_control,
- compile_control,
- guile_control,
- while_stepping_control,
- invalid_control
- };
-
-/* * Structure for saved commands lines (for breakpoints, defined
- commands, etc). */
-
-struct command_line
- {
- struct command_line *next;
- char *line;
- enum command_control_type control_type;
- union
- {
- struct
- {
- enum compile_i_scope_types scope;
- void *scope_data;
- }
- compile;
- }
- control_u;
- /* * The number of elements in body_list. */
- int body_count;
- /* * For composite commands, the nested lists of commands. For
- example, for "if" command this will contain the then branch and
- the else branch, if that is available. */
- struct command_line **body_list;
- };
-
-extern struct command_line *read_command_lines (char *, int, int,
- void (*)(char *, void *),
- void *);
-extern struct command_line *read_command_lines_1 (char * (*) (void), int,
- void (*)(char *, void *),
- void *);
-
-extern void free_command_lines (struct command_line **);
-
/* * Parameters of the "info proc" command. */
enum info_proc_what
/* * Display `info proc cwd'. */
IP_CWD,
+ /* * Display `info proc files'. */
+ IP_FILES,
+
/* * Display all of the above. */
IP_ALL
};
-/* * String containing the current directory (what getwd would return). */
-
-extern char *current_directory;
-
/* * Default radixes for input and output. Only some values supported. */
extern unsigned input_radix;
extern unsigned output_radix;
extern int longest_to_int (LONGEST);
-/* * 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_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_HPUX_ELF,
- GDB_OSABI_HPUX_SOM,
- GDB_OSABI_QNXNTO,
- GDB_OSABI_CYGWIN,
- GDB_OSABI_AIX,
- GDB_OSABI_DICOS,
- GDB_OSABI_DARWIN,
- GDB_OSABI_SYMBIAN,
- GDB_OSABI_OPENVMS,
- GDB_OSABI_LYNXOS178,
- GDB_OSABI_NEWLIB,
- GDB_OSABI_SDE,
-
- 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. */
-
-/* From other system libraries */
-
-#ifndef atof
-extern double atof (const char *); /* X3.159-1989 4.10.1.1 */
-#endif
-
/* Enumerate the requirements a symbol has in order to be evaluated.
These are listed in order of "strength" -- a later entry subsumes
earlier ones. This fine-grained distinction is important because
SYMBOL_NEEDS_FRAME
};
-/* Dynamic target-system-dependent parameters for GDB. */
-#include "gdbarch.h"
+/* In findvar.c. */
-/* * 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. */
+template<typename T, typename = RequireLongest<T>>
+T extract_integer (gdb::array_view<const gdb_byte>, enum bfd_endian byte_order);
-enum { MAX_REGISTER_SIZE = 64 };
+static inline LONGEST
+extract_signed_integer (gdb::array_view<const gdb_byte> buf,
+ enum bfd_endian byte_order)
+{
+ return extract_integer<LONGEST> (buf, byte_order);
+}
-/* In findvar.c. */
+static inline LONGEST
+extract_signed_integer (const gdb_byte *addr, int len,
+ enum bfd_endian byte_order)
+{
+ return extract_signed_integer (gdb::array_view<const gdb_byte> (addr, len),
+ byte_order);
+}
-extern LONGEST extract_signed_integer (const gdb_byte *, int,
- enum bfd_endian);
+static inline ULONGEST
+extract_unsigned_integer (gdb::array_view<const gdb_byte> buf,
+ enum bfd_endian byte_order)
+{
+ return extract_integer<ULONGEST> (buf, byte_order);
+}
-extern ULONGEST extract_unsigned_integer (const gdb_byte *, int,
- enum bfd_endian);
+static inline ULONGEST
+extract_unsigned_integer (const gdb_byte *addr, int len,
+ enum bfd_endian byte_order)
+{
+ return extract_unsigned_integer (gdb::array_view<const gdb_byte> (addr, len),
+ byte_order);
+}
extern int extract_long_unsigned_integer (const gdb_byte *, int,
enum bfd_endian, LONGEST *);
extern CORE_ADDR extract_typed_address (const gdb_byte *buf,
struct type *type);
-extern void store_signed_integer (gdb_byte *, int,
- enum bfd_endian, LONGEST);
+/* All 'store' functions accept a host-format integer and store a
+ target-format integer at ADDR which is LEN bytes long. */
+
+template<typename T, typename = RequireLongest<T>>
+extern void store_integer (gdb_byte *addr, int len, enum bfd_endian byte_order,
+ T val);
-extern void store_unsigned_integer (gdb_byte *, int,
- enum bfd_endian, ULONGEST);
+static inline void
+store_signed_integer (gdb_byte *addr, int len,
+ enum bfd_endian byte_order, LONGEST val)
+{
+ return store_integer (addr, len, byte_order, val);
+}
+
+static inline void
+store_unsigned_integer (gdb_byte *addr, int len,
+ enum bfd_endian byte_order, ULONGEST val)
+{
+ return store_integer (addr, len, byte_order, val);
+}
extern void store_typed_address (gdb_byte *buf, struct type *type,
CORE_ADDR addr);
-\f
-/* From valops.c */
-
-extern int watchdog;
+extern void copy_integer_to_size (gdb_byte *dest, int dest_size,
+ const gdb_byte *source, int source_size,
+ bool is_signed, enum bfd_endian byte_order);
/* Hooks for alternate command interfaces. */
-/* * The name of the interpreter if specified on the command line. */
-extern char *interpreter_p;
-
struct target_waitstatus;
struct cmd_list_element;
ATTRIBUTE_FPTR_PRINTF(1,0);
extern void (*deprecated_warning_hook) (const char *, va_list)
ATTRIBUTE_FPTR_PRINTF(1,0);
-extern void (*deprecated_interactive_hook) (void);
-extern void (*deprecated_readline_begin_hook) (char *, ...)
+extern void (*deprecated_readline_begin_hook) (const char *, ...)
ATTRIBUTE_FPTR_PRINTF_1;
extern char *(*deprecated_readline_hook) (const char *);
extern void (*deprecated_readline_end_hook) (void);
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);
+ const char *cmd, int from_tty);
extern int (*deprecated_ui_load_progress_hook) (const char *section,
unsigned long num);
FIRST_LOCAL_BLOCK = 2
};
+/* User selection used in observable.h and multiple print functions. */
+
+enum user_selected_what_flag
+ {
+ /* Inferior selected. */
+ USER_SELECTED_INFERIOR = 1 << 1,
+
+ /* Thread selected. */
+ USER_SELECTED_THREAD = 1 << 2,
+
+ /* Frame selected. */
+ USER_SELECTED_FRAME = 1 << 3
+ };
+DEF_ENUM_FLAGS_TYPE (enum user_selected_what_flag, user_selected_what);
+
#include "utils.h"
#endif /* #ifndef DEFS_H */