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;