Skip to content

Commit e49368b

Browse files
committed
[SharedCache] Demangle relevant symbols
Use the LLVM demangler to demangle relevant symbols
1 parent b74b21d commit e49368b

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

view/sharedcache/core/SharedCache.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2348,7 +2348,11 @@ void SharedCache::ProcessSymbols(std::shared_ptr<MMappedFileAccessor> file, cons
23482348
if ((nlist.n_desc & N_ARM_THUMB_DEF) == N_ARM_THUMB_DEF)
23492349
symbolAddress++;
23502350

2351-
Ref<Symbol> sym = new Symbol(symbolType.value(), symbolName, symbolAddress, nullptr, GlobalBinding);
2351+
QualifiedName demangledName = {};
2352+
std::string shortName = symbolName;
2353+
if (DemangleLLVM(symbolName, demangledName, true))
2354+
shortName = demangledName.GetString();
2355+
Ref<Symbol> sym = new Symbol(symbolType.value(), shortName, shortName, symbolName, symbolAddress, nullptr);
23522356
symbolList.emplace_back(sym);
23532357
}
23542358

@@ -3300,7 +3304,13 @@ void Deserialize(DeserializationContext& context, std::string_view name,
33003304
std::string symbolName = symbol_array[0].GetString();
33013305
uint64_t address = symbol_array[1].GetUint64();
33023306
BNSymbolType type = (BNSymbolType)symbol_array[2].GetUint();
3303-
symbols.insert({address, new Symbol(type, symbolName, address)});
3307+
3308+
QualifiedName demangledName = {};
3309+
std::string shortName = symbolName;
3310+
if (DemangleLLVM(symbolName, demangledName, true))
3311+
shortName = demangledName.GetString();
3312+
Ref<Symbol> sym = new Symbol(type, shortName, shortName, symbolName, address, nullptr);
3313+
symbols.insert({address, sym});
33043314
}
33053315
value[pair[0].GetUint64()] = std::make_shared<std::unordered_map<uint64_t, Ref<Symbol>>>(std::move(symbols));
33063316
}
@@ -3321,7 +3331,13 @@ void Deserialize(DeserializationContext& context, std::string_view name,
33213331
std::string symbolName = symbol_array[0].GetString();
33223332
uint64_t address = symbol_array[1].GetUint64();
33233333
BNSymbolType type = (BNSymbolType)symbol_array[2].GetUint();
3324-
symbols.push_back(new Symbol(type, symbolName, address));
3334+
3335+
QualifiedName demangledName = {};
3336+
std::string shortName = symbolName;
3337+
if (DemangleLLVM(symbolName, demangledName, true))
3338+
shortName = demangledName.GetString();
3339+
Ref<Symbol> sym = new Symbol(type, shortName, shortName, symbolName, address, nullptr);
3340+
symbols.emplace_back(sym);
33253341
}
33263342
value[pair[0].GetUint64()] = std::make_shared<std::vector<Ref<Symbol>>>(std::move(symbols));
33273343
}

0 commit comments

Comments
 (0)