blob: be47f2a72db53b1622de84813b4c0730830a2d14 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
(* *********************************************************************)
(* *)
(* The Compcert verified compiler *)
(* *)
(* Bernhard Schommer, AbsInt Angewandte Informatik GmbH *)
(* *)
(* AbsInt Angewandte Informatik GmbH. All rights reserved. This file *)
(* is distributed under the terms of the INRIA Non-Commercial *)
(* License Agreement. *)
(* *)
(* *********************************************************************)
open C
(* This implements an interface for the collection of debugging
information. *)
(* Types for the information of type info *)
type composite_field =
{
cfd_name: string;
cfd_typ: int;
cfd_bit_size: int option;
cfd_bit_offset: int option;
cfd_byte_offset: int option;
cfd_byte_size: int option;
}
type composite_type =
{
ct_name: string;
ct_file_loc: location option;
ct_members: composite_field list;
ct_alignof: int option;
ct_sizeof: int option;
}
type ptr_type = {
pts: int
}
type array_type = {
arr_type: int;
arr_size: int64 option;
}
type typedef = {
typedef_name: string;
typ: int;
}
type enumerator = {
enumerator_file_loc: location option;
enumerator_name: string;
enumerator_const: int;
}
type emum_type = {
enum_name: string;
enum_byte_size: int option;
enum_file_loc: location option;
enum_enumerators: enumerator list;
}
type int_type = {
int_kind: ikind;
}
type float_type = {
float_kind: fkind;
}
type parameter_type = {
param_type: int;
param_name: string;
}
type function_type = {
fun_return_type: int;
fun_prototyped: int;
fun_params: parameter_type list;
}
type debug_types =
| IntegerType of int_type
| FloatType of float_type
| PointerType of ptr_type
| ArrayType of array_type
| StructType of composite_type
| UnionType of composite_type
| FunctionType of function_type
| Typedef of typedef
(* All types encountered *)
let all_types: (int,debug_types) Hashtbl.t = Hashtbl.create 7
(* The basetypes, pointer, typedefs and enums all must have names *)
let name_types: (string,int) Hashtbl.t = Hashtbl.create 7
(* Composite types do not need to have a name. We thereore use the stamp for the mapping *)
let composite_types_table: (int, composite_type) Hashtbl.t = Hashtbl.create 7
(* Translate a C.typ to a string needed for hashing *)
let typ_to_string (ty: typ) =
let buf = Buffer.create 7 in
let chan = Format.formatter_of_buffer buf in
Cprint.typ chan ty;
Format.pp_print_flush chan ();
Buffer.contents buf
|