aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Mathieu Vaillancourt <vaillancourtm@gmail.com>2014-04-12 18:57:58 -0400
committerGravatar Mathieu Vaillancourt <vaillancourtm@gmail.com>2014-04-12 19:04:31 -0400
commitd046cfbba1dd2bcdad4ace3be706dadf3f6cc288 (patch)
treed880f04c199bd08751b4f30a4eee5939d56e06cd
parentec19c679d7ef17bea86f86f5e393331d6032ed5a (diff)
Add symbols map
-rw-r--r--src/common/common.vcxproj2
-rw-r--r--src/common/common.vcxproj.filters2
-rw-r--r--src/common/symbols.cpp57
-rw-r--r--src/common/symbols.h39
4 files changed, 100 insertions, 0 deletions
diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj
index 32d735a0..202d00d1 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 3bdaa973..bd4d27b5 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 00000000..dcc9eeac
--- /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 00000000..b7674965
--- /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();
+};
+