38#include "gdbsupport/preprocessor.h"
51#ifndef __LITTLE_ENDIAN
52#define __LITTLE_ENDIAN 1234
55#define __BIG_ENDIAN 4321
84 unw_proc_info_t *, int,
void *);
87 unw_dyn_info_t *,
void *);
106#define LIBUNWIND_SO "libunwind-" STRINGIFY(UNW_TARGET) ".so.8"
110#define LIBUNWIND_SO_7 "libunwind-" STRINGIFY(UNW_TARGET) ".so.7"
120 = STRINGIFY(UNW_OBJ(create_addr_space));
122 = STRINGIFY(UNW_OBJ(destroy_addr_space));
124 = STRINGIFY(UNW_OBJ(search_unwind_table));
131 if (result ==
nullptr)
145 gdb_assert (arch_descr != NULL);
158 unw_accessors_t *acc;
161 unw_regnum_t uw_sp_regnum;
200 acc = (unw_accessors_t *) descr->
accessors;
220 error (_(
"Can't get libunwind sp register."));
223 cache->
base = (CORE_ADDR)fp;
253 unw_accessors_t *acc;
266 acc = (unw_accessors_t *) descr->
accessors;
307 void **this_cache,
int regnum)
316 unw_regnum_t uw_regnum;
318 struct value *val = NULL;
330 error (_(
"No registers."));
346 descr->
uw2gdb (sl.u.regnum));
359 (gdb_byte *) &fpval);
379 void *pi,
int need_unwind_info,
void *args)
382 (unw_dyn_info_t *) di,
383 (unw_proc_info_t *) pi, need_unwind_info,
394 unw_accessors_t *acc;
408 acc = (unw_accessors_t *) descr->
accessors;
442 unw_accessors_t *acc;
446 unw_regnum_t uw_regnum;
495 char *so_error = NULL;
500 so_error = xstrdup (dlerror ());
struct value * frame_unwind_got_memory(frame_info_ptr frame, int regnum, CORE_ADDR addr)
struct value * frame_unwind_got_register(frame_info_ptr frame, int regnum, int new_regnum)
struct value * frame_unwind_got_bytes(frame_info_ptr frame, int regnum, const gdb_byte *buf)
struct value * frame_unwind_got_constant(frame_info_ptr frame, int regnum, ULONGEST val)
CORE_ADDR get_frame_pc(frame_info_ptr frame)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
CORE_ADDR get_frame_func(frame_info_ptr this_frame)
#define FRAME_OBSTACK_ZALLOC(TYPE)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
int gdbarch_sp_regnum(struct gdbarch *gdbarch)
int unw_get_reg_p_ftype(unw_cursor_t *, unw_regnum_t, unw_word_t *)
struct value * libunwind_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
int unw_search_unwind_table_p_ftype(unw_addr_space_t, unw_word_t, unw_dyn_info_t *, unw_proc_info_t *, int, void *)
static const char * get_fpreg_name
static const char * find_dyn_list_name
static const char * get_saveloc_name
static struct libunwind_descr * libunwind_descr(struct gdbarch *gdbarch)
static unw_get_reg_p_ftype * unw_get_reg_p
int unw_is_signal_frame_p_ftype(unw_cursor_t *)
unw_word_t libunwind_find_dyn_list(unw_addr_space_t as, unw_dyn_info_t *di, void *arg)
static unw_destroy_addr_space_p_ftype * unw_destroy_addr_space_p
static unw_is_signal_frame_p_ftype * unw_is_signal_frame_p
static const char * step_name
static unw_find_dyn_list_p_ftype * unw_find_dyn_list_p
static unw_create_addr_space_p_ftype * unw_create_addr_space_p
int libunwind_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_cache)
static struct libunwind_frame_cache * libunwind_frame_cache(frame_info_ptr this_frame, void **this_cache)
int unw_init_remote_p_ftype(unw_cursor_t *, unw_addr_space_t, void *)
unw_word_t unw_find_dyn_list_p_ftype(unw_addr_space_t, unw_dyn_info_t *, void *)
static unw_get_fpreg_p_ftype * unw_get_fpreg_p
static unw_init_remote_p_ftype * unw_init_remote_p
static unw_search_unwind_table_p_ftype * unw_search_unwind_table_p
static int libunwind_load(void)
void libunwind_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
int unw_get_saveloc_p_ftype(unw_cursor_t *, unw_regnum_t, unw_save_loc_t *)
int unw_get_fpreg_p_ftype(unw_cursor_t *, unw_regnum_t, unw_fpreg_t *)
static unw_get_saveloc_p_ftype * unw_get_saveloc_p
int libunwind_search_unwind_table(void *as, long ip, void *di, void *pi, int need_unwind_info, void *args)
static int libunwind_initialized
static const char * is_signal_frame_name
int libunwind_get_reg_special(struct gdbarch *gdbarch, readable_regcache *regcache, int regnum, void *buf)
int libunwind_sigtramp_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_cache)
void libunwind_frame_dealloc_cache(frame_info_ptr self, void *this_cache)
void _initialize_libunwind_frame()
static const char * destroy_addr_space_name
static const char * create_addr_space_name
int unw_step_p_ftype(unw_cursor_t *)
static const char * search_unwind_table_name
int libunwind_is_initialized(void)
unw_addr_space_t unw_create_addr_space_p_ftype(unw_accessors_t *, int)
void libunwind_frame_set_descr(struct gdbarch *gdbarch, struct libunwind_descr *descr)
void unw_destroy_addr_space_p_ftype(unw_addr_space_t)
static const registry< gdbarch >::key< libunwind_descr > libunwind_descr_handle
static unw_step_p_ftype * unw_step_p
static const char * init_remote_name
static const char * get_reg_name
int register_size(struct gdbarch *gdbarch, int regnum)
int target_has_registers()
void gdb_printf(struct ui_file *stream, const char *format,...)