Skip to content

Commit aa21158

Browse files
committed
Implement the DWARF 6 language and version attributes. (llvm#89980)
This patch adds DWARF constants for DW_AT_language_name and DW_AT_language_version to Dwarf.def and Dwarf.h. While the DWARF 6 spec is not finalized, the constants are published on the DWARF website and considered stable, with idea being that the list published on dwarfstd.org is the authoritative source that is being continuously updated between DWARF revisions, as new languages are being developed. https://dwarfstd.org/languages-v6.html My main motivation for adding this is to use in llvm#89981 (cherry picked from commit 300340f)
1 parent 811bc94 commit aa21158

File tree

5 files changed

+440
-13
lines changed

5 files changed

+440
-13
lines changed

llvm/include/llvm-c/DebugInfo.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,20 @@ typedef enum {
125125
LLVMDWARFSourceLanguageFortran18,
126126
LLVMDWARFSourceLanguageAda2005,
127127
LLVMDWARFSourceLanguageAda2012,
128+
LLVMDWARFSourceLanguageHIP,
129+
LLVMDWARFSourceLanguageAssembly,
130+
LLVMDWARFSourceLanguageC_sharp,
128131
LLVMDWARFSourceLanguageMojo,
132+
LLVMDWARFSourceLanguageGLSL,
133+
LLVMDWARFSourceLanguageGLSL_ES,
134+
LLVMDWARFSourceLanguageHLSL,
135+
LLVMDWARFSourceLanguageOpenCL_CPP,
136+
LLVMDWARFSourceLanguageCPP_for_OpenCL,
137+
LLVMDWARFSourceLanguageSYCL,
138+
LLVMDWARFSourceLanguageRuby,
139+
LLVMDWARFSourceLanguageMove,
140+
LLVMDWARFSourceLanguageHylo,
141+
129142
// Vendor extensions:
130143
LLVMDWARFSourceLanguageMips_Assembler,
131144
LLVMDWARFSourceLanguageGOOGLE_RenderScript,

llvm/include/llvm/BinaryFormat/Dwarf.def

Lines changed: 88 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,20 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
// TODO: Add other DW-based macros.
14-
#if !( \
15-
defined HANDLE_DW_TAG || defined HANDLE_DW_AT || defined HANDLE_DW_FORM || \
16-
defined HANDLE_DW_OP || defined HANDLE_DW_OP_LLVM_USEROP || \
17-
defined HANDLE_DW_LANG || defined HANDLE_DW_ATE || \
18-
defined HANDLE_DW_VIRTUALITY || defined HANDLE_DW_DEFAULTED || \
19-
defined HANDLE_DW_CC || defined HANDLE_DW_LNS || defined HANDLE_DW_LNE || \
20-
defined HANDLE_DW_LNCT || defined HANDLE_DW_MACRO || \
21-
defined HANDLE_DW_MACRO_GNU || defined HANDLE_MACRO_FLAG || \
22-
defined HANDLE_DW_RLE || defined HANDLE_DW_LLE || \
23-
(defined HANDLE_DW_CFA && defined HANDLE_DW_CFA_PRED) || \
24-
defined HANDLE_DW_APPLE_PROPERTY || defined HANDLE_DW_UT || \
25-
defined HANDLE_DWARF_SECTION || defined HANDLE_DW_IDX || \
26-
defined HANDLE_DW_END || defined HANDLE_DW_SECT)
14+
#if !(defined HANDLE_DW_TAG || defined HANDLE_DW_AT || \
15+
defined HANDLE_DW_FORM || defined HANDLE_DW_OP || \
16+
defined HANDLE_DW_OP_LLVM_USEROP || defined HANDLE_DW_LANG || \
17+
defined HANDLE_DW_LNAME || defined HANDLE_DW_ATE || \
18+
defined HANDLE_DW_VIRTUALITY || defined HANDLE_DW_DEFAULTED || \
19+
defined HANDLE_DW_CC || defined HANDLE_DW_LNS || \
20+
defined HANDLE_DW_LNE || defined HANDLE_DW_LNCT || \
21+
defined HANDLE_DW_MACRO || defined HANDLE_DW_MACRO_GNU || \
22+
defined HANDLE_MACRO_FLAG || defined HANDLE_DW_RLE || \
23+
defined HANDLE_DW_LLE || \
24+
(defined HANDLE_DW_CFA && defined HANDLE_DW_CFA_PRED) || \
25+
defined HANDLE_DW_APPLE_PROPERTY || defined HANDLE_DW_UT || \
26+
defined HANDLE_DWARF_SECTION || defined HANDLE_DW_IDX || \
27+
defined HANDLE_DW_END || defined HANDLE_DW_SECT)
2728
#error "Missing macro definition of HANDLE_DW*"
2829
#endif
2930

@@ -61,6 +62,10 @@
6162
#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR)
6263
#endif
6364

65+
#ifndef HANDLE_DW_LNAME
66+
#define HANDLE_DW_LNAME(ID, NAME, DESC, LOWER_BOUND)
67+
#endif
68+
6469
#ifndef HANDLE_DW_ATE
6570
#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR)
6671
#endif
@@ -954,12 +959,81 @@ HANDLE_DW_LANG(0x002c, C17, 0, 0, DWARF)
954959
HANDLE_DW_LANG(0x002d, Fortran18, 0, 0, DWARF)
955960
HANDLE_DW_LANG(0x002e, Ada2005, 0, 0, DWARF)
956961
HANDLE_DW_LANG(0x002f, Ada2012, 0, 0, DWARF)
962+
HANDLE_DW_LANG(0x0030, HIP, 0, 0, DWARF)
963+
HANDLE_DW_LANG(0x0031, Assembly, 0, 0, DWARF)
964+
HANDLE_DW_LANG(0x0032, C_sharp, 0, 0, DWARF)
957965
HANDLE_DW_LANG(0x0033, Mojo, 0, 0, DWARF)
966+
HANDLE_DW_LANG(0x0034, GLSL, 0, 0, DWARF)
967+
HANDLE_DW_LANG(0x0035, GLSL_ES, 0, 0, DWARF)
968+
HANDLE_DW_LANG(0x0036, HLSL, 0, 0, DWARF)
969+
HANDLE_DW_LANG(0x0037, OpenCL_CPP, 0, 0, DWARF)
970+
HANDLE_DW_LANG(0x0038, CPP_for_OpenCL, 0, 0, DWARF)
971+
HANDLE_DW_LANG(0x0039, SYCL, 0, 0, DWARF)
972+
HANDLE_DW_LANG(0x0040, Ruby, 0, 0, DWARF)
973+
HANDLE_DW_LANG(0x0041, Move, 0, 0, DWARF)
974+
HANDLE_DW_LANG(0x0042, Hylo, 0, 0, DWARF)
975+
958976
// Vendor extensions:
959977
HANDLE_DW_LANG(0x8001, Mips_Assembler, std::nullopt, 0, MIPS)
960978
HANDLE_DW_LANG(0x8e57, GOOGLE_RenderScript, 0, 0, GOOGLE)
961979
HANDLE_DW_LANG(0xb000, BORLAND_Delphi, 0, 0, BORLAND)
962980

981+
// Tentative DWARF 6 language codes. This list is subject to change.
982+
HANDLE_DW_LNAME(0x0001, Ada, "ISO Ada", 1) // YYYY
983+
HANDLE_DW_LNAME(0x0002, BLISS, "BLISS", 0)
984+
// YYYYMM
985+
// K&R 000000
986+
// C89 198912
987+
// C99 199901
988+
// C11 201112
989+
// C17 201710
990+
// C23 202311
991+
HANDLE_DW_LNAME(0x0003, C, "C (K&R and ISO)", 0)
992+
// YYYYMM
993+
// C++98 199711
994+
// C++03 200310
995+
// C++11 201103
996+
// C++14 201402
997+
// C++17 201703
998+
// C++20 202002
999+
HANDLE_DW_LNAME(0x0004, C_plus_plus, "ISO C++", 0)
1000+
HANDLE_DW_LNAME(0x0005, Cobol, "ISO Cobol", 1) // YYYY
1001+
HANDLE_DW_LNAME(0x0006, Crystal, "Crystal", 0)
1002+
HANDLE_DW_LNAME(0x0007, D, "D", 0)
1003+
HANDLE_DW_LNAME(0x0008, Dylan, "Dylan", 0)
1004+
HANDLE_DW_LNAME(0x0009, Fortran, "ISO Fortran", 1) // YYYY
1005+
HANDLE_DW_LNAME(0x000a, Go, "Go", 0)
1006+
HANDLE_DW_LNAME(0x000b, Haskell, "Haskell", 0)
1007+
HANDLE_DW_LNAME(0x000c, Java, "Java", 0)
1008+
HANDLE_DW_LNAME(0x000d, Julia, "Julia", 1)
1009+
HANDLE_DW_LNAME(0x000e, Kotlin, "Kotlin", 0)
1010+
HANDLE_DW_LNAME(0x000f, Modula2, "Modula 2", 1)
1011+
HANDLE_DW_LNAME(0x0010, Modula3, "Modula 3", 1)
1012+
HANDLE_DW_LNAME(0x0011, ObjC, "Objective C", 0) // YYYYMM
1013+
HANDLE_DW_LNAME(0x0012, ObjC_plus_plus, "Objective C++", 0) // YYYYMM
1014+
HANDLE_DW_LNAME(0x0013, OCaml, "OCaml", 0)
1015+
HANDLE_DW_LNAME(0x0014, OpenCL_C, "OpenCL C", 0)
1016+
HANDLE_DW_LNAME(0x0015, Pascal, "ISO Pascal", 1) // YYYY
1017+
HANDLE_DW_LNAME(0x0016, PLI, "ANSI PL/I", 1)
1018+
HANDLE_DW_LNAME(0x0017, Python, "Python", 0)
1019+
HANDLE_DW_LNAME(0x0018, RenderScript, "RenderScript Kernel Language", 0)
1020+
HANDLE_DW_LNAME(0x0019, Rust, "Rust", 0)
1021+
HANDLE_DW_LNAME(0x001a, Swift, "Swift", 0) // VVMM
1022+
HANDLE_DW_LNAME(0x001b, UPC, "Unified Parallel C (UPC)", 0)
1023+
HANDLE_DW_LNAME(0x001c, Zig, "Zig", 0)
1024+
HANDLE_DW_LNAME(0x001d, Assembly, "Assembly", 0)
1025+
// Conflict: HANDLE_DW_LNAME(0x001d, HIP, "HIP", 0)
1026+
HANDLE_DW_LNAME(0x001e, C_sharp, "C#", 0)
1027+
HANDLE_DW_LNAME(0x001f, Mojo, "Mojo", 0)
1028+
HANDLE_DW_LNAME(0x0020, GLSL, "OpenGL Shading Language", 0) // VVMMPP
1029+
HANDLE_DW_LNAME(0x0021, GLSL_ES, "OpenGL ES Shading Language", 0) // VVMMPP
1030+
HANDLE_DW_LNAME(0x0022, HLSL, "High Level Shading Language", 0) // YYYY
1031+
HANDLE_DW_LNAME(0x0023, OpenCL_CPP, "OpenCL C++", 0) // VVMM
1032+
HANDLE_DW_LNAME(0x0024, CPP_for_OpenCL, "C++ for OpenCL", 0) // VVMM
1033+
HANDLE_DW_LNAME(0x0025, SYCL, "SYCL", 0) // YYYYRR
1034+
HANDLE_DW_LNAME(0x0026, Ruby, "Ruby", 0) // VVMMPP
1035+
HANDLE_DW_LNAME(0x0027, Move, "Move", 0) // YYYYMM
1036+
HANDLE_DW_LNAME(0x0028, Hylo, "Hylo", 0)
9631037

9641038
// DWARF attribute type encodings.
9651039
HANDLE_DW_ATE(0x01, address, 2, DWARF)
@@ -1271,6 +1345,7 @@ HANDLE_DW_SECT(8, RNGLISTS)
12711345
#undef HANDLE_DW_OP
12721346
#undef HANDLE_DW_OP_LLVM_USEROP
12731347
#undef HANDLE_DW_LANG
1348+
#undef HANDLE_DW_LNAME
12741349
#undef HANDLE_DW_ATE
12751350
#undef HANDLE_DW_VIRTUALITY
12761351
#undef HANDLE_DW_DEFAULTED

0 commit comments

Comments
 (0)