Skip to content

Commit be15339

Browse files
committed
Implement the DWARF 6 language and version attributes.
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
1 parent 60bbe57 commit be15339

File tree

5 files changed

+438
-13
lines changed

5 files changed

+438
-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
@@ -950,12 +955,81 @@ HANDLE_DW_LANG(0x002c, C17, 0, 0, DWARF)
950955
HANDLE_DW_LANG(0x002d, Fortran18, 0, 0, DWARF)
951956
HANDLE_DW_LANG(0x002e, Ada2005, 0, 0, DWARF)
952957
HANDLE_DW_LANG(0x002f, Ada2012, 0, 0, DWARF)
958+
HANDLE_DW_LANG(0x0030, HIP, 0, 0, DWARF)
959+
HANDLE_DW_LANG(0x0031, Assembly, 0, 0, DWARF)
960+
HANDLE_DW_LANG(0x0032, C_sharp, 0, 0, DWARF)
953961
HANDLE_DW_LANG(0x0033, Mojo, 0, 0, DWARF)
962+
HANDLE_DW_LANG(0x0034, GLSL, 0, 0, DWARF)
963+
HANDLE_DW_LANG(0x0035, GLSL_ES, 0, 0, DWARF)
964+
HANDLE_DW_LANG(0x0036, HLSL, 0, 0, DWARF)
965+
HANDLE_DW_LANG(0x0037, OpenCL_CPP, 0, 0, DWARF)
966+
HANDLE_DW_LANG(0x0038, CPP_for_OpenCL, 0, 0, DWARF)
967+
HANDLE_DW_LANG(0x0039, SYCL, 0, 0, DWARF)
968+
HANDLE_DW_LANG(0x0040, Ruby, 0, 0, DWARF)
969+
HANDLE_DW_LANG(0x0041, Move, 0, 0, DWARF)
970+
HANDLE_DW_LANG(0x0042, Hylo, 0, 0, DWARF)
971+
954972
// Vendor extensions:
955973
HANDLE_DW_LANG(0x8001, Mips_Assembler, std::nullopt, 0, MIPS)
956974
HANDLE_DW_LANG(0x8e57, GOOGLE_RenderScript, 0, 0, GOOGLE)
957975
HANDLE_DW_LANG(0xb000, BORLAND_Delphi, 0, 0, BORLAND)
958976

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

9601034
// DWARF attribute type encodings.
9611035
HANDLE_DW_ATE(0x01, address, 2, DWARF)
@@ -1267,6 +1341,7 @@ HANDLE_DW_SECT(8, RNGLISTS)
12671341
#undef HANDLE_DW_OP
12681342
#undef HANDLE_DW_OP_LLVM_USEROP
12691343
#undef HANDLE_DW_LANG
1344+
#undef HANDLE_DW_LNAME
12701345
#undef HANDLE_DW_ATE
12711346
#undef HANDLE_DW_VIRTUALITY
12721347
#undef HANDLE_DW_DEFAULTED

0 commit comments

Comments
 (0)