diff --git a/Source/Core/Common/SymbolDB.cpp b/Source/Core/Common/SymbolDB.cpp index 6b6f72d33e..9e91b64457 100644 --- a/Source/Core/Common/SymbolDB.cpp +++ b/Source/Core/Common/SymbolDB.cpp @@ -41,7 +41,7 @@ Symbol* SymbolDB::GetSymbolFromName(const std::string& name) { for (auto& func : functions) { - if (func.second.name == name) + if (func.second.function_name == name) return &func.second; } diff --git a/Source/Core/Common/SymbolDB.h b/Source/Core/Common/SymbolDB.h index db4f735683..8d2ae11614 100644 --- a/Source/Core/Common/SymbolDB.h +++ b/Source/Core/Common/SymbolDB.h @@ -30,6 +30,7 @@ struct Symbol }; std::string name; + std::string function_name; // stripped function name std::vector callers; // addresses of functions that call this function std::vector calls; // addresses of functions that are called by this function u32 hash = 0; // use for HLE function finding diff --git a/Source/Core/Core/PowerPC/PPCSymbolDB.cpp b/Source/Core/Core/PowerPC/PPCSymbolDB.cpp index 345ed2602c..f9a7d6efaf 100644 --- a/Source/Core/Core/PowerPC/PPCSymbolDB.cpp +++ b/Source/Core/Core/PowerPC/PPCSymbolDB.cpp @@ -16,6 +16,15 @@ #include "Core/PowerPC/PowerPC.h" #include "Core/PowerPC/SignatureDB.h" +static std::string GetStrippedFunctionName(const std::string& symbol_name) +{ + std::string name = symbol_name.substr(0, symbol_name.find('(')); + size_t position = name.find(' '); + if (position != std::string::npos) + name.erase(position); + return name; +} + PPCSymbolDB g_symbolDB; PPCSymbolDB::PPCSymbolDB() @@ -62,6 +71,7 @@ void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& nam // already got it, let's just update name, checksum & size to be sure. Symbol* tempfunc = &iter->second; tempfunc->name = name; + tempfunc->function_name = GetStrippedFunctionName(name); tempfunc->hash = SignatureDB::ComputeCodeChecksum(startAddr, startAddr + size - 4); tempfunc->type = type; tempfunc->size = size; @@ -77,6 +87,7 @@ void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& nam { PPCAnalyst::AnalyzeFunction(startAddr, tf, size); checksumToFunction[tf.hash] = &(functions[startAddr]); + tf.function_name = GetStrippedFunctionName(name); } tf.size = size; functions[startAddr] = tf;