diff options
Diffstat (limited to 'gdb/ia64-libunwind-tdep.c')
-rw-r--r-- | gdb/ia64-libunwind-tdep.c | 97 |
1 files changed, 62 insertions, 35 deletions
diff --git a/gdb/ia64-libunwind-tdep.c b/gdb/ia64-libunwind-tdep.c index fa89a0e..30a9283 100644 --- a/gdb/ia64-libunwind-tdep.c +++ b/gdb/ia64-libunwind-tdep.c @@ -59,20 +59,33 @@ static int libunwind_initialized; static struct gdbarch_data *libunwind_descr_handle; /* Required function pointers from libunwind. */ -static int (*unw_get_reg_p) (unw_cursor_t *, unw_regnum_t, unw_word_t *); -static int (*unw_get_fpreg_p) (unw_cursor_t *, unw_regnum_t, unw_fpreg_t *); -static int (*unw_get_saveloc_p) (unw_cursor_t *, unw_regnum_t, - unw_save_loc_t *); -static int (*unw_is_signal_frame_p) (unw_cursor_t *); -static int (*unw_step_p) (unw_cursor_t *); -static int (*unw_init_remote_p) (unw_cursor_t *, unw_addr_space_t, void *); -static unw_addr_space_t (*unw_create_addr_space_p) (unw_accessors_t *, int); -static void (*unw_destroy_addr_space_p) (unw_addr_space_t); -static int (*unw_search_unwind_table_p) (unw_addr_space_t, unw_word_t, - unw_dyn_info_t *, - unw_proc_info_t *, int, void *); -static unw_word_t (*unw_find_dyn_list_p) (unw_addr_space_t, unw_dyn_info_t *, - void *); +typedef int (unw_get_reg_p_ftype) (unw_cursor_t *, unw_regnum_t, unw_word_t *); +static unw_get_reg_p_ftype *unw_get_reg_p; +typedef int (unw_get_fpreg_p_ftype) (unw_cursor_t *, unw_regnum_t, + unw_fpreg_t *); +static unw_get_fpreg_p_ftype *unw_get_fpreg_p; +typedef int (unw_get_saveloc_p_ftype) (unw_cursor_t *, unw_regnum_t, + unw_save_loc_t *); +static unw_get_saveloc_p_ftype *unw_get_saveloc_p; +typedef int (unw_is_signal_frame_p_ftype) (unw_cursor_t *); +static unw_is_signal_frame_p_ftype *unw_is_signal_frame_p; +typedef int (unw_step_p_ftype) (unw_cursor_t *); +static unw_step_p_ftype *unw_step_p; +typedef int (unw_init_remote_p_ftype) (unw_cursor_t *, unw_addr_space_t, + void *); +static unw_init_remote_p_ftype *unw_init_remote_p; +typedef unw_addr_space_t (unw_create_addr_space_p_ftype) (unw_accessors_t *, + int); +static unw_create_addr_space_p_ftype *unw_create_addr_space_p; +typedef void (unw_destroy_addr_space_p_ftype) (unw_addr_space_t); +static unw_destroy_addr_space_p_ftype *unw_destroy_addr_space_p; +typedef 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 unw_search_unwind_table_p_ftype *unw_search_unwind_table_p; +typedef unw_word_t (unw_find_dyn_list_p_ftype) (unw_addr_space_t, + unw_dyn_info_t *, void *); +static unw_find_dyn_list_p_ftype *unw_find_dyn_list_p; struct libunwind_frame_cache @@ -114,7 +127,8 @@ static char *find_dyn_list_name = STRINGIFY(UNW_OBJ(find_dyn_list)); static struct libunwind_descr * libunwind_descr (struct gdbarch *gdbarch) { - return gdbarch_data (gdbarch, libunwind_descr_handle); + return ((struct libunwind_descr *) + gdbarch_data (gdbarch, libunwind_descr_handle)); } static void * @@ -134,12 +148,13 @@ libunwind_frame_set_descr (struct gdbarch *gdbarch, gdb_assert (gdbarch != NULL); - arch_descr = gdbarch_data (gdbarch, libunwind_descr_handle); + arch_descr = ((struct libunwind_descr *) + gdbarch_data (gdbarch, libunwind_descr_handle)); if (arch_descr == NULL) { /* First time here. Must initialize data area. */ - arch_descr = libunwind_descr_init (gdbarch); + arch_descr = (struct libunwind_descr *) libunwind_descr_init (gdbarch); deprecated_set_gdbarch_data (gdbarch, libunwind_descr_handle, arch_descr); } @@ -165,7 +180,7 @@ libunwind_frame_cache (struct frame_info *this_frame, void **this_cache) int i, ret; if (*this_cache) - return *this_cache; + return (struct libunwind_frame_cache *) *this_cache; /* Allocate a new cache. */ cache = FRAME_OBSTACK_ZALLOC (struct libunwind_frame_cache); @@ -197,7 +212,7 @@ libunwind_frame_cache (struct frame_info *this_frame, void **this_cache) use this cursor to find previous registers via the unw_get_reg interface which will invoke libunwind's special logic. */ descr = libunwind_descr (gdbarch); - acc = descr->accessors; + acc = (unw_accessors_t *) descr->accessors; as = unw_create_addr_space_p (acc, gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG @@ -230,7 +245,8 @@ libunwind_frame_cache (struct frame_info *this_frame, void **this_cache) void libunwind_frame_dealloc_cache (struct frame_info *self, void *this_cache) { - struct libunwind_frame_cache *cache = this_cache; + struct libunwind_frame_cache *cache + = (struct libunwind_frame_cache *) this_cache; if (cache->as) unw_destroy_addr_space_p (cache->as); @@ -262,7 +278,7 @@ libunwind_frame_sniffer (const struct frame_unwind *self, it has found sufficient libunwind unwinding information to do so. */ descr = libunwind_descr (gdbarch); - acc = descr->accessors; + acc = (unw_accessors_t *) descr->accessors; as = unw_create_addr_space_p (acc, gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG @@ -380,8 +396,10 @@ int libunwind_search_unwind_table (void *as, long ip, void *di, void *pi, int need_unwind_info, void *args) { - return unw_search_unwind_table_p (*(unw_addr_space_t *)as, (unw_word_t )ip, - di, pi, need_unwind_info, args); + return unw_search_unwind_table_p (*(unw_addr_space_t *) as, (unw_word_t) ip, + (unw_dyn_info_t *) di, + (unw_proc_info_t *) pi, need_unwind_info, + args); } /* Verify if we are in a sigtramp frame and we can use libunwind to unwind. */ @@ -405,7 +423,7 @@ libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self, so. */ descr = libunwind_descr (gdbarch); - acc = descr->accessors; + acc = (unw_accessors_t *) descr->accessors; as = unw_create_addr_space_p (acc, gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG @@ -450,7 +468,7 @@ libunwind_get_reg_special (struct gdbarch *gdbarch, struct regcache *regcache, descr = libunwind_descr (gdbarch); - acc = descr->special_accessors; + acc = (unw_accessors_t *) descr->special_accessors; as = unw_create_addr_space_p (acc, gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG @@ -517,43 +535,52 @@ libunwind_load (void) /* Initialize pointers to the dynamic library functions we will use. */ - unw_get_reg_p = dlsym (handle, get_reg_name); + unw_get_reg_p = (unw_get_reg_p_ftype *) dlsym (handle, get_reg_name); if (unw_get_reg_p == NULL) return 0; - unw_get_fpreg_p = dlsym (handle, get_fpreg_name); + unw_get_fpreg_p = (unw_get_fpreg_p_ftype *) dlsym (handle, get_fpreg_name); if (unw_get_fpreg_p == NULL) return 0; - unw_get_saveloc_p = dlsym (handle, get_saveloc_name); + unw_get_saveloc_p + = (unw_get_saveloc_p_ftype *) dlsym (handle, get_saveloc_name); if (unw_get_saveloc_p == NULL) return 0; - unw_is_signal_frame_p = dlsym (handle, is_signal_frame_name); + unw_is_signal_frame_p + = (unw_is_signal_frame_p_ftype *) dlsym (handle, is_signal_frame_name); if (unw_is_signal_frame_p == NULL) return 0; - unw_step_p = dlsym (handle, step_name); + unw_step_p = (unw_step_p_ftype *) dlsym (handle, step_name); if (unw_step_p == NULL) return 0; - unw_init_remote_p = dlsym (handle, init_remote_name); + unw_init_remote_p + = (unw_init_remote_p_ftype *) dlsym (handle, init_remote_name); if (unw_init_remote_p == NULL) return 0; - unw_create_addr_space_p = dlsym (handle, create_addr_space_name); + unw_create_addr_space_p + = (unw_create_addr_space_p_ftype *) dlsym (handle, create_addr_space_name); if (unw_create_addr_space_p == NULL) return 0; - unw_destroy_addr_space_p = dlsym (handle, destroy_addr_space_name); + unw_destroy_addr_space_p + = (unw_destroy_addr_space_p_ftype *) dlsym (handle, + destroy_addr_space_name); if (unw_destroy_addr_space_p == NULL) return 0; - unw_search_unwind_table_p = dlsym (handle, search_unwind_table_name); + unw_search_unwind_table_p + = (unw_search_unwind_table_p_ftype *) dlsym (handle, + search_unwind_table_name); if (unw_search_unwind_table_p == NULL) return 0; - unw_find_dyn_list_p = dlsym (handle, find_dyn_list_name); + unw_find_dyn_list_p + = (unw_find_dyn_list_p_ftype *) dlsym (handle, find_dyn_list_name); if (unw_find_dyn_list_p == NULL) return 0; |