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: |