summaryrefslogtreecommitdiff
path: root/view/macho
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2024-09-23 17:15:17 -0400
committerGlenn Smith <glenn@vector35.com>2024-10-17 17:33:52 -0400
commit8149774201203326096099394434871992996628 (patch)
treed968976df167dc74090f61051c41ca30e5cc7c8e /view/macho
parent5353484086517832418955474757290903351986 (diff)
Demangler plugin API
Closes #467
Diffstat (limited to 'view/macho')
-rw-r--r--view/macho/machoview.cpp35
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());
}
}