package linksem

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

***************** experimental DWARF reading ***********

debug

val my_debug : 'a -> unit
val my_debug2 : 'a -> unit
val my_debug3 : 'a -> unit
val my_debug4 : string -> unit
val my_debug5 : string -> unit

************************************************************

** dwarf representation types ****************************

************************************************************

type dwarf_attribute_classes =
  1. | DWA_7_5_3
  2. | DWA_address
  3. | DWA_block
  4. | DWA_constant
  5. | DWA_dash
  6. | DWA_exprloc
  7. | DWA_flag
  8. | DWA_lineptr
  9. | DWA_loclistptr
  10. | DWA_macptr
  11. | DWA_rangelistptr
  12. | DWA_reference
  13. | DWA_string
type operation_argument_type =
  1. | OAT_addr
  2. | OAT_dwarf_format_t
  3. | OAT_uint8
  4. | OAT_uint16
  5. | OAT_uint32
  6. | OAT_uint64
  7. | OAT_sint8
  8. | OAT_sint16
  9. | OAT_sint32
  10. | OAT_sint64
  11. | OAT_ULEB128
  12. | OAT_SLEB128
  13. | OAT_block
type operation_argument_value =
  1. | OAV_natural of Nat_big_num.num
  2. | OAV_integer of Nat_big_num.num
  3. | OAV_block of Nat_big_num.num * Byte_sequence.byte_sequence0
type operation_stack = Nat_big_num.num list
type arithmetic_context = {
  1. ac_bitwidth : Nat_big_num.num;
  2. ac_half : Nat_big_num.num;
  3. ac_all : Nat_big_num.num;
  4. ac_max : Nat_big_num.num;
}
type operation_semantics =
  1. | OpSem_lit
  2. | OpSem_deref
  3. | OpSem_stack of arithmetic_context -> operation_stack -> operation_argument_value list -> operation_stack option
  4. | OpSem_not_supported
  5. | OpSem_binary of arithmetic_context -> Nat_big_num.num -> Nat_big_num.num -> Nat_big_num.num option
  6. | OpSem_unary of arithmetic_context -> Nat_big_num.num -> Nat_big_num.num option
  7. | OpSem_opcode_lit of Nat_big_num.num
  8. | OpSem_reg
  9. | OpSem_breg
  10. | OpSem_bregx
  11. | OpSem_fbreg
  12. | OpSem_deref_size
  13. | OpSem_nop
  14. | OpSem_piece
  15. | OpSem_bit_piece
  16. | OpSem_implicit_value
  17. | OpSem_stack_value
  18. | OpSem_call_frame_cfa
type operation = {
  1. op_code : Nat_big_num.num;
  2. op_string : string;
  3. op_argument_values : operation_argument_value list;
  4. op_semantics : operation_semantics;
}
type simple_location =
  1. | SL_memory_address of Nat_big_num.num
  2. | SL_register of Nat_big_num.num
  3. | SL_implicit of Byte_sequence.byte_sequence0
  4. | SL_empty
type composite_location_piece =
  1. | CLP_piece of Nat_big_num.num * simple_location
  2. | CLP_bit_piece of Nat_big_num.num * Nat_big_num.num * simple_location
type single_location =
  1. | SL_simple of simple_location
  2. | SL_composite of composite_location_piece list
type state = {
  1. s_stack : operation_stack;
  2. s_value : simple_location;
  3. s_location_pieces : composite_location_piece list;
}
type 'a register_read_result =
  1. | RRR_result of Nat_big_num.num
  2. | RRR_not_currently_available
  3. | RRR_bad_register_number
type 'a memory_read_result =
  1. | MRR_result of Nat_big_num.num
  2. | MRR_not_currently_available
  3. | MRR_bad_address
type dwarf_format =
  1. | Dwarf32
  2. | Dwarf64
type abbreviation_declaration = {
  1. ad_abbreviation_code : Nat_big_num.num;
  2. ad_tag : Nat_big_num.num;
  3. ad_has_children : bool;
  4. ad_attribute_specifications : (Nat_big_num.num * Nat_big_num.num) list;
}
type abbreviations_table = {
  1. at_offset : Nat_big_num.num;
  2. at_table : abbreviation_declaration list;
}
type attribute_value =
  1. | AV_addr of Nat_big_num.num
  2. | AV_block of Nat_big_num.num * Byte_sequence.byte_sequence0
  3. | AV_constantN of Nat_big_num.num * Byte_sequence.byte_sequence0
  4. | AV_constant_SLEB128 of Nat_big_num.num
  5. | AV_constant_ULEB128 of Nat_big_num.num
  6. | AV_exprloc of Nat_big_num.num * Byte_sequence.byte_sequence0
  7. | AV_flag of bool
  8. | AV_ref of Nat_big_num.num
  9. | AV_ref_addr of Nat_big_num.num
  10. | AV_ref_sig8 of Nat_big_num.num
  11. | AV_sec_offset of Nat_big_num.num
  12. | AV_string of Byte_sequence.byte_sequence0
  13. | AV_strp of Nat_big_num.num
type die = {
  1. die_offset : Nat_big_num.num;
  2. die_abbreviation_code : Nat_big_num.num;
  3. die_abbreviation_declaration : abbreviation_declaration;
  4. die_attribute_values : (Nat_big_num.num * attribute_value) list;
  5. die_children : die list;
}
type die_index = (Nat_big_num.num, die list * die) Pmap.map
type compilation_unit_header = {
  1. cuh_offset : Nat_big_num.num;
  2. cuh_dwarf_format : dwarf_format;
  3. cuh_unit_length : Nat_big_num.num;
  4. cuh_version : Nat_big_num.num;
  5. cuh_debug_abbrev_offset : Nat_big_num.num;
  6. cuh_address_size : Nat_big_num.num;
}
type compilation_unit = {
  1. cu_header : compilation_unit_header;
  2. cu_abbreviations_table : abbreviations_table;
  3. cu_die : die;
  4. cu_index : die_index;
}
type compilation_units = compilation_unit list
type type_unit_header = {
  1. tuh_cuh : compilation_unit_header;
  2. tuh_type_signature : Nat_big_num.num;
  3. tuh_type_offset : Nat_big_num.num;
}
type type_unit = {
  1. tu_header : type_unit_header;
  2. tu_abbreviations_table : abbreviations_table;
  3. tu_die : die;
}
type type_units = type_unit list
type single_location_description = Byte_sequence.byte_sequence0
type location_list_entry = {
  1. lle_beginning_address_offset : Nat_big_num.num;
  2. lle_ending_address_offset : Nat_big_num.num;
  3. lle_single_location_description : single_location_description;
}
type base_address_selection_entry = {
  1. base_address : Nat_big_num.num;
}
type location_list_item =
  1. | LLI_lle of location_list_entry
  2. | LLI_base of base_address_selection_entry
type location_list = Nat_big_num.num * location_list_item list
type location_list_list = location_list list
type range_list_entry = {
  1. rle_beginning_address_offset : Nat_big_num.num;
  2. rle_ending_address_offset : Nat_big_num.num;
}
type range_list_item =
  1. | RLI_rle of range_list_entry
  2. | RLI_base of base_address_selection_entry
type range_list = Nat_big_num.num * range_list_item list
type range_list_list = range_list list
type cfa_address = Nat_big_num.num
type cfa_delta = Nat_big_num.num
type cfa_offset = Nat_big_num.num
type cfa_register = Nat_big_num.num
type cfa_sfoffset = Nat_big_num.num
type call_frame_argument_type =
  1. | CFAT_address
  2. | CFAT_delta1
  3. | CFAT_delta2
  4. | CFAT_delta4
  5. | CFAT_delta_ULEB128
  6. | CFAT_offset
  7. | CFAT_sfoffset
  8. | CFAT_register
  9. | CFAT_block
type call_frame_argument_value =
  1. | CFAV_address of cfa_address
  2. | CFAV_block of cfa_block
  3. | CFAV_delta of cfa_delta
  4. | CFAV_offset of cfa_offset
  5. | CFAV_register of cfa_register
  6. | CFAV_sfoffset of cfa_sfoffset
type call_frame_instruction =
  1. | DW_CFA_advance_loc of cfa_delta
  2. | DW_CFA_offset of cfa_register * cfa_offset
  3. | DW_CFA_restore of cfa_register
  4. | DW_CFA_nop
  5. | DW_CFA_set_loc of cfa_address
  6. | DW_CFA_advance_loc1 of cfa_delta
  7. | DW_CFA_advance_loc2 of cfa_delta
  8. | DW_CFA_advance_loc4 of cfa_delta
  9. | DW_CFA_offset_extended of cfa_register * cfa_offset
  10. | DW_CFA_restore_extended of cfa_register
  11. | DW_CFA_undefined of cfa_register
  12. | DW_CFA_same_value of cfa_register
  13. | DW_CFA_register of cfa_register * cfa_register
  14. | DW_CFA_remember_state
  15. | DW_CFA_restore_state
  16. | DW_CFA_def_cfa of cfa_register * cfa_offset
  17. | DW_CFA_def_cfa_register of cfa_register
  18. | DW_CFA_def_cfa_offset of cfa_offset
  19. | DW_CFA_def_cfa_expression of cfa_block
  20. | DW_CFA_expression of cfa_register * cfa_block
  21. | DW_CFA_offset_extended_sf of cfa_register * cfa_sfoffset
  22. | DW_CFA_def_cfa_sf of cfa_register * cfa_sfoffset
  23. | DW_CFA_def_cfa_offset_sf of cfa_sfoffset
  24. | DW_CFA_val_offset of cfa_register * cfa_offset
  25. | DW_CFA_val_offset_sf of cfa_register * cfa_sfoffset
  26. | DW_CFA_val_expression of cfa_register * cfa_block
  27. | DW_CFA_AARCH64_negate_ra_state
  28. | DW_CFA_unknown of char
type cie = {
  1. cie_offset : Nat_big_num.num;
  2. cie_length : Nat_big_num.num;
  3. cie_id : Nat_big_num.num;
  4. cie_version : Nat_big_num.num;
  5. cie_augmentation : Byte_sequence.byte_sequence0;
  6. cie_address_size : Nat_big_num.num option;
  7. cie_segment_size : Nat_big_num.num option;
  8. cie_code_alignment_factor : Nat_big_num.num;
  9. cie_data_alignment_factor : Nat_big_num.num;
  10. cie_return_address_register : cfa_register;
  11. cie_initial_instructions_bytes : Byte_sequence.byte_sequence0;
  12. cie_initial_instructions : call_frame_instruction list;
}
type fde = {
  1. fde_offset : Nat_big_num.num;
  2. fde_length : Nat_big_num.num;
  3. fde_cie_pointer : Nat_big_num.num;
  4. fde_initial_location_segment_selector : Nat_big_num.num option;
  5. fde_initial_location_address : Nat_big_num.num;
  6. fde_address_range : Nat_big_num.num;
  7. fde_instructions_bytes : Byte_sequence.byte_sequence0;
  8. fde_instructions : call_frame_instruction list;
}
type frame_info_element =
  1. | FIE_cie of cie
  2. | FIE_fde of fde
type frame_info = frame_info_element list
type cfa_rule =
  1. | CR_undefined
  2. | CR_register of cfa_register * Nat_big_num.num
  3. | CR_expression of single_location_description
type register_rule =
  1. | RR_undefined
  2. | RR_same_value
  3. | RR_offset of Nat_big_num.num
  4. | RR_val_offset of Nat_big_num.num
  5. | RR_register of Nat_big_num.num
  6. | RR_expression of single_location_description
  7. | RR_val_expression of single_location_description
  8. | RR_architectural
type register_rule_map = (cfa_register * register_rule) list
type cfa_table_row = {
  1. ctr_loc : Nat_big_num.num;
  2. ctr_cfa : cfa_rule;
  3. ctr_regs : register_rule_map;
}
type cfa_state = {
  1. cs_current_row : cfa_table_row;
  2. cs_previous_rows : cfa_table_row list;
  3. cs_initial_instructions_row : cfa_table_row;
  4. cs_row_stack : cfa_table_row list;
}
type evaluated_frame_info = (fde * cfa_table_row list) list
type line_number_argument_type =
  1. | LNAT_address
  2. | LNAT_ULEB128
  3. | LNAT_SLEB128
  4. | LNAT_uint16
  5. | LNAT_string
type line_number_argument_value =
  1. | LNAV_address of Nat_big_num.num
  2. | LNAV_ULEB128 of Nat_big_num.num
  3. | LNAV_SLEB128 of Nat_big_num.num
  4. | LNAV_uint16 of Nat_big_num.num
  5. | LNAV_string of Byte_sequence.byte_sequence0
type line_number_operation =
  1. | DW_LNS_copy
  2. | DW_LNS_advance_pc of Nat_big_num.num
  3. | DW_LNS_advance_line of Nat_big_num.num
  4. | DW_LNS_set_file of Nat_big_num.num
  5. | DW_LNS_set_column of Nat_big_num.num
  6. | DW_LNS_negate_stmt
  7. | DW_LNS_set_basic_block
  8. | DW_LNS_const_add_pc
  9. | DW_LNS_fixed_advance_pc of Nat_big_num.num
  10. | DW_LNS_set_prologue_end
  11. | DW_LNS_set_epilogue_begin
  12. | DW_LNS_set_isa of Nat_big_num.num
  13. | DW_LNE_end_sequence
  14. | DW_LNE_set_address of Nat_big_num.num
  15. | DW_LNE_define_file of Byte_sequence.byte_sequence0 * Nat_big_num.num * Nat_big_num.num * Nat_big_num.num
  16. | DW_LNE_set_discriminator of Nat_big_num.num
  17. | DW_LN_special of Nat_big_num.num
type line_number_file_entry = {
  1. lnfe_path : Byte_sequence.byte_sequence0;
  2. lnfe_directory_index : Nat_big_num.num;
  3. lnfe_last_modification : Nat_big_num.num;
  4. lnfe_length : Nat_big_num.num;
}
type line_number_header = {
  1. lnh_offset : Nat_big_num.num;
  2. lnh_dwarf_format : dwarf_format;
  3. lnh_unit_length : Nat_big_num.num;
  4. lnh_version : Nat_big_num.num;
  5. lnh_header_length : Nat_big_num.num;
  6. lnh_minimum_instruction_length : Nat_big_num.num;
  7. lnh_maximum_operations_per_instruction : Nat_big_num.num;
  8. lnh_default_is_stmt : bool;
  9. lnh_line_base : Nat_big_num.num;
  10. lnh_line_range : Nat_big_num.num;
  11. lnh_opcode_base : Nat_big_num.num;
  12. lnh_standard_opcode_lengths : Nat_big_num.num list;
  13. lnh_include_directories : Byte_sequence.byte_sequence0 list;
  14. lnh_file_entries : line_number_file_entry list;
  15. lnh_comp_dir : string option;
}
type line_number_program = {
  1. lnp_header : line_number_header;
  2. lnp_operations : line_number_operation list;
}
type line_number_registers = {
  1. lnr_address : Nat_big_num.num;
  2. lnr_op_index : Nat_big_num.num;
  3. lnr_file : Nat_big_num.num;
  4. lnr_line : Nat_big_num.num;
  5. lnr_column : Nat_big_num.num;
  6. lnr_is_stmt : bool;
  7. lnr_basic_block : bool;
  8. lnr_end_sequence : bool;
  9. lnr_prologue_end : bool;
  10. lnr_epilogue_begin : bool;
  11. lnr_isa : Nat_big_num.num;
  12. lnr_discriminator : Nat_big_num.num;
}
type unpacked_file_entry = string option * string option * string
type unpacked_decl = unpacked_file_entry * int * string
type dwarf = {
  1. d_endianness : Endianness.endianness;
  2. d_str : Byte_sequence.byte_sequence0;
  3. d_compilation_units : compilation_units;
  4. d_type_units : type_units;
  5. d_loc : location_list_list;
  6. d_ranges : range_list_list;
  7. d_frame_info : frame_info;
  8. 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 evaluated_line_info = (line_number_header * line_number_registers list) list
type dwarf_static = {
  1. ds_dwarf : dwarf;
  2. ds_analysed_location_data : analysed_location_data;
  3. ds_evaluated_frame_info : evaluated_frame_info;
  4. ds_evaluated_line_info : evaluated_line_info;
  5. ds_subprogram_line_extents : (unpacked_file_entry * (string * unpacked_file_entry * Nat_big_num.num) list) list;
}
type dwarf_dynamic_at_pc = analysed_location_data_at_pc

context for parsing and pp functions

type p_context = {
  1. endianness : Endianness.endianness;
}
type cupdie = compilation_unit * die list * die
type decl = {
  1. decl_file : string option;
  2. decl_line : Nat_big_num.num option;
}
type 't array_dimension = Nat_big_num.num option * 't option
type 't struct_union_member = cupdie * string option * 't * Nat_big_num.num option
type struct_union_type_kind =
  1. | Atk_structure
  2. | Atk_union
type enumeration_member = cupdie * string option * Nat_big_num.num
type 't c_type_top =
  1. | CT_missing of cupdie
  2. | CT_base of cupdie * string * Nat_big_num.num * Nat_big_num.num option
  3. | CT_pointer of cupdie * 't option
  4. | CT_const of cupdie * 't option
  5. | CT_volatile of cupdie * 't
  6. | CT_restrict of cupdie * 't
  7. | CT_typedef of cupdie * string * 't * decl
  8. | CT_array of cupdie * 't * 't array_dimension list
  9. | CT_struct_union of cupdie * struct_union_type_kind * string option * Nat_big_num.num option * decl * 't struct_union_member list option
  10. | CT_enumeration of cupdie * string option * 't option * Nat_big_num.num option * decl * enumeration_member list option
  11. | CT_subroutine of cupdie * bool * 't option * 't list * bool
type c_type =
  1. | CT of c_type c_type_top
type variable_or_formal_parameter_kind =
  1. | SVPK_var
  2. | SVPK_param
type sdt_unspecified_parameter = unit
type sdt_variable_or_formal_parameter = {
  1. svfp_cupdie : cupdie;
  2. svfp_name : string;
  3. svfp_kind : variable_or_formal_parameter_kind;
  4. svfp_type : c_type option;
  5. svfp_abstract_origin : sdt_variable_or_formal_parameter option;
  6. svfp_const_value : Nat_big_num.num option;
  7. svfp_external : bool;
  8. svfp_declaration : bool;
  9. svfp_locations : (Nat_big_num.num * Nat_big_num.num * operation list) list option;
  10. svfp_decl : unpacked_decl option;
}
type sdt_subroutine_kind =
  1. | SSK_subprogram
  2. | SSK_inlined_subroutine
type sdt_subroutine = {
  1. ss_cupdie : cupdie;
  2. ss_name : string option;
  3. ss_kind : sdt_subroutine_kind;
  4. ss_call_site : unpacked_decl option;
  5. ss_abstract_origin : sdt_subroutine option;
  6. ss_type : c_type option;
  7. ss_vars : sdt_variable_or_formal_parameter list;
  8. ss_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list option;
  9. ss_entry_address : Nat_big_num.num option;
  10. ss_unspecified_parameters : sdt_unspecified_parameter list;
  11. ss_subroutines : sdt_subroutine list;
  12. ss_lexical_blocks : sdt_lexical_block list;
  13. ss_decl : unpacked_decl option;
  14. ss_noreturn : bool;
  15. ss_external : bool;
}
and sdt_lexical_block = {
  1. slb_cupdie : cupdie;
  2. slb_vars : sdt_variable_or_formal_parameter list;
  3. slb_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list option;
  4. slb_subroutines : sdt_subroutine list;
  5. slb_lexical_blocks : sdt_lexical_block list;
}
type sdt_compilation_unit = {
  1. scu_cupdie : cupdie;
  2. scu_name : string;
  3. scu_subroutines : sdt_subroutine list;
  4. scu_vars : sdt_variable_or_formal_parameter list;
  5. scu_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list option;
}
type sdt_dwarf = {
  1. sd_compilation_units : sdt_compilation_unit list;
}
type inlined_subroutine_const_param = {
  1. iscp_abstract_origin : compilation_unit * die list * die;
  2. iscp_value : Nat_big_num.num;
}
type inlined_subroutine = {
  1. is_inlined_subroutine : compilation_unit * die list * die;
  2. is_abstract_origin : compilation_unit * die list * die;
  3. is_inlined_subroutine_sdt : sdt_subroutine;
  4. is_inlined_subroutine_sdt_parents : sdt_subroutine list;
  5. is_name : string;
  6. is_call_file : unpacked_file_entry;
  7. is_call_line : Nat_big_num.num;
  8. is_pc_ranges : (Nat_big_num.num * Nat_big_num.num) list;
  9. is_const_params : inlined_subroutine_const_param list;
}
type inlined_subroutine_data = inlined_subroutine 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
type inlined_subroutine_data_by_range = inlined_subroutine_data_by_range_entry list

************************************************************

** missing pervasives ************************************

************************************************************

val index_natural : 'a list -> Nat_big_num.num -> 'a option
val partialNaturalFromInteger : Nat_big_num.num -> Nat_big_num.num

************************************************************

** endianness ***************************************

************************************************************

val p_context_of_d : dwarf -> p_context

************************************************************

** dwarf encodings ***************************************

************************************************************

val tag_encodings : (string * Nat_big_num.num) list
val vDW_CHILDREN_no : Nat_big_num.num
val vDW_CHILDREN_yes : Nat_big_num.num
val attribute_encodings : (string * Nat_big_num.num * dwarf_attribute_classes list) list
val attribute_form_encodings : (string * Nat_big_num.num * dwarf_attribute_classes list) list
val operation_encodings : (string * Nat_big_num.num * operation_argument_type list * operation_semantics) list
val vDW_OP_reg0 : Nat_big_num.num
val vDW_OP_breg0 : Nat_big_num.num
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
val base_type_attribute_encodings : (string * Nat_big_num.num) list

************************************************************

** more missing pervasives and bits ***********************

************************************************************

val myconcat : string -> string list -> string
val myhead : 'a list -> 'a
val myfindNonPure : ('a -> bool) -> 'a list -> 'a
val myfindmaybe : ('a -> 'b option) -> 'a list -> 'b option
val myfind : ('a -> bool) -> 'a list -> 'a option
val myfiltermaybe : ('a -> 'b option) -> 'a list -> 'b list
val natural_of_bytes_little : 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
val mytake' : Nat_big_num.num -> 'a list -> 'a list -> ('a list * 'a list) option
val mytake : Nat_big_num.num -> 'a list -> ('a list * 'a list) option
val mynth : Nat_big_num.num -> 'a list -> 'a option

basic pretty printing

val pphexplain : Nat_big_num.num -> string
val pphex : Nat_big_num.num -> string
val pphex_integer : Nat_big_num.num -> string
val ppbytes : Byte_sequence_wrapper.byte_sequence -> string
val string_of_bytes : char list -> string
val just_one : string -> 'a list -> 'a
val max_address : Nat_big_num.num -> Nat_big_num.num

lookup of encodings

val lookup_Ab_b : 'a Lem_basic_classes.eq_class -> 'a -> ('a * 'b) list -> 'b option
val lookup_aB_a : 'b Lem_basic_classes.eq_class -> 'b -> ('a * 'b) list -> 'a option
val lookup_aBc_a : 'b Lem_basic_classes.eq_class -> 'b -> ('a * 'b * 'c) list -> 'a option
val lookup_aBc_ac : 'b Lem_basic_classes.eq_class -> 'b -> ('a * 'b * 'c) list -> ('a * 'c) option
val lookup_Abc_b : 'a Lem_basic_classes.eq_class -> 'a -> ('a * 'b * 'c) list -> 'b 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
val pp_maybe : (Nat_big_num.num -> string option) -> Nat_big_num.num -> string
val pp_tag_encoding : Nat_big_num.num -> string
val pp_attribute_encoding : Nat_big_num.num -> string
val pp_attribute_form_encoding : Nat_big_num.num -> string
val pp_operation_encoding : Nat_big_num.num -> string
val tag_encode : string -> Nat_big_num.num
val attribute_encode : string -> Nat_big_num.num
val attribute_form_encode : string -> Nat_big_num.num
val base_type_attribute_encode : string -> Nat_big_num.num

************************************************************

** parser combinators and primitives *********************

************************************************************

type parse_context = {
  1. pc_bytes : Byte_sequence.byte_sequence0;
  2. pc_offset : Nat_big_num.num;
}
type 'a parse_result =
  1. | PR_success of 'a * parse_context
  2. | PR_fail of string * parse_context
type 'a parser = parse_context -> 'a parse_result
val pp_parse_context : parse_context -> string
val pp_parse_fail : string -> parse_context -> string
val pp_parse_result : ('a -> string) -> 'a parse_result -> string
val pr_bind : 'a parse_result -> ('a -> parse_context -> 'b parse_result) -> 'b parse_result
val pr_return : 'a -> parse_context -> 'a parse_result
val pr_map : ('a -> 'b) -> 'a parse_result -> 'b parse_result
val pr_map2 : ('a -> 'b) -> (parse_context -> 'a parse_result) -> parse_context -> 'b parse_result
val pr_post_map1 : 'a parse_result -> ('a -> 'b) -> 'b parse_result
val pr_post_map : (parse_context -> 'a parse_result) -> ('a -> 'b) -> parse_context -> 'b 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 parse_byte : char parser
val bzero : char
val parse_non_empty_string : Byte_sequence.byte_sequence0 option parser
val parse_uint8 : Nat_big_num.num parser
val parse_uint8_constant : Nat_big_num.num -> Nat_big_num.num parser
val parse_uint16 : p_context -> Nat_big_num.num parser
val parse_uint32 : p_context -> Nat_big_num.num parser
val parse_uint64 : p_context -> Nat_big_num.num parser
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
val parse_sint8 : Nat_big_num.num parser
val parse_sint16 : p_context -> Nat_big_num.num parser
val parse_sint32 : p_context -> Nat_big_num.num parser
val parse_sint64 : p_context -> Nat_big_num.num parser
val parse_ULEB128 : Nat_big_num.num parser
val parse_SLEB128 : Nat_big_num.num parser
val parse_nonzero_ULEB128_pair : (Nat_big_num.num * Nat_big_num.num) option parser
val parse_zero_terminated_ULEB128_pair_list : (Nat_big_num.num * Nat_big_num.num) list parser
val parse_uintDwarfN : p_context -> dwarf_format -> Nat_big_num.num parser
val parse_uint_address_size : p_context -> Nat_big_num.num -> Nat_big_num.num parser
val parse_uint_segment_selector_size : p_context -> Nat_big_num.num -> Nat_big_num.num option parser

************************************************************

** parsing and pretty printing of .debug_* sections ******

************************************************************

abbreviations table: pp and parsing

val pp_abbreviation_declaration : abbreviation_declaration -> string
val pp_abbreviations_table : abbreviations_table -> string
val remove_duplicates : 'a Lem_basic_classes.eq_class -> ('a * 'b) list -> ('a * 'b) list -> ('a * 'b) list
val pp_abbreviations_tables : dwarf -> string
val parse_abbreviation_declaration : 'a -> abbreviation_declaration option parser
val parse_abbreviations_table : 'a -> parse_context -> abbreviation_declaration list parse_result

debug_str entry

val pp_debug_str_entry : Byte_sequence.byte_sequence0 -> Nat_big_num.num -> string

operations: pp and parsing

val pp_operation_argument_value : operation_argument_value -> string
val pp_operation_semantics : operation_semantics -> string
val pp_operation_semantics_brief : operation_semantics -> string
val pp_operation : operation -> string
val pp_operations : operation list -> string
val parse_and_pp_operations : p_context -> compilation_unit_header -> Byte_sequence.byte_sequence0 -> string

attribute values: pp and parsing

val pp_attribute_value_plain : 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 pp_pos : Nat_big_num.num -> string
val pp_cupdie : (compilation_unit * 'a * die) -> string
val pp_cupdie3 : (compilation_unit * die list * die) -> string

************************************************************

** finding things in the die tree

************************************************************

val find_maybe : ('a -> 'b option) -> 'a list -> 'b option
val find_die_by_offset_in_cu : Nat_big_num.num -> compilation_unit -> cupdie option
val find_die_by_offset_in_all : Nat_big_num.num -> dwarf -> cupdie option
val find_dies_in_die : (die -> bool) -> compilation_unit -> die list -> die -> (compilation_unit * die list * die) list
val find_dies : (die -> bool) -> dwarf -> cupdie 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 integer_of_constant_attribute_value : p_context -> attribute_value -> Nat_big_num.num
val bool_of_flag_attribute_value : attribute_value -> bool
val reference_of_reference_attribute_value : 'a -> dwarf -> compilation_unit -> 'b -> attribute_value -> (compilation_unit * die list * die) option

attribute find

val find_attribute_value : string -> die -> attribute_value option
val find_string_attribute_value_of_die : string -> Byte_sequence.byte_sequence0 -> die -> string option
val find_natural_attribute_value_of_die : p_context -> string -> die -> Nat_big_num.num option
val find_integer_attribute_value_of_die : p_context -> string -> die -> Nat_big_num.num option
val find_flag_attribute_value_of_die : string -> die -> bool option
val find_flag_attribute_value_of_die_default_false : string -> die -> bool
val find_name_of_die : 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
val find_flag_attribute_value_of_die_using_abstract_origin : dwarf -> string -> cupdie -> bool option

compilation unit header: pp and parsing

val pp_dwarf_format : dwarf_format -> string
val pp_unit_header : string -> compilation_unit_header -> string
val pp_compilation_unit_header : compilation_unit_header -> string
val parse_unit_length : p_context -> (dwarf_format * Nat_big_num.num) parser
val parse_compilation_unit_header : p_context -> compilation_unit_header parser

type unit header: pp and parsing

val pp_type_unit_header : type_unit_header -> string
val parse_type_unit_header : p_context -> type_unit_header parser

debugging information entries: pp and parsing

debugging information entries: pp and parsing

val indent_level : bool -> Nat_big_num.num -> string
val indent_level_plus_one : bool -> Nat_big_num.num -> 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 has_attribute : string -> die -> bool

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 add_die_to_index : die_index -> die list -> die -> die_index

type units: pp and parsing

val pp_type_unit : p_context -> Byte_sequence.byte_sequence0 -> type_unit -> string
val pp_type_units : p_context -> Byte_sequence.byte_sequence0 -> type_unit list -> string

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 pp_loc : p_context -> compilation_unit_header -> location_list list -> string
val parse_location_list_item : p_context -> compilation_unit_header -> location_list_item option parser
val parse_location_list : p_context -> compilation_unit_header -> location_list option parser
val parse_location_list_list : p_context -> compilation_unit_header -> location_list_list parser
val find_location_list : location_list list -> Nat_big_num.num -> location_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 pp_ranges : 'a -> compilation_unit_header -> range_list 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 parse_range_list : p_context -> compilation_unit_header -> range_list list option parser
val parse_range_list_list : p_context -> compilation_unit_header -> range_list_list parser
val find_range_list : range_list list -> Nat_big_num.num -> range_list option
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 pp_cfa_address : Nat_big_num.num -> string
val pp_cfa_block : Byte_sequence_wrapper.byte_sequence -> string
val pp_cfa_delta : Nat_big_num.num -> string
val pp_cfa_sfoffset : 'a Show.show_class -> 'a -> string
val pp_cfa_register : 'a Show.show_class -> 'a -> string
val pp_cfa_offset : Nat_big_num.num -> string
val pp_cfa_rule : cfa_rule -> string
val pp_register_rule : register_rule -> string
val pp_call_frame_instruction : call_frame_instruction -> string
val pp_call_frame_instructions : call_frame_instruction list -> string
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 pp_cie : 'a -> 'b -> cie -> string
val pp_fde : 'a -> 'b -> fde -> string
val pp_frame_info_element : 'a -> 'b -> frame_info_element -> string
val pp_frame_info : 'a -> 'b -> frame_info_element list -> string
val find_cie : frame_info_element list -> Nat_big_num.num -> cie
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_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
val parse_frame_info : p_context -> compilation_unit_header -> frame_info parser

line numbers .debug_line, pp and parsing

val pp_line_number_file_entry : line_number_file_entry -> string
val pp_line_number_header : line_number_header -> string
val pp_line_number_operation : line_number_operation -> string
val pp_line_number_program : line_number_program -> string
val parse_line_number_file_entry : line_number_file_entry option parser
val parse_line_number_header : p_context -> string option -> line_number_header 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_offset_of_compilation_unit : p_context -> compilation_unit -> Nat_big_num.num
val line_number_program_of_compilation_unit : dwarf -> compilation_unit -> line_number_program
val filename : dwarf -> compilation_unit -> Nat_big_num.num -> string option
val pp_ufe : unpacked_file_entry -> string
val pp_ud : unpacked_decl -> string
val pp_ufe_brief : unpacked_file_entry -> string
val pp_line_info : line_number_program list -> string

all dwarf info: pp and parsing

val pp_dwarf_like_objdump : dwarf -> string
val pp_dwarf : dwarf -> string
val extract_section_body : Elf_file.elf_file -> string -> bool -> p_context * Nat_big_num.num * Byte_sequence_wrapper.byte_sequence
val extract_dwarf : Elf_file.elf_file -> dwarf option

************************************************************

****** location evaluation ********************************

************************************************************

pp of locations

val pp_simple_location : simple_location -> string
val pp_composite_location_piece : composite_location_piece -> string
val pp_single_location : single_location -> string

evaluation of location expressions

val initial_state : state
val arithmetic_context_of_cuh : compilation_unit_header -> arithmetic_context
val find_cfa_table_row_for_pc : evaluated_frame_info -> Nat_big_num.num -> cfa_table_row

************************************************************

**** evaluation of frame information **********************

************************************************************

register maps

val rrp_empty : (cfa_register * register_rule) list

pp of evaluated cfa information from .debug_frame

val register_footprint_rrp : register_rule_map -> cfa_register Pset.set
val register_footprint : cfa_table_row list -> cfa_register list
val max_lengths : string list list -> Nat_big_num.num list
val pad_row : string list -> Nat_big_num.num list -> string list
val pad_rows : string list list -> string
val pp_evaluated_fde : ('a * cfa_table_row list) -> string
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
val evaluate_fde : frame_info -> fde -> cfa_table_row list
val evaluate_frame_info : dwarf -> evaluated_frame_info
val pp_evaluated_frame_info : evaluated_frame_info -> string

************************************************************

** pp of type info

************************************************************

val strict : (unit -> string) -> 'a option -> 'a
val analyse_type_info_top : p_context -> dwarf -> bool -> cupdie -> cupdie c_type_top
val analyse_type_info_deep : dwarf -> bool -> cupdie -> c_type
val find_DW_AT_type_of_die_deep : dwarf -> (compilation_unit * 'a * die) -> c_type option
val find_DW_AT_type_of_die_deep_using_abstract_origin : dwarf -> (compilation_unit * 'a * die) -> c_type option
val pp_struct_union_type_kind : struct_union_type_kind -> string
val pp_mbyte_size : 'a Show.show_class -> 'a option -> string
val pp_type_info_top : ('a -> string) -> 'a c_type_top -> string
val pp_type_info_deep : c_type -> string
val pp_type_info_die : p_context -> dwarf -> cupdie -> string
val pp_struct_union_type_member : p_context -> dwarf -> cupdie struct_union_member -> string list
val pp_struct_union_type_defn : p_context -> dwarf -> cupdie -> string
val pp_struct_union_type_member' : c_type struct_union_member -> string list
val pp_enum_type_member' : enumeration_member -> string list
val pp_struct_union_type_defn' : c_type -> string
val pp_type_info_die_DW_AT_type : p_context -> dwarf -> compilation_unit -> 'a -> die -> string
val struct_union_enum_types : dwarf -> c_type list
val pp_all_struct_union_enum_types' : dwarf -> string

************************************************************

** analysis of location and frame data for reverse mapping

************************************************************

analysis

simple-minded analysis of location

val analyse_locations_raw : p_context -> dwarf -> string

more proper analysis of locations

val cu_base_address : compilation_unit -> Nat_big_num.num
val range_of_die_d : dwarf -> compilation_unit -> die -> (Nat_big_num.num * Nat_big_num.num) list option
val entry_address : die -> Nat_big_num.num option
val closest_enclosing_frame_base : 'a -> Nat_big_num.num -> die list -> attribute_value option
val analyse_locations : dwarf -> analysed_location_data
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 : dwarf -> analysed_location_data -> string
val pp_analysed_location_data_diff : dwarf -> analysed_location_data -> analysed_location_data -> string
val pp_analysed_location_data_at_pc : dwarf -> analysed_location_data_at_pc -> string
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 initial_line_number_registers : line_number_header -> line_number_registers
val evaluate_line_number_program : line_number_program -> line_number_registers list
val evaluated_line_info_of_compilation_unit : dwarf -> compilation_unit -> (line_number_header * 'a) list -> 'a
val pp_line_number_registers : line_number_registers -> string
val pp_line_number_registers_tight : line_number_registers -> string list
val pp_line_number_registerss : line_number_registers list -> string
val pp_evaluated_line_info : evaluated_line_info -> string
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

************************************************************

val extract_dwarf_static : Elf_file.elf_file -> dwarf_static option

************************************************************

** 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 strict_mss : 'a option -> string -> ('b -> string) -> 'b -> 'a
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 strict_mscu : 'a option -> string -> ('b -> string) -> 'b -> 'a
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 mk_sdt_dwarf : dwarf -> ((string option * string option * string) * (string * 'a * Nat_big_num.num) list) list -> sdt_dwarf
val pp_sdt_unspecified_parameter : Nat_big_num.num -> sdt_unspecified_parameter -> string
val pp_parsed_single_location_description : Nat_big_num.num -> (Nat_big_num.num * Nat_big_num.num * operation list) -> string
val pp_pc_ranges : Nat_big_num.num -> (Nat_big_num.num * Nat_big_num.num) list option -> string
val pp_sdt_maybe : 'a option -> ('a -> string) -> string
val pp_sdt_maybe' : ('a -> string) -> 'a option -> string
val pp_sdt_list : 'a list -> ('a -> string) -> string
val pp_sdt_variable_or_formal_parameter : Nat_big_num.num -> sdt_variable_or_formal_parameter -> string
val pp_sdt_subroutine : Nat_big_num.num -> sdt_subroutine -> string
val pp_sdt_lexical_block : Nat_big_num.num -> sdt_lexical_block -> string
val pp_sdt_compilation_unit : Nat_big_num.num -> sdt_compilation_unit -> string
val pp_sdt_dwarf : sdt_dwarf -> string
val pp_sdt_concise_variable_or_formal_parameter : Nat_big_num.num -> sdt_variable_or_formal_parameter -> string
val pp_sdt_globals_compilation_unit : Nat_big_num.num -> sdt_compilation_unit -> string
val pp_sdt_globals_dwarf : sdt_dwarf -> string
val pp_sdt_locals_subroutine : Nat_big_num.num -> sdt_subroutine -> string
val pp_sdt_locals_lexical_block : Nat_big_num.num -> sdt_lexical_block -> string
val pp_sdt_locals_compilation_unit : Nat_big_num.num -> sdt_compilation_unit -> string
val pp_sdt_locals_dwarf : sdt_dwarf -> 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_subroutines_sdt_dwarf : sdt_dwarf -> 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_parents : die list -> string
val pp_inlined_subroutine_header : dwarf_static -> inlined_subroutine -> string
val pp_inlined_subroutine_const_params : dwarf -> inlined_subroutine -> string
val pp_inlined_subroutine : dwarf_static -> inlined_subroutine -> string
val pp_inlined_subroutines : dwarf_static -> inlined_subroutine list -> string
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 pp_instruction : (Nat_big_num.num * Nat_big_num.num) -> string
val pp_text_section : Elf_file.elf_file -> string

************************************************************

** top level for main_elf ********************************

************************************************************

val harness_string_of_elf_like_objdump : Elf_file.elf_file -> 'a -> string
val harness_string_of_elf : Elf_file.elf_file -> 'a -> string
val harness_string_of_elf64_debug_info_section : Elf_file.elf64_file -> 'a -> string
val harness_string_of_elf32_debug_info_section : Elf_file.elf32_file -> 'a -> string
val harness_string_of_elf64_like_objdump : Elf_file.elf64_file -> 'a -> string
val harness_string_of_elf32_like_objdump : Elf_file.elf32_file -> 'a -> string
OCaml

Innovation. Community. Security.