aboutsummaryrefslogtreecommitdiffstats
path: root/debug/DwarfTypes.mli
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2015-10-13 14:57:31 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2015-10-13 14:57:31 +0200
commit16315711d815580afa77f93424cc49c7362ab5b8 (patch)
tree09c5d771858c83a606f26dbfcf7b266822778135 /debug/DwarfTypes.mli
parentdaed22eb5afdc86267c8f90b55008267c9383fca (diff)
downloadcompcert-kvx-16315711d815580afa77f93424cc49c7362ab5b8.tar.gz
compcert-kvx-16315711d815580afa77f93424cc49c7362ab5b8.zip
Implement the usage of the debug_str section for the gcc backend.
GCC prints all string larger than 3 characters in the debug_str section which reduces the size of the debug information since entries containing the same string now map to the same string in the debug_str sections. Bug 17392.
Diffstat (limited to 'debug/DwarfTypes.mli')
-rw-r--r--debug/DwarfTypes.mli82
1 files changed, 44 insertions, 38 deletions
diff --git a/debug/DwarfTypes.mli b/debug/DwarfTypes.mli
index 669ceabc..c7e5dce1 100644
--- a/debug/DwarfTypes.mli
+++ b/debug/DwarfTypes.mli
@@ -36,13 +36,11 @@ 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
@@ -58,11 +56,15 @@ type bound_value =
| BoundConst of constant
| BoundRef of reference
+type string_const =
+ | Simple_string of string
+ | Offset_string of reference
+
(* Types representing the attribute information per tag value *)
type file_loc =
- | Diab_file_loc of int * constant
- | Gnu_file_loc of int * constant
+ | Diab_file_loc of constant * constant
+ | Gnu_file_loc of constant * constant
type dw_tag_array_type =
{
@@ -72,15 +74,17 @@ type dw_tag_array_type =
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_low_pc: constant;
+ compile_unit_high_pc: constant;
+ compile_unit_dir: string_const;
+ compile_unit_prod_name: string_const;
}
type dw_tag_const_type =
@@ -90,22 +94,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_value: constant;
- enumerator_name: string;
+ enumerator_name: string_const;
}
type dw_tag_formal_parameter =
{
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;
@@ -114,7 +118,7 @@ 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 =
@@ -130,7 +134,7 @@ type dw_tag_member =
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;
}
@@ -141,21 +145,21 @@ 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_high_pc: reference option;
+ subprogram_low_pc: reference option;
}
type dw_tag_subrange_type =
@@ -173,21 +177,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_artificial: flag option;
+ unspecified_parameter_artificial: flag option;
}
type dw_tag_variable =
@@ -195,7 +199,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;
}
@@ -239,10 +243,10 @@ 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 option * location_entry list
+type dw_locations = constant option * location_entry list
type diab_entry =
{
@@ -255,7 +259,9 @@ type diab_entry =
type diab_entries = diab_entry list
-type gnu_entries = dw_entry * dw_locations
+type dw_string = (int * string) list
+
+type gnu_entries = dw_entry * dw_locations * dw_string
type debug_entries =
| Diab of diab_entries