Menu

libdwarf

Joseph Koshy

libdwarf

libdwarf A library for parsing DWARF debug information

Implementation Notes

  • Memory management is totally different from SGI/DA libdwarf. Most data structures are stored in internal linked lists. When an application requires data objects pointers to internally stored objects are returned instead of allocating new copies. As a result, in most situations, applications should not free the pointers returned by the library.

Implementation Status

API Implementation Manual Page Test Cases Compatible w/ SGI Comments
Error Handling
dwarf_seterrhand() Y Y N Y Extended semantics.
dwarf_seterrarg() Y Y N Y Extended semantics.
dwarf_errno Y Y N Y Our Dwarf_Error is not opaque
dwarf_errmsg Y Y N Y Our Dwarf_Error is not opaque
Initialization
dwarf_init() Y Y Y Y
dwarf_elf_init() Y Y N Y
dwarf_get_elf() Y Y N Y
dwarf_finish() Y Y N Y
Misc
dwarf_get_address_size() Y Y Y Y
dwarf_dealloc() Y Y N Y Ours is a dummy call
dwarf_set_reloc_application() Y N N Y
DIE delivery
dwarf_next_cu_header Y Y Y Y
dwarf_next_cu_header_b Y N Y Y
dwarf_siblingof() Y Y Y Y
dwarf_child() Y Y Y Y
dwarf_offdie() Y Y N Y
DIE query
dwarf_tag() Y Y Y Y
dwarf_dieoffset() Y Y Y Y
dwarf_die_CU_offset() Y Y Y Y
dwarf_die_CU_offset_range() Y Y Y Y
dwarf_diename() Y Y Y Y
dwarf_die_abbrev_code() Y Y Y Y
dwarf_attrlist Y Y Y Y
dwarf_hasattr Y Y Y Y
dwarf_attr Y Y Y Y
dwarf_lowpc Y Y Y Y
dwarf_highpc Y Y Y Y
dwarf_bytesize Y Y Y Y
dwarf_bitsize Y Y Y Y
dwarf_bitoffset Y Y Y Y
dwarf_srclang Y Y Y Y
dwarf_arrayorder Y Y Y Y
dwarf_get_cu_die_offset_given_cu_header_offset() Y Y Y Y Name too long...
Attribute Form Queries
dwarf_hasform Y Y Y Y
dwarf_whatform Y Y Y Y
dwarf_whatform_direct Y Y Y Y
dwarf_whatattr Y Y Y Y
dwarf_formref Y Y Y Y
dwarf_global_formref Y Y Y Y
dwarf_formaddr Y N Y Y
dwarf_formexprloc Y N N Y
dwarf_formflag Y Y Y Y
dwarf_formudata Y Y Y Y
dwarf_formsdata Y Y Y Y
dwarf_formsig8 Y N N Y
dwarf_formblock Y N Y Y
dwarf_formstring Y N Y Y
dwarf_get_form_class Y N N Y
dwarf_attrval_flag Y N N N Our Extension
dwarf_attrval_string Y N N N Our Extension
dwarf_attrval_signed Y N N N Our Extension
dwarf_attrval_unsigned Y N N N Our Extension
Location List Queries
dwarf_loclist_n() Y N Y Y
dwarf_loclist() Y N Y Y
dwarf_loclist_from_expr() Y N N Y
dwarf_loclist_from_expr_a() Y N N Y
dwarf_loclist_from_expr_dealloc() Y N N N Our Extension
dwarf_get_loclist_entry() Y N N Y
Line Number Operations
dwarf_srclines() Y N Y Y
dwarf_srcfiles() Y Y Y Y
dwarf_linebeginstatement() Y N Y Y
dwarf_lineendsequence() Y N Y Y
dwarf_lineno() Y N Y Y
dwarf_line_srcfileno() Y N Y Y
dwarf_lineaddr() Y N Y Y
dwarf_lineoff() Y N Y Y
dwarf_linesrc() Y N Y Y
dwarf_lineblock() Y N Y Y
Global Name Space Operations
dwarf_get_globals() Y N Y Y
dwarf_globname() Y N Y Y
dwarf_global_die_offset() Y N Y Y
dwarf_global_cu_offset() Y N Y Y
dwarf_global_name_offsets() Y N Y Y
Type Names Operations
dwarf_get_pubtypes() Y N N Y
dwarf_pubtypename() Y N N Y
dwarf_pubtype_die_offset() Y N N Y
dwarf_pubtype_cu_offset() Y N N Y
dwarf_pubtype_name_offsets() Y N N Y
User Defined Type Names Operations
dwarf_get_types() Y N N Y
dwarf_typename() Y N N Y
dwarf_type_die_offset() Y N N Y
dwarf_type_cu_offset() Y N N Y
dwarf_type_name_offsets() Y N N Y
Static Variable Names Operations
dwarf_get_vars() Y N N Y
dwarf_varname() Y N N Y
dwarf_var_die_offset() Y N N Y
dwarf_var_cu_offset() Y N N Y
dwarf_var_name_offsets() Y N N Y
Static Function Names Operations
dwarf_get_funcs() Y N N Y
dwarf_funcname() Y N N Y
dwarf_func_die_offset() Y N N Y
dwarf_func_cu_offset() Y N N Y
dwarf_func_name_offsets() Y N N Y
Weak Names Space Operations
dwarf_get_weaks() Y N N Y
dwarf_weakname() Y N N Y
dwarf_weak_die_offset() Y N N Y
dwarf_weak_cu_offset() Y N N Y
dwarf_weak_name_offsets() Y N N Y
Macro Information Operations
dwarf_find_macro_value_start() Y N Y Y
dwarf_get_macro_details() Y N Y Y
Call Frame Operations
dwarf_get_fde_list() Y N Y Y
dwarf_get_fde_list_eh() Y N Y Y
dwarf_get_fde_n() Y N Y Y
dwarf_get_fde_at_pc() Y N Y Y
dwarf_get_cie_of_fde() Y N Y Y
dwarf_get_fde_for_die() Y N N Y
dwarf_get_fde_range() Y N Y Y
dwarf_get_cie_info() Y N Y Y
dwarf_get_fde_instr_bytes() Y N Y Y
dwarf_get_fde_info_for_reg() Y N Y Y
dwarf_get_fde_info_for_all_regs() Y N Y Y
dwarf_get_fde_info_for_reg3() Y N Y Y
dwarf_get_fde_info_for_cfa_reg3() Y N Y Y
dwarf_get_fde_info_for_all_regs3() Y N Y Y
dwarf_set_frame_rule_table_size() Y N N Y
dwarf_set_frame_rule_initial_value() Y N N Y
dwarf_set_frame_cfa_value() Y N Y Y
dwarf_set_frame_same_value() Y N N Y
dwarf_set_frame_undefined_value() Y N N Y
dwarf_expand_frame_instructions() Y N N Y
dwarf_free_expanded_frame_instructions() Y N N N Our Extension
Abbreviations access
dwarf_get_abbrev() Y N Y Y
dwarf_get_abbrev_tag() Y N Y Y
dwarf_get_abbrev_code() Y N Y Y
dwarf_get_abbrev_children_flag() Y N Y Y
dwarf_get_abbrev_entry() Y N Y Y
String Section Operations
dwarf_get_str() Y N N Y
Address Range Operations
dwarf_get_aranges() Y N Y Y
dwarf_get_arange() Y N Y Y
dwarf_get_cu_die_offset() Y N Y Y
dwarf_get_arange_cu_header_offset() Y N Y Y
dwarf_get_arange_info() Y N Y Y
Ranges Operations
dwarf_get_ranges() Y N Y Y
dwarf_get_ranges_a() Y N Y Y Ours is identical to dwarf_get_ranges()
dwarf_ranges_dealloc() Y N N Y no-op
Convert Names To Strings
dwarf_get_ACCESS_name() Y N N Y
dwarf_get_AT_name() Y N N Y
dwarf_get_ATE_name() Y N N Y
dwarf_get_ADDR_name() N
dwarf_get_ATCF_name() N
dwarf_get_CC_name() Y N N Y
dwarf_get_CFA_name() Y N N Y
dwarf_get_CHILDREN_name() Y N N Y
dwarf_get_children_name() N
dwarf_get_DS_name() N
dwarf_get_DSC_name() Y N N Y
dwarf_get_EH_name() N
dwarf_get_END_name() N
dwarf_get_FORM_name() Y N N Y
dwarf_get_FRAME_name() N
dwarf_get_ID_name() Y N N Y
dwarf_get_INL_name() Y N N Y
dwarf_get_LANG_name() Y N N Y
dwarf_get_LNE_name() Y N N Y
dwarf_get_LNS_name() Y N N Y
dwarf_get_MACINFO_name() Y N N Y
dwarf_get_OP_name() Y N N Y
dwarf_get_ORD_name() Y N N Y
dwarf_get_TAG_name() Y N N Y
dwarf_get_VIRTUALITY_name() Y N N Y
dwarf_get_VIS_name() Y N N Y
Producer General
dwarf_producer_init() Y N N Y
dwarf_producer_init_b() Y N N Y
dwarf_transform_to_disk_form() Y N N Y
dwarf_get_section_bytes() Y N N Y
dwarf_get_relocation_info_count() Y N N Y
dwarf_get_relocation_info() Y N N Y
dwarf_reset_section_bytes() Y N N Y
dwarf_producer_init() N
Debugging Information Entry Creation
dwarf_add_die_to_debug() Y N N Y
dwarf_new_die() Y N N Y
dwarf_die_link() Y N N Y needs further verification
Attribute Creation
dwarf_add_AT_location_expr() Y N N Y
dwarf_add_AT_name() Y N N Y We always use DW_FORM_strp
dwarf_add_AT_comp_dir() Y N N Y We always use DW_FORM_strp
dwarf_add_AT_producer() Y N N Y We always use DW_FORM_strp
dwarf_add_AT_const_value_signedint() Y N N Y
dwarf_add_AT_const_value_unsignedint() Y N N Y
dwarf_add_AT_const_value_string() Y N N Y We always use DW_FORM_strp
dwarf_add_AT_targ_address() Y N N Y
dwarf_add_AT_targ_address_b() Y N N Y
dwarf_add_AT_dataref() Y N N Y
dwarf_add_AT_ref_address() Y N N Y
dwarf_add_AT_unsigned_const() Y N N Y
dwarf_add_AT_signed_const() Y N N Y
dwarf_add_AT_reference() Y N N Y
dwarf_add_AT_flag() Y N N Y
dwarf_add_AT_string() Y N N Y We always use DW_FORM_strp
Expression Creation
dwarf_new_expr() Y N N Y
dwarf_add_expr_gen() Y N N Y
dwarf_add_expr_addr() Y N N Y
dwarf_add_expr_addr_b() Y N N Y
dwarf_expr_current_offset() Y N N Y
dwarf_expr_into_block() Y N N Y
Line Number Creation
dwarf_add_line_entry() Y N N Y
dwarf_lne_set_address() Y N N Y
dwarf_lne_end_sequence() Y N N Y
dwarf_add_directory_decl() Y N N Y
dwarf_add_file_decl() Y N N Y
Arange Creation
dwarf_add_arange() Y N N Y
dwarf_add_arange_b() Y N N Y
Pubnames Creation
dwarf_add_pubname() Y N N Y
Weaknames Creation
dwarf_add_weakname() Y N N Y
Static Function Name Creation
dwarf_add_funcname() Y N N Y
User-defined Type Name Creation
dwarf_add_typename() Y N N Y
Static Variable Name Creation
dwarf_add_varname() Y N N Y
Macro Info Creation
dwarf_def_macro() Y N N Y
dwarf_undef_macro() Y N N Y
dwarf_start_macro_file() Y N N Y
dwarf_end_macro_file() Y N N Y
dwarf_vendor_ext() Y N N Y
Frame Info Creation
dwarf_new_fde() Y N N Y
dwarf_add_frame_cie() Y N N Y
dwarf_add_frame_fde() Y N N Y
dwarf_add_frame_fde_b() Y N N Y
dwarf_add_frame_info() N SGI libdwarf MIPS extension?
dwarf_add_frame_info_b() N SGI libdwarf MIPS extension?
dwarf_fde_cfa_offset() Y N N Y
dwarf_add_fde_inst() Y N N Y

References


Related

Tickets: #450
Wiki: BuildingFromSource