summaryrefslogtreecommitdiff
path: root/view/elf/elfview.cpp
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/elf/elfview.cpp
parent5353484086517832418955474757290903351986 (diff)
Demangler plugin API
Closes #467
Diffstat (limited to 'view/elf/elfview.cpp')
-rw-r--r--view/elf/elfview.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/view/elf/elfview.cpp b/view/elf/elfview.cpp
index b90b18a7..e788b06d 100644
--- a/view/elf/elfview.cpp
+++ b/view/elf/elfview.cpp
@@ -2443,28 +2443,20 @@ void ElfView::DefineElfSymbol(BNSymbolType type, const string& incomingName, uin
string shortName = rawName;
string fullName = rawName;
Ref<Type> typeRef = symbolTypeRef;
- if (m_arch && IsGNU3MangledString(rawName))
+ if (m_arch)
{
- QualifiedName varName;
+ QualifiedName demangledName;
Ref<Type> demangledType;
- if (DemangleGNU3(m_arch, rawName, demangledType, varName, m_simplifyTemplates))
+ bool simplify = Settings::Instance()->Get<bool>("analysis.types.templateSimplifier", this);
+ if (DemangleGeneric(m_arch, rawName, demangledType, demangledName, this, simplify))
{
- shortName = varName.GetString();
+ shortName = demangledName.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());
- }
}
if (!typeRef && (size > 0 && size <= 8))