Ping.
On 2/20/25 10:51 AM, Simon Marchi wrote: > [Note: I don't have push access to gcc, so if approved, please push it > on my behalf, thanks.] > > I need to have a "DW_LANG_* to string" function for a change I'm making > in binutils-gdb. I'm sending this patch to gcc first, once merged I'll > sync it to binutils-gdb. > > - move the "DW_LANG_*" definitions from dwarf2.h to dwarf2.def > - add the necessary macros in dwarf2.h to generate the enumeration > - add the necessary macros in dwarfnames.c to generate the "to string" > function > > include/ChangeLog: > > * dwarf2.h (DW_LANG, DW_FIRST_LANG, DW_END_LANG): Define then > undefine. > (enum dwarf_source_language): Remove. > (get_DW_LANG_name): Declare. > * dwarf2.def: Define DW_LANG_* constants. > > libiberty/ChangeLog: > > * dwarfnames.c (DW_FIRST_LANG, DW_END_LANG, DW_LANG): Define > then undefine. > --- > include/dwarf2.def | 89 +++++++++++++++++++++++++++++++++++ > include/dwarf2.h | 103 +++++------------------------------------ > libiberty/dwarfnames.c | 9 ++++ > 3 files changed, 109 insertions(+), 92 deletions(-) > > diff --git a/include/dwarf2.def b/include/dwarf2.def > index 989f078041d4..4326e63646ee 100644 > --- a/include/dwarf2.def > +++ b/include/dwarf2.def > @@ -830,3 +830,92 @@ DW_UT (DW_UT_split_type, 0x06) > DW_UT (DW_UT_lo_user, 0x80) > DW_UT (DW_UT_hi_user, 0xff) > DW_END_UT > + > +DW_FIRST_LANG (DW_LANG_C89, 0x0001) > +DW_LANG (DW_LANG_C, 0x0002) > +DW_LANG (DW_LANG_Ada83, 0x0003) > +DW_LANG (DW_LANG_C_plus_plus, 0x0004) > +DW_LANG (DW_LANG_Cobol74, 0x0005) > +DW_LANG (DW_LANG_Cobol85, 0x0006) > +DW_LANG (DW_LANG_Fortran77, 0x0007) > +DW_LANG (DW_LANG_Fortran90, 0x0008) > +DW_LANG (DW_LANG_Pascal83, 0x0009) > +DW_LANG (DW_LANG_Modula2, 0x000a) > +/* DWARF 3. */ > +DW_LANG (DW_LANG_Java, 0x000b) > +DW_LANG (DW_LANG_C99, 0x000c) > +DW_LANG (DW_LANG_Ada95, 0x000d) > +DW_LANG (DW_LANG_Fortran95, 0x000e) > +DW_LANG (DW_LANG_PLI, 0x000f) > +DW_LANG (DW_LANG_ObjC, 0x0010) > +DW_LANG (DW_LANG_ObjC_plus_plus, 0x0011) > +DW_LANG (DW_LANG_UPC, 0x0012) > +DW_LANG (DW_LANG_D, 0x0013) > +/* DWARF 4. */ > +DW_LANG (DW_LANG_Python, 0x0014) > +/* DWARF 5. */ > +DW_LANG (DW_LANG_OpenCL, 0x0015) > +DW_LANG (DW_LANG_Go, 0x0016) > +DW_LANG (DW_LANG_Modula3, 0x0017) > +DW_LANG (DW_LANG_Haskell, 0x0018) > +DW_LANG (DW_LANG_C_plus_plus_03, 0x0019) > +DW_LANG (DW_LANG_C_plus_plus_11, 0x001a) > +DW_LANG (DW_LANG_OCaml, 0x001b) > +DW_LANG (DW_LANG_Rust, 0x001c) > +DW_LANG (DW_LANG_C11, 0x001d) > +DW_LANG (DW_LANG_Swift, 0x001e) > +DW_LANG (DW_LANG_Julia, 0x001f) > +DW_LANG (DW_LANG_Dylan, 0x0020) > +DW_LANG (DW_LANG_C_plus_plus_14, 0x0021) > +DW_LANG (DW_LANG_Fortran03, 0x0022) > +DW_LANG (DW_LANG_Fortran08, 0x0023) > +DW_LANG (DW_LANG_RenderScript, 0x0024) > +DW_LANG (DW_LANG_BLISS, 0x0025) > +/* Post DWARF 5 additions to the DWARF set. > +See https://dwarfstd.org/languages.html . */ > +DW_LANG (DW_LANG_Kotlin, 0x0026) > +DW_LANG (DW_LANG_Zig, 0x0027) > +DW_LANG (DW_LANG_Crystal, 0x0028) > +DW_LANG (DW_LANG_C_plus_plus_17, 0x002a) > +DW_LANG (DW_LANG_C_plus_plus_20, 0x002b) > +DW_LANG (DW_LANG_C17, 0x002c) > +DW_LANG (DW_LANG_Fortran18, 0x002d) > +DW_LANG (DW_LANG_Ada2005, 0x002e) > +DW_LANG (DW_LANG_Ada2012, 0x002f) > +DW_LANG (DW_LANG_HIP, 0x0030) > +DW_LANG (DW_LANG_Assembly, 0x0031) > +DW_LANG (DW_LANG_C_sharp, 0x0032) > +DW_LANG (DW_LANG_Mojo, 0x0033) > +DW_LANG (DW_LANG_GLSL, 0x0034) > +DW_LANG (DW_LANG_GLSL_ES, 0x0035) > +DW_LANG (DW_LANG_HLSL, 0x0036) > +DW_LANG (DW_LANG_OpenCL_CPP, 0x0037) > +DW_LANG (DW_LANG_CPP_for_OpenCL, 0x0038) > +DW_LANG (DW_LANG_SYCL, 0x0039) > +DW_LANG (DW_LANG_C_plus_plus_23, 0x003a) > +DW_LANG (DW_LANG_Odin, 0x003b) > +DW_LANG (DW_LANG_P4, 0x003c) > +DW_LANG (DW_LANG_Metal, 0x003d) > +DW_LANG (DW_LANG_C23, 0x003e) > +DW_LANG (DW_LANG_Fortran23, 0x003f) > +DW_LANG (DW_LANG_Ruby, 0x0040) > +DW_LANG (DW_LANG_Move, 0x0041) > +DW_LANG (DW_LANG_Hylo, 0x0042) > + > +DW_LANG (DW_LANG_lo_user, 0x8000) /* Implementation-defined range start. > */ > +DW_LANG (DW_LANG_hi_user, 0xffff) /* Implementation-defined range start. > */ > + > +/* MIPS. */ > +DW_LANG (DW_LANG_Mips_Assembler, 0x8001) > +/* UPC. */ > +DW_LANG (DW_LANG_Upc, 0x8765) > +/* HP extensions. */ > +DW_LANG (DW_LANG_HP_Bliss, 0x8003) > +DW_LANG (DW_LANG_HP_Basic91, 0x8004) > +DW_LANG (DW_LANG_HP_Pascal91, 0x8005) > +DW_LANG (DW_LANG_HP_IMacro, 0x8006) > +DW_LANG (DW_LANG_HP_Assembler, 0x8007) > + > +/* Rust extension, but replaced in DWARF 5. */ > +DW_LANG (DW_LANG_Rust_old, 0x9000) > +DW_END_LANG > diff --git a/include/dwarf2.h b/include/dwarf2.h > index 344447fbc368..43744818611d 100644 > --- a/include/dwarf2.h > +++ b/include/dwarf2.h > @@ -56,6 +56,7 @@ > #define DW_IDX(name, value) , name = value > #define DW_IDX_DUP(name, value) , name = value > #define DW_UT(name, value) , name = value > +#define DW_LANG(name, value) , name = value > > #define DW_FIRST_TAG(name, value) enum dwarf_tag { \ > name = value > @@ -86,6 +87,9 @@ > #define DW_FIRST_UT(name, value) enum dwarf_unit_type { \ > name = value > #define DW_END_UT }; > +#define DW_FIRST_LANG(name, value) enum dwarf_source_language { \ > + name = value > +#define DW_END_LANG }; > > #include "dwarf2.def" > > @@ -105,6 +109,8 @@ > #undef DW_END_IDX > #undef DW_FIRST_UT > #undef DW_END_UT > +#undef DW_FIRST_LANG > +#undef DW_END_LANG > > #undef DW_TAG > #undef DW_TAG_DUP > @@ -120,6 +126,7 @@ > #undef DW_IDX > #undef DW_IDX_DUP > #undef DW_UT > +#undef DW_LANG > > /* Flag that tells whether entry has a child or not. */ > #define DW_children_no 0 > @@ -336,98 +343,6 @@ enum dwarf_location_list_entry_type > > #define DW_ADDR_none 0 > > -/* Source language names and codes. */ > -enum dwarf_source_language > - { > - 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, > - /* DWARF 3. */ > - 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, > - /* DWARF 4. */ > - DW_LANG_Python = 0x0014, > - /* DWARF 5. */ > - 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, > - DW_LANG_Rust = 0x001c, > - DW_LANG_C11 = 0x001d, > - DW_LANG_Swift = 0x001e, > - DW_LANG_Julia = 0x001f, > - DW_LANG_Dylan = 0x0020, > - DW_LANG_C_plus_plus_14 = 0x0021, > - DW_LANG_Fortran03 = 0x0022, > - DW_LANG_Fortran08 = 0x0023, > - DW_LANG_RenderScript = 0x0024, > - DW_LANG_BLISS = 0x0025, > - /* Post DWARF 5 additions to the DWARF set. > - See https://dwarfstd.org/languages.html . */ > - DW_LANG_Kotlin = 0x0026, > - DW_LANG_Zig = 0x0027, > - DW_LANG_Crystal = 0x0028, > - DW_LANG_C_plus_plus_17 = 0x002a, > - DW_LANG_C_plus_plus_20 = 0x002b, > - DW_LANG_C17 = 0x002c, > - DW_LANG_Fortran18 = 0x002d, > - DW_LANG_Ada2005 = 0x002e, > - DW_LANG_Ada2012 = 0x002f, > - DW_LANG_HIP = 0x0030, > - DW_LANG_Assembly = 0x0031, > - DW_LANG_C_sharp = 0x0032, > - DW_LANG_Mojo = 0x0033, > - DW_LANG_GLSL = 0x0034, > - DW_LANG_GLSL_ES = 0x0035, > - DW_LANG_HLSL = 0x0036, > - DW_LANG_OpenCL_CPP = 0x0037, > - DW_LANG_CPP_for_OpenCL = 0x0038, > - DW_LANG_SYCL = 0x0039, > - DW_LANG_C_plus_plus_23 = 0x003a, > - DW_LANG_Odin = 0x003b, > - DW_LANG_P4 = 0x003c, > - DW_LANG_Metal = 0x003d, > - DW_LANG_C23 = 0x003e, > - DW_LANG_Fortran23 = 0x003f, > - DW_LANG_Ruby = 0x0040, > - DW_LANG_Move = 0x0041, > - DW_LANG_Hylo = 0x0042, > - > - DW_LANG_lo_user = 0x8000, /* Implementation-defined range start. > */ > - DW_LANG_hi_user = 0xffff, /* Implementation-defined range end. */ > - > - /* MIPS. */ > - DW_LANG_Mips_Assembler = 0x8001, > - /* UPC. */ > - DW_LANG_Upc = 0x8765, > - /* HP extensions. */ > - DW_LANG_HP_Bliss = 0x8003, > - DW_LANG_HP_Basic91 = 0x8004, > - DW_LANG_HP_Pascal91 = 0x8005, > - DW_LANG_HP_IMacro = 0x8006, > - DW_LANG_HP_Assembler = 0x8007, > - > - /* Rust extension, but replaced in DWARF 5. */ > - DW_LANG_Rust_old = 0x9000 > - }; > - > /* DWARF 6 source language names and codes. */ > enum dwarf_source_language_name > { > @@ -638,6 +553,10 @@ extern const char *get_DW_IDX_name (unsigned int idx); > recognized. */ > extern const char *get_DW_UT_name (unsigned int ut); > > +/* Return the name of a DW_LANG_ constant, or NULL if the value is not > + recognized. */ > +extern const char *get_DW_LANG_name (unsigned int lang); > + > #ifdef __cplusplus > } > #endif /* __cplusplus */ > diff --git a/libiberty/dwarfnames.c b/libiberty/dwarfnames.c > index cf0780cfa315..4de143d5b386 100644 > --- a/libiberty/dwarfnames.c > +++ b/libiberty/dwarfnames.c > @@ -69,6 +69,11 @@ Boston, MA 02110-1301, USA. */ > switch (ut) { \ > DW_UT (name, value) > #define DW_END_UT } return 0; } > +#define DW_FIRST_LANG(name, value) \ > + const char *get_DW_LANG_name (unsigned int lang) { \ > + switch (lang) { \ > + DW_LANG (name, value) > +#define DW_END_LANG } return 0; } > > #define DW_TAG(name, value) case name: return # name ; > #define DW_TAG_DUP(name, value) > @@ -84,6 +89,7 @@ Boston, MA 02110-1301, USA. */ > #define DW_IDX(name, value) case name: return # name ; > #define DW_IDX_DUP(name, value) > #define DW_UT(name, value) case name: return # name ; > +#define DW_LANG(name, value) case name: return # name ; > > #include "dwarf2.def" > > @@ -102,6 +108,8 @@ Boston, MA 02110-1301, USA. */ > #undef DW_FIRST_IDX > #undef DW_END_IDX > #undef DW_END_UT > +#undef DW_FIRST_LANG > +#undef DW_END_LANG > > #undef DW_TAG > #undef DW_TAG_DUP > @@ -116,3 +124,4 @@ Boston, MA 02110-1301, USA. */ > #undef DW_CFA_DUP > #undef DW_IDX > #undef DW_IDX_DUP > +#undef DW_LANG > > base-commit: a2755339c6c9832467c573d956e91565943ecdc1 > -- > 2.48.1 >