blob: 200546857de7ffeac8d1c6b15ca91d676e707ef1 [file] [log] [blame]
Jim Laskey22e47b92006-02-27 12:43:29 +00001//===-- llvm/Support/Dwarf.cpp - Dwarf Framework ----------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jim Laskey22e47b92006-02-27 12:43:29 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file contains support for generic dwarf information.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/Support/Dwarf.h"
Duncan P. N. Exon Smith6f5546c2015-02-03 21:16:49 +000015#include "llvm/ADT/StringSwitch.h"
David Blaikied0a869d2013-09-19 22:19:37 +000016#include "llvm/Support/ErrorHandling.h"
17
Chris Lattner3b326722009-12-29 07:28:33 +000018using namespace llvm;
19using namespace dwarf;
Jim Laskey22e47b92006-02-27 12:43:29 +000020
Mehdi Amini149f6ea2016-10-05 05:59:29 +000021StringRef llvm::dwarf::TagString(unsigned Tag) {
Mike Stump889285d2009-05-13 23:23:20 +000022 switch (Tag) {
Mehdi Amini149f6ea2016-10-05 05:59:29 +000023 default:
24 return StringRef();
Paul Robinson70b34532017-04-20 19:16:51 +000025#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR) \
Duncan P. N. Exon Smith981811e2015-02-03 21:13:16 +000026 case DW_TAG_##NAME: \
27 return "DW_TAG_" #NAME;
28#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +000029 }
Jim Laskey22e47b92006-02-27 12:43:29 +000030}
31
Duncan P. N. Exon Smith6f5546c2015-02-03 21:16:49 +000032unsigned llvm::dwarf::getTag(StringRef TagString) {
33 return StringSwitch<unsigned>(TagString)
Paul Robinson70b34532017-04-20 19:16:51 +000034#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR) \
35 .Case("DW_TAG_" #NAME, DW_TAG_##NAME)
Duncan P. N. Exon Smith6f5546c2015-02-03 21:16:49 +000036#include "llvm/Support/Dwarf.def"
37 .Default(DW_TAG_invalid);
38}
39
Paul Robinson70b34532017-04-20 19:16:51 +000040unsigned llvm::dwarf::TagVersion(dwarf::Tag Tag) {
41 switch (Tag) {
42 default:
43 return 0;
44#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR) \
45 case DW_TAG_##NAME: \
46 return VERSION;
47#include "llvm/Support/Dwarf.def"
48 }
49}
50
51unsigned llvm::dwarf::TagVendor(dwarf::Tag Tag) {
52 switch (Tag) {
53 default:
54 return 0;
55#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR) \
56 case DW_TAG_##NAME: \
57 return DWARF_VENDOR_##VENDOR;
58#include "llvm/Support/Dwarf.def"
59 }
60}
61
Mehdi Amini149f6ea2016-10-05 05:59:29 +000062StringRef llvm::dwarf::ChildrenString(unsigned Children) {
Mike Stump889285d2009-05-13 23:23:20 +000063 switch (Children) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +000064 case DW_CHILDREN_no: return "DW_CHILDREN_no";
65 case DW_CHILDREN_yes: return "DW_CHILDREN_yes";
Jim Laskey22e47b92006-02-27 12:43:29 +000066 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +000067 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +000068}
69
Mehdi Amini149f6ea2016-10-05 05:59:29 +000070StringRef llvm::dwarf::AttributeString(unsigned Attribute) {
Mike Stump889285d2009-05-13 23:23:20 +000071 switch (Attribute) {
Adrian Prantl7e55f172016-10-28 18:21:39 +000072 default:
73 return StringRef();
Paul Robinson70b34532017-04-20 19:16:51 +000074#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \
75 case DW_AT_##NAME: \
Adrian Prantl7e55f172016-10-28 18:21:39 +000076 return "DW_AT_" #NAME;
77#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +000078 }
Jim Laskey22e47b92006-02-27 12:43:29 +000079}
80
Paul Robinson70b34532017-04-20 19:16:51 +000081unsigned llvm::dwarf::AttributeVersion(dwarf::Attribute Attribute) {
82 switch (Attribute) {
83 default:
84 return 0;
85#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \
86 case DW_AT_##NAME: \
87 return VERSION;
88#include "llvm/Support/Dwarf.def"
89 }
90}
91
92unsigned llvm::dwarf::AttributeVendor(dwarf::Attribute Attribute) {
93 switch (Attribute) {
94 default:
95 return 0;
96#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \
97 case DW_AT_##NAME: \
98 return DWARF_VENDOR_##VENDOR;
99#include "llvm/Support/Dwarf.def"
100 }
101}
102
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000103StringRef llvm::dwarf::FormEncodingString(unsigned Encoding) {
Mike Stump889285d2009-05-13 23:23:20 +0000104 switch (Encoding) {
Adrian Prantl23865812016-10-28 22:56:45 +0000105 default:
106 return StringRef();
Paul Robinson70b34532017-04-20 19:16:51 +0000107#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \
108 case DW_FORM_##NAME: \
Adrian Prantl23865812016-10-28 22:56:45 +0000109 return "DW_FORM_" #NAME;
110#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000111 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000112}
113
Paul Robinson70b34532017-04-20 19:16:51 +0000114unsigned llvm::dwarf::FormVersion(dwarf::Form Form) {
115 switch (Form) {
116 default:
117 return 0;
118#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \
119 case DW_FORM_##NAME: \
120 return VERSION;
121#include "llvm/Support/Dwarf.def"
122 }
123}
124
125unsigned llvm::dwarf::FormVendor(dwarf::Form Form) {
126 switch (Form) {
127 default:
128 return 0;
129#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \
130 case DW_FORM_##NAME: \
131 return DWARF_VENDOR_##VENDOR;
132#include "llvm/Support/Dwarf.def"
133 }
134}
135
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000136StringRef llvm::dwarf::OperationEncodingString(unsigned Encoding) {
Mike Stump889285d2009-05-13 23:23:20 +0000137 switch (Encoding) {
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000138 default:
139 return StringRef();
Paul Robinson70b34532017-04-20 19:16:51 +0000140#define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
Duncan P. N. Exon Smith8f46ee62015-02-13 01:04:08 +0000141 case DW_OP_##NAME: \
142 return "DW_OP_" #NAME;
143#include "llvm/Support/Dwarf.def"
Adrian Prantl941fa752016-12-05 18:04:47 +0000144 case DW_OP_LLVM_fragment:
145 return "DW_OP_LLVM_fragment";
Jim Laskey22e47b92006-02-27 12:43:29 +0000146 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000147}
148
Duncan P. N. Exon Smith3b631d22015-02-13 01:05:00 +0000149unsigned llvm::dwarf::getOperationEncoding(StringRef OperationEncodingString) {
150 return StringSwitch<unsigned>(OperationEncodingString)
Paul Robinson70b34532017-04-20 19:16:51 +0000151#define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
152 .Case("DW_OP_" #NAME, DW_OP_##NAME)
Duncan P. N. Exon Smith3b631d22015-02-13 01:05:00 +0000153#include "llvm/Support/Dwarf.def"
Adrian Prantl941fa752016-12-05 18:04:47 +0000154 .Case("DW_OP_LLVM_fragment", DW_OP_LLVM_fragment)
Duncan P. N. Exon Smith3b631d22015-02-13 01:05:00 +0000155 .Default(0);
156}
157
Paul Robinson70b34532017-04-20 19:16:51 +0000158unsigned llvm::dwarf::OperationVersion(dwarf::LocationAtom Op) {
159 switch (Op) {
160 default:
161 return 0;
162#define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
163 case DW_OP_##NAME: \
164 return VERSION;
165#include "llvm/Support/Dwarf.def"
166 }
167}
168
169unsigned llvm::dwarf::OperationVendor(dwarf::LocationAtom Op) {
170 switch (Op) {
171 default:
172 return 0;
173#define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
174 case DW_OP_##NAME: \
175 return DWARF_VENDOR_##VENDOR;
176#include "llvm/Support/Dwarf.def"
177 }
178}
179
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000180StringRef llvm::dwarf::AttributeEncodingString(unsigned Encoding) {
Mike Stump889285d2009-05-13 23:23:20 +0000181 switch (Encoding) {
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000182 default:
183 return StringRef();
Paul Robinson70b34532017-04-20 19:16:51 +0000184#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
Duncan P. N. Exon Smithdd563dd2015-02-06 23:45:37 +0000185 case DW_ATE_##NAME: \
186 return "DW_ATE_" #NAME;
187#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000188 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000189}
190
Duncan P. N. Exon Smithe07f13a2015-02-06 23:46:49 +0000191unsigned llvm::dwarf::getAttributeEncoding(StringRef EncodingString) {
192 return StringSwitch<unsigned>(EncodingString)
Paul Robinson70b34532017-04-20 19:16:51 +0000193#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
194 .Case("DW_ATE_" #NAME, DW_ATE_##NAME)
Duncan P. N. Exon Smithe07f13a2015-02-06 23:46:49 +0000195#include "llvm/Support/Dwarf.def"
196 .Default(0);
197}
198
Paul Robinson70b34532017-04-20 19:16:51 +0000199unsigned llvm::dwarf::AttributeEncodingVersion(dwarf::TypeKind ATE) {
200 switch (ATE) {
201 default:
202 return 0;
203#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
204 case DW_ATE_##NAME: \
205 return VERSION;
206#include "llvm/Support/Dwarf.def"
207 }
208}
209
210unsigned llvm::dwarf::AttributeEncodingVendor(dwarf::TypeKind ATE) {
211 switch (ATE) {
212 default:
213 return 0;
214#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
215 case DW_ATE_##NAME: \
216 return DWARF_VENDOR_##VENDOR;
217#include "llvm/Support/Dwarf.def"
218 }
219}
220
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000221StringRef llvm::dwarf::DecimalSignString(unsigned Sign) {
Mike Stump889285d2009-05-13 23:23:20 +0000222 switch (Sign) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000223 case DW_DS_unsigned: return "DW_DS_unsigned";
224 case DW_DS_leading_overpunch: return "DW_DS_leading_overpunch";
225 case DW_DS_trailing_overpunch: return "DW_DS_trailing_overpunch";
226 case DW_DS_leading_separate: return "DW_DS_leading_separate";
227 case DW_DS_trailing_separate: return "DW_DS_trailing_separate";
Jim Laskey22e47b92006-02-27 12:43:29 +0000228 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000229 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000230}
231
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000232StringRef llvm::dwarf::EndianityString(unsigned Endian) {
Mike Stump889285d2009-05-13 23:23:20 +0000233 switch (Endian) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000234 case DW_END_default: return "DW_END_default";
235 case DW_END_big: return "DW_END_big";
236 case DW_END_little: return "DW_END_little";
237 case DW_END_lo_user: return "DW_END_lo_user";
238 case DW_END_hi_user: return "DW_END_hi_user";
Jim Laskey22e47b92006-02-27 12:43:29 +0000239 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000240 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000241}
242
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000243StringRef llvm::dwarf::AccessibilityString(unsigned Access) {
Mike Stump889285d2009-05-13 23:23:20 +0000244 switch (Access) {
Chris Lattner0709a272009-12-29 21:09:57 +0000245 // Accessibility codes
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000246 case DW_ACCESS_public: return "DW_ACCESS_public";
247 case DW_ACCESS_protected: return "DW_ACCESS_protected";
248 case DW_ACCESS_private: return "DW_ACCESS_private";
Jim Laskey22e47b92006-02-27 12:43:29 +0000249 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000250 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000251}
252
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000253StringRef llvm::dwarf::VisibilityString(unsigned Visibility) {
Mike Stump889285d2009-05-13 23:23:20 +0000254 switch (Visibility) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000255 case DW_VIS_local: return "DW_VIS_local";
256 case DW_VIS_exported: return "DW_VIS_exported";
257 case DW_VIS_qualified: return "DW_VIS_qualified";
Jim Laskey22e47b92006-02-27 12:43:29 +0000258 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000259 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000260}
261
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000262StringRef llvm::dwarf::VirtualityString(unsigned Virtuality) {
Mike Stump889285d2009-05-13 23:23:20 +0000263 switch (Virtuality) {
Duncan P. N. Exon Smithd6f35742015-02-07 00:36:23 +0000264 default:
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000265 return StringRef();
Duncan P. N. Exon Smithd6f35742015-02-07 00:36:23 +0000266#define HANDLE_DW_VIRTUALITY(ID, NAME) \
267 case DW_VIRTUALITY_##NAME: \
268 return "DW_VIRTUALITY_" #NAME;
269#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000270 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000271}
272
Duncan P. N. Exon Smithe7e2abe2015-02-07 00:37:15 +0000273unsigned llvm::dwarf::getVirtuality(StringRef VirtualityString) {
274 return StringSwitch<unsigned>(VirtualityString)
275#define HANDLE_DW_VIRTUALITY(ID, NAME) \
276 .Case("DW_VIRTUALITY_" #NAME, DW_VIRTUALITY_##NAME)
277#include "llvm/Support/Dwarf.def"
278 .Default(DW_VIRTUALITY_invalid);
279}
280
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000281StringRef llvm::dwarf::LanguageString(unsigned Language) {
Mike Stump889285d2009-05-13 23:23:20 +0000282 switch (Language) {
Duncan P. N. Exon Smith03179442015-02-06 22:53:19 +0000283 default:
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000284 return StringRef();
Paul Robinson70b34532017-04-20 19:16:51 +0000285#define HANDLE_DW_LANG(ID, NAME, VERSION, VENDOR) \
Duncan P. N. Exon Smith03179442015-02-06 22:53:19 +0000286 case DW_LANG_##NAME: \
287 return "DW_LANG_" #NAME;
288#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000289 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000290}
291
Duncan P. N. Exon Smithd40af002015-02-06 22:55:13 +0000292unsigned llvm::dwarf::getLanguage(StringRef LanguageString) {
293 return StringSwitch<unsigned>(LanguageString)
Paul Robinson70b34532017-04-20 19:16:51 +0000294#define HANDLE_DW_LANG(ID, NAME, VERSION, VENDOR) \
295 .Case("DW_LANG_" #NAME, DW_LANG_##NAME)
Duncan P. N. Exon Smithd40af002015-02-06 22:55:13 +0000296#include "llvm/Support/Dwarf.def"
297 .Default(0);
298}
299
Paul Robinson70b34532017-04-20 19:16:51 +0000300unsigned llvm::dwarf::LanguageVersion(dwarf::SourceLanguage Lang) {
301 switch (Lang) {
302 default:
303 return 0;
304#define HANDLE_DW_LANG(ID, NAME, VERSION, VENDOR) \
305 case DW_LANG_##NAME: \
306 return VERSION;
307#include "llvm/Support/Dwarf.def"
308 }
309}
310
311unsigned llvm::dwarf::LanguageVendor(dwarf::SourceLanguage Lang) {
312 switch (Lang) {
313 default:
314 return 0;
315#define HANDLE_DW_LANG(ID, NAME, VERSION, VENDOR) \
316 case DW_LANG_##NAME: \
317 return DWARF_VENDOR_##VENDOR;
318#include "llvm/Support/Dwarf.def"
319 }
320}
321
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000322StringRef llvm::dwarf::CaseString(unsigned Case) {
Chris Lattner0709a272009-12-29 21:09:57 +0000323 switch (Case) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000324 case DW_ID_case_sensitive: return "DW_ID_case_sensitive";
325 case DW_ID_up_case: return "DW_ID_up_case";
326 case DW_ID_down_case: return "DW_ID_down_case";
327 case DW_ID_case_insensitive: return "DW_ID_case_insensitive";
Jim Laskey22e47b92006-02-27 12:43:29 +0000328 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000329 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000330}
331
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000332StringRef llvm::dwarf::ConventionString(unsigned CC) {
Reid Klecknerde3d8b52016-06-08 20:34:29 +0000333 switch (CC) {
334 default:
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000335 return StringRef();
Reid Klecknerde3d8b52016-06-08 20:34:29 +0000336#define HANDLE_DW_CC(ID, NAME) \
337 case DW_CC_##NAME: \
338 return "DW_CC_" #NAME;
339#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000340 }
Reid Klecknerde3d8b52016-06-08 20:34:29 +0000341}
342
343unsigned llvm::dwarf::getCallingConvention(StringRef CCString) {
344 return StringSwitch<unsigned>(CCString)
345#define HANDLE_DW_CC(ID, NAME) .Case("DW_CC_" #NAME, DW_CC_##NAME)
346#include "llvm/Support/Dwarf.def"
347 .Default(0);
Jim Laskey22e47b92006-02-27 12:43:29 +0000348}
349
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000350StringRef llvm::dwarf::InlineCodeString(unsigned Code) {
Chris Lattner0709a272009-12-29 21:09:57 +0000351 switch (Code) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000352 case DW_INL_not_inlined: return "DW_INL_not_inlined";
353 case DW_INL_inlined: return "DW_INL_inlined";
354 case DW_INL_declared_not_inlined: return "DW_INL_declared_not_inlined";
355 case DW_INL_declared_inlined: return "DW_INL_declared_inlined";
Jim Laskey22e47b92006-02-27 12:43:29 +0000356 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000357 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000358}
359
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000360StringRef llvm::dwarf::ArrayOrderString(unsigned Order) {
Chris Lattner0709a272009-12-29 21:09:57 +0000361 switch (Order) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000362 case DW_ORD_row_major: return "DW_ORD_row_major";
363 case DW_ORD_col_major: return "DW_ORD_col_major";
Jim Laskey22e47b92006-02-27 12:43:29 +0000364 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000365 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000366}
367
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000368StringRef llvm::dwarf::DiscriminantString(unsigned Discriminant) {
Chris Lattner0709a272009-12-29 21:09:57 +0000369 switch (Discriminant) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000370 case DW_DSC_label: return "DW_DSC_label";
371 case DW_DSC_range: return "DW_DSC_range";
Jim Laskey22e47b92006-02-27 12:43:29 +0000372 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000373 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000374}
375
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000376StringRef llvm::dwarf::LNStandardString(unsigned Standard) {
Chris Lattner0709a272009-12-29 21:09:57 +0000377 switch (Standard) {
Adrian Prantl79deba62016-10-28 22:56:59 +0000378 default:
379 return StringRef();
380#define HANDLE_DW_LNS(ID, NAME) \
381 case DW_LNS_##NAME: \
382 return "DW_LNS_" #NAME;
383#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000384 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000385}
386
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000387StringRef llvm::dwarf::LNExtendedString(unsigned Encoding) {
Chris Lattner0709a272009-12-29 21:09:57 +0000388 switch (Encoding) {
Adrian Prantl3cd37d02016-10-28 22:57:02 +0000389 default:
390 return StringRef();
391#define HANDLE_DW_LNE(ID, NAME) \
392 case DW_LNE_##NAME: \
393 return "DW_LNE_" #NAME;
394#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000395 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000396}
397
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000398StringRef llvm::dwarf::MacinfoString(unsigned Encoding) {
Chris Lattner0709a272009-12-29 21:09:57 +0000399 switch (Encoding) {
400 // Macinfo Type Encodings
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000401 case DW_MACINFO_define: return "DW_MACINFO_define";
402 case DW_MACINFO_undef: return "DW_MACINFO_undef";
403 case DW_MACINFO_start_file: return "DW_MACINFO_start_file";
404 case DW_MACINFO_end_file: return "DW_MACINFO_end_file";
405 case DW_MACINFO_vendor_ext: return "DW_MACINFO_vendor_ext";
Amjad Aboude59cc3e2015-11-12 09:38:54 +0000406 case DW_MACINFO_invalid: return "DW_MACINFO_invalid";
Jim Laskey22e47b92006-02-27 12:43:29 +0000407 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000408 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000409}
410
Amjad Abouda9bcf162015-12-10 12:56:35 +0000411unsigned llvm::dwarf::getMacinfo(StringRef MacinfoString) {
412 return StringSwitch<unsigned>(MacinfoString)
413 .Case("DW_MACINFO_define", DW_MACINFO_define)
414 .Case("DW_MACINFO_undef", DW_MACINFO_undef)
415 .Case("DW_MACINFO_start_file", DW_MACINFO_start_file)
416 .Case("DW_MACINFO_end_file", DW_MACINFO_end_file)
417 .Case("DW_MACINFO_vendor_ext", DW_MACINFO_vendor_ext)
418 .Default(DW_MACINFO_invalid);
419}
420
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000421StringRef llvm::dwarf::CallFrameString(unsigned Encoding) {
Chris Lattner0709a272009-12-29 21:09:57 +0000422 switch (Encoding) {
Adrian Prantl44a44612016-10-28 22:56:53 +0000423 default:
424 return StringRef();
425#define HANDLE_DW_CFA(ID, NAME) \
426 case DW_CFA_##NAME: \
427 return "DW_CFA_" #NAME;
428#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000429 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000430}
Eric Christophercf7289f2013-09-05 18:20:16 +0000431
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000432StringRef llvm::dwarf::ApplePropertyString(unsigned Prop) {
Frederic Rissb5e53ee2014-10-09 20:43:04 +0000433 switch (Prop) {
Adrian Prantl8580d3f2016-10-28 22:56:56 +0000434 default:
435 return StringRef();
436#define HANDLE_DW_APPLE_PROPERTY(ID, NAME) \
437 case DW_APPLE_PROPERTY_##NAME: \
438 return "DW_APPLE_PROPERTY_" #NAME;
439#include "llvm/Support/Dwarf.def"
Frederic Rissb5e53ee2014-10-09 20:43:04 +0000440 }
Frederic Rissb5e53ee2014-10-09 20:43:04 +0000441}
442
Paul Robinsoncddd6042017-02-28 20:24:55 +0000443StringRef llvm::dwarf::UnitTypeString(unsigned UT) {
444 switch (UT) {
445 default:
446 return StringRef();
447#define HANDLE_DW_UT(ID, NAME) \
448 case DW_UT_##NAME: \
449 return "DW_UT_" #NAME;
450#include "llvm/Support/Dwarf.def"
451 }
452}
453
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000454StringRef llvm::dwarf::AtomTypeString(unsigned AT) {
Eric Christophercf7289f2013-09-05 18:20:16 +0000455 switch (AT) {
456 case dwarf::DW_ATOM_null:
457 return "DW_ATOM_null";
458 case dwarf::DW_ATOM_die_offset:
459 return "DW_ATOM_die_offset";
460 case DW_ATOM_cu_offset:
461 return "DW_ATOM_cu_offset";
462 case DW_ATOM_die_tag:
463 return "DW_ATOM_die_tag";
464 case DW_ATOM_type_flags:
465 return "DW_ATOM_type_flags";
466 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000467 return StringRef();
Eric Christophercf7289f2013-09-05 18:20:16 +0000468}
David Blaikied0a869d2013-09-19 22:19:37 +0000469
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000470StringRef llvm::dwarf::GDBIndexEntryKindString(GDBIndexEntryKind Kind) {
David Blaikied0a869d2013-09-19 22:19:37 +0000471 switch (Kind) {
472 case GIEK_NONE:
473 return "NONE";
474 case GIEK_TYPE:
475 return "TYPE";
476 case GIEK_VARIABLE:
477 return "VARIABLE";
478 case GIEK_FUNCTION:
479 return "FUNCTION";
480 case GIEK_OTHER:
481 return "OTHER";
482 case GIEK_UNUSED5:
483 return "UNUSED5";
484 case GIEK_UNUSED6:
485 return "UNUSED6";
486 case GIEK_UNUSED7:
487 return "UNUSED7";
488 }
489 llvm_unreachable("Unknown GDBIndexEntryKind value");
490}
491
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000492StringRef
493llvm::dwarf::GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage) {
David Blaikied0a869d2013-09-19 22:19:37 +0000494 switch (Linkage) {
495 case GIEL_EXTERNAL:
496 return "EXTERNAL";
497 case GIEL_STATIC:
498 return "STATIC";
499 }
500 llvm_unreachable("Unknown GDBIndexEntryLinkage value");
501}
Frederic Riss878065b2014-09-04 19:39:20 +0000502
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000503StringRef llvm::dwarf::AttributeValueString(uint16_t Attr, unsigned Val) {
Frederic Riss878065b2014-09-04 19:39:20 +0000504 switch (Attr) {
505 case DW_AT_accessibility:
506 return AccessibilityString(Val);
507 case DW_AT_virtuality:
508 return VirtualityString(Val);
509 case DW_AT_language:
510 return LanguageString(Val);
511 case DW_AT_encoding:
512 return AttributeEncodingString(Val);
513 case DW_AT_decimal_sign:
514 return DecimalSignString(Val);
515 case DW_AT_endianity:
516 return EndianityString(Val);
517 case DW_AT_visibility:
518 return VisibilityString(Val);
519 case DW_AT_identifier_case:
520 return CaseString(Val);
521 case DW_AT_calling_convention:
522 return ConventionString(Val);
523 case DW_AT_inline:
524 return InlineCodeString(Val);
525 case DW_AT_ordering:
526 return ArrayOrderString(Val);
527 case DW_AT_discr_value:
528 return DiscriminantString(Val);
529 }
530
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000531 return StringRef();
Frederic Riss878065b2014-09-04 19:39:20 +0000532}
Paul Robinson70b34532017-04-20 19:16:51 +0000533
534bool llvm::dwarf::isValidFormForVersion(Form F, unsigned Version,
535 bool ExtensionsOk) {
536 if (FormVendor(F) == DWARF_VENDOR_DWARF) {
537 unsigned FV = FormVersion(F);
538 return FV > 0 && FV <= Version;
539 }
540 return ExtensionsOk;
541}