mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-30 21:44:19 +08:00
9085a018ca
Move it out of defs.h, the corresponding definition is in symfile.c. Change-Id: I984666c3bcd213f8574e9ec91462e1d61f77f16b Approved-By: Tom Tromey <tom@tromey.com>
411 lines
13 KiB
C++
411 lines
13 KiB
C++
/* Basic, host-specific, and target-specific definitions for GDB.
|
|
Copyright (C) 1986-2024 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef DEFS_H
|
|
#define DEFS_H
|
|
|
|
#ifdef GDBSERVER
|
|
# error gdbserver should not include gdb/defs.h
|
|
#endif
|
|
|
|
#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 <climits>
|
|
|
|
/* The libdecnumber library, on which GDB depends, includes a header file
|
|
called gstdint.h instead of relying directly on stdint.h. GDB, on the
|
|
other hand, includes stdint.h directly, relying on the fact that gnulib
|
|
generates a copy if the system doesn't provide one or if it is missing
|
|
some features. Unfortunately, gstdint.h and stdint.h cannot be included
|
|
at the same time, which may happen when we include a file from
|
|
libdecnumber.
|
|
|
|
The following macro definition effectively prevents the inclusion of
|
|
gstdint.h, as all the definitions it provides are guarded against
|
|
the GCC_GENERATED_STDINT_H macro. We already have gnulib/stdint.h
|
|
included, so it's ok to blank out gstdint.h. */
|
|
#define GCC_GENERATED_STDINT_H 1
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include "gdb_wchar.h"
|
|
|
|
#include "ui-file.h"
|
|
|
|
#include "gdbsupport/host-defs.h"
|
|
#include "gdbsupport/enum-flags.h"
|
|
|
|
/* Just in case they're not defined in stdio.h. */
|
|
|
|
#ifndef SEEK_SET
|
|
#define SEEK_SET 0
|
|
#endif
|
|
#ifndef SEEK_CUR
|
|
#define SEEK_CUR 1
|
|
#endif
|
|
|
|
/* 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. */
|
|
|
|
#ifndef O_BINARY
|
|
#define O_BINARY 0
|
|
#endif
|
|
|
|
/* * System root path, used to find libraries etc. */
|
|
extern std::string gdb_sysroot;
|
|
|
|
/* * GDB datadir, used to store data files. */
|
|
extern std::string gdb_datadir;
|
|
|
|
/* * If not empty, the possibly relocated path to python's "lib" directory
|
|
specified with --with-python. */
|
|
extern std::string python_libdir;
|
|
|
|
/* * Search path for separate debug files. */
|
|
extern std::string debug_file_directory;
|
|
|
|
/* * Languages represented in the symbol table and elsewhere.
|
|
This should probably be in language.h, but since enum's can't
|
|
be forward declared to satisfy opaque references before their
|
|
actual definition, needs to be here.
|
|
|
|
The constants here are in priority order. In particular,
|
|
demangling is attempted according to this order.
|
|
|
|
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: Rust uses
|
|
a C++-compatible mangling, so must come before C++; Ada must come
|
|
last (see ada_sniff_from_mangled_name). */
|
|
|
|
enum language
|
|
{
|
|
language_unknown, /* Language not known */
|
|
language_c, /* C */
|
|
language_objc, /* Objective-C */
|
|
language_rust, /* Rust */
|
|
language_cplus, /* C++ */
|
|
language_d, /* D */
|
|
language_go, /* Go */
|
|
language_fortran, /* Fortran */
|
|
language_m2, /* Modula-2 */
|
|
language_asm, /* Assembly language */
|
|
language_pascal, /* Pascal */
|
|
language_opencl, /* OpenCL */
|
|
language_minimal, /* All other languages, minimal support only */
|
|
language_ada, /* Ada */
|
|
nr_languages
|
|
};
|
|
|
|
/* The number of bits needed to represent all languages, with enough
|
|
padding to allow for reasonable growth. */
|
|
#define LANGUAGE_BITS 5
|
|
static_assert (nr_languages <= (1 << LANGUAGE_BITS));
|
|
|
|
/* The number of bytes needed to represent all languages. */
|
|
#define LANGUAGE_BYTES ((LANGUAGE_BITS + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
|
|
|
|
/* * A generic, not quite boolean, enumeration. This is used for
|
|
set/show commands in which the options are on/off/automatic. */
|
|
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,
|
|
};
|
|
|
|
/* Needed for various prototypes */
|
|
|
|
struct symtab;
|
|
struct breakpoint;
|
|
class frame_info_ptr;
|
|
struct gdbarch;
|
|
struct value;
|
|
|
|
/* From main.c. */
|
|
|
|
/* This really belong in utils.c (path-utils.c?), but it references some
|
|
globals that are currently only available to main.c. */
|
|
extern std::string relocate_gdb_directory (const char *initial, bool relocatable);
|
|
|
|
/* From top.c */
|
|
|
|
typedef void initialize_file_ftype (void);
|
|
|
|
extern char *gdb_readline_wrapper (const char *);
|
|
|
|
extern const char *command_line_input (std::string &cmd_line_buffer,
|
|
const char *, const char *);
|
|
|
|
extern void print_prompt (void);
|
|
|
|
struct ui;
|
|
|
|
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,
|
|
const char *);
|
|
|
|
extern void print_address (struct gdbarch *, CORE_ADDR, struct ui_file *);
|
|
extern const char *pc_prefix (CORE_ADDR);
|
|
|
|
/* From exec.c */
|
|
|
|
/* * Process memory area starting at ADDR with length SIZE. Area is
|
|
readable iff READ is non-zero, writable if WRITE is non-zero,
|
|
executable if EXEC is non-zero. Area is possibly changed against
|
|
its original file based copy if MODIFIED is non-zero.
|
|
|
|
MEMORY_TAGGED is true if the memory region contains memory tags, false
|
|
otherwise.
|
|
|
|
DATA is passed without changes from a caller. */
|
|
|
|
typedef int (*find_memory_region_ftype) (CORE_ADDR addr, unsigned long size,
|
|
int read, int write, int exec,
|
|
int modified, bool memory_tagged,
|
|
void *data);
|
|
|
|
/* * Possible lvalue types. Like enum language, this should be in
|
|
value.h, but needs to be here for the same reason. */
|
|
|
|
enum lval_type
|
|
{
|
|
/* * Not an lval. */
|
|
not_lval,
|
|
/* * In memory. */
|
|
lval_memory,
|
|
/* * In a register. Registers are relative to a frame. */
|
|
lval_register,
|
|
/* * In a gdb internal variable. */
|
|
lval_internalvar,
|
|
/* * Value encapsulates a callable defined in an extension language. */
|
|
lval_xcallable,
|
|
/* * Part of a gdb internal variable (structure field). */
|
|
lval_internalvar_component,
|
|
/* * Value's bits are fetched and stored using functions provided
|
|
by its creator. */
|
|
lval_computed
|
|
};
|
|
|
|
/* * Parameters of the "info proc" command. */
|
|
|
|
enum info_proc_what
|
|
{
|
|
/* * Display the default cmdline, cwd and exe outputs. */
|
|
IP_MINIMAL,
|
|
|
|
/* * Display `info proc mappings'. */
|
|
IP_MAPPINGS,
|
|
|
|
/* * Display `info proc status'. */
|
|
IP_STATUS,
|
|
|
|
/* * Display `info proc stat'. */
|
|
IP_STAT,
|
|
|
|
/* * Display `info proc cmdline'. */
|
|
IP_CMDLINE,
|
|
|
|
/* * Display `info proc exe'. */
|
|
IP_EXE,
|
|
|
|
/* * Display `info proc cwd'. */
|
|
IP_CWD,
|
|
|
|
/* * Display `info proc files'. */
|
|
IP_FILES,
|
|
|
|
/* * Display all of the above. */
|
|
IP_ALL
|
|
};
|
|
|
|
/* * Default radixes for input and output. Only some values supported. */
|
|
extern unsigned input_radix;
|
|
extern unsigned output_radix;
|
|
|
|
/* * 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
|
|
|
|
/* 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
|
|
|
|
/* * 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 int longest_to_int (LONGEST);
|
|
|
|
/* 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
|
|
it allows for the evaluation of a TLS symbol during unwinding --
|
|
when unwinding one has access to registers, but not the frame
|
|
itself, because that is being constructed. */
|
|
|
|
enum symbol_needs_kind
|
|
{
|
|
/* No special requirements -- just memory. */
|
|
SYMBOL_NEEDS_NONE,
|
|
|
|
/* The symbol needs registers. */
|
|
SYMBOL_NEEDS_REGISTERS,
|
|
|
|
/* The symbol needs a frame. */
|
|
SYMBOL_NEEDS_FRAME
|
|
};
|
|
|
|
/* Hooks for alternate command interfaces. */
|
|
|
|
struct target_waitstatus;
|
|
struct cmd_list_element;
|
|
|
|
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_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_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_context_hook) (int);
|
|
extern ptid_t (*deprecated_target_wait_hook) (ptid_t ptid,
|
|
struct target_waitstatus *status,
|
|
int options);
|
|
|
|
extern void (*deprecated_attach_hook) (void);
|
|
extern void (*deprecated_detach_hook) (void);
|
|
extern void (*deprecated_call_command_hook) (struct cmd_list_element * c,
|
|
const char *cmd, int from_tty);
|
|
|
|
extern int (*deprecated_ui_load_progress_hook) (const char *section,
|
|
unsigned long num);
|
|
|
|
/* If this definition isn't overridden by the header files, assume
|
|
that isatty and fileno exist on this system. */
|
|
#ifndef ISATTY
|
|
#define ISATTY(FP) (isatty (fileno (FP)))
|
|
#endif
|
|
|
|
/* * A width that can achieve a better legibility for GDB MI mode. */
|
|
#define GDB_MI_MSG_WIDTH 80
|
|
|
|
/* * Special block numbers */
|
|
|
|
enum block_enum
|
|
{
|
|
GLOBAL_BLOCK = 0,
|
|
STATIC_BLOCK = 1,
|
|
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 */
|