Merge pull request #6488 from aldelaro5/symbols-log

LOG: Add a log type for Symbols
This commit is contained in:
Léo Lam 2018-03-22 22:06:04 +01:00 committed by GitHub
commit 5e76f3a6d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 48 additions and 45 deletions

View File

@ -52,6 +52,7 @@ enum LOG_TYPE
POWERPC, POWERPC,
SERIALINTERFACE, SERIALINTERFACE,
SP1, SP1,
SYMBOLS,
VIDEO, VIDEO,
VIDEOINTERFACE, VIDEOINTERFACE,
WII_IPC, WII_IPC,

View File

@ -120,6 +120,7 @@ LogManager::LogManager()
m_log[LogTypes::POWERPC] = {"PowerPC", "IBM CPU"}; m_log[LogTypes::POWERPC] = {"PowerPC", "IBM CPU"};
m_log[LogTypes::SERIALINTERFACE] = {"SI", "Serial Interface (SI)"}; m_log[LogTypes::SERIALINTERFACE] = {"SI", "Serial Interface (SI)"};
m_log[LogTypes::SP1] = {"SP1", "Serial Port 1"}; m_log[LogTypes::SP1] = {"SP1", "Serial Port 1"};
m_log[LogTypes::SYMBOLS] = {"SYMBOLS", "Symbols"};
m_log[LogTypes::VIDEO] = {"Video", "Video Backend"}; m_log[LogTypes::VIDEO] = {"Video", "Video Backend"};
m_log[LogTypes::VIDEOINTERFACE] = {"VI", "Video Interface (VI)"}; m_log[LogTypes::VIDEOINTERFACE] = {"VI", "Video Interface (VI)"};
m_log[LogTypes::WIIMOTE] = {"Wiimote", "Wiimote"}; m_log[LogTypes::WIIMOTE] = {"Wiimote", "Wiimote"};

View File

@ -331,7 +331,7 @@ void RSOView::LoadImports()
{ {
std::size_t size = m_header.GetImportsSize(); std::size_t size = m_header.GetImportsSize();
if (size % sizeof(RSOImport) != 0) if (size % sizeof(RSOImport) != 0)
WARN_LOG(OSHLE, "RSO Imports Table has an incoherent size (%08zx)", size); WARN_LOG(SYMBOLS, "RSO Imports Table has an incoherent size (%08zx)", size);
m_imports.Load(m_header.GetImportsOffset(), size / sizeof(RSOImport)); m_imports.Load(m_header.GetImportsOffset(), size / sizeof(RSOImport));
} }
@ -339,7 +339,7 @@ void RSOView::LoadExports()
{ {
std::size_t size = m_header.GetExportsSize(); std::size_t size = m_header.GetExportsSize();
if (size % sizeof(RSOExport) != 0) if (size % sizeof(RSOExport) != 0)
WARN_LOG(OSHLE, "RSO Exports Table has an incoherent size (%08zx)", size); WARN_LOG(SYMBOLS, "RSO Exports Table has an incoherent size (%08zx)", size);
m_exports.Load(m_header.GetExportsOffset(), size / sizeof(RSOExport)); m_exports.Load(m_header.GetExportsOffset(), size / sizeof(RSOExport));
} }
@ -347,7 +347,7 @@ void RSOView::LoadInternals()
{ {
std::size_t size = m_header.GetInternalsSize(); std::size_t size = m_header.GetInternalsSize();
if (size % sizeof(RSOInternalsEntry) != 0) if (size % sizeof(RSOInternalsEntry) != 0)
WARN_LOG(OSHLE, "RSO Internals Relocation Table has an incoherent size (%08zx)", size); WARN_LOG(SYMBOLS, "RSO Internals Relocation Table has an incoherent size (%08zx)", size);
m_imports.Load(m_header.GetInternalsOffset(), size / sizeof(RSOInternalsEntry)); m_imports.Load(m_header.GetInternalsOffset(), size / sizeof(RSOInternalsEntry));
} }
@ -355,7 +355,7 @@ void RSOView::LoadExternals()
{ {
std::size_t size = m_header.GetExternalsSize(); std::size_t size = m_header.GetExternalsSize();
if (size % sizeof(RSOExternalsEntry) != 0) if (size % sizeof(RSOExternalsEntry) != 0)
WARN_LOG(OSHLE, "RSO Externals Relocation Table has an incoherent size (%08zx)", size); WARN_LOG(SYMBOLS, "RSO Externals Relocation Table has an incoherent size (%08zx)", size);
m_imports.Load(m_header.GetExternalsOffset(), size / sizeof(RSOExternalsEntry)); m_imports.Load(m_header.GetExternalsOffset(), size / sizeof(RSOExternalsEntry));
} }
@ -393,7 +393,7 @@ void RSOView::Apply(PPCSymbolDB* symbol_db) const
} }
} }
} }
DEBUG_LOG(OSHLE, "RSO(%s): %zu symbols applied", GetName().c_str(), GetExportsCount()); DEBUG_LOG(SYMBOLS, "RSO(%s): %zu symbols applied", GetName().c_str(), GetExportsCount());
} }
u32 RSOView::GetNextEntry() const u32 RSOView::GetNextEntry() const
@ -530,9 +530,9 @@ u32 RSOView::GetProlog() const
{ {
u32 section_index = m_header.GetPrologSectionIndex(); u32 section_index = m_header.GetPrologSectionIndex();
if (section_index == 0) if (section_index == 0)
WARN_LOG(OSHLE, "RSO doesn't have a prolog function"); WARN_LOG(SYMBOLS, "RSO doesn't have a prolog function");
else if (section_index >= m_sections.Count()) else if (section_index >= m_sections.Count())
WARN_LOG(OSHLE, "RSO prolog section index out of bound"); WARN_LOG(SYMBOLS, "RSO prolog section index out of bound");
else else
return GetSection(section_index).offset + m_header.GetPrologSectionOffset(); return GetSection(section_index).offset + m_header.GetPrologSectionOffset();
return 0; return 0;
@ -542,9 +542,9 @@ u32 RSOView::GetEpilog() const
{ {
u32 section_index = m_header.GetEpilogSectionIndex(); u32 section_index = m_header.GetEpilogSectionIndex();
if (section_index == 0) if (section_index == 0)
WARN_LOG(OSHLE, "RSO doesn't have an epilog function"); WARN_LOG(SYMBOLS, "RSO doesn't have an epilog function");
else if (section_index >= m_sections.Count()) else if (section_index >= m_sections.Count())
WARN_LOG(OSHLE, "RSO epilog section index out of bound"); WARN_LOG(SYMBOLS, "RSO epilog section index out of bound");
else else
return GetSection(section_index).offset + m_header.GetEpilogSectionOffset(); return GetSection(section_index).offset + m_header.GetEpilogSectionOffset();
return 0; return 0;
@ -554,9 +554,9 @@ u32 RSOView::GetUnresolved() const
{ {
u32 section_index = m_header.GetUnresolvedSectionIndex(); u32 section_index = m_header.GetUnresolvedSectionIndex();
if (section_index == 0) if (section_index == 0)
WARN_LOG(OSHLE, "RSO doesn't have a unresolved function"); WARN_LOG(SYMBOLS, "RSO doesn't have a unresolved function");
else if (section_index >= m_sections.Count()) else if (section_index >= m_sections.Count())
WARN_LOG(OSHLE, "RSO unresolved section index out of bound"); WARN_LOG(SYMBOLS, "RSO unresolved section index out of bound");
else else
return GetSection(section_index).offset + m_header.GetUnresolvedSectionOffset(); return GetSection(section_index).offset + m_header.GetUnresolvedSectionOffset();
return 0; return 0;
@ -567,7 +567,7 @@ bool RSOChainView::Load(u32 address)
// Load node // Load node
RSOView node; RSOView node;
node.LoadHeader(address); node.LoadHeader(address);
DEBUG_LOG(OSHLE, "RSOChain node name: %s", node.GetName().c_str()); DEBUG_LOG(SYMBOLS, "RSOChain node name: %s", node.GetName().c_str());
m_chain.emplace_front(std::move(node)); m_chain.emplace_front(std::move(node));
if (LoadNextChain(m_chain.front()) && LoadPrevChain(m_chain.front())) if (LoadNextChain(m_chain.front()) && LoadPrevChain(m_chain.front()))
@ -613,8 +613,8 @@ bool RSOChainView::LoadNextChain(const RSOView& view)
if (prev_address != next_node.GetPrevEntry()) if (prev_address != next_node.GetPrevEntry())
{ {
ERROR_LOG(OSHLE, "RSOChain has an incoherent previous link %08x != %08x in %s", prev_address, ERROR_LOG(SYMBOLS, "RSOChain has an incoherent previous link %08x != %08x in %s",
next_node.GetPrevEntry(), next_node.GetName().c_str()); prev_address, next_node.GetPrevEntry(), next_node.GetName().c_str());
return false; return false;
} }
@ -638,7 +638,7 @@ bool RSOChainView::LoadPrevChain(const RSOView& view)
if (next_address != prev_node.GetNextEntry()) if (next_address != prev_node.GetNextEntry())
{ {
ERROR_LOG(OSHLE, "RSOChain has an incoherent next link %08x != %08x in %s", next_address, ERROR_LOG(SYMBOLS, "RSOChain has an incoherent next link %08x != %08x in %s", next_address,
prev_node.GetNextEntry(), prev_node.GetName().c_str()); prev_node.GetNextEntry(), prev_node.GetName().c_str());
return false; return false;
} }

View File

@ -194,7 +194,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, int max_size)
{ {
ASSERT_MSG(OSHLE, func.analyzed, "The function wasn't previously analyzed!"); ASSERT_MSG(SYMBOLS, func.analyzed, "The function wasn't previously analyzed!");
func.analyzed = false; func.analyzed = false;
return AnalyzeFunction(start_addr, func, max_size); return AnalyzeFunction(start_addr, func, max_size);
@ -399,7 +399,7 @@ void FindFunctions(u32 startAddr, u32 endAddr, PPCSymbolDB* func_db)
{ {
if (func.second.address == 4) if (func.second.address == 4)
{ {
WARN_LOG(OSHLE, "Weird function"); WARN_LOG(SYMBOLS, "Weird function");
continue; continue;
} }
AnalyzeFunction2(&(func.second)); AnalyzeFunction2(&(func.second));
@ -449,10 +449,11 @@ void FindFunctions(u32 startAddr, u32 endAddr, PPCSymbolDB* func_db)
else else
unniceSize /= numUnNice; unniceSize /= numUnNice;
INFO_LOG(OSHLE, "Functions analyzed. %i leafs, %i nice, %i unnice." INFO_LOG(SYMBOLS, "Functions analyzed. %i leafs, %i nice, %i unnice."
"%i timer, %i rfi. %i are branchless leafs.", "%i timer, %i rfi. %i are branchless leafs.",
numLeafs, numNice, numUnNice, numTimer, numRFI, numStraightLeaf); numLeafs, numNice, numUnNice, numTimer, numRFI, numStraightLeaf);
INFO_LOG(OSHLE, "Average size: %i (leaf), %i (nice), %i(unnice)", leafSize, niceSize, unniceSize); INFO_LOG(SYMBOLS, "Average size: %i (leaf), %i (nice), %i(unnice)", leafSize, niceSize,
unniceSize);
} }
static bool isCmp(const CodeOp& a) static bool isCmp(const CodeOp& a)

View File

@ -133,7 +133,7 @@ void PPCSymbolDB::FillInCallers()
} }
else else
{ {
// LOG(OSHLE, "FillInCallers tries to fill data in an unknown function 0x%08x.", // LOG(SYMBOLS, "FillInCallers tries to fill data in an unknown function 0x%08x.",
// FunctionAddress); // FunctionAddress);
// TODO - analyze the function instead. // TODO - analyze the function instead.
} }
@ -147,19 +147,19 @@ void PPCSymbolDB::PrintCalls(u32 funcAddr) const
if (iter != functions.end()) if (iter != functions.end())
{ {
const Symbol& f = iter->second; const Symbol& f = iter->second;
DEBUG_LOG(OSHLE, "The function %s at %08x calls:", f.name.c_str(), f.address); DEBUG_LOG(SYMBOLS, "The function %s at %08x calls:", f.name.c_str(), f.address);
for (const SCall& call : f.calls) for (const SCall& call : f.calls)
{ {
XFuncMap::const_iterator n = functions.find(call.function); XFuncMap::const_iterator n = functions.find(call.function);
if (n != functions.end()) if (n != functions.end())
{ {
DEBUG_LOG(CONSOLE, "* %08x : %s", call.callAddress, n->second.name.c_str()); DEBUG_LOG(SYMBOLS, "* %08x : %s", call.callAddress, n->second.name.c_str());
} }
} }
} }
else else
{ {
WARN_LOG(CONSOLE, "Symbol does not exist"); WARN_LOG(SYMBOLS, "Symbol does not exist");
} }
} }
@ -169,13 +169,13 @@ void PPCSymbolDB::PrintCallers(u32 funcAddr) const
if (iter != functions.end()) if (iter != functions.end())
{ {
const Symbol& f = iter->second; const Symbol& f = iter->second;
DEBUG_LOG(CONSOLE, "The function %s at %08x is called by:", f.name.c_str(), f.address); DEBUG_LOG(SYMBOLS, "The function %s at %08x is called by:", f.name.c_str(), f.address);
for (const SCall& caller : f.callers) for (const SCall& caller : f.callers)
{ {
XFuncMap::const_iterator n = functions.find(caller.function); XFuncMap::const_iterator n = functions.find(caller.function);
if (n != functions.end()) if (n != functions.end())
{ {
DEBUG_LOG(CONSOLE, "* %08x : %s", caller.callAddress, n->second.name.c_str()); DEBUG_LOG(SYMBOLS, "* %08x : %s", caller.callAddress, n->second.name.c_str());
} }
} }
} }

View File

@ -50,7 +50,7 @@ bool CSVSignatureDB::Load(const std::string& file_path)
} }
else else
{ {
WARN_LOG(OSHLE, "CSV database failed to parse line %zu", i); WARN_LOG(SYMBOLS, "CSV database failed to parse line %zu", i);
} }
} }
@ -63,7 +63,7 @@ bool CSVSignatureDB::Save(const std::string& file_path) const
if (!f) if (!f)
{ {
ERROR_LOG(OSHLE, "CSV database save failed"); ERROR_LOG(SYMBOLS, "CSV database save failed");
return false; return false;
} }
for (const auto& func : m_database) for (const auto& func : m_database)
@ -75,6 +75,6 @@ bool CSVSignatureDB::Save(const std::string& file_path) const
func.second.object_name.c_str()); func.second.object_name.c_str());
} }
INFO_LOG(OSHLE, "CSV database save successful"); INFO_LOG(SYMBOLS, "CSV database save successful");
return true; return true;
} }

View File

@ -54,7 +54,7 @@ bool DSYSignatureDB::Save(const std::string& file_path) const
if (!f) if (!f)
{ {
ERROR_LOG(OSHLE, "Database save failed"); ERROR_LOG(SYMBOLS, "Database save failed");
return false; return false;
} }
u32 fcount = static_cast<u32>(m_database.size()); u32 fcount = static_cast<u32>(m_database.size());
@ -69,6 +69,6 @@ bool DSYSignatureDB::Save(const std::string& file_path) const
f.WriteArray(&temp, 1); f.WriteArray(&temp, 1);
} }
INFO_LOG(OSHLE, "Database save successful"); INFO_LOG(SYMBOLS, "Database save successful");
return true; return true;
} }

View File

@ -38,7 +38,7 @@ bool GetCode(MEGASignature* sig, std::istringstream* iss)
} }
else else
{ {
WARN_LOG(OSHLE, "MEGA database failed to parse code"); WARN_LOG(SYMBOLS, "MEGA database failed to parse code");
return false; return false;
} }
} }
@ -84,13 +84,13 @@ bool GetRefs(MEGASignature* sig, std::istringstream* iss)
if (ptr == endptr || offset > std::numeric_limits<u32>::max()) if (ptr == endptr || offset > std::numeric_limits<u32>::max())
{ {
WARN_LOG(OSHLE, "MEGA database failed to parse reference %u offset", ref_count); WARN_LOG(SYMBOLS, "MEGA database failed to parse reference %u offset", ref_count);
return false; return false;
} }
if (!GetFunctionName(iss, &ref)) if (!GetFunctionName(iss, &ref))
{ {
WARN_LOG(OSHLE, "MEGA database failed to parse reference %u name", ref_count); WARN_LOG(SYMBOLS, "MEGA database failed to parse reference %u name", ref_count);
return false; return false;
} }
sig->refs.emplace_back(static_cast<u32>(offset), std::move(ref)); sig->refs.emplace_back(static_cast<u32>(offset), std::move(ref));
@ -145,7 +145,7 @@ bool MEGASignatureDB::Load(const std::string& file_path)
} }
else else
{ {
WARN_LOG(OSHLE, "MEGA database failed to parse line %zu", i); WARN_LOG(SYMBOLS, "MEGA database failed to parse line %zu", i);
} }
} }
return true; return true;
@ -153,7 +153,7 @@ bool MEGASignatureDB::Load(const std::string& file_path)
bool MEGASignatureDB::Save(const std::string& file_path) const bool MEGASignatureDB::Save(const std::string& file_path) const
{ {
ERROR_LOG(OSHLE, "MEGA database save unsupported yet."); ERROR_LOG(SYMBOLS, "MEGA database save unsupported yet.");
return false; return false;
} }
@ -167,7 +167,7 @@ void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const
if (Compare(symbol.address, symbol.size, sig)) if (Compare(symbol.address, symbol.size, sig))
{ {
symbol.name = sig.name; symbol.name = sig.name;
INFO_LOG(OSHLE, "Found %s at %08x (size: %08x)!", sig.name.c_str(), symbol.address, INFO_LOG(SYMBOLS, "Found %s at %08x (size: %08x)!", sig.name.c_str(), symbol.address,
symbol.size); symbol.size);
break; break;
} }
@ -178,12 +178,12 @@ void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const
void MEGASignatureDB::Populate(const PPCSymbolDB* func_db, const std::string& filter) void MEGASignatureDB::Populate(const PPCSymbolDB* func_db, const std::string& filter)
{ {
ERROR_LOG(OSHLE, "MEGA database can't be populated yet."); ERROR_LOG(SYMBOLS, "MEGA database can't be populated yet.");
} }
bool MEGASignatureDB::Add(u32 startAddr, u32 size, const std::string& name) bool MEGASignatureDB::Add(u32 startAddr, u32 size, const std::string& name)
{ {
ERROR_LOG(OSHLE, "Can't add symbol to MEGA database yet."); ERROR_LOG(SYMBOLS, "Can't add symbol to MEGA database yet.");
return false; return false;
} }
@ -191,7 +191,7 @@ void MEGASignatureDB::List() const
{ {
for (const auto& entry : m_signatures) for (const auto& entry : m_signatures)
{ {
DEBUG_LOG(OSHLE, "%s : %zu bytes", entry.name.c_str(), entry.code.size() * sizeof(u32)); DEBUG_LOG(SYMBOLS, "%s : %zu bytes", entry.name.c_str(), entry.code.size() * sizeof(u32));
} }
INFO_LOG(OSHLE, "%zu functions known in current MEGA database.", m_signatures.size()); INFO_LOG(SYMBOLS, "%zu functions known in current MEGA database.", m_signatures.size());
} }

View File

@ -109,10 +109,10 @@ void HashSignatureDB::List() const
{ {
for (const auto& entry : m_database) for (const auto& entry : m_database)
{ {
DEBUG_LOG(OSHLE, "%s : %i bytes, hash = %08x", entry.second.name.c_str(), entry.second.size, DEBUG_LOG(SYMBOLS, "%s : %i bytes, hash = %08x", entry.second.name.c_str(), entry.second.size,
entry.first); entry.first);
} }
INFO_LOG(OSHLE, "%zu functions known in current database.", m_database.size()); INFO_LOG(SYMBOLS, "%zu functions known in current database.", m_database.size());
} }
void HashSignatureDB::Clear() void HashSignatureDB::Clear()
@ -130,12 +130,12 @@ void HashSignatureDB::Apply(PPCSymbolDB* symbol_db) const
function->Rename(entry.second.name); function->Rename(entry.second.name);
if (entry.second.size == static_cast<unsigned int>(function->size)) if (entry.second.size == static_cast<unsigned int>(function->size))
{ {
INFO_LOG(OSHLE, "Found %s at %08x (size: %08x)!", entry.second.name.c_str(), INFO_LOG(SYMBOLS, "Found %s at %08x (size: %08x)!", entry.second.name.c_str(),
function->address, function->size); function->address, function->size);
} }
else else
{ {
ERROR_LOG(OSHLE, "Wrong size! Found %s at %08x (size: %08x instead of %08x)!", ERROR_LOG(SYMBOLS, "Wrong size! Found %s at %08x (size: %08x instead of %08x)!",
entry.second.name.c_str(), function->address, function->size, entry.second.size); entry.second.name.c_str(), function->address, function->size, entry.second.size);
} }
} }