aboutsummaryrefslogtreecommitdiffstats
path: root/debug/DwarfTypes.mli
diff options
context:
space:
mode:
Diffstat (limited to 'debug/DwarfTypes.mli')
-rw-r--r--debug/DwarfTypes.mli138
1 files changed, 89 insertions, 49 deletions
diff --git a/debug/DwarfTypes.mli b/debug/DwarfTypes.mli
index ed75b3d7..a4c75201 100644
--- a/debug/DwarfTypes.mli
+++ b/debug/DwarfTypes.mli
@@ -36,20 +36,18 @@ type encoding =
type address = int
-type block = string
-
type location_expression =
| DW_OP_plus_uconst of constant
- | DW_OP_bregx of int * int32
- | DW_OP_piece of int
- | DW_OP_reg of int
+ | DW_OP_bregx of constant * int32
+ | DW_OP_piece of constant
+ | DW_OP_reg of constant
type location_value =
| LocSymbol of atom
| LocRef of address
| LocSimple of location_expression
| LocList of location_expression list
-
+
type data_location_value =
| DataLocBlock of location_expression
| DataLocRef of reference
@@ -58,30 +56,62 @@ type bound_value =
| BoundConst of constant
| BoundRef of reference
+type string_const =
+ | Simple_string of string
+ | Offset_string of reference
+
+type file_loc =
+ | Diab_file_loc of constant * constant
+ | Gnu_file_loc of constant * constant
+
+type dw_form =
+ | DW_FORM_addr
+ | DW_FORM_block2
+ | DW_FORM_block4
+ | DW_FORM_data2
+ | DW_FORM_data4
+ | DW_FORM_data8
+ | DW_FORM_string
+ | DW_FORM_block
+ | DW_FORM_block1
+ | DW_FORM_data1
+ | DW_FORM_flag
+ | DW_FORM_sdata
+ | DW_FORM_strp
+ | DW_FORM_udata
+ | DW_FORM_ref_addr
+ | DW_FORM_ref1
+ | DW_FORM_ref2
+ | DW_FORM_ref4
+ | DW_FORM_ref8
+ | DW_FORM_ref_udata
+ | DW_FORM_ref_indirect
+
+type dw_range =
+ | Pc_pair of reference * reference (* Simple low,high pc *)
+ | Offset of constant (* DWARF 3 version for different range *)
+ | Empty (* Needed for compilation units only containing variables *)
+
(* Types representing the attribute information per tag value *)
-type file_loc =
- | Diab_file_loc of int * constant
- | Gnu_file_loc of int * constant
-
type dw_tag_array_type =
{
- array_type_file_loc: file_loc option;
array_type: reference;
}
type dw_tag_base_type =
{
base_type_byte_size: constant;
- base_type_encoding: encoding option;
- base_type_name: string;
+ base_type_encoding: encoding option;
+ base_type_name: string_const;
}
type dw_tag_compile_unit =
{
- compile_unit_name: string;
- compile_unit_low_pc: int;
- compile_unit_high_pc: int;
+ compile_unit_name: string_const;
+ compile_unit_range: dw_range;
+ compile_unit_dir: string_const;
+ compile_unit_prod_name: string_const;
}
type dw_tag_const_type =
@@ -91,24 +121,22 @@ type dw_tag_const_type =
type dw_tag_enumeration_type =
{
- enumeration_file_loc: file_loc option;
+ enumeration_file_loc: file_loc option;
enumeration_byte_size: constant;
- enumeration_declaration: flag option;
- enumeration_name: string option;
+ enumeration_declaration: flag option;
+ enumeration_name: string_const;
}
type dw_tag_enumerator =
{
- enumerator_file_loc: file_loc option;
enumerator_value: constant;
- enumerator_name: string;
+ enumerator_name: string_const;
}
type dw_tag_formal_parameter =
{
- formal_parameter_file_loc: file_loc option;
formal_parameter_artificial: flag option;
- formal_parameter_name: string option;
+ formal_parameter_name: string_const option;
formal_parameter_type: reference;
formal_parameter_variable_parameter: flag option;
formal_parameter_location: location_value option;
@@ -117,24 +145,22 @@ type dw_tag_formal_parameter =
type dw_tag_label =
{
label_low_pc: address;
- label_name: string;
+ label_name: string_const;
}
type dw_tag_lexical_block =
{
- lexical_block_high_pc: address option;
- lexical_block_low_pc: address option;
+ lexical_block_range: dw_range;
}
type dw_tag_member =
{
- member_file_loc: file_loc option;
member_byte_size: constant option;
member_bit_offset: constant option;
member_bit_size: constant option;
member_data_member_location: data_location_value option;
member_declaration: flag option;
- member_name: string option;
+ member_name: string_const;
member_type: reference;
}
@@ -145,21 +171,20 @@ type dw_tag_pointer_type =
type dw_tag_structure_type =
{
- structure_file_loc: file_loc option;
- structure_byte_size: constant option;
- structure_declaration: flag option;
- structure_name: string option;
+ structure_file_loc: file_loc option;
+ structure_byte_size: constant option;
+ structure_declaration: flag option;
+ structure_name: string_const option;
}
type dw_tag_subprogram =
{
subprogram_file_loc: file_loc;
- subprogram_external: flag option;
- subprogram_name: string;
+ subprogram_external: flag option;
+ subprogram_name: string_const;
subprogram_prototyped: flag;
- subprogram_type: reference option;
- subprogram_high_pc: reference option;
- subprogram_low_pc: reference option;
+ subprogram_type: reference option;
+ subprogram_range: dw_range;
}
type dw_tag_subrange_type =
@@ -177,22 +202,21 @@ type dw_tag_subroutine_type =
type dw_tag_typedef =
{
typedef_file_loc: file_loc option;
- typedef_name: string;
+ typedef_name: string_const;
typedef_type: reference;
}
type dw_tag_union_type =
{
- union_file_loc: file_loc option;
- union_byte_size: constant option;
- union_declaration: flag option;
- union_name: string option;
+ union_file_loc: file_loc option;
+ union_byte_size: constant option;
+ union_declaration: flag option;
+ union_name: string_const option;
}
type dw_tag_unspecified_parameter =
{
- unspecified_parameter_file_loc: file_loc option;
- unspecified_parameter_artificial: flag option;
+ unspecified_parameter_artificial: flag option;
}
type dw_tag_variable =
@@ -200,7 +224,7 @@ type dw_tag_variable =
variable_file_loc: file_loc;
variable_declaration: flag option;
variable_external: flag option;
- variable_name: string;
+ variable_name: string_const;
variable_type: reference;
variable_location: location_value option;
}
@@ -244,14 +268,29 @@ type dw_entry =
(* The type for the location list. *)
type location_entry =
{
- loc: (int * int * location_value) list;
+ loc: (address * address * location_value) list;
loc_id: reference;
}
-type dw_locations = int * location_entry list
+type dw_locations = constant option * location_entry list
+
+type range_entry = (address * address) list
+
+type dw_ranges = range_entry list
+
+type dw_string = (int * string) list
+
+type diab_entry =
+ {
+ section_name: string;
+ start_label: int;
+ line_label: int;
+ entry: dw_entry;
+ locs: dw_locations;
+ }
-type diab_entries = (string * int * int * dw_entry * dw_locations) list
+type diab_entries = diab_entry list
-type gnu_entries = dw_entry * dw_locations
+type gnu_entries = dw_entry * dw_locations * dw_string * dw_ranges
type debug_entries =
| Diab of diab_entries
@@ -263,4 +302,5 @@ module type DWARF_TARGET=
val label: out_channel -> int -> unit
val section: out_channel -> section_name -> unit
val symbol: out_channel -> atom -> unit
+ val comment: string
end