Add symbols map

This commit is contained in:
Mathieu Vaillancourt 2014-04-12 18:57:58 -04:00
parent ec19c679d7
commit d046cfbba1
4 changed files with 100 additions and 0 deletions

View file

@ -186,6 +186,7 @@
<ClInclude Include="std_thread.h" />
<ClInclude Include="string_util.h" />
<ClInclude Include="swap.h" />
<ClInclude Include="symbols.h" />
<ClInclude Include="thread.h" />
<ClInclude Include="thunk.h" />
<ClInclude Include="timer.h" />
@ -205,6 +206,7 @@
<ClCompile Include="misc.cpp" />
<ClCompile Include="msg_handler.cpp" />
<ClCompile Include="string_util.cpp" />
<ClCompile Include="symbols.cpp" />
<ClCompile Include="thread.cpp" />
<ClCompile Include="timer.cpp" />
<ClCompile Include="utf8.cpp" />

View file

@ -37,6 +37,7 @@
<ClInclude Include="thunk.h" />
<ClInclude Include="timer.h" />
<ClInclude Include="utf8.h" />
<ClInclude Include="symbols.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="break_points.cpp" />
@ -56,6 +57,7 @@
<ClCompile Include="timer.cpp" />
<ClCompile Include="utf8.cpp" />
<ClCompile Include="version.cpp" />
<ClCompile Include="symbols.cpp" />
</ItemGroup>
<ItemGroup>
<Text Include="CMakeLists.txt" />

57
src/common/symbols.cpp Normal file
View file

@ -0,0 +1,57 @@
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#include "common/symbols.h"
TSymbolsMap g_symbols;
namespace Symbols
{
bool HasSymbol(u32 _address)
{
return g_symbols.find(_address) != g_symbols.end();
}
void Add(u32 _address, const std::string& _name, u32 _size, u32 _type)
{
if (!HasSymbol(_address))
{
TSymbol symbol;
symbol.address = _address;
symbol.name = _name;
symbol.size = _size;
symbol.type = _type;
g_symbols.insert(TSymbolsPair(_address, symbol));
}
}
TSymbol GetSymbol(u32 _address)
{
TSymbolsMap::iterator foundSymbolItr;
TSymbol symbol;
foundSymbolItr = g_symbols.find(_address);
if (foundSymbolItr != g_symbols.end())
{
symbol = (*foundSymbolItr).second;
}
return symbol;
}
const std::string& GetName(u32 _address)
{
return GetSymbol(_address).name;
}
void Remove(u32 _address)
{
g_symbols.erase(_address);
}
void Clear()
{
g_symbols.clear();
}
}

39
src/common/symbols.h Normal file
View file

@ -0,0 +1,39 @@
// Copyright 2014 Citra Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#pragma once
#include <map>
#include "common/common.h"
class DebugInterface;
struct TSymbol
{
TSymbol() :
address(0),
size(0),
type(0)
{}
u32 address;
std::string name;
u32 size;
u32 type;
};
typedef std::map<u32, TSymbol> TSymbolsMap;
typedef std::pair<u32, TSymbol> TSymbolsPair;
namespace Symbols
{
bool HasSymbol(u32 _address);
void Add(u32 _address, const std::string& _name, u32 _size, u32 _type);
TSymbol GetSymbol(u32 _address);
const std::string& GetName(u32 _address);
void Remove(u32 _address);
void Clear();
};