From 9358d8ec60edc9323d314f1bc7ca6fc66373de0c Mon Sep 17 00:00:00 2001 From: Luke Street Date: Fri, 14 Mar 2025 09:44:15 -0600 Subject: [PATCH] mips: Add C++ symbol demangling (CW & modern GCC) --- objdiff-core/Cargo.toml | 2 ++ objdiff-core/src/arch/mips.rs | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/objdiff-core/Cargo.toml b/objdiff-core/Cargo.toml index 2a0b6a2..366b47a 100644 --- a/objdiff-core/Cargo.toml +++ b/objdiff-core/Cargo.toml @@ -81,6 +81,8 @@ std = [ ] mips = [ "any-arch", + "dep:cpp_demangle", + "dep:cwdemangle", "dep:rabbitizer", ] ppc = [ diff --git a/objdiff-core/src/arch/mips.rs b/objdiff-core/src/arch/mips.rs index 73e7cc4..e36cc15 100644 --- a/objdiff-core/src/arch/mips.rs +++ b/objdiff-core/src/arch/mips.rs @@ -286,6 +286,13 @@ impl Arch for ArchMips { }) } + fn demangle(&self, name: &str) -> Option { + cpp_demangle::Symbol::new(name) + .ok() + .and_then(|s| s.demangle(&cpp_demangle::DemangleOptions::default()).ok()) + .or_else(|| cwdemangle::demangle(name, &cwdemangle::DemangleOptions::default())) + } + fn reloc_name(&self, flags: RelocationFlags) -> Option<&'static str> { match flags { RelocationFlags::Elf(r_type) => match r_type {