Skip to content
Permalink
Browse files
Merge pull request #6627 from sepalani/map-strip
 PPCSymbolDB: Do not truncate fixed size symbols
  • Loading branch information
leoetlino committed Apr 13, 2018
2 parents fa982fd + 7d36165 commit 52905a5
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
@@ -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
@@ -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!");

@@ -225,7 +225,7 @@ class PPCAnalyzer

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
@@ -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
@@ -405,8 +412,7 @@ bool PPCSymbolDB::LoadMap(const std::string& filename, bool bad)
}

Index();
if (bad)
SuccessAlertT("Loaded %d good functions, ignored %d bad functions.", good_count, bad_count);
NOTICE_LOG(SYMBOLS, "%d symbols loaded, %d symbols ignored.", good_count, bad_count);
return true;
}

0 comments on commit 52905a5

Please sign in to comment.