Created
November 30, 2022 01:57
-
-
Save baryluk/622ce84a6f10cf2fe52d35972d25af8a to your computer and use it in GitHub Desktop.
Demangle D programming language symbol names in Valgrind
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commit 3da240b059b1710b47d8774b27dc84bd05fb409c (HEAD -> master) | |
Author: Witold Baryluk <[email protected]> | |
Date: Wed Nov 30 02:56:29 2022 +0100 | |
Demangle D programming language (dlang) symbol names | |
diff --git a/coregrind/m_demangle/demangle.c b/coregrind/m_demangle/demangle.c | |
index 3fd7cb75f..a4031dc8a 100644 | |
--- a/coregrind/m_demangle/demangle.c | |
+++ b/coregrind/m_demangle/demangle.c | |
@@ -121,10 +121,12 @@ void VG_(demangle) ( Bool do_cxx_demangling, Bool do_z_demangling, | |
// - C++ mangled symbols start with "_Z" (possibly with exceptions?) | |
// - Rust "legacy" mangled symbols start with "_Z". | |
// - Rust "v0" mangled symbols start with "_R". | |
+ // - D programming language mangled symbols start with "_D". | |
// XXX: the Java/Rust/Ada demangling here probably doesn't work. See | |
// https://bugs.kde.org/show_bug.cgi?id=445235 for details. | |
if (do_cxx_demangling && VG_(clo_demangle) | |
- && orig != NULL && orig[0] == '_' && (orig[1] == 'Z' || orig[1] == 'R')) { | |
+ && orig != NULL && orig[0] == '_' | |
+ && (orig[1] == 'Z' || orig[1] == 'R' || orig[1] == 'D')) { | |
/* !!! vvv STATIC vvv !!! */ | |
static HChar* demangled = NULL; | |
/* !!! ^^^ STATIC ^^^ !!! */ | |
@@ -134,7 +136,11 @@ void VG_(demangle) ( Bool do_cxx_demangling, Bool do_z_demangling, | |
VG_(arena_free) (VG_AR_DEMANGLE, demangled); | |
demangled = NULL; | |
} | |
- demangled = ML_(cplus_demangle) ( orig, DMGL_ANSI | DMGL_PARAMS ); | |
+ if (orig[1] == 'D') { | |
+ demangled = dlang_demangle ( orig, DMGL_ANSI | DMGL_PARAMS ); | |
+ } else { | |
+ demangled = ML_(cplus_demangle) ( orig, DMGL_ANSI | DMGL_PARAMS ); | |
+ } | |
*result = (demangled == NULL) ? orig : demangled; | |
} else { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment