From 2415b5df056a409b24fd26318d48d894f124c463 Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sun, 4 Jan 2026 03:43:18 +0100 Subject: [PATCH 1/2] Demangle variable names --- src/util/dwarf.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/util/dwarf.rs b/src/util/dwarf.rs index a3516d2..7bfc248 100644 --- a/src/util/dwarf.rs +++ b/src/util/dwarf.rs @@ -1504,7 +1504,7 @@ fn member_subroutine_def_string( } if !name_written { if let Some(name) = t.name.as_ref() { - full_written_name.push_str(&maybe_demangle_name(info, name)); + full_written_name.push_str(&maybe_demangle_function_name(info, name)); } } let rt = type_string(info, typedefs, &t.return_type, true)?; @@ -1682,7 +1682,7 @@ pub fn subroutine_def_string( } if !name_written { if let Some(name) = t.name.as_ref() { - full_written_name.push_str(&maybe_demangle_name(info, name)); + full_written_name.push_str(&maybe_demangle_function_name(info, name)); } } let rt = type_string(info, typedefs, &t.return_type, true)?; @@ -3575,7 +3575,7 @@ fn variable_string( let mut out = if variable.local { "static ".to_string() } else { String::new() }; out.push_str(&ts.prefix); out.push(' '); - out.push_str(variable.name.as_deref().unwrap_or("[unknown]")); + out.push_str(&maybe_demangle_name(info, variable.name.as_deref().unwrap_or("[unknown]"))); out.push_str(&ts.suffix); out.push(';'); if include_extra { @@ -3680,6 +3680,15 @@ fn process_variable_tag(info: &DwarfInfo, tag: &Tag) -> Result { // TODO expand for more compilers? fn maybe_demangle_name(info: &DwarfInfo, name: &str) -> String { + let name_opt = match info.producer { + Producer::MWCC => cw_demangle(&name, &Default::default()), + Producer::GCC => gnu_demangle(&name, &DemangleConfig::new()).ok(), + Producer::OTHER => None, + }; + name_opt.unwrap_or_else(|| name.to_string()) +} + +fn maybe_demangle_function_name(info: &DwarfInfo, name: &str) -> String { let fake_name = format!("{}__0", name); let name_opt = match info.producer { // for __pl this looks like operator+ From 14e437c5fcffb849e591403cedb6e69c708e7ac7 Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sun, 4 Jan 2026 03:46:38 +0100 Subject: [PATCH 2/2] Fix small issue --- src/util/dwarf.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/dwarf.rs b/src/util/dwarf.rs index 7bfc248..adb0d4e 100644 --- a/src/util/dwarf.rs +++ b/src/util/dwarf.rs @@ -3681,8 +3681,8 @@ fn process_variable_tag(info: &DwarfInfo, tag: &Tag) -> Result { // TODO expand for more compilers? fn maybe_demangle_name(info: &DwarfInfo, name: &str) -> String { let name_opt = match info.producer { - Producer::MWCC => cw_demangle(&name, &Default::default()), - Producer::GCC => gnu_demangle(&name, &DemangleConfig::new()).ok(), + Producer::MWCC => cw_demangle(name, &Default::default()), + Producer::GCC => gnu_demangle(name, &DemangleConfig::new()).ok(), Producer::OTHER => None, }; name_opt.unwrap_or_else(|| name.to_string())