diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/common.vcxproj | 2 | ||||
-rw-r--r-- | src/common/common.vcxproj.filters | 2 | ||||
-rw-r--r-- | src/common/symbols.cpp | 57 | ||||
-rw-r--r-- | src/common/symbols.h | 39 |
4 files changed, 100 insertions, 0 deletions
diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj index 32d735a09..202d00d18 100644 --- a/src/common/common.vcxproj +++ b/src/common/common.vcxproj @@ -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" /> diff --git a/src/common/common.vcxproj.filters b/src/common/common.vcxproj.filters index 3bdaa973f..bd4d27b58 100644 --- a/src/common/common.vcxproj.filters +++ b/src/common/common.vcxproj.filters @@ -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" /> diff --git a/src/common/symbols.cpp b/src/common/symbols.cpp new file mode 100644 index 000000000..dcc9eeac5 --- /dev/null +++ b/src/common/symbols.cpp @@ -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(); + } +}
\ No newline at end of file diff --git a/src/common/symbols.h b/src/common/symbols.h new file mode 100644 index 000000000..b76749654 --- /dev/null +++ b/src/common/symbols.h @@ -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(); +}; + |