From 7d3616548953d403eb9a6b87cdb2332241f89220 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Tue, 10 Apr 2018 09:58:35 +0400 Subject: [PATCH] PPCSymbolDB: Do not truncate fixed size symbols Fix comparison warning --- Source/Core/Common/SymbolDB.h | 2 +- Source/Core/Core/PowerPC/PPCAnalyst.cpp | 4 ++-- Source/Core/Core/PowerPC/PPCAnalyst.h | 4 ++-- Source/Core/Core/PowerPC/PPCSymbolDB.cpp | 7 +++++++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Source/Core/Common/SymbolDB.h b/Source/Core/Common/SymbolDB.h index 147305f8f4..7b6a088124 100644 --- a/Source/Core/Common/SymbolDB.h +++ b/Source/Core/Common/SymbolDB.h @@ -39,7 +39,7 @@ struct Symbol u32 hash = 0; // use for HLE function finding u32 address = 0; u32 flags = 0; - int size = 0; + u32 size = 0; int numCalls = 0; Type type = Type::Function; int index = 0; // only used for coloring the disasm view diff --git a/Source/Core/Core/PowerPC/PPCAnalyst.cpp b/Source/Core/Core/PowerPC/PPCAnalyst.cpp index a3416e3631..45cbcb8697 100644 --- a/Source/Core/Core/PowerPC/PPCAnalyst.cpp +++ b/Source/Core/Core/PowerPC/PPCAnalyst.cpp @@ -83,7 +83,7 @@ static u32 EvaluateBranchTarget(UGeckoInstruction instr, u32 pc) // Also collect which internal branch goes the farthest. // If any one goes farther than the blr or rfi, assume that there is more than // one blr or rfi, and keep scanning. -bool AnalyzeFunction(u32 startAddr, Symbol& func, int max_size) +bool AnalyzeFunction(u32 startAddr, Symbol& func, u32 max_size) { if (func.name.empty()) func.Rename(StringFromFormat("zz_%08x_", startAddr)); @@ -176,7 +176,7 @@ bool AnalyzeFunction(u32 startAddr, Symbol& func, int max_size) } } -bool ReanalyzeFunction(u32 start_addr, Symbol& func, int max_size) +bool ReanalyzeFunction(u32 start_addr, Symbol& func, u32 max_size) { ASSERT_MSG(SYMBOLS, func.analyzed, "The function wasn't previously analyzed!"); diff --git a/Source/Core/Core/PowerPC/PPCAnalyst.h b/Source/Core/Core/PowerPC/PPCAnalyst.h index e5e84a69f6..b9785eb27a 100644 --- a/Source/Core/Core/PowerPC/PPCAnalyst.h +++ b/Source/Core/Core/PowerPC/PPCAnalyst.h @@ -225,7 +225,7 @@ private: void LogFunctionCall(u32 addr); void FindFunctions(u32 startAddr, u32 endAddr, PPCSymbolDB* func_db); -bool AnalyzeFunction(u32 startAddr, Symbol& func, int max_size = 0); -bool ReanalyzeFunction(u32 start_addr, Symbol& func, int max_size = 0); +bool AnalyzeFunction(u32 startAddr, Symbol& func, u32 max_size = 0); +bool ReanalyzeFunction(u32 start_addr, Symbol& func, u32 max_size = 0); } // namespace diff --git a/Source/Core/Core/PowerPC/PPCSymbolDB.cpp b/Source/Core/Core/PowerPC/PPCSymbolDB.cpp index cf225ba946..28dfa121bd 100644 --- a/Source/Core/Core/PowerPC/PPCSymbolDB.cpp +++ b/Source/Core/Core/PowerPC/PPCSymbolDB.cpp @@ -68,6 +68,13 @@ void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& nam if (tf.type == Symbol::Type::Function) { PPCAnalyst::AnalyzeFunction(startAddr, tf, size); + // Do not truncate symbol when a size is expected + if (size != 0 && tf.size != size) + { + WARN_LOG(SYMBOLS, "Analysed symbol (%s) size mismatch, %u expected but %u computed", + name.c_str(), size, tf.size); + tf.size = size; + } checksumToFunction[tf.hash].insert(&functions[startAddr]); } else