74#include "gdbsupport/common-debug.h"
75#include "gdbsupport/intrusive_list.h"
120#define frame_debug_printf(fmt, ...) \
121 debug_prefixed_printf_cond (frame_debug, "frame", fmt, ##__VA_ARGS__)
125#define FRAME_SCOPED_DEBUG_ENTER_EXIT \
126 scoped_debug_enter_exit (frame_debug, "frame")
249 other.m_ptr =
nullptr;
283 other.m_ptr =
nullptr;
319 explicit operator bool ()
const
366 if (self ==
nullptr || other.
is_null ())
367 return self ==
nullptr && other.
is_null ();
369 return self == other.
get ();
378 return self.
get () == other.
get ();
384 if (self.
is_null () || other ==
nullptr)
385 return self.
is_null () && other ==
nullptr;
387 return self.
get () == other;
393 return !(self == other);
399 return !(self == other);
405 return !(self == other);
654#define SET(name, description) name,
655#define FIRST_ENTRY(name) UNWIND_FIRST = name,
656#define LAST_ENTRY(name) UNWIND_LAST = name,
657#define FIRST_ERROR(name) UNWIND_FIRST_ERROR = name,
659#include "unwind_stop_reasons.def"
692 int *optimizedp,
int *unavailablep,
694 CORE_ADDR *addrp,
int *realnump,
704 int regnum, gdb_byte *buf);
706 int regnum, gdb_byte *buf);
728 int regnum, ULONGEST *val);
734 const gdb_byte *buf);
742 gdb::array_view<gdb_byte> buffer,
743 int *optimizedp,
int *unavailablep);
749 gdb::array_view<const gdb_byte> buffer);
775 gdb::array_view<gdb_byte> buffer);
777 CORE_ADDR memaddr,
int len);
779 CORE_ADDR memaddr,
int len);
784 gdb::array_view<gdb_byte> buffer);
825#define FRAME_OBSTACK_ZALLOC(TYPE) \
826 ((TYPE *) frame_obstack_zalloc (sizeof (TYPE)))
827#define FRAME_OBSTACK_CALLOC(NUMBER,TYPE) \
828 ((TYPE *) frame_obstack_zalloc ((NUMBER) * sizeof (TYPE)))
836 CORE_ADDR *addr_in_block);
878 int set_current_sal);
882 int set_current_sal);
887 int set_current_sal);
948 gdb::unique_xmalloc_ptr<char>
error;
static constexpr int invalid_level
static intrusive_list< frame_info_ptr > frame_list
frame_info_ptr & operator=(const frame_info_ptr &other)
frame_info * reinflate() const
frame_info * operator->() const
frame_info_ptr(const frame_info_ptr &other)
frame_info_ptr(std::nullptr_t)
frame_info_ptr(frame_info_ptr &&other)
friend void reinit_frame_cache()
scoped_restore_selected_frame()
~scoped_restore_selected_frame()
DISABLE_COPY_AND_ASSIGN(scoped_restore_selected_frame)
const struct frame_id null_frame_id
const address_space * get_frame_address_space(frame_info_ptr)
const gdb::option::option_def set_backtrace_option_defs[2]
void print_frame_info(const frame_print_options &fp_opts, frame_info_ptr, int print_level, enum print_what print_what, int args, int set_current_sal)
ULONGEST frame_unwind_register_unsigned(frame_info_ptr frame, int regnum)
bool deprecated_frame_register_read(frame_info_ptr frame, int regnum, gdb_byte *buf)
const char print_entry_values_both[]
frame_info_ptr frame_find_by_id(frame_id id)
int frame_relative_level(frame_info_ptr fi)
CORE_ADDR get_frame_locals_address(frame_info_ptr)
struct value * get_frame_register_value(frame_info_ptr frame, int regnum)
CORE_ADDR get_frame_base(frame_info_ptr)
const char * frame_stop_reason_string(frame_info_ptr)
ULONGEST get_frame_register_unsigned(frame_info_ptr frame, int regnum)
void frame_cleanup_after_sniffer(frame_info_ptr frame)
CORE_ADDR get_frame_func(frame_info_ptr fi)
const char print_frame_info_source_line[]
CORE_ADDR get_pc_function_start(CORE_ADDR)
frame_info_ptr frame_follow_static_link(frame_info_ptr frame)
void restore_selected_frame(frame_id frame_id, int frame_level) noexcept
static bool operator==(const frame_info *self, const frame_info_ptr &other)
frame_info_ptr skip_unwritable_frames(frame_info_ptr frame)
const struct block * get_selected_block(CORE_ADDR *addr_in_block)
const char print_frame_info_source_and_location[]
frame_info_ptr deprecated_safe_get_selected_frame(void)
LONGEST get_frame_register_signed(frame_info_ptr frame, int regnum)
LONGEST get_frame_memory_signed(frame_info_ptr this_frame, CORE_ADDR memaddr, int len)
void select_frame(frame_info_ptr)
struct program_space * frame_unwind_program_space(frame_info_ptr)
std::unique_ptr< readonly_detached_regcache > frame_save_as_regcache(frame_info_ptr this_frame)
enum unwind_stop_reason get_frame_unwind_stop_reason(frame_info_ptr)
void get_frame_memory(frame_info_ptr this_frame, CORE_ADDR addr, gdb::array_view< gdb_byte > buffer)
bool read_frame_register_unsigned(frame_info_ptr frame, int regnum, ULONGEST *val)
frame_info_ptr get_next_frame_sentinel_okay(frame_info_ptr)
CORE_ADDR get_frame_base_address(frame_info_ptr)
void reinit_frame_cache(void)
void frame_pop(frame_info_ptr frame)
const char print_entry_values_preferred[]
const char print_frame_info_short_location[]
struct program_space * get_frame_program_space(frame_info_ptr)
static bool operator!=(const frame_info *self, const frame_info_ptr &other)
set_backtrace_options user_set_backtrace_options
const char print_entry_values_compact[]
struct frame_id get_stack_frame_id(frame_info_ptr fi)
LONGEST frame_unwind_register_signed(frame_info_ptr next_frame, int regnum)
CORE_ADDR get_frame_sp(frame_info_ptr)
const char print_entry_values_default[]
const char print_frame_arguments_scalars[]
void info_locals_command(const char *, int)
void frame_register_unwind(frame_info_ptr frame, int regnum, int *optimizedp, int *unavailablep, enum lval_type *lvalp, CORE_ADDR *addrp, int *realnump, gdb_byte *valuep)
CORE_ADDR get_frame_args_address(frame_info_ptr)
const char print_frame_info_location[]
bool frame_id_p(frame_id l)
struct frame_id frame_id_build_special(CORE_ADDR stack_addr, CORE_ADDR code_addr, CORE_ADDR special_addr)
void get_frame_register(frame_info_ptr frame, int regnum, gdb_byte *buf)
bool frame_id_artificial_p(frame_id l)
const char print_frame_arguments_all[]
const char * frame_type_str(frame_type type)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
struct frame_id frame_id_build_wild(CORE_ADDR stack_addr)
void set_current_sal_from_frame(frame_info_ptr)
void save_selected_frame(frame_id *frame_id, int *frame_level) noexcept
struct frame_id frame_id_build_unavailable_stack_special(CORE_ADDR code_addr, CORE_ADDR special_addr)
frame_info_ptr get_prev_frame(frame_info_ptr)
struct gdbarch * frame_unwind_arch(frame_info_ptr next_frame)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
bool get_frame_func_if_available(frame_info_ptr fi, CORE_ADDR *)
struct value * frame_unwind_register_value(frame_info_ptr next_frame, int regnum)
frame_info_ptr get_prev_frame_always(frame_info_ptr)
void info_args_command(const char *, int)
struct symbol * get_frame_function(frame_info_ptr)
ULONGEST get_frame_memory_unsigned(frame_info_ptr this_frame, CORE_ADDR memaddr, int len)
struct gdbarch * frame_unwind_caller_arch(frame_info_ptr frame)
struct frame_id frame_unwind_caller_id(frame_info_ptr next_frame)
bool get_frame_pc_masked(frame_info_ptr frame)
void frame_prepare_for_sniffer(frame_info_ptr frame, const struct frame_unwind *unwind)
bool frame_unwinder_is(frame_info_ptr fi, const frame_unwind *unwinder)
bool get_frame_pc_if_available(frame_info_ptr frame, CORE_ADDR *pc)
bool get_frame_address_in_block_if_available(frame_info_ptr this_frame, CORE_ADDR *pc)
const char print_entry_values_if_needed[]
const char print_frame_info_location_and_address[]
void frame_unwind_register(frame_info_ptr next_frame, int regnum, gdb_byte *buf)
CORE_ADDR get_frame_pc(frame_info_ptr)
const char print_frame_arguments_none[]
struct frame_id frame_id_build_unavailable_stack(CORE_ADDR code_addr)
void * frame_obstack_zalloc(unsigned long size)
void read_frame_arg(const frame_print_options &fp_opts, symbol *sym, frame_info_ptr frame, struct frame_arg *argp, struct frame_arg *entryargp)
const char print_frame_info_auto[]
void put_frame_register_bytes(frame_info_ptr frame, int regnum, CORE_ADDR offset, gdb::array_view< const gdb_byte > buffer)
const char print_entry_values_only[]
enum frame_type get_frame_type(frame_info_ptr)
const char print_entry_values_no[]
void print_stack_frame(frame_info_ptr, int print_level, enum print_what print_what, int set_current_sal)
bool get_frame_register_bytes(frame_info_ptr frame, int regnum, CORE_ADDR offset, gdb::array_view< gdb_byte > buffer, int *optimizedp, int *unavailablep)
frame_info_ptr get_selected_frame(const char *message=nullptr)
const struct block * get_frame_block(frame_info_ptr, CORE_ADDR *addr_in_block)
void return_command(const char *, int)
void set_frame_previous_pc_masked(frame_info_ptr frame)
enum language get_frame_language(frame_info_ptr frame)
unsigned int get_frame_cache_generation()
const char * unwind_stop_reason_to_string(enum unwind_stop_reason)
frame_info_ptr find_relative_frame(frame_info_ptr, int *)
frame_info_ptr get_current_frame(void)
frame_info_ptr skip_tailcall_frames(frame_info_ptr frame)
frame_info_ptr create_new_frame(CORE_ADDR base, CORE_ADDR pc)
frame_info_ptr get_next_frame(frame_info_ptr)
CORE_ADDR frame_unwind_caller_pc(frame_info_ptr frame)
CORE_ADDR get_frame_address_in_block(frame_info_ptr this_frame)
frame_info_ptr block_innermost_frame(const struct block *)
frame_id frame_id_build_sentinel(CORE_ADDR stack_addr, CORE_ADDR code_addr)
void print_stack_frame_to_uiout(struct ui_out *uiout, frame_info_ptr, int print_level, enum print_what print_what, int set_current_sal)
frame_print_options user_frame_print_options
struct frame_id get_frame_id(frame_info_ptr fi)
bool safe_frame_unwind_memory(frame_info_ptr this_frame, CORE_ADDR addr, gdb::array_view< gdb_byte > buffer)
void put_frame_register(frame_info_ptr frame, int regnum, const gdb_byte *buf)
symtab_and_line find_frame_sal(frame_info_ptr frame)
void read_frame_local(struct symbol *sym, frame_info_ptr frame, struct frame_arg *argp)
gdb::unique_xmalloc_ptr< char > error
const char * print_frame_arguments
const char * print_entry_values
const char * print_frame_info
bool print_raw_frame_arguments
bool backtrace_past_entry
unsigned int backtrace_limit