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