blob: cd8368152fbbd644eedd059307457039695648c8 [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();
Duncan P. N. Exon Smith981811e2015-02-03 21:13:16 +000025#define HANDLE_DW_TAG(ID, NAME) \
26 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)
34#define HANDLE_DW_TAG(ID, NAME) .Case("DW_TAG_" #NAME, DW_TAG_##NAME)
35#include "llvm/Support/Dwarf.def"
36 .Default(DW_TAG_invalid);
37}
38
Mehdi Amini149f6ea2016-10-05 05:59:29 +000039StringRef llvm::dwarf::ChildrenString(unsigned Children) {
Mike Stump889285d2009-05-13 23:23:20 +000040 switch (Children) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +000041 case DW_CHILDREN_no: return "DW_CHILDREN_no";
42 case DW_CHILDREN_yes: return "DW_CHILDREN_yes";
Jim Laskey22e47b92006-02-27 12:43:29 +000043 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +000044 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +000045}
46
Mehdi Amini149f6ea2016-10-05 05:59:29 +000047StringRef llvm::dwarf::AttributeString(unsigned Attribute) {
Mike Stump889285d2009-05-13 23:23:20 +000048 switch (Attribute) {
Adrian Prantl7e55f172016-10-28 18:21:39 +000049 default:
50 return StringRef();
51#define HANDLE_DW_AT(ID, NAME) \
52 case DW_AT_##NAME: \
53 return "DW_AT_" #NAME;
54#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +000055 }
Jim Laskey22e47b92006-02-27 12:43:29 +000056}
57
Mehdi Amini149f6ea2016-10-05 05:59:29 +000058StringRef llvm::dwarf::FormEncodingString(unsigned Encoding) {
Mike Stump889285d2009-05-13 23:23:20 +000059 switch (Encoding) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +000060 case DW_FORM_addr: return "DW_FORM_addr";
61 case DW_FORM_block2: return "DW_FORM_block2";
62 case DW_FORM_block4: return "DW_FORM_block4";
63 case DW_FORM_data2: return "DW_FORM_data2";
64 case DW_FORM_data4: return "DW_FORM_data4";
65 case DW_FORM_data8: return "DW_FORM_data8";
66 case DW_FORM_string: return "DW_FORM_string";
67 case DW_FORM_block: return "DW_FORM_block";
68 case DW_FORM_block1: return "DW_FORM_block1";
69 case DW_FORM_data1: return "DW_FORM_data1";
70 case DW_FORM_flag: return "DW_FORM_flag";
71 case DW_FORM_sdata: return "DW_FORM_sdata";
72 case DW_FORM_strp: return "DW_FORM_strp";
73 case DW_FORM_udata: return "DW_FORM_udata";
74 case DW_FORM_ref_addr: return "DW_FORM_ref_addr";
75 case DW_FORM_ref1: return "DW_FORM_ref1";
76 case DW_FORM_ref2: return "DW_FORM_ref2";
77 case DW_FORM_ref4: return "DW_FORM_ref4";
78 case DW_FORM_ref8: return "DW_FORM_ref8";
79 case DW_FORM_ref_udata: return "DW_FORM_ref_udata";
80 case DW_FORM_indirect: return "DW_FORM_indirect";
Nick Lewycky34368122011-09-15 04:23:44 +000081 case DW_FORM_sec_offset: return "DW_FORM_sec_offset";
82 case DW_FORM_exprloc: return "DW_FORM_exprloc";
83 case DW_FORM_flag_present: return "DW_FORM_flag_present";
84 case DW_FORM_ref_sig8: return "DW_FORM_ref_sig8";
Eric Christopherc7e43ff2012-11-30 23:20:43 +000085
86 // DWARF5 Fission Extension Forms
87 case DW_FORM_GNU_addr_index: return "DW_FORM_GNU_addr_index";
88 case DW_FORM_GNU_str_index: return "DW_FORM_GNU_str_index";
Alexey Samsonovbf19a572015-05-19 20:29:28 +000089
90 // Alternate debug sections proposal (output of "dwz" tool).
91 case DW_FORM_GNU_ref_alt: return "DW_FORM_GNU_ref_alt";
92 case DW_FORM_GNU_strp_alt: return "DW_FORM_GNU_strp_alt";
Jim Laskey22e47b92006-02-27 12:43:29 +000093 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +000094 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +000095}
96
Mehdi Amini149f6ea2016-10-05 05:59:29 +000097StringRef llvm::dwarf::OperationEncodingString(unsigned Encoding) {
Mike Stump889285d2009-05-13 23:23:20 +000098 switch (Encoding) {
Mehdi Amini149f6ea2016-10-05 05:59:29 +000099 default:
100 return StringRef();
Duncan P. N. Exon Smith8f46ee62015-02-13 01:04:08 +0000101#define HANDLE_DW_OP(ID, NAME) \
102 case DW_OP_##NAME: \
103 return "DW_OP_" #NAME;
104#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000105 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000106}
107
Duncan P. N. Exon Smith3b631d22015-02-13 01:05:00 +0000108unsigned llvm::dwarf::getOperationEncoding(StringRef OperationEncodingString) {
109 return StringSwitch<unsigned>(OperationEncodingString)
110#define HANDLE_DW_OP(ID, NAME) .Case("DW_OP_" #NAME, DW_OP_##NAME)
111#include "llvm/Support/Dwarf.def"
112 .Default(0);
113}
114
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000115StringRef llvm::dwarf::AttributeEncodingString(unsigned Encoding) {
Mike Stump889285d2009-05-13 23:23:20 +0000116 switch (Encoding) {
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000117 default:
118 return StringRef();
Duncan P. N. Exon Smithdd563dd2015-02-06 23:45:37 +0000119#define HANDLE_DW_ATE(ID, NAME) \
120 case DW_ATE_##NAME: \
121 return "DW_ATE_" #NAME;
122#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000123 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000124}
125
Duncan P. N. Exon Smithe07f13a2015-02-06 23:46:49 +0000126unsigned llvm::dwarf::getAttributeEncoding(StringRef EncodingString) {
127 return StringSwitch<unsigned>(EncodingString)
128#define HANDLE_DW_ATE(ID, NAME) .Case("DW_ATE_" #NAME, DW_ATE_##NAME)
129#include "llvm/Support/Dwarf.def"
130 .Default(0);
131}
132
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000133StringRef llvm::dwarf::DecimalSignString(unsigned Sign) {
Mike Stump889285d2009-05-13 23:23:20 +0000134 switch (Sign) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000135 case DW_DS_unsigned: return "DW_DS_unsigned";
136 case DW_DS_leading_overpunch: return "DW_DS_leading_overpunch";
137 case DW_DS_trailing_overpunch: return "DW_DS_trailing_overpunch";
138 case DW_DS_leading_separate: return "DW_DS_leading_separate";
139 case DW_DS_trailing_separate: return "DW_DS_trailing_separate";
Jim Laskey22e47b92006-02-27 12:43:29 +0000140 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000141 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000142}
143
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000144StringRef llvm::dwarf::EndianityString(unsigned Endian) {
Mike Stump889285d2009-05-13 23:23:20 +0000145 switch (Endian) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000146 case DW_END_default: return "DW_END_default";
147 case DW_END_big: return "DW_END_big";
148 case DW_END_little: return "DW_END_little";
149 case DW_END_lo_user: return "DW_END_lo_user";
150 case DW_END_hi_user: return "DW_END_hi_user";
Jim Laskey22e47b92006-02-27 12:43:29 +0000151 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000152 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000153}
154
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000155StringRef llvm::dwarf::AccessibilityString(unsigned Access) {
Mike Stump889285d2009-05-13 23:23:20 +0000156 switch (Access) {
Chris Lattner0709a272009-12-29 21:09:57 +0000157 // Accessibility codes
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000158 case DW_ACCESS_public: return "DW_ACCESS_public";
159 case DW_ACCESS_protected: return "DW_ACCESS_protected";
160 case DW_ACCESS_private: return "DW_ACCESS_private";
Jim Laskey22e47b92006-02-27 12:43:29 +0000161 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000162 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000163}
164
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000165StringRef llvm::dwarf::VisibilityString(unsigned Visibility) {
Mike Stump889285d2009-05-13 23:23:20 +0000166 switch (Visibility) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000167 case DW_VIS_local: return "DW_VIS_local";
168 case DW_VIS_exported: return "DW_VIS_exported";
169 case DW_VIS_qualified: return "DW_VIS_qualified";
Jim Laskey22e47b92006-02-27 12:43:29 +0000170 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000171 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000172}
173
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000174StringRef llvm::dwarf::VirtualityString(unsigned Virtuality) {
Mike Stump889285d2009-05-13 23:23:20 +0000175 switch (Virtuality) {
Duncan P. N. Exon Smithd6f35742015-02-07 00:36:23 +0000176 default:
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000177 return StringRef();
Duncan P. N. Exon Smithd6f35742015-02-07 00:36:23 +0000178#define HANDLE_DW_VIRTUALITY(ID, NAME) \
179 case DW_VIRTUALITY_##NAME: \
180 return "DW_VIRTUALITY_" #NAME;
181#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000182 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000183}
184
Duncan P. N. Exon Smithe7e2abe2015-02-07 00:37:15 +0000185unsigned llvm::dwarf::getVirtuality(StringRef VirtualityString) {
186 return StringSwitch<unsigned>(VirtualityString)
187#define HANDLE_DW_VIRTUALITY(ID, NAME) \
188 .Case("DW_VIRTUALITY_" #NAME, DW_VIRTUALITY_##NAME)
189#include "llvm/Support/Dwarf.def"
190 .Default(DW_VIRTUALITY_invalid);
191}
192
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000193StringRef llvm::dwarf::LanguageString(unsigned Language) {
Mike Stump889285d2009-05-13 23:23:20 +0000194 switch (Language) {
Duncan P. N. Exon Smith03179442015-02-06 22:53:19 +0000195 default:
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000196 return StringRef();
Duncan P. N. Exon Smith03179442015-02-06 22:53:19 +0000197#define HANDLE_DW_LANG(ID, NAME) \
198 case DW_LANG_##NAME: \
199 return "DW_LANG_" #NAME;
200#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000201 }
Jim Laskey22e47b92006-02-27 12:43:29 +0000202}
203
Duncan P. N. Exon Smithd40af002015-02-06 22:55:13 +0000204unsigned llvm::dwarf::getLanguage(StringRef LanguageString) {
205 return StringSwitch<unsigned>(LanguageString)
206#define HANDLE_DW_LANG(ID, NAME) .Case("DW_LANG_" #NAME, DW_LANG_##NAME)
207#include "llvm/Support/Dwarf.def"
208 .Default(0);
209}
210
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000211StringRef llvm::dwarf::CaseString(unsigned Case) {
Chris Lattner0709a272009-12-29 21:09:57 +0000212 switch (Case) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000213 case DW_ID_case_sensitive: return "DW_ID_case_sensitive";
214 case DW_ID_up_case: return "DW_ID_up_case";
215 case DW_ID_down_case: return "DW_ID_down_case";
216 case DW_ID_case_insensitive: return "DW_ID_case_insensitive";
Jim Laskey22e47b92006-02-27 12:43:29 +0000217 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000218 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000219}
220
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000221StringRef llvm::dwarf::ConventionString(unsigned CC) {
Reid Klecknerde3d8b52016-06-08 20:34:29 +0000222 switch (CC) {
223 default:
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000224 return StringRef();
Reid Klecknerde3d8b52016-06-08 20:34:29 +0000225#define HANDLE_DW_CC(ID, NAME) \
226 case DW_CC_##NAME: \
227 return "DW_CC_" #NAME;
228#include "llvm/Support/Dwarf.def"
Jim Laskey22e47b92006-02-27 12:43:29 +0000229 }
Reid Klecknerde3d8b52016-06-08 20:34:29 +0000230}
231
232unsigned llvm::dwarf::getCallingConvention(StringRef CCString) {
233 return StringSwitch<unsigned>(CCString)
234#define HANDLE_DW_CC(ID, NAME) .Case("DW_CC_" #NAME, DW_CC_##NAME)
235#include "llvm/Support/Dwarf.def"
236 .Default(0);
Jim Laskey22e47b92006-02-27 12:43:29 +0000237}
238
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000239StringRef llvm::dwarf::InlineCodeString(unsigned Code) {
Chris Lattner0709a272009-12-29 21:09:57 +0000240 switch (Code) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000241 case DW_INL_not_inlined: return "DW_INL_not_inlined";
242 case DW_INL_inlined: return "DW_INL_inlined";
243 case DW_INL_declared_not_inlined: return "DW_INL_declared_not_inlined";
244 case DW_INL_declared_inlined: return "DW_INL_declared_inlined";
Jim Laskey22e47b92006-02-27 12:43:29 +0000245 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000246 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000247}
248
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000249StringRef llvm::dwarf::ArrayOrderString(unsigned Order) {
Chris Lattner0709a272009-12-29 21:09:57 +0000250 switch (Order) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000251 case DW_ORD_row_major: return "DW_ORD_row_major";
252 case DW_ORD_col_major: return "DW_ORD_col_major";
Jim Laskey22e47b92006-02-27 12:43:29 +0000253 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000254 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000255}
256
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000257StringRef llvm::dwarf::DiscriminantString(unsigned Discriminant) {
Chris Lattner0709a272009-12-29 21:09:57 +0000258 switch (Discriminant) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000259 case DW_DSC_label: return "DW_DSC_label";
260 case DW_DSC_range: return "DW_DSC_range";
Jim Laskey22e47b92006-02-27 12:43:29 +0000261 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000262 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000263}
264
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000265StringRef llvm::dwarf::LNStandardString(unsigned Standard) {
Chris Lattner0709a272009-12-29 21:09:57 +0000266 switch (Standard) {
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000267 case DW_LNS_copy: return "DW_LNS_copy";
268 case DW_LNS_advance_pc: return "DW_LNS_advance_pc";
269 case DW_LNS_advance_line: return "DW_LNS_advance_line";
270 case DW_LNS_set_file: return "DW_LNS_set_file";
271 case DW_LNS_set_column: return "DW_LNS_set_column";
272 case DW_LNS_negate_stmt: return "DW_LNS_negate_stmt";
273 case DW_LNS_set_basic_block: return "DW_LNS_set_basic_block";
274 case DW_LNS_const_add_pc: return "DW_LNS_const_add_pc";
275 case DW_LNS_fixed_advance_pc: return "DW_LNS_fixed_advance_pc";
276 case DW_LNS_set_prologue_end: return "DW_LNS_set_prologue_end";
277 case DW_LNS_set_epilogue_begin: return "DW_LNS_set_epilogue_begin";
278 case DW_LNS_set_isa: return "DW_LNS_set_isa";
Jim Laskey22e47b92006-02-27 12:43:29 +0000279 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000280 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000281}
282
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000283StringRef llvm::dwarf::LNExtendedString(unsigned Encoding) {
Chris Lattner0709a272009-12-29 21:09:57 +0000284 switch (Encoding) {
285 // Line Number Extended Opcode Encodings
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000286 case DW_LNE_end_sequence: return "DW_LNE_end_sequence";
287 case DW_LNE_set_address: return "DW_LNE_set_address";
288 case DW_LNE_define_file: return "DW_LNE_define_file";
Nick Lewycky34368122011-09-15 04:23:44 +0000289 case DW_LNE_set_discriminator: return "DW_LNE_set_discriminator";
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000290 case DW_LNE_lo_user: return "DW_LNE_lo_user";
291 case DW_LNE_hi_user: return "DW_LNE_hi_user";
Jim Laskey22e47b92006-02-27 12:43:29 +0000292 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000293 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000294}
295
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000296StringRef llvm::dwarf::MacinfoString(unsigned Encoding) {
Chris Lattner0709a272009-12-29 21:09:57 +0000297 switch (Encoding) {
298 // Macinfo Type Encodings
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000299 case DW_MACINFO_define: return "DW_MACINFO_define";
300 case DW_MACINFO_undef: return "DW_MACINFO_undef";
301 case DW_MACINFO_start_file: return "DW_MACINFO_start_file";
302 case DW_MACINFO_end_file: return "DW_MACINFO_end_file";
303 case DW_MACINFO_vendor_ext: return "DW_MACINFO_vendor_ext";
Amjad Aboude59cc3e2015-11-12 09:38:54 +0000304 case DW_MACINFO_invalid: return "DW_MACINFO_invalid";
Jim Laskey22e47b92006-02-27 12:43:29 +0000305 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000306 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000307}
308
Amjad Abouda9bcf162015-12-10 12:56:35 +0000309unsigned llvm::dwarf::getMacinfo(StringRef MacinfoString) {
310 return StringSwitch<unsigned>(MacinfoString)
311 .Case("DW_MACINFO_define", DW_MACINFO_define)
312 .Case("DW_MACINFO_undef", DW_MACINFO_undef)
313 .Case("DW_MACINFO_start_file", DW_MACINFO_start_file)
314 .Case("DW_MACINFO_end_file", DW_MACINFO_end_file)
315 .Case("DW_MACINFO_vendor_ext", DW_MACINFO_vendor_ext)
316 .Default(DW_MACINFO_invalid);
317}
318
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000319StringRef llvm::dwarf::CallFrameString(unsigned Encoding) {
Chris Lattner0709a272009-12-29 21:09:57 +0000320 switch (Encoding) {
Eli Bendersky705085d2013-02-21 22:53:19 +0000321 case DW_CFA_nop: return "DW_CFA_nop";
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000322 case DW_CFA_advance_loc: return "DW_CFA_advance_loc";
323 case DW_CFA_offset: return "DW_CFA_offset";
324 case DW_CFA_restore: return "DW_CFA_restore";
325 case DW_CFA_set_loc: return "DW_CFA_set_loc";
326 case DW_CFA_advance_loc1: return "DW_CFA_advance_loc1";
327 case DW_CFA_advance_loc2: return "DW_CFA_advance_loc2";
328 case DW_CFA_advance_loc4: return "DW_CFA_advance_loc4";
329 case DW_CFA_offset_extended: return "DW_CFA_offset_extended";
330 case DW_CFA_restore_extended: return "DW_CFA_restore_extended";
331 case DW_CFA_undefined: return "DW_CFA_undefined";
332 case DW_CFA_same_value: return "DW_CFA_same_value";
333 case DW_CFA_register: return "DW_CFA_register";
334 case DW_CFA_remember_state: return "DW_CFA_remember_state";
335 case DW_CFA_restore_state: return "DW_CFA_restore_state";
336 case DW_CFA_def_cfa: return "DW_CFA_def_cfa";
337 case DW_CFA_def_cfa_register: return "DW_CFA_def_cfa_register";
338 case DW_CFA_def_cfa_offset: return "DW_CFA_def_cfa_offset";
339 case DW_CFA_def_cfa_expression: return "DW_CFA_def_cfa_expression";
340 case DW_CFA_expression: return "DW_CFA_expression";
341 case DW_CFA_offset_extended_sf: return "DW_CFA_offset_extended_sf";
342 case DW_CFA_def_cfa_sf: return "DW_CFA_def_cfa_sf";
343 case DW_CFA_def_cfa_offset_sf: return "DW_CFA_def_cfa_offset_sf";
344 case DW_CFA_val_offset: return "DW_CFA_val_offset";
345 case DW_CFA_val_offset_sf: return "DW_CFA_val_offset_sf";
346 case DW_CFA_val_expression: return "DW_CFA_val_expression";
Nick Lewyckyee674b32011-09-15 05:21:03 +0000347 case DW_CFA_MIPS_advance_loc8: return "DW_CFA_MIPS_advance_loc8";
348 case DW_CFA_GNU_window_save: return "DW_CFA_GNU_window_save";
349 case DW_CFA_GNU_args_size: return "DW_CFA_GNU_args_size";
Jason Molendadd6a4ca2010-06-17 01:23:24 +0000350 case DW_CFA_lo_user: return "DW_CFA_lo_user";
351 case DW_CFA_hi_user: return "DW_CFA_hi_user";
Jim Laskey22e47b92006-02-27 12:43:29 +0000352 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000353 return StringRef();
Jim Laskey22e47b92006-02-27 12:43:29 +0000354}
Eric Christophercf7289f2013-09-05 18:20:16 +0000355
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000356StringRef llvm::dwarf::ApplePropertyString(unsigned Prop) {
Frederic Rissb5e53ee2014-10-09 20:43:04 +0000357 switch (Prop) {
358 case DW_APPLE_PROPERTY_readonly:
359 return "DW_APPLE_PROPERTY_readonly";
360 case DW_APPLE_PROPERTY_getter:
361 return "DW_APPLE_PROPERTY_getter";
362 case DW_APPLE_PROPERTY_assign:
363 return "DW_APPLE_PROPERTY_assign";
364 case DW_APPLE_PROPERTY_readwrite:
365 return "DW_APPLE_PROPERTY_readwrite";
366 case DW_APPLE_PROPERTY_retain:
367 return "DW_APPLE_PROPERTY_retain";
368 case DW_APPLE_PROPERTY_copy:
369 return "DW_APPLE_PROPERTY_copy";
370 case DW_APPLE_PROPERTY_nonatomic:
371 return "DW_APPLE_PROPERTY_nonatomic";
372 case DW_APPLE_PROPERTY_setter:
373 return "DW_APPLE_PROPERTY_setter";
374 case DW_APPLE_PROPERTY_atomic:
375 return "DW_APPLE_PROPERTY_atomic";
376 case DW_APPLE_PROPERTY_weak:
377 return "DW_APPLE_PROPERTY_weak";
378 case DW_APPLE_PROPERTY_strong:
379 return "DW_APPLE_PROPERTY_strong";
380 case DW_APPLE_PROPERTY_unsafe_unretained:
381 return "DW_APPLE_PROPERTY_unsafe_unretained";
Adrian Prantl0418ef22016-07-14 00:41:18 +0000382 case DW_APPLE_PROPERTY_nullability:
383 return "DW_APPLE_PROPERTY_nullability";
384 case DW_APPLE_PROPERTY_null_resettable:
385 return "DW_APPLE_PROPERTY_null_resettable";
386 case DW_APPLE_PROPERTY_class:
387 return "DW_APPLE_PROPERTY_class";
Frederic Rissb5e53ee2014-10-09 20:43:04 +0000388 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000389 return StringRef();
Frederic Rissb5e53ee2014-10-09 20:43:04 +0000390}
391
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000392StringRef llvm::dwarf::AtomTypeString(unsigned AT) {
Eric Christophercf7289f2013-09-05 18:20:16 +0000393 switch (AT) {
394 case dwarf::DW_ATOM_null:
395 return "DW_ATOM_null";
396 case dwarf::DW_ATOM_die_offset:
397 return "DW_ATOM_die_offset";
398 case DW_ATOM_cu_offset:
399 return "DW_ATOM_cu_offset";
400 case DW_ATOM_die_tag:
401 return "DW_ATOM_die_tag";
402 case DW_ATOM_type_flags:
403 return "DW_ATOM_type_flags";
404 }
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000405 return StringRef();
Eric Christophercf7289f2013-09-05 18:20:16 +0000406}
David Blaikied0a869d2013-09-19 22:19:37 +0000407
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000408StringRef llvm::dwarf::GDBIndexEntryKindString(GDBIndexEntryKind Kind) {
David Blaikied0a869d2013-09-19 22:19:37 +0000409 switch (Kind) {
410 case GIEK_NONE:
411 return "NONE";
412 case GIEK_TYPE:
413 return "TYPE";
414 case GIEK_VARIABLE:
415 return "VARIABLE";
416 case GIEK_FUNCTION:
417 return "FUNCTION";
418 case GIEK_OTHER:
419 return "OTHER";
420 case GIEK_UNUSED5:
421 return "UNUSED5";
422 case GIEK_UNUSED6:
423 return "UNUSED6";
424 case GIEK_UNUSED7:
425 return "UNUSED7";
426 }
427 llvm_unreachable("Unknown GDBIndexEntryKind value");
428}
429
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000430StringRef
431llvm::dwarf::GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage) {
David Blaikied0a869d2013-09-19 22:19:37 +0000432 switch (Linkage) {
433 case GIEL_EXTERNAL:
434 return "EXTERNAL";
435 case GIEL_STATIC:
436 return "STATIC";
437 }
438 llvm_unreachable("Unknown GDBIndexEntryLinkage value");
439}
Frederic Riss878065b2014-09-04 19:39:20 +0000440
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000441StringRef llvm::dwarf::AttributeValueString(uint16_t Attr, unsigned Val) {
Frederic Riss878065b2014-09-04 19:39:20 +0000442 switch (Attr) {
443 case DW_AT_accessibility:
444 return AccessibilityString(Val);
445 case DW_AT_virtuality:
446 return VirtualityString(Val);
447 case DW_AT_language:
448 return LanguageString(Val);
449 case DW_AT_encoding:
450 return AttributeEncodingString(Val);
451 case DW_AT_decimal_sign:
452 return DecimalSignString(Val);
453 case DW_AT_endianity:
454 return EndianityString(Val);
455 case DW_AT_visibility:
456 return VisibilityString(Val);
457 case DW_AT_identifier_case:
458 return CaseString(Val);
459 case DW_AT_calling_convention:
460 return ConventionString(Val);
461 case DW_AT_inline:
462 return InlineCodeString(Val);
463 case DW_AT_ordering:
464 return ArrayOrderString(Val);
465 case DW_AT_discr_value:
466 return DiscriminantString(Val);
467 }
468
Mehdi Amini149f6ea2016-10-05 05:59:29 +0000469 return StringRef();
Frederic Riss878065b2014-09-04 19:39:20 +0000470}