Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baryluk/622ce84a6f10cf2fe52d35972d25af8a to your computer and use it in GitHub Desktop.
Save baryluk/622ce84a6f10cf2fe52d35972d25af8a to your computer and use it in GitHub Desktop.
Demangle D programming language symbol names in Valgrind
commit 3da240b059b1710b47d8774b27dc84bd05fb409c (HEAD -> master)
Author: Witold Baryluk <witold.baryluk@gmail.com>
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