blob: fbc721d2b0eea5169303f0367bfbf141eafd497c [file] [log] [blame]
Jason Molendaea84e762010-07-06 22:38:03 +00001//===-- DWARFDefines.c ------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "DWARFDefines.h"
Benjamin Kramer3f3ff5c2010-07-07 09:19:50 +000011#include <cstdio>
12#include <cstring>
Jason Molendaea84e762010-07-06 22:38:03 +000013#include <string>
14#include "lldb/Core/ConstString.h"
15
16namespace lldb_private {
17
18const char *
19DW_TAG_value_to_name (uint32_t val)
20{
21 static char invalid[100];
22
23 if (val == 0)
24 return "NULL";
25
26 const char *llvmstr = TagString (val);
27 if (llvmstr == NULL)
28 {
29 snprintf (invalid, sizeof (invalid), "Unknown DW_TAG constant: 0x%x", val);
30 return invalid;
31 }
32 return llvmstr;
33}
34
35const char *
36DW_TAG_value_to_englishy_name (uint32_t val)
37{
38 static char invalid[100];
39
40 if (val == 0)
41 return "NULL";
42
43 const char *llvmstr = TagString (val);
44 if (llvmstr == NULL)
45 {
46 snprintf (invalid, sizeof (invalid), "Unknown DW_TAG constant: 0x%x", val);
47 return invalid;
48 }
49
50 std::string str;
51 if (strncmp (llvmstr, "DW_TAG_", 7) == 0)
52 llvmstr += 7;
53
54 for (const char *i = llvmstr; *i != '\0'; i++)
55 str += *i == '_' ? ' ' : *i;
56
57 ConstString const_str (str.c_str());
58
59 return const_str.GetCString();
60}
61
62const char *
63DW_CHILDREN_value_to_name (uint8_t val)
64{
65 static char invalid[100];
66 const char *llvmstr = ChildrenString (val);
67 if (llvmstr == NULL)
68 {
69 snprintf (invalid, sizeof (invalid), "Unknown DW_CHILDREN constant: 0x%x", val);
70 return invalid;
71 }
72 return llvmstr;
73}
74
75const char *
76DW_AT_value_to_name (uint32_t val)
77{
78 static char invalid[100];
79 const char *llvmstr = AttributeString (val);
80 if (llvmstr == NULL)
81 {
82 snprintf (invalid, sizeof (invalid), "Unknown DW_AT constant: 0x%x", val);
83 return invalid;
84 }
85 return llvmstr;
86}
87
88const char *
89DW_AT_value_to_englishy_name (uint32_t val)
90{
91 static char invalid[100];
92 const char *llvmstr = AttributeString (val);
93 if (llvmstr == NULL)
94 {
95 snprintf (invalid, sizeof (invalid), "Unknown DW_AT constant: 0x%x", val);
96 return invalid;
97 }
98
99 std::string str;
100 if (strncmp (llvmstr, "DW_AT_", 6) == 0)
101 llvmstr += 6;
102
103 for (const char *i = llvmstr; *i != '\0'; i++)
104 str += *i == '_' ? ' ' : *i;
105
106 ConstString const_str (str.c_str());
107 return const_str.GetCString();
108}
109
110const char *
111DW_FORM_value_to_name (uint32_t val)
112{
113 static char invalid[100];
114 const char *llvmstr = FormEncodingString (val);
115 if (llvmstr == NULL)
116 {
117 snprintf (invalid, sizeof (invalid), "Unknown DW_FORM constant: 0x%x", val);
118 return invalid;
119 }
120 return llvmstr;
121}
122
123const char *
124DW_FORM_value_to_englishy_name (uint32_t val)
125{
126 static char invalid[100];
127 const char *llvmstr = FormEncodingString (val);
128 if (llvmstr == NULL)
129 {
130 snprintf (invalid, sizeof (invalid), "Unknown DW_FORM constant: 0x%x", val);
131 return invalid;
132 }
133
134 std::string str;
135 if (strncmp (llvmstr, "DW_FORM_", 8) == 0)
136 llvmstr += 8;
137
138 for (const char *i = llvmstr; *i != '\0'; i++)
139 str += *i == '_' ? ' ' : *i;
140
141 ConstString const_str (str.c_str());
142 return const_str.GetCString();
143}
144
145const char *
146DW_OP_value_to_name (uint32_t val)
147{
148 static char invalid[100];
149 const char *llvmstr = OperationEncodingString (val);
150 if (llvmstr == NULL)
151 {
152 snprintf (invalid, sizeof (invalid), "Unknown DW_OP constant: 0x%x", val);
153 return invalid;
154 }
155 return llvmstr;
156}
157
158const char *
159DW_OP_value_to_englishy_name (uint32_t val)
160{
161 static char invalid[100];
162 const char *llvmstr = OperationEncodingString (val);
163 if (llvmstr == NULL)
164 {
165 snprintf (invalid, sizeof (invalid), "Unknown DW_OP constant: 0x%x", val);
166 return invalid;
167 }
168
169 std::string str;
170 if (strncmp (llvmstr, "DW_OP_", 6) == 0)
171 llvmstr += 6;
172
173 for (const char *i = llvmstr; *i != '\0'; i++)
174 str += *i == '_' ? ' ' : *i;
175
176 ConstString const_str (str.c_str());
177 return const_str.GetCString();
178}
179
180DRC_class
181DW_OP_value_to_class (uint32_t val)
182{
183 switch (val) {
184 case 0x03: return DRC_ONEOPERAND;
185 case 0x06: return DRC_ZEROOPERANDS;
186 case 0x08: return DRC_ONEOPERAND;
187 case 0x09: return DRC_ONEOPERAND;
188 case 0x0a: return DRC_ONEOPERAND;
189 case 0x0b: return DRC_ONEOPERAND;
190 case 0x0c: return DRC_ONEOPERAND;
191 case 0x0d: return DRC_ONEOPERAND;
192 case 0x0e: return DRC_ONEOPERAND;
193 case 0x0f: return DRC_ONEOPERAND;
194 case 0x10: return DRC_ONEOPERAND;
195 case 0x11: return DRC_ONEOPERAND;
196 case 0x12: return DRC_ZEROOPERANDS;
197 case 0x13: return DRC_ZEROOPERANDS;
198 case 0x14: return DRC_ZEROOPERANDS;
199 case 0x15: return DRC_ONEOPERAND;
200 case 0x16: return DRC_ZEROOPERANDS;
201 case 0x17: return DRC_ZEROOPERANDS;
202 case 0x18: return DRC_ZEROOPERANDS;
203 case 0x19: return DRC_ZEROOPERANDS;
204 case 0x1a: return DRC_ZEROOPERANDS;
205 case 0x1b: return DRC_ZEROOPERANDS;
206 case 0x1c: return DRC_ZEROOPERANDS;
207 case 0x1d: return DRC_ZEROOPERANDS;
208 case 0x1e: return DRC_ZEROOPERANDS;
209 case 0x1f: return DRC_ZEROOPERANDS;
210 case 0x20: return DRC_ZEROOPERANDS;
211 case 0x21: return DRC_ZEROOPERANDS;
212 case 0x22: return DRC_ZEROOPERANDS;
213 case 0x23: return DRC_ONEOPERAND;
214 case 0x24: return DRC_ZEROOPERANDS;
215 case 0x25: return DRC_ZEROOPERANDS;
216 case 0x26: return DRC_ZEROOPERANDS;
217 case 0x27: return DRC_ZEROOPERANDS;
218 case 0x2f: return DRC_ONEOPERAND;
219 case 0x28: return DRC_ONEOPERAND;
220 case 0x29: return DRC_ZEROOPERANDS;
221 case 0x2a: return DRC_ZEROOPERANDS;
222 case 0x2b: return DRC_ZEROOPERANDS;
223 case 0x2c: return DRC_ZEROOPERANDS;
224 case 0x2d: return DRC_ZEROOPERANDS;
225 case 0x2e: return DRC_ZEROOPERANDS;
226 case 0x30: return DRC_ZEROOPERANDS;
227 case 0x31: return DRC_ZEROOPERANDS;
228 case 0x32: return DRC_ZEROOPERANDS;
229 case 0x33: return DRC_ZEROOPERANDS;
230 case 0x34: return DRC_ZEROOPERANDS;
231 case 0x35: return DRC_ZEROOPERANDS;
232 case 0x36: return DRC_ZEROOPERANDS;
233 case 0x37: return DRC_ZEROOPERANDS;
234 case 0x38: return DRC_ZEROOPERANDS;
235 case 0x39: return DRC_ZEROOPERANDS;
236 case 0x3a: return DRC_ZEROOPERANDS;
237 case 0x3b: return DRC_ZEROOPERANDS;
238 case 0x3c: return DRC_ZEROOPERANDS;
239 case 0x3d: return DRC_ZEROOPERANDS;
240 case 0x3e: return DRC_ZEROOPERANDS;
241 case 0x3f: return DRC_ZEROOPERANDS;
242 case 0x40: return DRC_ZEROOPERANDS;
243 case 0x41: return DRC_ZEROOPERANDS;
244 case 0x42: return DRC_ZEROOPERANDS;
245 case 0x43: return DRC_ZEROOPERANDS;
246 case 0x44: return DRC_ZEROOPERANDS;
247 case 0x45: return DRC_ZEROOPERANDS;
248 case 0x46: return DRC_ZEROOPERANDS;
249 case 0x47: return DRC_ZEROOPERANDS;
250 case 0x48: return DRC_ZEROOPERANDS;
251 case 0x49: return DRC_ZEROOPERANDS;
252 case 0x4a: return DRC_ZEROOPERANDS;
253 case 0x4b: return DRC_ZEROOPERANDS;
254 case 0x4c: return DRC_ZEROOPERANDS;
255 case 0x4d: return DRC_ZEROOPERANDS;
256 case 0x4e: return DRC_ZEROOPERANDS;
257 case 0x4f: return DRC_ZEROOPERANDS;
258 case 0x50: return DRC_ZEROOPERANDS;
259 case 0x51: return DRC_ZEROOPERANDS;
260 case 0x52: return DRC_ZEROOPERANDS;
261 case 0x53: return DRC_ZEROOPERANDS;
262 case 0x54: return DRC_ZEROOPERANDS;
263 case 0x55: return DRC_ZEROOPERANDS;
264 case 0x56: return DRC_ZEROOPERANDS;
265 case 0x57: return DRC_ZEROOPERANDS;
266 case 0x58: return DRC_ZEROOPERANDS;
267 case 0x59: return DRC_ZEROOPERANDS;
268 case 0x5a: return DRC_ZEROOPERANDS;
269 case 0x5b: return DRC_ZEROOPERANDS;
270 case 0x5c: return DRC_ZEROOPERANDS;
271 case 0x5d: return DRC_ZEROOPERANDS;
272 case 0x5e: return DRC_ZEROOPERANDS;
273 case 0x5f: return DRC_ZEROOPERANDS;
274 case 0x60: return DRC_ZEROOPERANDS;
275 case 0x61: return DRC_ZEROOPERANDS;
276 case 0x62: return DRC_ZEROOPERANDS;
277 case 0x63: return DRC_ZEROOPERANDS;
278 case 0x64: return DRC_ZEROOPERANDS;
279 case 0x65: return DRC_ZEROOPERANDS;
280 case 0x66: return DRC_ZEROOPERANDS;
281 case 0x67: return DRC_ZEROOPERANDS;
282 case 0x68: return DRC_ZEROOPERANDS;
283 case 0x69: return DRC_ZEROOPERANDS;
284 case 0x6a: return DRC_ZEROOPERANDS;
285 case 0x6b: return DRC_ZEROOPERANDS;
286 case 0x6c: return DRC_ZEROOPERANDS;
287 case 0x6d: return DRC_ZEROOPERANDS;
288 case 0x6e: return DRC_ZEROOPERANDS;
289 case 0x6f: return DRC_ZEROOPERANDS;
290 case 0x70: return DRC_ONEOPERAND;
291 case 0x71: return DRC_ONEOPERAND;
292 case 0x72: return DRC_ONEOPERAND;
293 case 0x73: return DRC_ONEOPERAND;
294 case 0x74: return DRC_ONEOPERAND;
295 case 0x75: return DRC_ONEOPERAND;
296 case 0x76: return DRC_ONEOPERAND;
297 case 0x77: return DRC_ONEOPERAND;
298 case 0x78: return DRC_ONEOPERAND;
299 case 0x79: return DRC_ONEOPERAND;
300 case 0x7a: return DRC_ONEOPERAND;
301 case 0x7b: return DRC_ONEOPERAND;
302 case 0x7c: return DRC_ONEOPERAND;
303 case 0x7d: return DRC_ONEOPERAND;
304 case 0x7e: return DRC_ONEOPERAND;
305 case 0x7f: return DRC_ONEOPERAND;
306 case 0x80: return DRC_ONEOPERAND;
307 case 0x81: return DRC_ONEOPERAND;
308 case 0x82: return DRC_ONEOPERAND;
309 case 0x83: return DRC_ONEOPERAND;
310 case 0x84: return DRC_ONEOPERAND;
311 case 0x85: return DRC_ONEOPERAND;
312 case 0x86: return DRC_ONEOPERAND;
313 case 0x87: return DRC_ONEOPERAND;
314 case 0x88: return DRC_ONEOPERAND;
315 case 0x89: return DRC_ONEOPERAND;
316 case 0x8a: return DRC_ONEOPERAND;
317 case 0x8b: return DRC_ONEOPERAND;
318 case 0x8c: return DRC_ONEOPERAND;
319 case 0x8d: return DRC_ONEOPERAND;
320 case 0x8e: return DRC_ONEOPERAND;
321 case 0x8f: return DRC_ONEOPERAND;
322 case 0x90: return DRC_ONEOPERAND;
323 case 0x91: return DRC_ONEOPERAND;
324 case 0x92: return DRC_TWOOPERANDS;
325 case 0x93: return DRC_ONEOPERAND;
326 case 0x94: return DRC_ONEOPERAND;
327 case 0x95: return DRC_ONEOPERAND;
328 case 0x96: return DRC_ZEROOPERANDS;
329 case 0x97: return DRC_DWARFv3 | DRC_ZEROOPERANDS;
330 case 0x98: return DRC_DWARFv3 | DRC_ONEOPERAND;
331 case 0x99: return DRC_DWARFv3 | DRC_ONEOPERAND;
332 case 0x9a: return DRC_DWARFv3 | DRC_ONEOPERAND;
333 case 0xf0: return DRC_ZEROOPERANDS; /* DW_OP_APPLE_uninit */
334 case 0xe0: return 0;
335 case 0xff: return 0;
336 default: return 0;
337 }
338}
339
340const char *
341DW_ATE_value_to_name (uint32_t val)
342{
343 static char invalid[100];
344 const char *llvmstr = AttributeEncodingString (val);
345 if (llvmstr == NULL)
346 {
347 snprintf (invalid, sizeof (invalid), "Unknown DW_ATE constant: 0x%x", val);
348 return invalid;
349 }
350 return llvmstr;
351}
352
353const char *
354DW_ACCESS_value_to_name (uint32_t val)
355{
356 static char invalid[100];
357
358 const char *llvmstr = AccessibilityString (val);
359 if (llvmstr == NULL)
360 {
361 snprintf (invalid, sizeof (invalid), "Unknown DW_ACCESS constant: 0x%x", val);
362 return invalid;
363 }
364 return llvmstr;
365}
366
367const char *
368DW_VIS_value_to_name (uint32_t val)
369{
370 static char invalid[100];
371 const char *llvmstr = VisibilityString (val);
372 if (llvmstr == NULL)
373 {
374 snprintf (invalid, sizeof (invalid), "Unknown DW_VIS constant: 0x%x", val);
375 return invalid;
376 }
377 return llvmstr;
378}
379
380const char *
381DW_VIRTUALITY_value_to_name (uint32_t val)
382{
383 static char invalid[100];
384 const char *llvmstr = VirtualityString (val);
385 if (llvmstr == NULL)
386 {
387 snprintf (invalid, sizeof (invalid), "Unknown DW_VIRTUALITY constant: 0x%x", val);
388 return invalid;
389 }
390 return llvmstr;
391}
392
393const char *
394DW_LANG_value_to_name (uint32_t val)
395{
396 static char invalid[100];
397 const char *llvmstr = LanguageString (val);
398 if (llvmstr == NULL)
399 {
400 snprintf (invalid, sizeof (invalid), "Unknown DW_LANG constant: 0x%x", val);
401 return invalid;
402 }
403 return llvmstr;
404}
405
406const char *
407DW_ID_value_to_name (uint32_t val)
408{
409 static char invalid[100];
410 const char *llvmstr = CaseString (val);
411 if (llvmstr == NULL)
412 {
413 snprintf (invalid, sizeof (invalid), "Unknown DW_ID constant: 0x%x", val);
414 return invalid;
415 }
416 return llvmstr;
417}
418
419const char *
420DW_CC_value_to_name (uint32_t val)
421{
422 static char invalid[100];
423 const char *llvmstr = ConventionString (val);
424 if (llvmstr == NULL)
425 {
426 snprintf (invalid, sizeof (invalid), "Unknown DW_CC constant: 0x%x", val);
427 return invalid;
428 }
429 return llvmstr;
430}
431
432const char *
433DW_INL_value_to_name (uint32_t val)
434{
435 static char invalid[100];
436 const char *llvmstr = InlineCodeString (val);
437 if (llvmstr == NULL)
438 {
439 snprintf (invalid, sizeof (invalid), "Unknown DW_INL constant: 0x%x", val);
440 return invalid;
441 }
442 return llvmstr;
443}
444
445const char *
446DW_ORD_value_to_name (uint32_t val)
447{
448 static char invalid[100];
449 const char *llvmstr = ArrayOrderString (val);
450 if (llvmstr == NULL)
451 {
452 snprintf (invalid, sizeof (invalid), "Unknown DW_ORD constant: 0x%x", val);
453 return invalid;
454 }
455 return llvmstr;
456}
457
458const char *
459DW_DSC_value_to_name (uint32_t val)
460{
461 static char invalid[100];
462 const char *llvmstr = DiscriminantString (val);
463 if (llvmstr == NULL)
464 {
465 snprintf (invalid, sizeof (invalid), "Unknown DW_DSC constant: 0x%x", val);
466 return invalid;
467 }
468 return llvmstr;
469}
470
471const char *
472DW_LNS_value_to_name (uint32_t val)
473{
474 static char invalid[100];
475 const char *llvmstr = LNStandardString (val);
476 if (llvmstr == NULL)
477 {
478 snprintf (invalid, sizeof (invalid), "Unknown DW_LNS constant: 0x%x", val);
479 return invalid;
480 }
481 return llvmstr;
482}
483
484const char *
485DW_LNE_value_to_name (uint32_t val)
486{
487 static char invalid[100];
488 const char *llvmstr = LNExtendedString (val);
489 if (llvmstr == NULL)
490 {
491 snprintf (invalid, sizeof (invalid), "Unknown DW_LNE constant: 0x%x", val);
492 return invalid;
493 }
494 return llvmstr;
495}
496
497const char *
498DW_MACINFO_value_to_name (uint32_t val)
499{
500 static char invalid[100];
501 const char *llvmstr = MacinfoString (val);
502 if (llvmstr == NULL)
503 {
504 snprintf (invalid, sizeof (invalid), "Unknown DW_MACINFO constant: 0x%x", val);
505 return invalid;
506 }
507 return llvmstr;
508}
509
510const char *
511DW_CFA_value_to_name (uint32_t val)
512{
513 static char invalid[100];
514 const char *llvmstr = CallFrameString (val);
515 if (llvmstr == NULL)
516 {
517 snprintf (invalid, sizeof (invalid), "Unknown DW_CFA constant: 0x%x", val);
518 return invalid;
519 }
520 return llvmstr;
521}
522
523DW_TAG_CategoryEnum
524get_tag_category (uint16_t tag)
525{
526 switch (tag)
527 {
528 case DW_TAG_array_type : return TagCategoryType;
529 case DW_TAG_class_type : return TagCategoryType;
530 case DW_TAG_entry_point : return TagCategoryProgram;
531 case DW_TAG_enumeration_type : return TagCategoryType;
532 case DW_TAG_formal_parameter : return TagCategoryVariable;
533 case DW_TAG_imported_declaration : return TagCategoryProgram;
534 case DW_TAG_label : return TagCategoryProgram;
535 case DW_TAG_lexical_block : return TagCategoryProgram;
536 case DW_TAG_member : return TagCategoryType;
537 case DW_TAG_pointer_type : return TagCategoryType;
538 case DW_TAG_reference_type : return TagCategoryType;
539 case DW_TAG_compile_unit : return TagCategoryProgram;
540 case DW_TAG_string_type : return TagCategoryType;
541 case DW_TAG_structure_type : return TagCategoryType;
542 case DW_TAG_subroutine_type : return TagCategoryType;
543 case DW_TAG_typedef : return TagCategoryType;
544 case DW_TAG_union_type : return TagCategoryType;
545 case DW_TAG_unspecified_parameters : return TagCategoryVariable;
546 case DW_TAG_variant : return TagCategoryType;
547 case DW_TAG_common_block : return TagCategoryProgram;
548 case DW_TAG_common_inclusion : return TagCategoryProgram;
549 case DW_TAG_inheritance : return TagCategoryType;
550 case DW_TAG_inlined_subroutine : return TagCategoryProgram;
551 case DW_TAG_module : return TagCategoryProgram;
552 case DW_TAG_ptr_to_member_type : return TagCategoryType;
553 case DW_TAG_set_type : return TagCategoryType;
554 case DW_TAG_subrange_type : return TagCategoryType;
555 case DW_TAG_with_stmt : return TagCategoryProgram;
556 case DW_TAG_access_declaration : return TagCategoryProgram;
557 case DW_TAG_base_type : return TagCategoryType;
558 case DW_TAG_catch_block : return TagCategoryProgram;
559 case DW_TAG_const_type : return TagCategoryType;
560 case DW_TAG_constant : return TagCategoryVariable;
561 case DW_TAG_enumerator : return TagCategoryType;
562 case DW_TAG_file_type : return TagCategoryType;
563 case DW_TAG_friend : return TagCategoryType;
564 case DW_TAG_namelist : return TagCategoryVariable;
565 case DW_TAG_namelist_item : return TagCategoryVariable;
566 case DW_TAG_packed_type : return TagCategoryType;
567 case DW_TAG_subprogram : return TagCategoryProgram;
568 case DW_TAG_template_type_parameter : return TagCategoryType;
569 case DW_TAG_template_value_parameter : return TagCategoryType;
570 case DW_TAG_thrown_type : return TagCategoryType;
571 case DW_TAG_try_block : return TagCategoryProgram;
572 case DW_TAG_variant_part : return TagCategoryType;
573 case DW_TAG_variable : return TagCategoryVariable;
574 case DW_TAG_volatile_type : return TagCategoryType;
575 case DW_TAG_dwarf_procedure : return TagCategoryProgram;
576 case DW_TAG_restrict_type : return TagCategoryType;
577 case DW_TAG_interface_type : return TagCategoryType;
578 case DW_TAG_namespace : return TagCategoryProgram;
579 case DW_TAG_imported_module : return TagCategoryProgram;
580 case DW_TAG_unspecified_type : return TagCategoryType;
581 case DW_TAG_partial_unit : return TagCategoryProgram;
582 case DW_TAG_imported_unit : return TagCategoryProgram;
583 case DW_TAG_shared_type : return TagCategoryType;
584 default: break;
585 }
586 return TagCategoryProgram;
587}
588
589} // namespace lldb_private
590