diff options
| author | Glenn Smith <glenn@vector35.com> | 2024-09-23 17:15:17 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2024-10-17 17:33:52 -0400 |
| commit | 8149774201203326096099394434871992996628 (patch) | |
| tree | d968976df167dc74090f61051c41ca30e5cc7c8e /view/macho | |
| parent | 5353484086517832418955474757290903351986 (diff) | |
Demangler plugin API
Closes #467
Diffstat (limited to 'view/macho')
| -rw-r--r-- | view/macho/machoview.cpp | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/view/macho/machoview.cpp b/view/macho/machoview.cpp index d8a8a57f..5a118256 100644 --- a/view/macho/machoview.cpp +++ b/view/macho/machoview.cpp @@ -2428,30 +2428,23 @@ Ref<Symbol> MachoView::DefineMachoSymbol( string fullName = rawName; Ref<Type> typeRef = symbolTypeRef; - QualifiedName varName; if (m_arch) { - if (IsGNU3MangledString(rawName)) + QualifiedName demangledName; + Ref<Type> demangledType; + bool simplify = Settings::Instance()->Get<bool>("analysis.types.templateSimplifier", this); + if (DemangleGeneric(m_arch, rawName, demangledType, demangledName, this, simplify)) { - Ref<Type> demangledType; - if (DemangleGNU3(m_arch, rawName, demangledType, varName, m_simplifyTemplates)) - { - shortName = varName.GetString(); - fullName = shortName; - if (demangledType) - fullName += demangledType->GetStringAfterName(); - if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName)) - typeRef = demangledType; - } - else if (!m_extractMangledTypes && DemangleLLVM(rawName, varName, m_simplifyTemplates)) - { - shortName = varName.GetString(); - fullName = shortName; - } - else - { - m_logger->LogDebug("Failed to demangle name: '%s'\n", rawName.c_str()); - } + shortName = demangledName.GetString(); + fullName = shortName; + if (demangledType) + fullName += demangledType->GetStringAfterName(); + if (!typeRef && m_extractMangledTypes && !GetDefaultPlatform()->GetFunctionByName(rawName)) + typeRef = demangledType; + } + else + { + m_logger->LogDebug("Failed to demangle name: '%s'\n", rawName.c_str()); } } |
