Merge pull request #4211 from lioncash/symbol

SymbolDB: Minor changes
This commit is contained in:
Markus Wick 2016-09-14 08:07:52 +02:00 committed by GitHub
commit ab37b0282a
9 changed files with 26 additions and 29 deletions

View File

@ -23,27 +23,23 @@ struct SCall
struct Symbol struct Symbol
{ {
enum enum class Type
{ {
SYMBOL_FUNCTION = 0, Function,
SYMBOL_DATA = 1, Data,
}; };
Symbol() : hash(0), address(0), flags(0), size(0), numCalls(0), type(SYMBOL_FUNCTION), analyzed(0)
{
}
std::string name; std::string name;
std::vector<SCall> callers; // addresses of functions that call this function std::vector<SCall> callers; // addresses of functions that call this function
std::vector<SCall> calls; // addresses of functions that are called by this function std::vector<SCall> calls; // addresses of functions that are called by this function
u32 hash; // use for HLE function finding u32 hash = 0; // use for HLE function finding
u32 address; u32 address = 0;
u32 flags; u32 flags = 0;
int size; int size = 0;
int numCalls; int numCalls = 0;
int type; Type type = Type::Function;
int index; // only used for coloring the disasm view int index = 0; // only used for coloring the disasm view
int analyzed; bool analyzed = false;
}; };
enum enum

View File

@ -182,14 +182,14 @@ bool ElfReader::LoadSymbols()
if (bRelocate) if (bRelocate)
value += sectionAddrs[sectionIndex]; value += sectionAddrs[sectionIndex];
int symtype = Symbol::SYMBOL_DATA; auto symtype = Symbol::Type::Data;
switch (type) switch (type)
{ {
case STT_OBJECT: case STT_OBJECT:
symtype = Symbol::SYMBOL_DATA; symtype = Symbol::Type::Data;
break; break;
case STT_FUNC: case STT_FUNC:
symtype = Symbol::SYMBOL_FUNCTION; symtype = Symbol::Type::Function;
break; break;
default: default:
continue; continue;

View File

@ -186,7 +186,7 @@ int PPCDebugInterface::GetColor(unsigned int address)
Symbol* symbol = g_symbolDB.GetSymbolFromAddr(address); Symbol* symbol = g_symbolDB.GetSymbolFromAddr(address);
if (!symbol) if (!symbol)
return 0xFFFFFF; return 0xFFFFFF;
if (symbol->type != Symbol::SYMBOL_FUNCTION) if (symbol->type != Symbol::Type::Function)
return 0xEEEEFF; return 0xEEEEFF;
return colors[symbol->index % 6]; return colors[symbol->index % 6];
} }

View File

@ -170,7 +170,7 @@ int DSPDebugInterface::GetColor(unsigned int address)
Symbol* symbol = DSPSymbols::g_dsp_symbol_db.GetSymbolFromAddr(addr); Symbol* symbol = DSPSymbols::g_dsp_symbol_db.GetSymbolFromAddr(addr);
if (!symbol) if (!symbol)
return 0xFFFFFF; return 0xFFFFFF;
if (symbol->type != Symbol::SYMBOL_FUNCTION) if (symbol->type != Symbol::Type::Function)
return 0xEEEEFF; return 0xEEEEFF;
return colors[symbol->index % 6]; return colors[symbol->index % 6];
} }

View File

@ -75,7 +75,7 @@ bool AnalyzeFunction(u32 startAddr, Symbol& func, int max_size)
{ {
if (!func.name.size()) if (!func.name.size())
func.name = StringFromFormat("zz_%07x_", startAddr & 0x0FFFFFF); func.name = StringFromFormat("zz_%07x_", startAddr & 0x0FFFFFF);
if (func.analyzed >= 1) if (func.analyzed)
return true; // No error, just already did it. return true; // No error, just already did it.
func.calls.clear(); func.calls.clear();
@ -96,7 +96,7 @@ bool AnalyzeFunction(u32 startAddr, Symbol& func, int max_size)
if (max_size && func.size > max_size) if (max_size && func.size > max_size)
{ {
func.address = startAddr; func.address = startAddr;
func.analyzed = 1; func.analyzed = true;
func.hash = SignatureDB::ComputeCodeChecksum(startAddr, addr); func.hash = SignatureDB::ComputeCodeChecksum(startAddr, addr);
if (numInternalBranches == 0) if (numInternalBranches == 0)
func.flags |= FFLAG_STRAIGHT; func.flags |= FFLAG_STRAIGHT;
@ -117,7 +117,7 @@ bool AnalyzeFunction(u32 startAddr, Symbol& func, int max_size)
// We're done! Looks like we have a neat valid function. Perfect. // We're done! Looks like we have a neat valid function. Perfect.
// Let's calc the checksum and get outta here // Let's calc the checksum and get outta here
func.address = startAddr; func.address = startAddr;
func.analyzed = 1; func.analyzed = true;
func.hash = SignatureDB::ComputeCodeChecksum(startAddr, addr); func.hash = SignatureDB::ComputeCodeChecksum(startAddr, addr);
if (numInternalBranches == 0) if (numInternalBranches == 0)
func.flags |= FFLAG_STRAIGHT; func.flags |= FFLAG_STRAIGHT;

View File

@ -47,13 +47,14 @@ Symbol* PPCSymbolDB::AddFunction(u32 startAddr)
return nullptr; // found a dud :( return nullptr; // found a dud :(
// LOG(OSHLE, "Symbol found at %08x", startAddr); // LOG(OSHLE, "Symbol found at %08x", startAddr);
functions[startAddr] = tempFunc; functions[startAddr] = tempFunc;
tempFunc.type = Symbol::SYMBOL_FUNCTION; tempFunc.type = Symbol::Type::Function;
checksumToFunction[tempFunc.hash] = &(functions[startAddr]); checksumToFunction[tempFunc.hash] = &(functions[startAddr]);
return &functions[startAddr]; return &functions[startAddr];
} }
} }
void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& name, int type) void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& name,
Symbol::Type type)
{ {
XFuncMap::iterator iter = functions.find(startAddr); XFuncMap::iterator iter = functions.find(startAddr);
if (iter != functions.end()) if (iter != functions.end())
@ -72,7 +73,7 @@ void PPCSymbolDB::AddKnownSymbol(u32 startAddr, u32 size, const std::string& nam
tf.name = name; tf.name = name;
tf.type = type; tf.type = type;
tf.address = startAddr; tf.address = startAddr;
if (tf.type == Symbol::SYMBOL_FUNCTION) if (tf.type == Symbol::Type::Function)
{ {
PPCAnalyst::AnalyzeFunction(startAddr, tf, size); PPCAnalyst::AnalyzeFunction(startAddr, tf, size);
checksumToFunction[tf.hash] = &(functions[startAddr]); checksumToFunction[tf.hash] = &(functions[startAddr]);

View File

@ -27,7 +27,7 @@ public:
Symbol* AddFunction(u32 startAddr) override; Symbol* AddFunction(u32 startAddr) override;
void AddKnownSymbol(u32 startAddr, u32 size, const std::string& name, void AddKnownSymbol(u32 startAddr, u32 size, const std::string& name,
int type = Symbol::SYMBOL_FUNCTION); Symbol::Type type = Symbol::Type::Function);
Symbol* GetSymbolFromAddr(u32 addr) override; Symbol* GetSymbolFromAddr(u32 addr) override;

View File

@ -485,7 +485,7 @@ void CCodeWindow::OnSymbolListChange(wxCommandEvent& event)
Symbol* pSymbol = static_cast<Symbol*>(symbols->GetClientData(index)); Symbol* pSymbol = static_cast<Symbol*>(symbols->GetClientData(index));
if (pSymbol != nullptr) if (pSymbol != nullptr)
{ {
if (pSymbol->type == Symbol::SYMBOL_DATA) if (pSymbol->type == Symbol::Type::Data)
{ {
if (m_MemoryWindow) // && m_MemoryWindow->IsVisible()) if (m_MemoryWindow) // && m_MemoryWindow->IsVisible())
m_MemoryWindow->JumpToAddress(pSymbol->address); m_MemoryWindow->JumpToAddress(pSymbol->address);

View File

@ -224,7 +224,7 @@ void DSPDebuggerLLE::OnSymbolListChange(wxCommandEvent& event)
Symbol* pSymbol = static_cast<Symbol*>(m_SymbolList->GetClientData(index)); Symbol* pSymbol = static_cast<Symbol*>(m_SymbolList->GetClientData(index));
if (pSymbol != nullptr) if (pSymbol != nullptr)
{ {
if (pSymbol->type == Symbol::SYMBOL_FUNCTION) if (pSymbol->type == Symbol::Type::Function)
{ {
JumpToAddress(pSymbol->address); JumpToAddress(pSymbol->address);
} }