From 16ab317dfc1716ee959f252170ea4eef3081c031 Mon Sep 17 00:00:00 2001 From: "hashimoto@chromium.org" Date: Tue, 3 Feb 2015 03:17:30 +0000 Subject: [PATCH] Demangle symbol name The spec says it should be demangled. https://code.google.com/p/google-breakpad/wiki/SymbolFiles BUG=chromium:453498 R=mark@chromium.org Review URL: https://breakpad.appspot.com/2854002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1421 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/common/dwarf_cu_to_module.cc | 2 +- src/common/linux/elf_symbols_to_module.cc | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/common/dwarf_cu_to_module.cc b/src/common/dwarf_cu_to_module.cc index aaac058b..1729d4ac 100644 --- a/src/common/dwarf_cu_to_module.cc +++ b/src/common/dwarf_cu_to_module.cc @@ -352,7 +352,7 @@ void DwarfCUToModule::GenericDIEHandler::ProcessAttributeString( case dwarf2reader::DW_AT_MIPS_linkage_name: { char* demangled = NULL; int status = -1; -#if !defined(__ANDROID__) +#if !defined(__ANDROID__) // Android NDK doesn't provide abi::__cxa_demangle. demangled = abi::__cxa_demangle(data.c_str(), NULL, NULL, &status); #endif if (status != 0) { diff --git a/src/common/linux/elf_symbols_to_module.cc b/src/common/linux/elf_symbols_to_module.cc index 96c64fb6..562875e1 100644 --- a/src/common/linux/elf_symbols_to_module.cc +++ b/src/common/linux/elf_symbols_to_module.cc @@ -32,6 +32,7 @@ #include "common/linux/elf_symbols_to_module.h" +#include #include #include @@ -157,6 +158,16 @@ bool ELFSymbolsToModule(const uint8_t *symtab_section, iterator->shndx != SHN_UNDEF) { Module::Extern *ext = new Module::Extern(iterator->value); ext->name = SymbolString(iterator->name_offset, strings); +#if !defined(__ANDROID__) // Android NDK doesn't provide abi::__cxa_demangle. + int status = 0; + char* demangled = + abi::__cxa_demangle(ext->name.c_str(), NULL, NULL, &status); + if (demangled) { + if (status == 0) + ext->name = demangled; + free(demangled); + } +#endif module->AddExtern(ext); } ++iterator;