diff --git a/include/llvm/Support/Dwarf.def b/include/llvm/Support/Dwarf.def index dc812074dde..34bb7fb0bdf 100644 --- a/include/llvm/Support/Dwarf.def +++ b/include/llvm/Support/Dwarf.def @@ -12,10 +12,18 @@ //===----------------------------------------------------------------------===// // TODO: Add other DW-based macros. -#if !defined HANDLE_DW_TAG +#if !(defined HANDLE_DW_TAG || defined HANDLE_DW_LANG) #error "Missing macro definition of HANDLE_DW*" #endif +#ifndef HANDLE_DW_TAG +#define HANDLE_DW_TAG(ID, NAME) +#endif + +#ifndef HANDLE_DW_LANG +#define HANDLE_DW_LANG(ID, NAME) +#endif + HANDLE_DW_TAG(0x0001, array_type) HANDLE_DW_TAG(0x0002, class_type) HANDLE_DW_TAG(0x0003, entry_point) @@ -97,4 +105,37 @@ HANDLE_DW_TAG(0x4107, GNU_template_parameter_pack) HANDLE_DW_TAG(0x4108, GNU_formal_parameter_pack) HANDLE_DW_TAG(0x4200, APPLE_property) +// DWARF languages. +HANDLE_DW_LANG(0x0001, C89) +HANDLE_DW_LANG(0x0002, C) +HANDLE_DW_LANG(0x0003, Ada83) +HANDLE_DW_LANG(0x0004, C_plus_plus) +HANDLE_DW_LANG(0x0005, Cobol74) +HANDLE_DW_LANG(0x0006, Cobol85) +HANDLE_DW_LANG(0x0007, Fortran77) +HANDLE_DW_LANG(0x0008, Fortran90) +HANDLE_DW_LANG(0x0009, Pascal83) +HANDLE_DW_LANG(0x000a, Modula2) +HANDLE_DW_LANG(0x000b, Java) +HANDLE_DW_LANG(0x000c, C99) +HANDLE_DW_LANG(0x000d, Ada95) +HANDLE_DW_LANG(0x000e, Fortran95) +HANDLE_DW_LANG(0x000f, PLI) +HANDLE_DW_LANG(0x0010, ObjC) +HANDLE_DW_LANG(0x0011, ObjC_plus_plus) +HANDLE_DW_LANG(0x0012, UPC) +HANDLE_DW_LANG(0x0013, D) + +// New in DWARF 5: +HANDLE_DW_LANG(0x0014, Python) +HANDLE_DW_LANG(0x0015, OpenCL) +HANDLE_DW_LANG(0x0016, Go) +HANDLE_DW_LANG(0x0017, Modula3) +HANDLE_DW_LANG(0x0018, Haskell) +HANDLE_DW_LANG(0x0019, C_plus_plus_03) +HANDLE_DW_LANG(0x001a, C_plus_plus_11) +HANDLE_DW_LANG(0x001b, OCaml) +HANDLE_DW_LANG(0x8001, Mips_Assembler) + #undef HANDLE_DW_TAG +#undef HANDLE_DW_LANG diff --git a/include/llvm/Support/Dwarf.h b/include/llvm/Support/Dwarf.h index df13df4ac60..5fed4433a7d 100644 --- a/include/llvm/Support/Dwarf.h +++ b/include/llvm/Support/Dwarf.h @@ -516,38 +516,9 @@ enum VirtualityAttribute { }; enum SourceLanguage { - // Language names - DW_LANG_C89 = 0x0001, - DW_LANG_C = 0x0002, - DW_LANG_Ada83 = 0x0003, - DW_LANG_C_plus_plus = 0x0004, - DW_LANG_Cobol74 = 0x0005, - DW_LANG_Cobol85 = 0x0006, - DW_LANG_Fortran77 = 0x0007, - DW_LANG_Fortran90 = 0x0008, - DW_LANG_Pascal83 = 0x0009, - DW_LANG_Modula2 = 0x000a, - DW_LANG_Java = 0x000b, - DW_LANG_C99 = 0x000c, - DW_LANG_Ada95 = 0x000d, - DW_LANG_Fortran95 = 0x000e, - DW_LANG_PLI = 0x000f, - DW_LANG_ObjC = 0x0010, - DW_LANG_ObjC_plus_plus = 0x0011, - DW_LANG_UPC = 0x0012, - DW_LANG_D = 0x0013, - // New in DWARF 5: - DW_LANG_Python = 0x0014, - DW_LANG_OpenCL = 0x0015, - DW_LANG_Go = 0x0016, - DW_LANG_Modula3 = 0x0017, - DW_LANG_Haskell = 0x0018, - DW_LANG_C_plus_plus_03 = 0x0019, - DW_LANG_C_plus_plus_11 = 0x001a, - DW_LANG_OCaml = 0x001b, - +#define HANDLE_DW_LANG(ID, NAME) DW_LANG_##NAME = ID, +#include "llvm/Support/Dwarf.def" DW_LANG_lo_user = 0x8000, - DW_LANG_Mips_Assembler = 0x8001, DW_LANG_hi_user = 0xffff }; diff --git a/lib/Support/Dwarf.cpp b/lib/Support/Dwarf.cpp index 8367473c728..8e36396f070 100644 --- a/lib/Support/Dwarf.cpp +++ b/lib/Support/Dwarf.cpp @@ -480,36 +480,13 @@ const char *llvm::dwarf::VirtualityString(unsigned Virtuality) { const char *llvm::dwarf::LanguageString(unsigned Language) { switch (Language) { - case DW_LANG_C89: return "DW_LANG_C89"; - case DW_LANG_C: return "DW_LANG_C"; - case DW_LANG_Ada83: return "DW_LANG_Ada83"; - case DW_LANG_C_plus_plus: return "DW_LANG_C_plus_plus"; - case DW_LANG_Cobol74: return "DW_LANG_Cobol74"; - case DW_LANG_Cobol85: return "DW_LANG_Cobol85"; - case DW_LANG_Fortran77: return "DW_LANG_Fortran77"; - case DW_LANG_Fortran90: return "DW_LANG_Fortran90"; - case DW_LANG_Pascal83: return "DW_LANG_Pascal83"; - case DW_LANG_Modula2: return "DW_LANG_Modula2"; - case DW_LANG_Java: return "DW_LANG_Java"; - case DW_LANG_C99: return "DW_LANG_C99"; - case DW_LANG_Ada95: return "DW_LANG_Ada95"; - case DW_LANG_Fortran95: return "DW_LANG_Fortran95"; - case DW_LANG_PLI: return "DW_LANG_PLI"; - case DW_LANG_ObjC: return "DW_LANG_ObjC"; - case DW_LANG_ObjC_plus_plus: return "DW_LANG_ObjC_plus_plus"; - case DW_LANG_UPC: return "DW_LANG_UPC"; - case DW_LANG_D: return "DW_LANG_D"; - case DW_LANG_Python: return "DW_LANG_Python"; - case DW_LANG_OpenCL: return "DW_LANG_OpenCL"; - case DW_LANG_Go: return "DW_LANG_Go"; - case DW_LANG_Modula3: return "DW_LANG_Modula3"; - case DW_LANG_Haskell: return "DW_LANG_Haskell"; - case DW_LANG_C_plus_plus_03: return "DW_LANG_C_plus_plus_03"; - case DW_LANG_C_plus_plus_11: return "DW_LANG_C_plus_plus_11"; - case DW_LANG_OCaml: return "DW_LANG_OCaml"; - case DW_LANG_Mips_Assembler: return "DW_LANG_Mips_Assembler"; + default: + return nullptr; +#define HANDLE_DW_LANG(ID, NAME) \ + case DW_LANG_##NAME: \ + return "DW_LANG_" #NAME; +#include "llvm/Support/Dwarf.def" } - return nullptr; } const char *llvm::dwarf::CaseString(unsigned Case) {