• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef NOGROD_DWARF_CONSTANTS_
18 #define NOGROD_DWARF_CONSTANTS_
19 
20 #include <cstdint>
21 
22 enum class DwarfFormat { k32Bit, k64Bit };
23 
24 // Unit header unit type encodings
25 constexpr uint8_t DW_UT_compile = 0x01;
26 constexpr uint8_t DW_UT_type = 0x02;
27 constexpr uint8_t DW_UT_partial = 0x03;
28 
29 constexpr uint8_t DW_CHILDREN_no = 0x0;
30 constexpr uint8_t DW_CHILDREN_yes = 0x1;
31 
32 // Base type encoding values
33 constexpr uint8_t DW_ATE_address = 0x01;
34 constexpr uint8_t DW_ATE_boolean = 0x02;
35 constexpr uint8_t DW_ATE_complex_float = 0x03;
36 constexpr uint8_t DW_ATE_float = 0x04;
37 constexpr uint8_t DW_ATE_signed = 0x05;
38 constexpr uint8_t DW_ATE_signed_char = 0x06;
39 constexpr uint8_t DW_ATE_unsigned = 0x07;
40 constexpr uint8_t DW_ATE_unsigned_char = 0x08;
41 constexpr uint8_t DW_ATE_imaginary_float = 0x09;
42 constexpr uint8_t DW_ATE_packed_decimal = 0x0a;
43 constexpr uint8_t DW_ATE_numeric_string = 0x0b;
44 constexpr uint8_t DW_ATE_edited = 0x0c;
45 constexpr uint8_t DW_ATE_signed_fixed = 0x0d;
46 constexpr uint8_t DW_ATE_unsigned_fixed = 0x0e;
47 constexpr uint8_t DW_ATE_decimal_float = 0x0f;
48 constexpr uint8_t DW_ATE_UTF = 0x10;
49 constexpr uint8_t DW_ATE_UCS = 0x11;
50 constexpr uint8_t DW_ATE_ASCII = 0x12;
51 
52 // Tag encodings
53 constexpr uint16_t DW_TAG_array_type = 0x01;
54 constexpr uint16_t DW_TAG_class_type = 0x02;
55 constexpr uint16_t DW_TAG_entry_point = 0x03;
56 constexpr uint16_t DW_TAG_enumeration_type = 0x04;
57 constexpr uint16_t DW_TAG_formal_parameter = 0x05;
58 
59 constexpr uint16_t DW_TAG_imported_declaration = 0x08;
60 
61 constexpr uint16_t DW_TAG_label = 0x0a;
62 constexpr uint16_t DW_TAG_lexical_block = 0x0b;
63 
64 constexpr uint16_t DW_TAG_member = 0x0d;
65 
66 constexpr uint16_t DW_TAG_pointer_type = 0x0f;
67 constexpr uint16_t DW_TAG_reference_type = 0x10;
68 constexpr uint16_t DW_TAG_compile_unit = 0x11;
69 constexpr uint16_t DW_TAG_string_type = 0x12;
70 constexpr uint16_t DW_TAG_structure_type = 0x13;
71 
72 constexpr uint16_t DW_TAG_subroutine_type = 0x15;
73 constexpr uint16_t DW_TAG_typedef = 0x16;
74 constexpr uint16_t DW_TAG_union_type = 0x17;
75 constexpr uint16_t DW_TAG_unspecified_parameters = 0x18;
76 constexpr uint16_t DW_TAG_variant = 0x19;
77 constexpr uint16_t DW_TAG_common_block = 0x1a;
78 constexpr uint16_t DW_TAG_common_inclusion = 0x1b;
79 constexpr uint16_t DW_TAG_inheritance = 0x1c;
80 constexpr uint16_t DW_TAG_inlined_subroutine = 0x1d;
81 constexpr uint16_t DW_TAG_module = 0x1e;
82 constexpr uint16_t DW_TAG_ptr_to_member_type = 0x1f;
83 constexpr uint16_t DW_TAG_set_type = 0x20;
84 constexpr uint16_t DW_TAG_subrange_type = 0x21;
85 constexpr uint16_t DW_TAG_with_stmt = 0x22;
86 constexpr uint16_t DW_TAG_access_declaration = 0x23;
87 constexpr uint16_t DW_TAG_base_type = 0x24;
88 constexpr uint16_t DW_TAG_catch_block = 0x25;
89 constexpr uint16_t DW_TAG_const_type = 0x26;
90 constexpr uint16_t DW_TAG_constant = 0x27;
91 constexpr uint16_t DW_TAG_enumerator = 0x28;
92 constexpr uint16_t DW_TAG_file_type = 0x29;
93 constexpr uint16_t DW_TAG_friend = 0x2a;
94 constexpr uint16_t DW_TAG_namelist = 0x2b;
95 constexpr uint16_t DW_TAG_namelist_item = 0x2c;
96 constexpr uint16_t DW_TAG_packed_type = 0x2d;
97 constexpr uint16_t DW_TAG_subprogram = 0x2e;
98 constexpr uint16_t DW_TAG_template_type_parameter = 0x2f;
99 constexpr uint16_t DW_TAG_template_value_parameter = 0x30;
100 constexpr uint16_t DW_TAG_thrown_type = 0x31;
101 constexpr uint16_t DW_TAG_try_block = 0x32;
102 constexpr uint16_t DW_TAG_variant_part = 0x33;
103 constexpr uint16_t DW_TAG_variable = 0x34;
104 constexpr uint16_t DW_TAG_volatile_type = 0x35;
105 constexpr uint16_t DW_TAG_dwarf_procedure = 0x36;
106 constexpr uint16_t DW_TAG_restrict_type = 0x37;
107 constexpr uint16_t DW_TAG_interface_type = 0x38;
108 constexpr uint16_t DW_TAG_namespace = 0x39;
109 constexpr uint16_t DW_TAG_imported_module = 0x3a;
110 constexpr uint16_t DW_TAG_unspecified_type = 0x3b;
111 constexpr uint16_t DW_TAG_partial_unit = 0x3c;
112 constexpr uint16_t DW_TAG_imported_unit = 0x3d;
113 constexpr uint16_t DW_TAG_condition = 0x3f;
114 constexpr uint16_t DW_TAG_shared_type = 0x40;
115 constexpr uint16_t DW_TAG_type_unit = 0x41;
116 constexpr uint16_t DW_TAG_rvalue_reference_type = 0x42;
117 constexpr uint16_t DW_TAG_template_alias = 0x43;
118 // New in Dwarf5
119 constexpr uint16_t DW_TAG_coarray_type = 0x44;
120 constexpr uint16_t DW_TAG_generic_subrange = 0x45;
121 constexpr uint16_t DW_TAG_dynamic_type = 0x46;
122 constexpr uint16_t DW_TAG_atomic_type = 0x47;
123 constexpr uint16_t DW_TAG_call_site = 0x48;
124 constexpr uint16_t DW_TAG_call_site_parameter = 0x49;
125 constexpr uint16_t DW_TAG_skeleton_unit = 0x4a;
126 constexpr uint16_t DW_TAG_immutable_type = 0x4b;
127 
128 // GNU extension tags
129 constexpr uint16_t DW_TAG_GNU_template_template_param = 0x4106;
130 constexpr uint16_t DW_TAG_GNU_template_parameter_pack = 0x4107;
131 constexpr uint16_t DW_TAG_GNU_formal_parameter_pack = 0x4108;
132 constexpr uint16_t DW_TAG_GNU_call_site = 0x4109;
133 constexpr uint16_t DW_TAG_GNU_call_site_parameter = 0x410a;
134 
135 constexpr uint16_t DW_TAG_MAX_VALUE = DW_TAG_GNU_call_site_parameter;
136 
137 // Attribute form encodings
138 constexpr uint16_t DW_FORM_addr = 0x01;
139 constexpr uint16_t DW_FORM_block2 = 0x03;
140 constexpr uint16_t DW_FORM_block4 = 0x04;
141 constexpr uint16_t DW_FORM_data2 = 0x05;
142 constexpr uint16_t DW_FORM_data4 = 0x06;
143 constexpr uint16_t DW_FORM_data8 = 0x07;
144 constexpr uint16_t DW_FORM_string = 0x08;
145 constexpr uint16_t DW_FORM_block = 0x09;
146 constexpr uint16_t DW_FORM_block1 = 0x0a;
147 constexpr uint16_t DW_FORM_data1 = 0x0b;
148 constexpr uint16_t DW_FORM_flag = 0x0c;
149 constexpr uint16_t DW_FORM_sdata = 0x0d;
150 constexpr uint16_t DW_FORM_strp = 0x0e;
151 constexpr uint16_t DW_FORM_udata = 0x0f;
152 constexpr uint16_t DW_FORM_ref_addr = 0x10;
153 constexpr uint16_t DW_FORM_ref1 = 0x11;
154 constexpr uint16_t DW_FORM_ref2 = 0x12;
155 constexpr uint16_t DW_FORM_ref4 = 0x13;
156 constexpr uint16_t DW_FORM_ref8 = 0x14;
157 constexpr uint16_t DW_FORM_ref_udata = 0x15;
158 constexpr uint16_t DW_FORM_indirect = 0x16;
159 constexpr uint16_t DW_FORM_sec_offset = 0x17;
160 constexpr uint16_t DW_FORM_exprloc = 0x18;
161 constexpr uint16_t DW_FORM_flag_present = 0x19;
162 constexpr uint16_t DW_FORM_strx = 0x1a;
163 constexpr uint16_t DW_FORM_addrx = 0x1b;
164 constexpr uint16_t DW_FORM_ref_sup4 = 0x1c;
165 constexpr uint16_t DW_FORM_strp_sup = 0x1d;
166 constexpr uint16_t DW_FORM_data16 = 0x1e;
167 constexpr uint16_t DW_FORM_line_strp = 0x1f;
168 constexpr uint16_t DW_FORM_ref_sig8 = 0x20;
169 constexpr uint16_t DW_FORM_implicit_const = 0x21;
170 constexpr uint16_t DW_FORM_loclistx = 0x22;
171 constexpr uint16_t DW_FORM_rnglistx = 0x23;
172 constexpr uint16_t DW_FORM_ref_sup8 = 0x24;
173 constexpr uint16_t DW_FORM_strx1 = 0x25;
174 constexpr uint16_t DW_FORM_strx2 = 0x26;
175 constexpr uint16_t DW_FORM_strx3 = 0x27;
176 constexpr uint16_t DW_FORM_strx4 = 0x28;
177 constexpr uint16_t DW_FORM_addrx1 = 0x29;
178 constexpr uint16_t DW_FORM_addrx2 = 0x2a;
179 constexpr uint16_t DW_FORM_addrx3 = 0x2b;
180 constexpr uint16_t DW_FORM_addrx4 = 0x2c;
181 
182 constexpr uint16_t DW_FORM_MAX_VALUE = DW_FORM_addrx4;
183 
184 // Attribute name encodings
185 constexpr uint16_t DW_AT_sibling = 0x01;
186 constexpr uint16_t DW_AT_location = 0x02;
187 constexpr uint16_t DW_AT_name = 0x03;
188 constexpr uint16_t DW_AT_ordering = 0x09;
189 constexpr uint16_t DW_AT_byte_size = 0x0b;
190 constexpr uint16_t DW_AT_bit_offset = 0x0c;  // deprecated in DWARF5?
191 constexpr uint16_t DW_AT_bit_size = 0x0d;
192 constexpr uint16_t DW_AT_stmt_list = 0x10;
193 constexpr uint16_t DW_AT_low_pc = 0x11;
194 constexpr uint16_t DW_AT_high_pc = 0x12;
195 constexpr uint16_t DW_AT_language = 0x13;
196 constexpr uint16_t DW_AT_discr = 0x15;
197 constexpr uint16_t DW_AT_discr_value = 0x16;
198 constexpr uint16_t DW_AT_visibility = 0x17;
199 constexpr uint16_t DW_AT_import = 0x18;
200 constexpr uint16_t DW_AT_string_length = 0x19;
201 constexpr uint16_t DW_AT_common_reference = 0x1a;
202 constexpr uint16_t DW_AT_comp_dir = 0x1b;
203 constexpr uint16_t DW_AT_const_value = 0x1c;
204 constexpr uint16_t DW_AT_containing_type = 0x1d;
205 constexpr uint16_t DW_AT_default_value = 0x1e;
206 constexpr uint16_t DW_AT_inline = 0x20;
207 constexpr uint16_t DW_AT_is_optional = 0x21;
208 constexpr uint16_t DW_AT_lower_bound = 0x22;
209 constexpr uint16_t DW_AT_producer = 0x25;
210 constexpr uint16_t DW_AT_prototyped = 0x27;
211 constexpr uint16_t DW_AT_return_addr = 0x2a;
212 constexpr uint16_t DW_AT_start_scope = 0x2c;
213 constexpr uint16_t DW_AT_bit_stride = 0x2e;
214 constexpr uint16_t DW_AT_upper_bound = 0x2f;
215 constexpr uint16_t DW_AT_abstract_origin = 0x31;
216 constexpr uint16_t DW_AT_accessibility = 0x32;
217 constexpr uint16_t DW_AT_address_class = 0x33;
218 constexpr uint16_t DW_AT_artificial = 0x34;
219 constexpr uint16_t DW_AT_base_types = 0x35;
220 constexpr uint16_t DW_AT_calling_convention = 0x36;
221 constexpr uint16_t DW_AT_count = 0x37;
222 constexpr uint16_t DW_AT_data_member_location = 0x38;
223 constexpr uint16_t DW_AT_decl_column = 0x39;
224 constexpr uint16_t DW_AT_decl_file = 0x3a;
225 constexpr uint16_t DW_AT_decl_line = 0x3b;
226 constexpr uint16_t DW_AT_declaration = 0x3c;
227 constexpr uint16_t DW_AT_discr_list = 0x3d;
228 constexpr uint16_t DW_AT_encoding = 0x3e;
229 constexpr uint16_t DW_AT_external = 0x3f;
230 //...
231 constexpr uint16_t DW_AT_specification = 0x47;
232 constexpr uint16_t DW_AT_static_link = 0x48;
233 constexpr uint16_t DW_AT_type = 0x49;
234 constexpr uint16_t DW_AT_use_location = 0x4a;
235 constexpr uint16_t DW_AT_variable_parameter = 0x4b;
236 constexpr uint16_t DW_AT_virtuality = 0x4c;
237 constexpr uint16_t DW_AT_vtable_elem_location = 0x4d;
238 constexpr uint16_t DW_AT_allocated = 0x4e;
239 constexpr uint16_t DW_AT_associated = 0x4f;
240 constexpr uint16_t DW_AT_data_location = 0x50;
241 constexpr uint16_t DW_AT_byte_stride = 0x51;
242 constexpr uint16_t DW_AT_entry_pc = 0x52;
243 constexpr uint16_t DW_AT_use_UTF8 = 0x53;
244 constexpr uint16_t DW_AT_extension = 0x54;
245 constexpr uint16_t DW_AT_ranges = 0x55;
246 constexpr uint16_t DW_AT_trampoline = 0x56;
247 constexpr uint16_t DW_AT_call_column = 0x57;
248 constexpr uint16_t DW_AT_call_file = 0x58;
249 constexpr uint16_t DW_AT_call_line = 0x59;
250 constexpr uint16_t DW_AT_description = 0x5a;
251 constexpr uint16_t DW_AT_binary_scale = 0x5b;
252 constexpr uint16_t DW_AT_decimal_scale = 0x5c;
253 constexpr uint16_t DW_AT_small = 0x5d;
254 constexpr uint16_t DW_AT_decimal_sign = 0x5e;
255 constexpr uint16_t DW_AT_digit_count = 0x5f;
256 constexpr uint16_t DW_AT_picture_string = 0x60;
257 constexpr uint16_t DW_AT_mutable = 0x61;
258 constexpr uint16_t DW_AT_threads_scaled = 0x62;
259 constexpr uint16_t DW_AT_explicit = 0x63;
260 constexpr uint16_t DW_AT_object_pointer = 0x64;
261 constexpr uint16_t DW_AT_endianity = 0x65;
262 constexpr uint16_t DW_AT_elemental = 0x66;
263 constexpr uint16_t DW_AT_pure = 0x67;
264 constexpr uint16_t DW_AT_recursive = 0x68;
265 constexpr uint16_t DW_AT_signature = 0x69;
266 constexpr uint16_t DW_AT_main_subprogram = 0x6a;
267 constexpr uint16_t DW_AT_data_bit_offset = 0x6b;
268 constexpr uint16_t DW_AT_const_expr = 0x6c;
269 constexpr uint16_t DW_AT_enum_class = 0x6d;
270 constexpr uint16_t DW_AT_linkage_name = 0x6e;
271 constexpr uint16_t DW_AT_string_length_bit_size = 0x6f;
272 constexpr uint16_t DW_AT_string_length_byte_size = 0x70;
273 constexpr uint16_t DW_AT_rank = 0x71;
274 constexpr uint16_t DW_AT_str_offsets_base = 0x72;
275 //...
276 constexpr uint16_t DW_AT_loclists_base = 0x8c;
277 
278 constexpr uint16_t DW_AT_MAX_VALUE = DW_AT_loclists_base;
279 
280 // GNU extension attributes
281 constexpr uint16_t DW_AT_GNU_vector = 0x2107;
282 constexpr uint16_t DW_AT_GNU_template_name = 0x2110;
283 
284 // GNU extension attributes, http://www.dwarfstd.org/ShowIssue.php?issue=100909.2
285 constexpr uint16_t DW_AT_GNU_call_site_value = 0x2111;
286 constexpr uint16_t DW_AT_GNU_call_site_target = 0x2113;
287 constexpr uint16_t DW_AT_GNU_tail_call = 0x2115;
288 constexpr uint16_t DW_AT_GNU_all_tail_call_sites = 0x2116;
289 constexpr uint16_t DW_AT_GNU_all_call_sites = 0x2117;
290 
291 // GNU extension attributes, see http://gcc.gnu.org/wiki/DebugFission
292 constexpr uint16_t DW_AT_GNU_pubnames = 0x2134;
293 
294 // GNU extension attributes, see http://gcc.gnu.org/wiki/Discriminator
295 constexpr uint16_t DW_AT_GNU_discriminator = 0x2136;
296 constexpr uint16_t DW_AT_GNU_locviews = 0x2137;
297 constexpr uint16_t DW_AT_GNU_entry_view = 0x2138;
298 
299 // Dwarf calling convention constants
300 constexpr uint64_t DW_CC_LLVM_AAPCS_VFP = 0xc4;
301 
302 #endif  // NOGROD_DWARF_CONSTANTS_
303