Chromium Code Reviews| Index: src/common/dwarf_cu_to_module.cc |
| diff --git a/src/common/dwarf_cu_to_module.cc b/src/common/dwarf_cu_to_module.cc |
| index 479e39b221250bf37a84cbd8ecdbb652825757e6..bcda18afb2ff97a6b17c7e4dab7e7f3eb6cfe4ec 100644 |
| --- a/src/common/dwarf_cu_to_module.cc |
| +++ b/src/common/dwarf_cu_to_module.cc |
| @@ -39,9 +39,6 @@ |
| #include "common/dwarf_cu_to_module.h" |
| #include <assert.h> |
| -#if !defined(__ANDROID__) |
| -#include <cxxabi.h> |
| -#endif |
| #include <inttypes.h> |
| #include <stdint.h> |
| #include <stdio.h> |
| @@ -350,20 +347,18 @@ void DwarfCUToModule::GenericDIEHandler::ProcessAttributeString( |
| case dwarf2reader::DW_AT_name: |
| name_attribute_ = AddStringToPool(data); |
| break; |
| - case dwarf2reader::DW_AT_MIPS_linkage_name: { |
| - char* demangled = NULL; |
| - int status = -1; |
| -#if !defined(__ANDROID__) // Android NDK doesn't provide abi::__cxa_demangle. |
| - demangled = abi::__cxa_demangle(data.c_str(), NULL, NULL, &status); |
| -#endif |
| + case dwarf2reader::DW_AT_MIPS_linkage_name: |
| + case dwarf2reader::DW_AT_linkage_name: { |
| + string demangled; |
| + int status = cu_context_->language->DemangleName(data, |
| + &demangled); |
| if (status != 0) { |
| - cu_context_->reporter->DemangleError(data, status); |
| - demangled_name_ = ""; |
| - break; |
| - } |
| - if (demangled) { |
| + if (status != Language::kDontDemangle) { |
|
Ted Mielczarek
2016/09/14 10:20:10
It's unfortunate that we lose the language context
Mark Mentovai
2016/09/21 17:56:55
Ted Mielczarek wrote:
|
| + cu_context_->reporter->DemangleError(data, status); |
| + } |
| + demangled_name_.clear(); |
| + } else { |
| demangled_name_ = AddStringToPool(demangled); |
| - free(reinterpret_cast<void*>(demangled)); |
| } |
| break; |
| } |
| @@ -761,6 +756,7 @@ dwarf2reader::DIEHandler *DwarfCUToModule::FindChildHandler( |
| case dwarf2reader::DW_TAG_class_type: |
| case dwarf2reader::DW_TAG_structure_type: |
| case dwarf2reader::DW_TAG_union_type: |
| + case dwarf2reader::DW_TAG_module: |
| return new NamedScopeHandler(cu_context_.get(), child_context_.get(), |
| offset); |
| default: |
| @@ -774,6 +770,10 @@ void DwarfCUToModule::SetLanguage(DwarfLanguage language) { |
| cu_context_->language = Language::Java; |
| break; |
| + case dwarf2reader::DW_LANG_Swift: |
| + cu_context_->language = Language::Swift; |
| + break; |
| + |
| // DWARF has no generic language code for assembly language; this is |
| // what the GNU toolchain uses. |
| case dwarf2reader::DW_LANG_Mips_Assembler: |