summaryrefslogtreecommitdiff
path: root/view/sharedcache/core/SharedCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'view/sharedcache/core/SharedCache.cpp')
-rw-r--r--view/sharedcache/core/SharedCache.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/view/sharedcache/core/SharedCache.cpp b/view/sharedcache/core/SharedCache.cpp
index 6fe0dc24..afbd3b58 100644
--- a/view/sharedcache/core/SharedCache.cpp
+++ b/view/sharedcache/core/SharedCache.cpp
@@ -2348,7 +2348,11 @@ void SharedCache::ProcessSymbols(std::shared_ptr<MMappedFileAccessor> file, cons
if ((nlist.n_desc & N_ARM_THUMB_DEF) == N_ARM_THUMB_DEF)
symbolAddress++;
- Ref<Symbol> sym = new Symbol(symbolType.value(), symbolName, symbolAddress, nullptr, GlobalBinding);
+ QualifiedName demangledName = {};
+ std::string shortName = symbolName;
+ if (DemangleLLVM(symbolName, demangledName, true))
+ shortName = demangledName.GetString();
+ Ref<Symbol> sym = new Symbol(symbolType.value(), shortName, shortName, symbolName, symbolAddress, nullptr);
symbolList.emplace_back(sym);
}
@@ -3300,7 +3304,13 @@ void Deserialize(DeserializationContext& context, std::string_view name,
std::string symbolName = symbol_array[0].GetString();
uint64_t address = symbol_array[1].GetUint64();
BNSymbolType type = (BNSymbolType)symbol_array[2].GetUint();
- symbols.insert({address, new Symbol(type, symbolName, address)});
+
+ QualifiedName demangledName = {};
+ std::string shortName = symbolName;
+ if (DemangleLLVM(symbolName, demangledName, true))
+ shortName = demangledName.GetString();
+ Ref<Symbol> sym = new Symbol(type, shortName, shortName, symbolName, address, nullptr);
+ symbols.insert({address, sym});
}
value[pair[0].GetUint64()] = std::make_shared<std::unordered_map<uint64_t, Ref<Symbol>>>(std::move(symbols));
}
@@ -3321,7 +3331,13 @@ void Deserialize(DeserializationContext& context, std::string_view name,
std::string symbolName = symbol_array[0].GetString();
uint64_t address = symbol_array[1].GetUint64();
BNSymbolType type = (BNSymbolType)symbol_array[2].GetUint();
- symbols.push_back(new Symbol(type, symbolName, address));
+
+ QualifiedName demangledName = {};
+ std::string shortName = symbolName;
+ if (DemangleLLVM(symbolName, demangledName, true))
+ shortName = demangledName.GetString();
+ Ref<Symbol> sym = new Symbol(type, shortName, shortName, symbolName, address, nullptr);
+ symbols.emplace_back(sym);
}
value[pair[0].GetUint64()] = std::make_shared<std::vector<Ref<Symbol>>>(std::move(symbols));
}