package linksem
Install
Dune Dependency
Authors
Maintainers
Sources
md5=2075c56715539b3b8f54ae65cc808b8c
sha512=f7c16e4036a1440a6a8d13707a43f0f9f9db0c68489215f948cc300b6a164dba5bf852e58f89503e9d9f38180ee658d9478156ca1a1ef64d6861eec5f9cf43d2
doc/linksem_zarith/Dwarf/index.html
Module Dwarf
Source
***************** 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)
list
type 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))
list
type 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)
list
val 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))
list
val line_number_standard_encodings :
(string
* Nat_big_num.num
* line_number_argument_type list
* (line_number_argument_value list ->
line_number_operation option))
list
val 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_sequence
val natural_of_bytes_big :
Nat_big_num.num ->
Byte_sequence_wrapper.byte_sequence ->
Nat_big_num.num
val natural_of_bytes :
Endianness.endianness ->
Byte_sequence_wrapper.byte_sequence ->
Nat_big_num.num
val bigunionListMap :
'b Lem_basic_classes.setType_class ->
('a -> 'b Pset.set) ->
'a list ->
'b Pset.set
basic pretty printing
val ppbytesplain :
p_context ->
Nat_big_num.num ->
Byte_sequence_wrapper.byte_sequence ->
string
lookup of encodings
val lookup_aBc_ac :
'b Lem_basic_classes.eq_class ->
'b ->
('a * 'b * 'c) list ->
('a * 'c) option
val lookup_aBcd_a :
'b Lem_basic_classes.eq_class ->
'b ->
('a * 'b * 'c * 'd) list ->
'a option
val lookup_aBcd_acd :
'b Lem_basic_classes.eq_class ->
'b ->
('a * 'b * 'c * 'd) list ->
('a * 'c * 'd) option
val 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_result
val pr_post_map :
(parse_context -> 'a parse_result) ->
('a -> 'b) ->
parse_context ->
'b parse_result
val pr_with_pos :
(parse_context -> 'a parse_result) ->
parse_context ->
(Nat_big_num.num * 'a) parse_result
val parse_pair :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
parse_context ->
('a * 'b) parse_result
val parse_triple :
(parse_context -> 'a parse_result) ->
(parse_context -> 'b parse_result) ->
(parse_context -> 'c parse_result) ->
parse_context ->
('a * ('b * 'c)) parse_result
val 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_result
val 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_result
val 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_result
val parse_dependent_pair :
(parse_context -> 'a parse_result) ->
('a -> parse_context -> 'b parse_result) ->
parse_context ->
('a * 'b) parse_result
val parse_dependent :
(parse_context -> 'a parse_result) ->
('a -> parse_context -> 'b parse_result) ->
parse_context ->
'b parse_result
val parse_list' :
(parse_context -> 'a option parse_result) ->
'a list ->
parse_context ->
'a list parse_result
val parse_list :
(parse_context -> 'a option parse_result) ->
parse_context ->
'a list parse_result
val parse_parser_list :
(parse_context -> 'a parse_result) list ->
parse_context ->
'a list parse_result
val parse_maybe :
(parse_context -> 'a parse_result) ->
parse_context ->
'a option parse_result
val parse_demaybe :
string ->
(parse_context -> 'a option parse_result) ->
parse_context ->
'a parse_result
val parse_restrict_length :
Nat_big_num.num ->
(parse_context -> 'a parse_result) ->
parse_context ->
'a parse_result
val integerFromTwosComplementNatural :
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num ->
Nat_big_num.num
val 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) list
val parse_abbreviations_table :
'a ->
parse_context ->
abbreviation_declaration list parse_result
debug_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_result
val parse_operation :
p_context ->
compilation_unit_header ->
parse_context ->
operation option parse_result
val parse_operations :
p_context ->
compilation_unit_header ->
parse_context ->
operation list parse_result
val parse_operations_bs :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
operation list
val parse_and_pp_operations :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
string
attribute values: pp and parsing
val pp_attribute_value :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
Nat_big_num.num ->
attribute_value ->
string
val pp_attribute_value_like_objdump :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
Nat_big_num.num ->
attribute_value ->
string
val parser_of_attribute_form_non_indirect :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
parse_context ->
attribute_value parse_result
val 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) list
convert attribute values to usable Lem types
val string_of_string_attribute_value :
Byte_sequence.byte_sequence0 ->
attribute_value ->
string
val maybe_natural_of_constant_attribute_value :
'a ->
p_context ->
attribute_value ->
Nat_big_num.num option
val natural_of_constant_attribute_value :
die ->
p_context ->
attribute_value ->
Nat_big_num.num
val reference_of_reference_attribute_value :
'a ->
dwarf ->
compilation_unit ->
'b ->
attribute_value ->
(compilation_unit * die list * die) option
attribute find
val find_string_attribute_value_of_die :
string ->
Byte_sequence.byte_sequence0 ->
die ->
string option
val find_reference_attribute_of_die :
'a ->
dwarf ->
compilation_unit ->
'b ->
string ->
die ->
(compilation_unit * die list * die) option
val find_DW_AT_type_of_die :
'a ->
dwarf ->
compilation_unit ->
'b ->
die ->
(compilation_unit * die list * die) option
val find_attribute_value_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
'b ->
string ->
die ->
(compilation_unit * attribute_value) option
val find_name_of_die_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die ->
string option
val find_name_of_die_using_abstract_origin_and_spec :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die ->
(compilation_unit * 'b * die) option ->
string option
val find_reference_attribute_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
'b ->
string ->
die ->
(compilation_unit * die list * die) option
val find_DW_AT_type_of_die_using_abstract_origin :
'a ->
dwarf ->
compilation_unit ->
'b ->
die ->
(compilation_unit * die list * die) option
compilation 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)) ->
string
val pp_die :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
bool ->
Nat_big_num.num ->
bool ->
die ->
string
val pp_die_abbrev :
'a ->
'b ->
Byte_sequence.byte_sequence0 ->
Nat_big_num.num ->
bool ->
die list ->
die ->
string
val pp_die_abbrev_var :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
bool ->
'b ->
die ->
string * string * string
val pp_die_abbrev_var_parent :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die ->
string
val pp_die_abbrev_var_parents :
'a ->
dwarf ->
compilation_unit ->
Byte_sequence.byte_sequence0 ->
die list ->
string
val parse_die :
p_context ->
Byte_sequence.byte_sequence0 ->
compilation_unit_header ->
(Nat_big_num.num -> abbreviation_declaration) ->
parse_context ->
die option parse_result
compilation units: pp and parsing
val pp_compilation_unit :
p_context ->
bool ->
Byte_sequence.byte_sequence0 ->
compilation_unit ->
string
val pp_compilation_units :
p_context ->
bool ->
Byte_sequence.byte_sequence0 ->
compilation_unit list ->
string
val pp_compilation_unit_abbrev :
'a ->
Byte_sequence.byte_sequence0 ->
compilation_unit ->
string
val pp_compilation_units_abbrev :
'a ->
Byte_sequence.byte_sequence0 ->
compilation_unit list ->
string
val parse_compilation_unit :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit option parser
val parse_compilation_units :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit list parser
type units: pp and parsing
val parse_type_unit :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
type_unit option parser
val parse_type_units :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
type_unit list parser
location lists, pp and parsing
val pp_location_list_entry :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
location_list_entry ->
string
val pp_base_address_selection_entry :
'a ->
compilation_unit_header ->
Nat_big_num.num ->
base_address_selection_entry ->
string
val pp_location_list_item :
p_context ->
compilation_unit_header ->
Nat_big_num.num ->
location_list_item ->
string
val pp_location_list :
p_context ->
compilation_unit_header ->
(Nat_big_num.num * location_list_item list) ->
string
val parse_location_list_item :
p_context ->
compilation_unit_header ->
location_list_item option parser
val parse_location_list_list :
p_context ->
compilation_unit_header ->
location_list_list parser
val interpret_location_list :
Nat_big_num.num ->
location_list_item list ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) list
range lists, pp and parsing
val pp_range_list_entry :
'a ->
compilation_unit_header ->
Nat_big_num.num ->
range_list_entry ->
string
val pp_range_list_item :
'a ->
compilation_unit_header ->
Nat_big_num.num ->
range_list_item ->
string
val pp_range_list :
'a ->
compilation_unit_header ->
(Nat_big_num.num * range_list_item list) ->
string
val parse_range_list_item :
p_context ->
compilation_unit_header ->
range_list_item option parser
val expand_range_list_suffixes :
compilation_unit_header ->
(Nat_big_num.num * range_list_item list) ->
range_list list
val interpret_range_list :
Nat_big_num.num ->
range_list_item list ->
(Nat_big_num.num * Nat_big_num.num) list
frame information, pp and parsing
val parser_of_call_frame_argument_type :
p_context ->
compilation_unit_header ->
call_frame_argument_type ->
call_frame_argument_value parser
val parse_call_frame_instruction :
p_context ->
compilation_unit_header ->
call_frame_instruction option parser
val parse_call_frame_instructions :
p_context ->
compilation_unit_header ->
call_frame_instruction list parser
val parse_and_pp_call_frame_instructions :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
string
val pp_call_frame_instructions' :
p_context ->
compilation_unit_header ->
Byte_sequence.byte_sequence0 ->
string
val 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) parser
val parse_call_frame_instruction_bytes :
Nat_big_num.num ->
Nat_big_num.num ->
parse_context ->
Byte_sequence_wrapper.byte_sequence parse_result
val parse_frame_info_element :
p_context ->
compilation_unit_header ->
frame_info_element list ->
frame_info_element parser
val parse_dependent_list' :
('a list -> parse_context -> 'a parse_result) ->
'a list ->
parse_context ->
'a list parse_result
val parse_dependent_list :
('a list -> parse_context -> 'a parse_result) ->
parse_context ->
'a list parse_result
line 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 parser
val parse_line_number_operation :
p_context ->
compilation_unit_header ->
line_number_header ->
line_number_operation parser
val parse_line_number_operations :
p_context ->
compilation_unit_header ->
line_number_header ->
line_number_operation list parser
val parse_line_number_program :
p_context ->
compilation_unit_header ->
string option ->
line_number_program parser
val line_number_program_of_compilation_unit :
dwarf ->
compilation_unit ->
line_number_program
val parse_line_number_info :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit ->
line_number_program
val parse_line_number_infos :
p_context ->
Byte_sequence.byte_sequence0 ->
Byte_sequence.byte_sequence0 ->
compilation_unit list ->
line_number_program list
all 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_sequence
val 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.error
val 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.error
val 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) list
pp 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) list
val semi_pp_evaluated_frame_info :
('a * cfa_table_row list) list ->
(Nat_big_num.num * string * (string * string) list) list
evaluation of cfa information from .debug_frame
val evaluate_call_frame_instruction :
frame_info ->
cie ->
cfa_state ->
call_frame_instruction ->
cfa_state
val 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 option
val pp_struct_union_type_member :
p_context ->
dwarf ->
cupdie struct_union_member ->
string list
val 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 option
val range_of_die_d :
dwarf ->
compilation_unit ->
die ->
(Nat_big_num.num * Nat_big_num.num) list option
val 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 option
val closest_enclosing_frame_base :
'a ->
Nat_big_num.num ->
die list ->
attribute_value option
val 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 option
val pp_analysed_locations1 :
p_context ->
compilation_unit_header ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) list ->
string
val pp_analysed_locations2 :
p_context ->
compilation_unit_header ->
(Nat_big_num.num * Nat_big_num.num * single_location_description) list option ->
string
val pp_analysed_locations3 :
p_context ->
dwarf ->
Byte_sequence.byte_sequence0 ->
bool ->
analysed_location_data ->
(bool
* (string * string * string)
* (unit ->
string)
* string
* (unit ->
string))
list
val 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))
list
val pp_analysed_location_format :
(bool
* (string * string * string)
* (unit ->
string)
* string
* (unit ->
string))
list ->
string
val pp_analysed_location_data_diff :
dwarf ->
analysed_location_data ->
analysed_location_data ->
string
val analysed_locations_at_pc :
evaluation_context ->
dwarf_static ->
Nat_big_num.num ->
analysed_location_data_at_pc
val names_of_address :
dwarf ->
analysed_location_data_at_pc ->
Nat_big_num.num ->
string list
val 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) list
val extract :
'b Lem_basic_classes.eq_class ->
'b ->
('b * 'c) list ->
'c option * ('b * 'c) list
val 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) list
val subprogram_line_extents :
dwarf ->
(unpacked_file_entry * (string * unpacked_file_entry * Nat_big_num.num) list)
list
val pp_subprograms :
'a Show.show_class ->
(unpacked_file_entry * (string * 'b * 'a) list) list ->
string
val find_by_line :
'b Lem_basic_classes.ord_class ->
'b ->
('a * 'c * 'b) list ->
'b ->
'a ->
'a
val 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 list
val evaluate_line_number_operations :
line_number_header ->
(line_number_registers * line_number_registers list) ->
line_number_operation list ->
line_number_registers * line_number_registers list
val evaluated_line_info_of_compilation_unit :
dwarf ->
compilation_unit ->
(line_number_header * 'a) list ->
'a
val 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) option
val 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) option
val mk_sdt_unspecified_parameter :
dwarf ->
'a ->
'b ->
'c ->
die ->
sdt_unspecified_parameter option
val 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 option
val mk_sdt_subroutine :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
die list ->
die ->
sdt_subroutine option
val 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 option
val mk_sdt_compilation_unit :
dwarf ->
((string option * string option * string)
* (string * 'a * Nat_big_num.num) list)
list ->
compilation_unit ->
sdt_compilation_unit
val pp_pc_ranges :
Nat_big_num.num ->
(Nat_big_num.num * Nat_big_num.num) list option ->
string
val pp_sdt_variable_or_formal_parameter :
Nat_big_num.num ->
sdt_variable_or_formal_parameter ->
string
val 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 option
val analyse_inlined_subroutines_sdt_subroutine :
sdt_subroutine list ->
sdt_subroutine ->
inlined_subroutine list
val analyse_inlined_subroutines_sdt_lexical_block :
sdt_subroutine list ->
sdt_lexical_block ->
inlined_subroutine list
val analyse_inlined_subroutines_sdt_compilation_unit :
sdt_compilation_unit ->
inlined_subroutine list
val analyse_inlined_subroutine_by_range :
inlined_subroutine ->
inlined_subroutine_data_by_range
val 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) ->
bool
val analyse_inlined_subroutines_by_range :
inlined_subroutine_data ->
inlined_subroutine_data_by_range
val 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) ->
string
val 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 ********************************
************************************************************