Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d9d659

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) (cherry picked from commit aa21158)
1 parent c0ae354 commit 5d9d659

File tree

5 files changed

+440
-13
lines changed

5 files changed

+440
-13
lines changed

llvm/include/llvm-c/DebugInfo.h

+13
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

+88-13
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
@@ -955,12 +960,81 @@ HANDLE_DW_LANG(0x002c, C17, 0, 0, DWARF)
955960
HANDLE_DW_LANG(0x002d, Fortran18, 0, 0, DWARF)
956961
HANDLE_DW_LANG(0x002e, Ada2005, 0, 0, DWARF)
957962
HANDLE_DW_LANG(0x002f, Ada2012, 0, 0, DWARF)
963+
HANDLE_DW_LANG(0x0030, HIP, 0, 0, DWARF)
964+
HANDLE_DW_LANG(0x0031, Assembly, 0, 0, DWARF)
965+
HANDLE_DW_LANG(0x0032, C_sharp, 0, 0, DWARF)
958966
HANDLE_DW_LANG(0x0033, Mojo, 0, 0, DWARF)
967+
HANDLE_DW_LANG(0x0034, GLSL, 0, 0, DWARF)
968+
HANDLE_DW_LANG(0x0035, GLSL_ES, 0, 0, DWARF)
969+
HANDLE_DW_LANG(0x0036, HLSL, 0, 0, DWARF)
970+
HANDLE_DW_LANG(0x0037, OpenCL_CPP, 0, 0, DWARF)
971+
HANDLE_DW_LANG(0x0038, CPP_for_OpenCL, 0, 0, DWARF)
972+
HANDLE_DW_LANG(0x0039, SYCL, 0, 0, DWARF)
973+
HANDLE_DW_LANG(0x0040, Ruby, 0, 0, DWARF)
974+
HANDLE_DW_LANG(0x0041, Move, 0, 0, DWARF)
975+
HANDLE_DW_LANG(0x0042, Hylo, 0, 0, DWARF)
976+
959977
// Vendor extensions:
960978
HANDLE_DW_LANG(0x8001, Mips_Assembler, std::nullopt, 0, MIPS)
961979
HANDLE_DW_LANG(0x8e57, GOOGLE_RenderScript, 0, 0, GOOGLE)
962980
HANDLE_DW_LANG(0xb000, BORLAND_Delphi, 0, 0, BORLAND)
963981

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

9651039
// DWARF attribute type encodings.
9661040
HANDLE_DW_ATE(0x01, address, 2, DWARF)
@@ -1272,6 +1346,7 @@ HANDLE_DW_SECT(8, RNGLISTS)
12721346
#undef HANDLE_DW_OP
12731347
#undef HANDLE_DW_OP_LLVM_USEROP
12741348
#undef HANDLE_DW_LANG
1349+
#undef HANDLE_DW_LNAME
12751350
#undef HANDLE_DW_ATE
12761351
#undef HANDLE_DW_VIRTUALITY
12771352
#undef HANDLE_DW_DEFAULTED

0 commit comments

Comments
 (0)