package linksem
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=2075c56715539b3b8f54ae65cc808b8c
sha512=f7c16e4036a1440a6a8d13707a43f0f9f9db0c68489215f948cc300b6a164dba5bf852e58f89503e9d9f38180ee658d9478156ca1a1ef64d6861eec5f9cf43d2
doc/linksem_zarith/Dwarf/index.html
Module DwarfSource
***************** experimental DWARF reading ***********
debug
************************************************************
** dwarf representation types ****************************
************************************************************
type operation_argument_value = | OAV_natural of Nat_big_num.num| OAV_integer of Nat_big_num.num| OAV_block of Nat_big_num.num * Byte_sequence.byte_sequence0
type arithmetic_context = {ac_bitwidth : Nat_big_num.num;ac_half : Nat_big_num.num;ac_all : Nat_big_num.num;ac_max : Nat_big_num.num;
}type operation_semantics = | OpSem_lit| OpSem_deref| OpSem_stack of arithmetic_context -> operation_stack -> operation_argument_value list -> operation_stack option| OpSem_not_supported| OpSem_binary of arithmetic_context -> Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num option| OpSem_unary of arithmetic_context -> Nat_big_num.num -> Nat_big_num.num option| OpSem_opcode_lit of Nat_big_num.num| OpSem_reg| OpSem_breg| OpSem_bregx| OpSem_fbreg| OpSem_deref_size| OpSem_nop| OpSem_piece| OpSem_bit_piece| OpSem_implicit_value| OpSem_stack_value| OpSem_call_frame_cfa
type operation = {op_code : Nat_big_num.num;op_string : string;op_argument_values : operation_argument_value list;op_semantics : operation_semantics;
}type simple_location = | SL_memory_address of Nat_big_num.num| SL_register of Nat_big_num.num| SL_implicit of Byte_sequence.byte_sequence0| SL_empty
type composite_location_piece = | CLP_piece of Nat_big_num.num * simple_location| CLP_bit_piece of Nat_big_num.num * Nat_big_num.num * simple_location
type single_location = | SL_simple of simple_location| SL_composite of composite_location_piece list
type state = {s_stack : operation_stack;s_value : simple_location;s_location_pieces : composite_location_piece list;
}type evaluation_context = {read_register : Nat_big_num.num -> Nat_big_num.num register_read_result;read_memory : Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num memory_read_result;
}type abbreviation_declaration = {ad_abbreviation_code : Nat_big_num.num;ad_tag : Nat_big_num.num;ad_has_children : bool;ad_attribute_specifications : (Nat_big_num.num * Nat_big_num.num) list;
}type abbreviations_table = {at_offset : Nat_big_num.num;at_table : abbreviation_declaration list;
}type attribute_value = | AV_addr of Nat_big_num.num| AV_block of Nat_big_num.num * Byte_sequence.byte_sequence0| AV_constantN of Nat_big_num.num * Byte_sequence.byte_sequence0| AV_constant_SLEB128 of Nat_big_num.num| AV_constant_ULEB128 of Nat_big_num.num| AV_exprloc of Nat_big_num.num * Byte_sequence.byte_sequence0| AV_flag of bool| AV_ref of Nat_big_num.num| AV_ref_addr of Nat_big_num.num| AV_ref_sig8 of Nat_big_num.num| AV_sec_offset of Nat_big_num.num| AV_string of Byte_sequence.byte_sequence0| AV_strp of Nat_big_num.num
type die = {die_offset : Nat_big_num.num;die_abbreviation_code : Nat_big_num.num;die_abbreviation_declaration : abbreviation_declaration;die_attribute_values : (Nat_big_num.num * attribute_value) list;die_children : die list;
}type compilation_unit_header = {cuh_offset : Nat_big_num.num;cuh_dwarf_format : dwarf_format;cuh_unit_length : Nat_big_num.num;cuh_version : Nat_big_num.num;cuh_debug_abbrev_offset : Nat_big_num.num;cuh_address_size : Nat_big_num.num;
}type compilation_unit = {cu_header : compilation_unit_header;cu_abbreviations_table : abbreviations_table;cu_die : die;cu_index : die_index;
}type type_unit_header = {tuh_cuh : compilation_unit_header;tuh_type_signature : Nat_big_num.num;tuh_type_offset : Nat_big_num.num;
}type type_unit = {tu_header : type_unit_header;tu_abbreviations_table : abbreviations_table;tu_die : die;
}type location_list_entry = {lle_beginning_address_offset : Nat_big_num.num;lle_ending_address_offset : Nat_big_num.num;lle_single_location_description : single_location_description;
}type location_list_item = | LLI_lle of location_list_entry| LLI_base of base_address_selection_entry
type range_list_item = | RLI_rle of range_list_entry| RLI_base of base_address_selection_entry
type call_frame_argument_value = | CFAV_address of cfa_address| CFAV_block of cfa_block| CFAV_delta of cfa_delta| CFAV_offset of cfa_offset| CFAV_register of cfa_register| CFAV_sfoffset of cfa_sfoffset
type call_frame_instruction = | DW_CFA_advance_loc of cfa_delta| DW_CFA_offset of cfa_register * cfa_offset| DW_CFA_restore of cfa_register| DW_CFA_nop| DW_CFA_set_loc of cfa_address| DW_CFA_advance_loc1 of cfa_delta| DW_CFA_advance_loc2 of cfa_delta| DW_CFA_advance_loc4 of cfa_delta| DW_CFA_offset_extended of cfa_register * cfa_offset| DW_CFA_restore_extended of cfa_register| DW_CFA_undefined of cfa_register| DW_CFA_same_value of cfa_register| DW_CFA_register of cfa_register * cfa_register| DW_CFA_remember_state| DW_CFA_restore_state| DW_CFA_def_cfa of cfa_register * cfa_offset| DW_CFA_def_cfa_register of cfa_register| DW_CFA_def_cfa_offset of cfa_offset| DW_CFA_def_cfa_expression of cfa_block| DW_CFA_expression of cfa_register * cfa_block| DW_CFA_offset_extended_sf of cfa_register * cfa_sfoffset| DW_CFA_def_cfa_sf of cfa_register * cfa_sfoffset| DW_CFA_def_cfa_offset_sf of cfa_sfoffset| DW_CFA_val_offset of cfa_register * cfa_offset| DW_CFA_val_offset_sf of cfa_register * cfa_sfoffset| DW_CFA_val_expression of cfa_register * cfa_block| DW_CFA_AARCH64_negate_ra_state| DW_CFA_unknown of char
type cie = {cie_offset : Nat_big_num.num;cie_length : Nat_big_num.num;cie_id : Nat_big_num.num;cie_version : Nat_big_num.num;cie_augmentation : Byte_sequence.byte_sequence0;cie_address_size : Nat_big_num.num option;cie_segment_size : Nat_big_num.num option;cie_code_alignment_factor : Nat_big_num.num;cie_data_alignment_factor : Nat_big_num.num;cie_return_address_register : cfa_register;cie_initial_instructions_bytes : Byte_sequence.byte_sequence0;cie_initial_instructions : call_frame_instruction list;
}type fde = {fde_offset : Nat_big_num.num;fde_length : Nat_big_num.num;fde_cie_pointer : Nat_big_num.num;fde_initial_location_segment_selector : Nat_big_num.num option;fde_initial_location_address : Nat_big_num.num;fde_address_range : Nat_big_num.num;fde_instructions_bytes : Byte_sequence.byte_sequence0;fde_instructions : call_frame_instruction list;
}type cfa_rule = | CR_undefined| CR_register of cfa_register * Nat_big_num.num| CR_expression of single_location_description
type register_rule = | RR_undefined| RR_same_value| RR_offset of Nat_big_num.num| RR_val_offset of Nat_big_num.num| RR_register of Nat_big_num.num| RR_expression of single_location_description| RR_val_expression of single_location_description| RR_architectural
type cfa_table_row = {ctr_loc : Nat_big_num.num;ctr_cfa : cfa_rule;ctr_regs : register_rule_map;
}type cfa_state = {cs_current_row : cfa_table_row;cs_previous_rows : cfa_table_row list;cs_initial_instructions_row : cfa_table_row;cs_row_stack : cfa_table_row list;
}type line_number_argument_value = | LNAV_address of Nat_big_num.num| LNAV_ULEB128 of Nat_big_num.num| LNAV_SLEB128 of Nat_big_num.num| LNAV_uint16 of Nat_big_num.num| LNAV_string of Byte_sequence.byte_sequence0
type line_number_operation = | DW_LNS_copy| DW_LNS_advance_pc of Nat_big_num.num| DW_LNS_advance_line of Nat_big_num.num| DW_LNS_set_file of Nat_big_num.num| DW_LNS_set_column of Nat_big_num.num| DW_LNS_negate_stmt| DW_LNS_set_basic_block| DW_LNS_const_add_pc| DW_LNS_fixed_advance_pc of Nat_big_num.num| DW_LNS_set_prologue_end| DW_LNS_set_epilogue_begin| DW_LNS_set_isa of Nat_big_num.num| DW_LNE_end_sequence| DW_LNE_set_address of Nat_big_num.num| DW_LNE_define_file of Byte_sequence.byte_sequence0 * Nat_big_num.num * Nat_big_num.num * Nat_big_num.num| DW_LNE_set_discriminator of Nat_big_num.num| DW_LN_special of Nat_big_num.num
type line_number_file_entry = {lnfe_path : Byte_sequence.byte_sequence0;lnfe_directory_index : Nat_big_num.num;lnfe_last_modification : Nat_big_num.num;lnfe_length : Nat_big_num.num;
}type line_number_header = {lnh_offset : Nat_big_num.num;lnh_dwarf_format : dwarf_format;lnh_unit_length : Nat_big_num.num;lnh_version : Nat_big_num.num;lnh_header_length : Nat_big_num.num;lnh_minimum_instruction_length : Nat_big_num.num;lnh_maximum_operations_per_instruction : Nat_big_num.num;lnh_default_is_stmt : bool;lnh_line_base : Nat_big_num.num;lnh_line_range : Nat_big_num.num;lnh_opcode_base : Nat_big_num.num;lnh_standard_opcode_lengths : Nat_big_num.num list;lnh_include_directories : Byte_sequence.byte_sequence0 list;lnh_file_entries : line_number_file_entry list;lnh_comp_dir : string option;
}type line_number_program = {lnp_header : line_number_header;lnp_operations : line_number_operation list;
}type line_number_registers = {lnr_address : Nat_big_num.num;lnr_op_index : Nat_big_num.num;lnr_file : Nat_big_num.num;lnr_line : Nat_big_num.num;lnr_column : Nat_big_num.num;lnr_is_stmt : bool;lnr_basic_block : bool;lnr_end_sequence : bool;lnr_prologue_end : bool;lnr_epilogue_begin : bool;lnr_isa : Nat_big_num.num;lnr_discriminator : Nat_big_num.num;
}type dwarf = {d_endianness : Endianness.endianness;d_str : Byte_sequence.byte_sequence0;d_compilation_units : compilation_units;d_type_units : type_units;d_loc : location_list_list;d_ranges : range_list_list;d_frame_info : frame_info;d_line_info : line_number_program list;
}type analysed_location_data =
((compilation_unit * die list * die)
* (Nat_big_num.num * Nat_big_num.num * single_location_description) list
option)
listtype analysed_location_data_at_pc =
((compilation_unit * die list * die)
* (Nat_big_num.num
* Nat_big_num.num
* single_location_description
* single_location Error.error))
listtype dwarf_static = {ds_dwarf : dwarf;ds_analysed_location_data : analysed_location_data;ds_evaluated_frame_info : evaluated_frame_info;ds_evaluated_line_info : evaluated_line_info;ds_subprogram_line_extents : (unpacked_file_entry * (string * unpacked_file_entry * Nat_big_num.num) list) list;
}context for parsing and pp functions
type 't c_type_top = | CT_missing of cupdie| CT_base of cupdie * string * Nat_big_num.num * Nat_big_num.num option| CT_pointer of cupdie * 't option| CT_const of cupdie * 't option| CT_volatile of cupdie * 't| CT_restrict of cupdie * 't| CT_typedef of cupdie * string * 't * decl| CT_array of cupdie * 't * 't array_dimension list| CT_struct_union of cupdie * struct_union_type_kind * string option * Nat_big_num.num option * decl * 't struct_union_member list option| CT_enumeration of cupdie * string option * 't option * Nat_big_num.num option * decl * enumeration_member list option| CT_subroutine of cupdie * bool * 't option * 't list * bool
type sdt_variable_or_formal_parameter = {svfp_cupdie : cupdie;svfp_name : string;svfp_kind : variable_or_formal_parameter_kind;svfp_type : c_type option;svfp_abstract_origin : sdt_variable_or_formal_parameter option;svfp_const_value : Nat_big_num.num option;svfp_external : bool;svfp_declaration : bool;svfp_locations : (Nat_big_num.num * Nat_big_num.num * operation list) list option;svfp_decl : unpacked_decl option;
}type sdt_subroutine = {ss_cupdie : cupdie;ss_name : string option;ss_kind : sdt_subroutine_kind;ss_call_site : unpacked_decl option;ss_abstract_origin : sdt_subroutine option;ss_type : c_type option;ss_vars : sdt_variable_or_formal_parameter list;ss_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list option;ss_entry_address : Nat_big_num.num option;ss_unspecified_parameters : sdt_unspecified_parameter list;ss_subroutines : sdt_subroutine list;ss_lexical_blocks : sdt_lexical_block list;ss_decl : unpacked_decl option;ss_noreturn : bool;ss_external : bool;
}and sdt_lexical_block = {slb_cupdie : cupdie;slb_vars : sdt_variable_or_formal_parameter list;slb_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list option;slb_subroutines : sdt_subroutine list;slb_lexical_blocks : sdt_lexical_block list;
}type sdt_compilation_unit = {scu_cupdie : cupdie;scu_name : string;scu_subroutines : sdt_subroutine list;scu_vars : sdt_variable_or_formal_parameter list;scu_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list option;
}type inlined_subroutine_const_param = {iscp_abstract_origin : compilation_unit * die list * die;iscp_value : Nat_big_num.num;
}type inlined_subroutine = {is_inlined_subroutine : compilation_unit * die list * die;is_abstract_origin : compilation_unit * die list * die;is_inlined_subroutine_sdt : sdt_subroutine;is_inlined_subroutine_sdt_parents : sdt_subroutine list;is_name : string;is_call_file : unpacked_file_entry;is_call_line : Nat_big_num.num;is_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list;is_const_params : inlined_subroutine_const_param list;
}type inlined_subroutine_data_by_range_entry =
(Nat_big_num.num * Nat_big_num.num)
* (Nat_big_num.num * Nat_big_num.num)
* inlined_subroutine************************************************************
** missing pervasives ************************************
************************************************************
************************************************************
** endianness ***************************************
************************************************************
************************************************************
** dwarf encodings ***************************************
************************************************************
val operation_encodings :
(string
* Nat_big_num.num
* operation_argument_type list
* operation_semantics)
listval call_frame_instruction_encoding :
(string
* Nat_big_num.num
* Nat_big_num.num
* call_frame_argument_type list
* (call_frame_argument_value list ->
call_frame_instruction option))
listval line_number_standard_encodings :
(string
* Nat_big_num.num
* line_number_argument_type list
* (line_number_argument_value list ->
line_number_operation option))
listval line_number_extended_encodings :
(string
* Nat_big_num.num
* line_number_argument_type list
* (line_number_argument_value list ->
line_number_operation option))
list************************************************************
** more missing pervasives and bits ***********************
************************************************************
val bytes_of_natural :
Endianness.endianness ->
Nat_big_num.num ->
Nat_big_num.num ->
Byte_sequence_wrapper.byte_sequenceval natural_of_bytes_big :
Nat_big_num.num ->
Byte_sequence_wrapper.byte_sequence ->
Nat_big_num.numval natural_of_bytes :
Endianness.endianness ->
Byte_sequence_wrapper.byte_sequence ->
Nat_big_num.numval bigunionListMap :
'b Lem_basic_classes.setType_class ->
('a -> 'b Pset.set) ->
'a list ->
'b Pset.setbasic pretty printing
val ppbytesplain :
p_context ->
Nat_big_num.num ->
Byte_sequence_wrapper.byte_sequence ->
stringlookup of encodings
val lookup_aBc_ac :
'b Lem_basic_classes.eq_class ->
'b ->
('a * 'b * 'c) list ->
('a * 'c) optionval lookup_aBcd_a :
'b Lem_basic_classes.eq_class ->
'b ->
('a * 'b * 'c * 'd) list ->
'a optionval lookup_aBcd_acd :
'b Lem_basic_classes.eq_class ->
'b ->
('a * 'b * 'c * 'd) list ->
('a * 'c * 'd) optionval lookup_abCde_de :
'a Lem_basic_classes.eq_class ->
'a ->
('b * 'c * 'a * 'd * 'e) list ->
('d * 'e) option************************************************************
** parser combinators and primitives *********************
************************************************************
val pr_map2 :
('a -> 'b) ->
(parse_context -> 'a parse_result) ->
parse_context ->
'b parse_resultval pr_post_map :
(parse_context -> 'a parse_result) ->
('a -> 'b) ->
parse_context ->
'b parse_resultval pr_with_pos :
(parse_context -> 'a parse_result) ->
parse_context ->
(Nat_big_num.num * 'a) parse_resultval parse_pair :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
parse_context ->
('a * 'b) parse_resultval parse_triple :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
(parse_context -> 'c parse_result) ->
parse_context ->
('a * ('b * 'c)) parse_resultval parse_quadruple :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
(parse_context -> 'c parse_result) ->
(parse_context -> 'd parse_result) ->
parse_context ->
('a * ('b * ('c * 'd))) parse_resultval parse_pentuple :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
(parse_context -> 'c parse_result) ->
(parse_context -> 'd parse_result) ->
(parse_context -> 'e parse_result) ->
parse_context ->
('a * ('b * ('c * ('d * 'e)))) parse_resultval parse_sextuple :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
(parse_context -> 'c parse_result) ->
(parse_context -> 'd parse_result) ->
(parse_context -> 'e parse_result) ->
(parse_context -> 'f parse_result) ->
parse_context ->
('a * ('b * ('c * ('d * ('e * 'f))))) parse_resultval parse_dependent_pair :
(parse_context -> 'a parse_result) ->
('a -> parse_context -> 'b parse_result) ->
parse_context ->
('a * 'b) parse_resultval parse_dependent :
(parse_context -> 'a parse_result) ->
('a -> parse_context -> 'b parse_result) ->
parse_context ->
'b parse_resultval parse_list' :
(parse_context -> 'a option parse_result) ->
'a list ->
parse_context ->
'a list parse_resultval parse_list :
(parse_context -> 'a option parse_result) ->
parse_context ->
'a list parse_resultval parse_parser_list :
(parse_context -> 'a parse_result) list ->
parse_context ->
'a list parse_resultval parse_maybe :
(parse_context -> 'a parse_result) ->
parse_context ->
'a option parse_resultval parse_demaybe :
string ->
(parse_context -> 'a option parse_result) ->
parse_context ->
'a parse_resultval parse_restrict_length :
Nat_big_num.num ->
(parse_context -> 'a parse_result) ->
parse_context ->
'a parse_resultval integerFromTwosComplementNatural :
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.numval partialTwosComplementNaturalFromInteger :
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num************************************************************
** parsing and pretty printing of .debug_* sections ******
************************************************************
abbreviations table: pp and parsing
val remove_duplicates :
'a Lem_basic_classes.eq_class ->
('a * 'b) list ->
('a * 'b) list ->
('a * 'b) listval parse_abbreviations_table :
'a ->
parse_context ->
abbreviation_declaration list parse_resultdebug_str entry
operations: pp and parsing
val parser_of_operation_argument_type :
p_context ->
compilation_unit_header ->
operation_argument_type ->
parse_context ->
operation_argument_value parse_resultval parse_operation :
p_context ->
compilation_unit_header ->
parse_context ->
operation option parse_resultval parse_operations :
p_context ->
compilation_unit_header ->
parse_context ->
operation list parse_resultval parse_operations_bs :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
operation listval parse_and_pp_operations :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
stringattribute values: pp and parsing
val pp_attribute_value :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
Nat_big_num.num ->
attribute_value ->
stringval pp_attribute_value_like_objdump :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
Nat_big_num.num ->
attribute_value ->
stringval parser_of_attribute_form_non_indirect :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
parse_context ->
attribute_value parse_resultval parser_of_attribute_form :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
parse_context ->
attribute_value parse_result************************************************************
** finding things in the die tree
************************************************************
val find_dies_in_die :
(die -> bool) ->
compilation_unit ->
die list ->
die ->
(compilation_unit * die list * die) listconvert attribute values to usable Lem types
val string_of_string_attribute_value :
Byte_sequence.byte_sequence0 ->
attribute_value ->
stringval maybe_natural_of_constant_attribute_value :
'a ->
p_context ->
attribute_value ->
Nat_big_num.num optionval natural_of_constant_attribute_value :
die ->
p_context ->
attribute_value ->
Nat_big_num.numval reference_of_reference_attribute_value :
'a ->
dwarf ->
compilation_unit ->
'b ->
attribute_value ->
(compilation_unit * die list * die) optionattribute find
val find_string_attribute_value_of_die :
string ->
Byte_sequence.byte_sequence0 ->
die ->
string optionval find_reference_attribute_of_die :
'a ->
dwarf ->
compilation_unit ->
'b ->
string ->
die ->
(compilation_unit * die list * die) optionval find_DW_AT_type_of_die :
'a ->
dwarf ->
compilation_unit ->
'b ->
die ->
(compilation_unit * die list * die) optionval find_attribute_value_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
'b ->
string ->
die ->
(compilation_unit * attribute_value) optionval find_name_of_die_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die ->
string optionval find_name_of_die_using_abstract_origin_and_spec :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die ->
(compilation_unit * 'b * die) option ->
string optionval find_reference_attribute_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
'b ->
string ->
die ->
(compilation_unit * die list * die) optionval find_DW_AT_type_of_die_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
'b ->
die ->
(compilation_unit * die list * die) optioncompilation unit header: pp and parsing
type unit header: pp and parsing
debugging information entries: pp and parsing
debugging information entries: pp and parsing
val pp_die_attribute :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
bool ->
Nat_big_num.num ->
((Nat_big_num.num * Nat_big_num.num) * (Nat_big_num.num * attribute_value)) ->
stringval pp_die :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
bool ->
Nat_big_num.num ->
bool ->
die ->
stringval pp_die_abbrev :
'a ->
'b ->
Byte_sequence.byte_sequence0 ->
Nat_big_num.num ->
bool ->
die list ->
die ->
stringval pp_die_abbrev_var :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
bool ->
'b ->
die ->
string * string * stringval pp_die_abbrev_var_parent :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die ->
stringval pp_die_abbrev_var_parents :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die list ->
stringval parse_die :
p_context ->
Byte_sequence.byte_sequence0 ->
compilation_unit_header ->
(Nat_big_num.num -> abbreviation_declaration) ->
parse_context ->
die option parse_resultcompilation units: pp and parsing
val pp_compilation_unit :
p_context ->
bool ->
Byte_sequence.byte_sequence0 ->
compilation_unit ->
stringval pp_compilation_units :
p_context ->
bool ->
Byte_sequence.byte_sequence0 ->
compilation_unit list ->
stringval pp_compilation_unit_abbrev :
'a ->
Byte_sequence.byte_sequence0 ->
compilation_unit ->
stringval pp_compilation_units_abbrev :
'a ->
Byte_sequence.byte_sequence0 ->
compilation_unit list ->
stringval parse_compilation_unit :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit option parserval parse_compilation_units :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit list parsertype units: pp and parsing
val parse_type_unit :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
type_unit option parserval parse_type_units :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
type_unit list parserlocation lists, pp and parsing
val pp_location_list_entry :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
location_list_entry ->
stringval pp_base_address_selection_entry :
'a ->
compilation_unit_header ->
Nat_big_num.num ->
base_address_selection_entry ->
stringval pp_location_list_item :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
location_list_item ->
stringval pp_location_list :
p_context ->
compilation_unit_header ->
(Nat_big_num.num * location_list_item list) ->
stringval parse_location_list_item :
p_context ->
compilation_unit_header ->
location_list_item option parserval parse_location_list_list :
p_context ->
compilation_unit_header ->
location_list_list parserval interpret_location_list :
Nat_big_num.num ->
location_list_item list ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) listrange lists, pp and parsing
val pp_range_list_entry :
'a ->
compilation_unit_header ->
Nat_big_num.num ->
range_list_entry ->
stringval pp_range_list_item :
'a ->
compilation_unit_header ->
Nat_big_num.num ->
range_list_item ->
stringval pp_range_list :
'a ->
compilation_unit_header ->
(Nat_big_num.num * range_list_item list) ->
stringval parse_range_list_item :
p_context ->
compilation_unit_header ->
range_list_item option parserval expand_range_list_suffixes :
compilation_unit_header ->
(Nat_big_num.num * range_list_item list) ->
range_list listval interpret_range_list :
Nat_big_num.num ->
range_list_item list ->
(Nat_big_num.num * Nat_big_num.num) listframe information, pp and parsing
val parser_of_call_frame_argument_type :
p_context ->
compilation_unit_header ->
call_frame_argument_type ->
call_frame_argument_value parserval parse_call_frame_instruction :
p_context ->
compilation_unit_header ->
call_frame_instruction option parserval parse_call_frame_instructions :
p_context ->
compilation_unit_header ->
call_frame_instruction list parserval parse_and_pp_call_frame_instructions :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
stringval pp_call_frame_instructions' :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
stringval parse_initial_location :
p_context ->
compilation_unit_header ->
Nat_big_num.num option ->
Nat_big_num.num option ->
(Nat_big_num.num option * Nat_big_num.num) parserval parse_call_frame_instruction_bytes :
Nat_big_num.num ->
Nat_big_num.num ->
parse_context ->
Byte_sequence_wrapper.byte_sequence parse_resultval parse_frame_info_element :
p_context ->
compilation_unit_header ->
frame_info_element list ->
frame_info_element parserval parse_dependent_list' :
('a list -> parse_context -> 'a parse_result) ->
'a list ->
parse_context ->
'a list parse_resultval parse_dependent_list :
('a list -> parse_context -> 'a parse_result) ->
parse_context ->
'a list parse_resultline numbers .debug_line, pp and parsing
val parser_of_line_number_argument_type :
p_context ->
compilation_unit_header ->
line_number_argument_type ->
line_number_argument_value parserval parse_line_number_operation :
p_context ->
compilation_unit_header ->
line_number_header ->
line_number_operation parserval parse_line_number_operations :
p_context ->
compilation_unit_header ->
line_number_header ->
line_number_operation list parserval parse_line_number_program :
p_context ->
compilation_unit_header ->
string option ->
line_number_program parserval line_number_program_of_compilation_unit :
dwarf ->
compilation_unit ->
line_number_programval parse_line_number_info :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit ->
line_number_programval parse_line_number_infos :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit list ->
line_number_program listall dwarf info: pp and parsing
val extract_section_body :
Elf_file.elf_file ->
string ->
bool ->
p_context * Nat_big_num.num * Byte_sequence_wrapper.byte_sequenceval extract_text :
Elf_file.elf_file ->
p_context * Nat_big_num.num * Byte_sequence.byte_sequence0************************************************************
****** location evaluation ********************************
************************************************************
pp of locations
evaluation of location expressions
val evaluate_operation_list :
p_context ->
location_list_list ->
evaluated_frame_info ->
compilation_unit_header ->
arithmetic_context ->
evaluation_context ->
attribute_value option ->
Nat_big_num.num ->
state ->
operation list ->
single_location Error.errorval evaluate_location_description_bytes :
p_context ->
location_list_list ->
evaluated_frame_info ->
compilation_unit_header ->
arithmetic_context ->
evaluation_context ->
attribute_value option ->
Nat_big_num.num ->
Byte_sequence.byte_sequence0 ->
single_location Error.errorval evaluate_location_description :
p_context ->
location_list_list ->
evaluated_frame_info ->
compilation_unit_header ->
arithmetic_context ->
evaluation_context ->
attribute_value option ->
Nat_big_num.num ->
attribute_value ->
single_location Error.error************************************************************
**** evaluation of frame information **********************
************************************************************
register maps
val rrp_update :
(Nat_big_num.num * register_rule) list ->
Nat_big_num.num ->
register_rule ->
(Nat_big_num.num * register_rule) listpp of evaluated cfa information from .debug_frame
val semi_pp_evaluated_fde :
('a * cfa_table_row list) ->
(Nat_big_num.num * string * (string * string) list) listval semi_pp_evaluated_frame_info :
('a * cfa_table_row list) list ->
(Nat_big_num.num * string * (string * string) list) listevaluation of cfa information from .debug_frame
val evaluate_call_frame_instruction :
frame_info ->
cie ->
cfa_state ->
call_frame_instruction ->
cfa_stateval evaluate_call_frame_instructions :
frame_info ->
cie ->
cfa_state ->
call_frame_instruction list ->
cfa_state************************************************************
** pp of type info
************************************************************
val find_DW_AT_type_of_die_deep_using_abstract_origin :
dwarf ->
(compilation_unit * 'a * die) ->
c_type optionval pp_struct_union_type_member :
p_context ->
dwarf ->
cupdie struct_union_member ->
string listval pp_type_info_die_DW_AT_type :
p_context ->
dwarf ->
compilation_unit ->
'a ->
die ->
string************************************************************
** analysis of location and frame data for reverse mapping
************************************************************
analysis
simple-minded analysis of location
more proper analysis of locations
val range_of_die :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
range_list_list ->
Nat_big_num.num ->
die ->
(Nat_big_num.num * Nat_big_num.num) list optionval range_of_die_d :
dwarf ->
compilation_unit ->
die ->
(Nat_big_num.num * Nat_big_num.num) list optionval closest_enclosing_range :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
range_list_list ->
Nat_big_num.num ->
die list ->
(Nat_big_num.num * Nat_big_num.num) list optionval closest_enclosing_frame_base :
'a ->
Nat_big_num.num ->
die list ->
attribute_value optionval interpreted_location_of_die :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
location_list_list ->
range_list_list ->
Nat_big_num.num ->
die list ->
die ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) list optionval pp_analysed_locations1 :
p_context ->
compilation_unit_header ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) list ->
stringval pp_analysed_locations2 :
p_context ->
compilation_unit_header ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) list option ->
stringval pp_analysed_locations3 :
p_context ->
dwarf ->
Byte_sequence.byte_sequence0 ->
bool ->
analysed_location_data ->
(bool
* (string * string * string)
* (unit ->
string)
* string
* (unit ->
string))
listval pp_analysed_locations3_diff :
p_context ->
dwarf ->
Byte_sequence.byte_sequence0 ->
analysed_location_data ->
analysed_location_data ->
(bool
* (string * string * string)
* (unit ->
string)
* string
* (unit ->
string))
listval pp_analysed_location_format :
(bool
* (string * string * string)
* (unit ->
string)
* string
* (unit ->
string))
list ->
stringval pp_analysed_location_data_diff :
dwarf ->
analysed_location_data ->
analysed_location_data ->
stringval analysed_locations_at_pc :
evaluation_context ->
dwarf_static ->
Nat_big_num.num ->
analysed_location_data_at_pcval names_of_address :
dwarf ->
analysed_location_data_at_pc ->
Nat_big_num.num ->
string listval filtered_analysed_location_data :
dwarf_static ->
Nat_big_num.num ->
((compilation_unit * die list * die)
* (Nat_big_num.num * Nat_big_num.num * Byte_sequence_wrapper.byte_sequence)
list
option)
list**********************************************************************
** estimate source-file line extents of each (non-inlined) subprogram
**********************************************************************
val subprogram_line_extents_compilation_unit :
dwarf ->
compilation_unit ->
(string * unpacked_file_entry * Nat_big_num.num) listval extract :
'b Lem_basic_classes.eq_class ->
'b ->
('b * 'c) list ->
'c option * ('b * 'c) listval partitionby :
'a Lem_basic_classes.eq_class ->
'b Lem_basic_classes.eq_class ->
('a -> 'b) ->
('a -> 'a -> bool) ->
'a list ->
('b * 'a list) list ->
('b * 'a list) listval subprogram_line_extents :
dwarf ->
(unpacked_file_entry * (string * unpacked_file_entry * Nat_big_num.num) list)
listval pp_subprograms :
'a Show.show_class ->
(unpacked_file_entry * (string * 'b * 'a) list) list ->
stringval find_by_line :
'b Lem_basic_classes.ord_class ->
'b ->
('a * 'c * 'b) list ->
'b ->
'a ->
'aval subprogram_at_line :
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
unpacked_file_entry ->
Nat_big_num.num ->
string************************************************************
** pull out subprograms
************************************************************
************************************************************
** evaluation of line-number info
************************************************************
val evaluate_line_number_operation :
line_number_header ->
(line_number_registers * line_number_registers list) ->
line_number_operation ->
line_number_registers * line_number_registers listval evaluate_line_number_operations :
line_number_header ->
(line_number_registers * line_number_registers list) ->
line_number_operation list ->
line_number_registers * line_number_registers listval evaluated_line_info_of_compilation_unit :
dwarf ->
compilation_unit ->
(line_number_header * 'a) list ->
'aval source_lines_of_address :
dwarf_static ->
Nat_big_num.num ->
(unpacked_file_entry * Nat_big_num.num * line_number_registers * string) list************************************************************
** collecting all the statically calculated analysis info
************************************************************
************************************************************
** collect simple die tree view
************************************************************
val decl_of_die :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
die ->
(unpacked_file_entry * int * string) optionval call_site_of_die :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
die ->
(unpacked_file_entry * int * string) optionval mk_sdt_unspecified_parameter :
dwarf ->
'a ->
'b ->
'c ->
die ->
sdt_unspecified_parameter optionval mk_sdt_variable_or_formal_parameter :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
die list ->
die ->
sdt_variable_or_formal_parameter optionval mk_sdt_subroutine :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
die list ->
die ->
sdt_subroutine optionval mk_sdt_lexical_block :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
die list ->
die ->
sdt_lexical_block optionval mk_sdt_compilation_unit :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
sdt_compilation_unitval pp_pc_ranges :
Nat_big_num.num ->
(Nat_big_num.num * Nat_big_num.num) list option ->
stringval pp_sdt_variable_or_formal_parameter :
Nat_big_num.num ->
sdt_variable_or_formal_parameter ->
stringval pp_sdt_concise_variable_or_formal_parameter :
Nat_big_num.num ->
sdt_variable_or_formal_parameter ->
string************************************************************
** analysis of inlined_subroutine data
************************************************************
val analyse_inlined_subroutines_sdt_const_param :
sdt_variable_or_formal_parameter ->
inlined_subroutine_const_param optionval analyse_inlined_subroutines_sdt_subroutine :
sdt_subroutine list ->
sdt_subroutine ->
inlined_subroutine listval analyse_inlined_subroutines_sdt_lexical_block :
sdt_subroutine list ->
sdt_lexical_block ->
inlined_subroutine listval analyse_inlined_subroutines_sdt_compilation_unit :
sdt_compilation_unit ->
inlined_subroutine listval analyse_inlined_subroutine_by_range :
inlined_subroutine ->
inlined_subroutine_data_by_rangeval is_lt :
'a Lem_basic_classes.eq_class ->
'b Lem_basic_classes.ord_class ->
'a Lem_basic_classes.ord_class ->
(('a * 'b) * ('c * 'd) * 'e) ->
(('a * 'b) * ('f * 'g) * 'h) ->
boolval analyse_inlined_subroutines_by_range :
inlined_subroutine_data ->
inlined_subroutine_data_by_rangeval pp_inlined_subroutine_by_range :
dwarf_static ->
((Nat_big_num.num * Nat_big_num.num)
* (Nat_big_num.num * Nat_big_num.num)
* inlined_subroutine) ->
stringval pp_inlined_subroutines_by_range :
dwarf_static ->
((Nat_big_num.num * Nat_big_num.num)
* (Nat_big_num.num * Nat_big_num.num)
* inlined_subroutine)
list ->
string************************************************************
** pp of text section
************************************************************
val words_of_byte_sequence :
Nat_big_num.num ->
Byte_sequence.byte_sequence0 ->
(Nat_big_num.num * Nat_big_num.num) list ->
(Nat_big_num.num * Nat_big_num.num) list************************************************************
** top level for main_elf ********************************
************************************************************