Skip to content

Commit c15423b

Browse files
authored
Demangle variable names in the dwarf dump (#131)
* Demangle variable names * Fix small issue
1 parent af19c92 commit c15423b

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

src/util/dwarf.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1504,7 +1504,7 @@ fn member_subroutine_def_string(
15041504
}
15051505
if !name_written {
15061506
if let Some(name) = t.name.as_ref() {
1507-
full_written_name.push_str(&maybe_demangle_name(info, name));
1507+
full_written_name.push_str(&maybe_demangle_function_name(info, name));
15081508
}
15091509
}
15101510
let rt = type_string(info, typedefs, &t.return_type, true)?;
@@ -1682,7 +1682,7 @@ pub fn subroutine_def_string(
16821682
}
16831683
if !name_written {
16841684
if let Some(name) = t.name.as_ref() {
1685-
full_written_name.push_str(&maybe_demangle_name(info, name));
1685+
full_written_name.push_str(&maybe_demangle_function_name(info, name));
16861686
}
16871687
}
16881688
let rt = type_string(info, typedefs, &t.return_type, true)?;
@@ -3575,7 +3575,7 @@ fn variable_string(
35753575
let mut out = if variable.local { "static ".to_string() } else { String::new() };
35763576
out.push_str(&ts.prefix);
35773577
out.push(' ');
3578-
out.push_str(variable.name.as_deref().unwrap_or("[unknown]"));
3578+
out.push_str(&maybe_demangle_name(info, variable.name.as_deref().unwrap_or("[unknown]")));
35793579
out.push_str(&ts.suffix);
35803580
out.push(';');
35813581
if include_extra {
@@ -3680,6 +3680,15 @@ fn process_variable_tag(info: &DwarfInfo, tag: &Tag) -> Result<VariableTag> {
36803680

36813681
// TODO expand for more compilers?
36823682
fn maybe_demangle_name(info: &DwarfInfo, name: &str) -> String {
3683+
let name_opt = match info.producer {
3684+
Producer::MWCC => cw_demangle(name, &Default::default()),
3685+
Producer::GCC => gnu_demangle(name, &DemangleConfig::new()).ok(),
3686+
Producer::OTHER => None,
3687+
};
3688+
name_opt.unwrap_or_else(|| name.to_string())
3689+
}
3690+
3691+
fn maybe_demangle_function_name(info: &DwarfInfo, name: &str) -> String {
36833692
let fake_name = format!("{}__0", name);
36843693
let name_opt = match info.producer {
36853694
// for __pl this looks like operator+

0 commit comments

Comments
 (0)