aboutsummaryrefslogtreecommitdiffstats
path: root/debug/DwarfTypes.ml
blob: afa29e1316f98ac659f409cbf65fedc8745ecd19 (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
110
111
112
113
114
115
116
117
118
119
120
121
(* *********************************************************************)
(*                                                                     *)
(*              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.                                                 *)
(*                                                                     *)
(* *********************************************************************)

(* Types used for writing dwarf debug information *)

(* Basic types for the value of attributes *)

type constant = int

type flag = bool

type reference = int

type encoding =
  | DW_ATE_address
  | DW_ATE_boolean
  | DW_ATE_complex_float
  | DW_ATE_float
  | DW_ATE_signed
  | DW_ATE_signed_char
  | DW_ATE_unsigned
  | DW_ATE_unsigned_char

type identifier_case =
  | DW_ID_case_sensitive
  | DW_ID_up_case
  | DW_ID_down_case
  | DW_ID_case_insensitive

type address = int

type language =
  | DW_LANG_C
  | DW_LANG_C89

type block = string (* Used as bitvector *)

type const_value =
  | String of string
  | Const of constant
  | Block of block

(* Types representing the attribute information per tag value *)

type dw_tag_array_type =
    {
     dw_at_byte_size:   constant  option;
     dw_at_declaration: flag      option;
     dw_at_name:        string    option;
     dw_at_sibling:     reference option;
     dw_at_start_scope: constant  option;
     dw_at_stride_size: constant  option;
     dw_at_type:        reference option;
   }

type dw_tag_base_type =
    {
     dw_at_bit_offset: constant  option;
     dw_at_bit_size:   constant  option;
     dw_at_byte_size:  constant  option;
     dw_at_encoding:   encoding  option;
     dw_at_name:       string    option;
     dw_at_sibling:    reference option;
   }

type dw_tag_compile_unit =
    {
     dw_at_base_types:      reference       option;
     dw_at_comp_dir:        string          option;
     dw_at_identifier_case: identifier_case option;
     dw_at_high_pc:         address         option;
     dw_at_language:        language        option;
     dw_at_low_pc:          address         option;
     dw_at_macro_info:      constant        option;
     dw_at_name:            string          option;
     dw_at_producer:        string          option;
     dw_at_sibling:         reference       option;
     dw_at_stmt_list:       constant        option;
   }

type dw_tag_const_type =
    {
     dw_at_sibling: reference option;
     dw_at_type:    reference option;     
   }

type dw_tag_constant =
    {
     dw_at_const_value: constant  option;
     dw_at_declaration: flag      option;
     dw_at_external:    flag      option;
     dw_at_name:        string    option;
     dw_at_sibling:     reference option;
     dw_at_start_scope: constant  option;
     dw_at_type:        reference option;
   }

type dw_tag_enumeration_type =
    {
     dw_at_byte_size:   constant option;
     dw_at_declaration: flag     option;
     dw_at_name:        string    option;
     dw_at_sibling:     reference option;
     dw_at_start_scope: constant  option;
   }

type dw_tag_enumerator =
    {
     dw_at_const_value: constant  option;
     dw_at_name:        string    option;
     dw_at_sibling:     reference option;
   }