osprey/libunwind/consumer/consumer.c File Reference

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <strings.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <rld_interface.h>
#include <objlist.h>
#include <obj_list.h>
#include <elf.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/unwind.h>
#include <link.h>
#include "unwind_consumer.h"

Include dependency graph for consumer.c:

Go to the source code of this file.

Functions/Subroutines

void unwind_debugger_init (int(*dbg_unwind_table_addr_arg)(__uint64_t, __uint64_t *, __uint64_t *), int(*dbg_unwind_info_addr_arg)(__uint64_t, __uint64_t *, __uint64_t *), int(*dbg_unwind_info_target_addr_arg)(__uint64_t, __uint64_t *), int(*dbg_text_segment_target_addr_arg)(__uint64_t, __uint64_t *), int(*dbg_restore_gp_arg)(__uint64_t, __uint64_t *), int(*dbg_addr_read_arg)(__uint64_t, __uint64_t, void *))
static __unw_error_t unwind_get_obj_phdr (const char *name, char *dsoname, __uint32_t *load_address, Elf64_Phdr **phdr, Elf64_Half *phnum)
static __unw_error_t unwind_get_obj_data (__uint64_t ip, Elf64_Ehdr **ehdr, Elf64_Phdr **phdr, __uint64_t *runtime_offset, __uint64_t *text_segment_addr)
static __unw_error_t unwind_get_unwind_table_data (__uint64_t ip, __uint64_t *unwind_table_addr, __uint64_t *unwind_table_size, __uint64_t *text_segment_addr)
static __unw_error_t unwind_restore_gp (__uint64_t ip, __uint64_t *gp)
static int unwind_table_entry_compare (const void *ptr1, const void *ptr2)
__unw_error_t unwind_state_stack_pop (__uint64_t num)
__unw_error_t unwind_state_stack_push (__unw_state_info_t **ptr)
__unw_error_t unwind_state_stack_top (__unw_state_info_t **ptr)
__unw_error_t unwind_state_stack_search (__unw_state_info_t **ptr, __uint64_t label)
__unw_error_t unwind_state_stack_reset (void)
__unw_error_t unwind_init (void)
__unw_error_t unwind_fini (void)
__unw_error_t unwind_frame (unw_sigcontext_t *scp)
static void _Unwind_Find_Entry (struct _Unwind_Context *scp)
_Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *exception_object)
_Unwind_Reason_Code _Unwind_ForceUnwind (struct _Unwind_Exception *exception_object, _Unwind_Stop_Fn stop, void *stop_parameter)
void _Unwind_Resume (struct _Unwind_Exception *exception_object)
void _Unwind_DeleteException (struct _Unwind_Exception *exception_object)
uint64_t _Unwind_GetGR (struct _Unwind_Context *context, int index)
void _Unwind_SetGR (struct _Unwind_Context *context, int index, uint64_t new_value)
uint64_t _Unwind_GetIP (struct _Unwind_Context *context)
void _Unwind_SetIP (struct _Unwind_Context *context, uint64_t new_value)
uint64_t _Unwind_GetLanguageSpecificData (struct _Unwind_Context *context)
uint64_t _Unwind_GetRegionStart (struct _Unwind_Context *context)

Variables

__uint32_t _unwind_verbose = 0
__unw_table_entry_t_unwind_table = NULL
__uint64_t _unwind_table_size = 0L
__unw_info_t_unwind_info = NULL
__uint64_t _unwind_info_size = 0L
__unw_state_info_t_unwind_state_stack = NULL
__uint64_t _unwind_state_stack_total_size = 0L
__uint64_t _unwind_state_stack_size = 0L
const __uint32_t _unw_gr_map [__UNW_MAX_GR_PRESERVED]
const __uint32_t _unw_fr_map [__UNW_MAX_FR_PRESERVED]
const __uint32_t _unw_br_map [__UNW_MAX_BR_PRESERVED]
const __uint32_t _unw_ar_map [__UNW_MAX_AR_PRESERVED]
static __uint32_t _unwind_initialized = 0
static __uint32_t _unwind_finalized = 0
static __uint64_t _rld_start_addr = 0L
static __uint64_t _rld_end_addr = 0L
static __uint64_t _rld_runtime_offset = 0L
static __unw_info_t_rld_unwind_table = NULL
static __uint64_t _rld_unwind_table_size = 0L
static __uint64_t _xeq_start_addr = 0L
static __uint64_t _xeq_end_addr = 0L
static __uint64_t _xeq_runtime_offset = 0L
static __unw_info_t_xeq_unwind_table = NULL
static __uint64_t _xeq_unwind_table_size = 0L
static int(* __dbg_unwind_table_addr )(__uint64_t, __uint64_t *, __uint64_t *) = NULL
static int(* __dbg_unwind_info_addr )(__uint64_t, __uint64_t *, __uint64_t *) = NULL
static int(* __dbg_unwind_info_target_addr )(__uint64_t, __uint64_t *) = NULL
static int(* __dbg_text_segment_target_addr )(__uint64_t, __uint64_t *) = NULL
static int(* __dbg_restore_gp )(__uint64_t, __uint64_t *) = NULL
static int(* __dbg_addr_read )(__uint64_t, __uint64_t, void *) = NULL
static char * _debugger_string = "gdb"
static const char * _Unwind_Reason_Strings [_URC_INSTALL_CONTEXT+1]


Function Documentation

void _Unwind_DeleteException ( struct _Unwind_Exception exception_object  ) 

Definition at line 2168 of file consumer.c.

static void _Unwind_Find_Entry ( struct _Unwind_Context scp  )  [static]

_Unwind_Reason_Code _Unwind_ForceUnwind ( struct _Unwind_Exception exception_object,
_Unwind_Stop_Fn  stop,
void stop_parameter 
)

uint64_t _Unwind_GetGR ( struct _Unwind_Context context,
int  index 
) [inline]

Definition at line 2178 of file consumer.c.

References __UNW_CONTEXT_ACCESS_GR, and assert.

uint64_t _Unwind_GetIP ( struct _Unwind_Context context  )  [inline]

Definition at line 2209 of file consumer.c.

References __UNW_CONTEXT_ACCESS_IP.

uint64_t _Unwind_GetLanguageSpecificData ( struct _Unwind_Context context  ) 

Definition at line 2224 of file consumer.c.

References __UNW_LENGTH, return, and _Unwind_Context::unwind_info_addr.

uint64_t _Unwind_GetRegionStart ( struct _Unwind_Context context  ) 

_Unwind_Reason_Code _Unwind_RaiseException ( struct _Unwind_Exception exception_object  ) 

void _Unwind_Resume ( struct _Unwind_Exception exception_object  ) 

Definition at line 2155 of file consumer.c.

void _Unwind_SetGR ( struct _Unwind_Context context,
int  index,
uint64_t  new_value 
)

void _Unwind_SetIP ( struct _Unwind_Context context,
uint64_t  new_value 
)

Definition at line 2216 of file consumer.c.

References __UNW_CONTEXT_ACCESS_IP.

void unwind_debugger_init ( int(*)(__uint64_t, __uint64_t *, __uint64_t *)  dbg_unwind_table_addr_arg,
int(*)(__uint64_t, __uint64_t *, __uint64_t *)  dbg_unwind_info_addr_arg,
int(*)(__uint64_t, __uint64_t *)  dbg_unwind_info_target_addr_arg,
int(*)(__uint64_t, __uint64_t *)  dbg_text_segment_target_addr_arg,
int(*)(__uint64_t, __uint64_t *)  dbg_restore_gp_arg,
int(*)(__uint64_t, __uint64_t, void *)  dbg_addr_read_arg 
)

__unw_error_t unwind_fini ( void   ) 

__unw_error_t unwind_frame ( unw_sigcontext_t scp  ) 

Definition at line 848 of file consumer.c.

References __dbg_addr_read, __dbg_restore_gp, __dbg_text_segment_target_addr, __dbg_unwind_info_addr, __dbg_unwind_info_target_addr, __dbg_unwind_table_addr, __UNW_AR_MAP, __UNW_BR_STD_END, __UNW_BR_STD_START, __UNW_BSP, __UNW_CONTEXT_ACCESS_AR, __UNW_CONTEXT_ACCESS_AR_EC, __UNW_CONTEXT_ACCESS_BR, __UNW_CONTEXT_ACCESS_FR, __UNW_CONTEXT_ACCESS_GP, __UNW_CONTEXT_ACCESS_GR, __UNW_CONTEXT_ACCESS_IP, __UNW_CONTEXT_ACCESS_PREDS, __UNW_CONTEXT_ACCESS_PRIUNAT, __UNW_GR_STD_END, __UNW_GR_STD_START, __UNW_INTERNAL_ERROR, __UNW_INV_OP_ERROR, __UNW_LENGTH, __UNW_MAX_AR_PRESERVED, __UNW_MAX_FR_PRESERVED, __UNW_OK, __UNW_PFS, __UNW_RESTORE_FIXED_VALUE, __UNW_RESTORE_OFF_BR, __UNW_RESTORE_OFF_GR, __UNW_RESTORE_PSP_RELATIVE, __UNW_RESTORE_SP_RELATIVE, __UNW_RP, __UNW_SP, __UNW_STRUCT_FPREG, __UNW_TO_RESTORE_PSP_RELATIVE, __UNW_VERBOSE_ERRORS, __UNW_VERBOSE_INTERNAL_MSGS, __UNW_VERBOSE_MSGS, __UNW_VERBOSE_WARNINGS, __unw_state_info_struct::_ar, __unw_state_info_struct::_br, __unw_reg_info_struct::_code, _debugger_string, __unw_table_entry_struct::_end, __unw_state_info_struct::_fr, __unw_state_info_struct::_frame_size, __unw_state_info_struct::_gr, __unw_info_struct::_header, __unw_table_entry_struct::_info, __unw_reg_info_struct::_offset, __unw_state_info_struct::_preds, __unw_state_info_struct::_priunat, __unw_reg_info_struct::_reg, __unw_table_entry_struct::_start, _unw_br_map, _unw_fr_map, _unw_gr_map, _unwind_initialized, _unwind_verbose, addr(), bsearch(), fprintf(), if(), L, NULL, preds, ptr, size_t, slots, sp, sz(), ulong, unwind_get_unwind_table_data(), unwind_init(), unwind_output(), unwind_process_desc(), unwind_restore_gp(), and unwind_table_entry_compare().

Referenced by unwind_stack().

static __unw_error_t unwind_get_obj_data ( __uint64_t  ip,
Elf64_Ehdr **  ehdr,
Elf64_Phdr **  phdr,
__uint64_t runtime_offset,
__uint64_t text_segment_addr 
) [static]

static __unw_error_t unwind_get_obj_phdr ( const char *  name,
char *  dsoname,
__uint32_t load_address,
Elf64_Phdr **  phdr,
Elf64_Half phnum 
) [static]

static __unw_error_t unwind_get_unwind_table_data ( __uint64_t  ip,
__uint64_t unwind_table_addr,
__uint64_t unwind_table_size,
__uint64_t text_segment_addr 
) [static]

__unw_error_t unwind_init ( void   ) 

static __unw_error_t unwind_restore_gp ( __uint64_t  ip,
__uint64_t gp 
) [static]

__unw_error_t unwind_state_stack_pop ( __uint64_t  num  ) 

__unw_error_t unwind_state_stack_push ( __unw_state_info_t **  ptr  ) 

__unw_error_t unwind_state_stack_reset ( void   ) 

Definition at line 716 of file consumer.c.

References __UNW_NULL_ERROR, __UNW_OK, _unwind_state_stack_size, and NULL.

Referenced by unwind_process_desc().

__unw_error_t unwind_state_stack_search ( __unw_state_info_t **  ptr,
__uint64_t  label 
)

__unw_error_t unwind_state_stack_top ( __unw_state_info_t **  ptr  ) 

Definition at line 667 of file consumer.c.

References __UNW_NULL_ERROR, __UNW_OK, _unwind_state_stack_size, bzero(), and NULL.

Referenced by unwind_process_body_desc().

static int unwind_table_entry_compare ( const void ptr1,
const void ptr2 
) [static]


Variable Documentation

int(* __dbg_addr_read)(__uint64_t, __uint64_t, void *) = NULL [static]

int(* __dbg_restore_gp)(__uint64_t, __uint64_t *) = NULL [static]

int(* __dbg_unwind_info_addr)(__uint64_t, __uint64_t *, __uint64_t *) = NULL [static]

char* _debugger_string = "gdb" [static]

Definition at line 126 of file consumer.c.

Referenced by unwind_frame().

__uint64_t _rld_end_addr = 0L [static]

Definition at line 106 of file consumer.c.

Definition at line 107 of file consumer.c.

__uint64_t _rld_start_addr = 0L [static]

Definition at line 105 of file consumer.c.

__unw_info_t* _rld_unwind_table = NULL [static]

Definition at line 108 of file consumer.c.

Definition at line 109 of file consumer.c.

const __uint32_t _unw_ar_map[__UNW_MAX_AR_PRESERVED]

Initial value:

        { 0, 0, 1, 3, 4, 5, 7 }

Definition at line 95 of file consumer.c.

Referenced by _Unwind_SetGR().

const __uint32_t _unw_br_map[__UNW_MAX_BR_PRESERVED]

Initial value:

  { 0, 1, 2, 3, 4, 5 }

Definition at line 89 of file consumer.c.

Referenced by unwind_frame().

const __uint32_t _unw_fr_map[__UNW_MAX_FR_PRESERVED]

Initial value:

  {  2,  3,  4,  5, 16, 17, 18, 19, 20, 21,
    22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }

Definition at line 86 of file consumer.c.

Referenced by unwind_frame().

const __uint32_t _unw_gr_map[__UNW_MAX_GR_PRESERVED]

Initial value:

  { 4, 5, 6, 7, 12 }

Definition at line 84 of file consumer.c.

Referenced by unwind_frame().

Definition at line 101 of file consumer.c.

Referenced by unwind_fini().

Definition at line 75 of file consumer.c.

Referenced by unwind_info_add_body_copy_state_info(), unwind_info_add_body_epilogue_info(), unwind_info_add_body_header(), unwind_info_add_body_label_state_info(), unwind_info_add_prologue_br_gr_info(), unwind_info_add_prologue_br_mem_info(), unwind_info_add_prologue_bsp_gr_info(), unwind_info_add_prologue_bsp_psprel_info(), unwind_info_add_prologue_bsp_sprel_info(), unwind_info_add_prologue_bsp_when_info(), unwind_info_add_prologue_bspstore_gr_info(), unwind_info_add_prologue_bspstore_psprel_info(), unwind_info_add_prologue_bspstore_sprel_info(), unwind_info_add_prologue_bspstore_when_info(), unwind_info_add_prologue_fpsr_gr_info(), unwind_info_add_prologue_fpsr_psprel_info(), unwind_info_add_prologue_fpsr_sprel_info(), unwind_info_add_prologue_fpsr_when_info(), unwind_info_add_prologue_fr_mem_info(), unwind_info_add_prologue_frgr_mem_info(), unwind_info_add_prologue_gr_gr_info(), unwind_info_add_prologue_gr_header(), unwind_info_add_prologue_gr_mem_info(), unwind_info_add_prologue_header(), unwind_info_add_prologue_lc_gr_info(), unwind_info_add_prologue_lc_psprel_info(), unwind_info_add_prologue_lc_sprel_info(), unwind_info_add_prologue_lc_when_info(), unwind_info_add_prologue_mem_stack_f_info(), unwind_info_add_prologue_mem_stack_v_info(), unwind_info_add_prologue_pfs_gr_info(), unwind_info_add_prologue_pfs_psprel_info(), unwind_info_add_prologue_pfs_sprel_info(), unwind_info_add_prologue_pfs_when_info(), unwind_info_add_prologue_preds_gr_info(), unwind_info_add_prologue_preds_psprel_info(), unwind_info_add_prologue_preds_sprel_info(), unwind_info_add_prologue_preds_when_info(), unwind_info_add_prologue_priunat_gr_info(), unwind_info_add_prologue_priunat_psprel_info(), unwind_info_add_prologue_priunat_sprel_info(), unwind_info_add_prologue_priunat_when_info(), unwind_info_add_prologue_psp_gr_info(), unwind_info_add_prologue_psp_sprel_info(), unwind_info_add_prologue_rnat_gr_info(), unwind_info_add_prologue_rnat_psprel_info(), unwind_info_add_prologue_rnat_sprel_info(), unwind_info_add_prologue_rnat_when_info(), unwind_info_add_prologue_rp_br_info(), unwind_info_add_prologue_rp_gr_info(), unwind_info_add_prologue_rp_psprel_info(), unwind_info_add_prologue_rp_sprel_info(), unwind_info_add_prologue_rp_when_info(), unwind_info_add_prologue_spill_base_info(), unwind_info_add_prologue_spill_mask_info(), unwind_info_add_prologue_unat_gr_info(), unwind_info_add_prologue_unat_psprel_info(), unwind_info_add_prologue_unat_sprel_info(), unwind_info_add_prologue_unat_when_info(), unwind_info_add_restore_reg_info(), unwind_info_add_spill_psprel_info(), unwind_info_add_spill_reg_to_gr_info(), and unwind_info_add_spill_sprel_info().

Definition at line 76 of file consumer.c.

Referenced by unwind_info_add_body_copy_state_info(), unwind_info_add_body_epilogue_info(), unwind_info_add_body_header(), unwind_info_add_body_label_state_info(), unwind_info_add_language_specific_info(), unwind_info_add_personality_routine_info(), unwind_info_add_prologue_br_gr_info(), unwind_info_add_prologue_br_mem_info(), unwind_info_add_prologue_bsp_gr_info(), unwind_info_add_prologue_bsp_psprel_info(), unwind_info_add_prologue_bsp_sprel_info(), unwind_info_add_prologue_bsp_when_info(), unwind_info_add_prologue_bspstore_gr_info(), unwind_info_add_prologue_bspstore_psprel_info(), unwind_info_add_prologue_bspstore_sprel_info(), unwind_info_add_prologue_bspstore_when_info(), unwind_info_add_prologue_fpsr_gr_info(), unwind_info_add_prologue_fpsr_psprel_info(), unwind_info_add_prologue_fpsr_sprel_info(), unwind_info_add_prologue_fpsr_when_info(), unwind_info_add_prologue_fr_mem_info(), unwind_info_add_prologue_frgr_mem_info(), unwind_info_add_prologue_gr_gr_info(), unwind_info_add_prologue_gr_header(), unwind_info_add_prologue_gr_mem_info(), unwind_info_add_prologue_header(), unwind_info_add_prologue_lc_gr_info(), unwind_info_add_prologue_lc_psprel_info(), unwind_info_add_prologue_lc_sprel_info(), unwind_info_add_prologue_lc_when_info(), unwind_info_add_prologue_mem_stack_f_info(), unwind_info_add_prologue_mem_stack_v_info(), unwind_info_add_prologue_pfs_gr_info(), unwind_info_add_prologue_pfs_psprel_info(), unwind_info_add_prologue_pfs_sprel_info(), unwind_info_add_prologue_pfs_when_info(), unwind_info_add_prologue_preds_gr_info(), unwind_info_add_prologue_preds_psprel_info(), unwind_info_add_prologue_preds_sprel_info(), unwind_info_add_prologue_preds_when_info(), unwind_info_add_prologue_priunat_gr_info(), unwind_info_add_prologue_priunat_psprel_info(), unwind_info_add_prologue_priunat_sprel_info(), unwind_info_add_prologue_priunat_when_info(), unwind_info_add_prologue_psp_gr_info(), unwind_info_add_prologue_psp_sprel_info(), unwind_info_add_prologue_rnat_gr_info(), unwind_info_add_prologue_rnat_psprel_info(), unwind_info_add_prologue_rnat_sprel_info(), unwind_info_add_prologue_rnat_when_info(), unwind_info_add_prologue_rp_br_info(), unwind_info_add_prologue_rp_gr_info(), unwind_info_add_prologue_rp_psprel_info(), unwind_info_add_prologue_rp_sprel_info(), unwind_info_add_prologue_rp_when_info(), unwind_info_add_prologue_spill_base_info(), unwind_info_add_prologue_spill_mask_info(), unwind_info_add_prologue_unat_gr_info(), unwind_info_add_prologue_unat_psprel_info(), unwind_info_add_prologue_unat_sprel_info(), unwind_info_add_prologue_unat_when_info(), unwind_info_add_restore_reg_info(), unwind_info_add_spill_psprel_info(), unwind_info_add_spill_reg_to_gr_info(), unwind_info_add_spill_sprel_info(), unwind_info_finalize(), unwind_info_initialize(), and unwind_process().

Definition at line 100 of file consumer.c.

Referenced by unwind_frame(), and unwind_init().

const char* _Unwind_Reason_Strings[_URC_INSTALL_CONTEXT+1] [static]

Initial value:

{
    "_URC_NO_REASON",
    "_URC_FOREIGN_EXCEPTION_CAUGHT",
    "_URC_FATAL_PHASE2_ERROR",
    "_URC_FATAL_PHASE1_ERROR",
    "_URC_NORMAL_STOP",
    "_URC_END_OF_STACK",
    "_URC_HANDLER_FOUND",
    "_URC_INSTALL_CONTEXT"
}

Definition at line 2060 of file consumer.c.

Definition at line 79 of file consumer.c.

Definition at line 80 of file consumer.c.

Referenced by unwind_fini(), unwind_init(), and unwind_state_stack_push().

Definition at line 71 of file consumer.c.

Definition at line 72 of file consumer.c.

Referenced by unwind_info_finalize(), and unwind_process().

__uint64_t _xeq_end_addr = 0L [static]

Definition at line 113 of file consumer.c.

Definition at line 114 of file consumer.c.

__uint64_t _xeq_start_addr = 0L [static]

Definition at line 112 of file consumer.c.

__unw_info_t* _xeq_unwind_table = NULL [static]

Definition at line 115 of file consumer.c.

Definition at line 116 of file consumer.c.


Generated on Wed Apr 8 15:58:13 2009 for Open64 by  doxygen 1.5.6