SignatureDB: MEGA FormatHandler added

This commit is contained in:
Sepalani 2017-03-31 13:00:19 +01:00
parent 82afda94f4
commit 5f81226d8d
8 changed files with 41 additions and 27 deletions

View File

@ -119,6 +119,11 @@ bool Compare(u32 address, u32 size, const MEGASignature& sig)
MEGASignatureDB::MEGASignatureDB() = default; MEGASignatureDB::MEGASignatureDB() = default;
MEGASignatureDB::~MEGASignatureDB() = default; MEGASignatureDB::~MEGASignatureDB() = default;
void MEGASignatureDB::Clear()
{
m_signatures.clear();
}
bool MEGASignatureDB::Load(const std::string& file_path) bool MEGASignatureDB::Load(const std::string& file_path)
{ {
std::ifstream ifs; std::ifstream ifs;
@ -145,6 +150,12 @@ bool MEGASignatureDB::Load(const std::string& file_path)
return true; return true;
} }
bool MEGASignatureDB::Save(const std::string& file_path) const
{
ERROR_LOG(OSHLE, "MEGA database save unsupported yet.");
return false;
}
void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const
{ {
for (auto& it : symbol_db->AccessSymbols()) for (auto& it : symbol_db->AccessSymbols())
@ -164,6 +175,17 @@ void MEGASignatureDB::Apply(PPCSymbolDB* symbol_db) const
symbol_db->Index(); symbol_db->Index();
} }
void MEGASignatureDB::Populate(const PPCSymbolDB* func_db, const std::string& filter)
{
ERROR_LOG(OSHLE, "MEGA database can't be populated yet.");
}
bool MEGASignatureDB::Add(u32 startAddr, u32 size, const std::string& name)
{
ERROR_LOG(OSHLE, "Can't add symbol to MEGA database yet.");
return false;
}
void MEGASignatureDB::List() const void MEGASignatureDB::List() const
{ {
for (const auto& entry : m_signatures) for (const auto& entry : m_signatures)

View File

@ -8,6 +8,7 @@
#include <vector> #include <vector>
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Core/PowerPC/SignatureDB/SignatureDB.h"
class PPCSymbolDB; class PPCSymbolDB;
@ -35,16 +36,22 @@ struct MEGASignature
// - Hexstring representation with "." acting as a wildcard // - Hexstring representation with "." acting as a wildcard
// - Name, represented as follow: ":0000 function_name" // - Name, represented as follow: ":0000 function_name"
// - References located in the hexstring at offset: "^offset reference_name" // - References located in the hexstring at offset: "^offset reference_name"
class MEGASignatureDB class MEGASignatureDB : public SignatureDBFormatHandler
{ {
public: public:
MEGASignatureDB(); MEGASignatureDB();
~MEGASignatureDB(); ~MEGASignatureDB();
void Clear();
bool Load(const std::string& file_path); bool Load(const std::string& file_path);
void Apply(PPCSymbolDB* symbol_db) const; bool Save(const std::string& file_path) const;
void List() const; void List() const;
void Apply(PPCSymbolDB* symbol_db) const;
void Populate(const PPCSymbolDB* func_db, const std::string& filter = "");
bool Add(u32 startAddr, u32 size, const std::string& name);
private: private:
std::vector<MEGASignature> m_signatures; std::vector<MEGASignature> m_signatures;
}; };

View File

@ -16,6 +16,7 @@
// Format Handlers // Format Handlers
#include "Core/PowerPC/SignatureDB/CSVSignatureDB.h" #include "Core/PowerPC/SignatureDB/CSVSignatureDB.h"
#include "Core/PowerPC/SignatureDB/DSYSignatureDB.h" #include "Core/PowerPC/SignatureDB/DSYSignatureDB.h"
#include "Core/PowerPC/SignatureDB/MEGASignatureDB.h"
SignatureDB::SignatureDB(SignatureDB::HandlerType handler) SignatureDB::SignatureDB(SignatureDB::HandlerType handler)
: m_handler(std::move(CreateFormatHandler(handler))) : m_handler(std::move(CreateFormatHandler(handler)))
@ -30,6 +31,8 @@ SignatureDB::HandlerType SignatureDB::GetHandlerType(const std::string& file_pat
{ {
if (StringEndsWith(file_path, ".csv")) if (StringEndsWith(file_path, ".csv"))
return SignatureDB::HandlerType::CSV; return SignatureDB::HandlerType::CSV;
if (StringEndsWith(file_path, ".mega"))
return SignatureDB::HandlerType::MEGA;
return SignatureDB::HandlerType::DSY; return SignatureDB::HandlerType::DSY;
} }
@ -43,6 +46,8 @@ SignatureDB::CreateFormatHandler(SignatureDB::HandlerType handler) const
return std::make_unique<DSYSignatureDB>(); return std::make_unique<DSYSignatureDB>();
case SignatureDB::HandlerType::CSV: case SignatureDB::HandlerType::CSV:
return std::make_unique<CSVSignatureDB>(); return std::make_unique<CSVSignatureDB>();
case SignatureDB::HandlerType::MEGA:
return std::make_unique<MEGASignatureDB>();
} }
} }

View File

@ -21,7 +21,8 @@ public:
enum class HandlerType enum class HandlerType
{ {
DSY, DSY,
CSV CSV,
MEGA
}; };
explicit SignatureDB(HandlerType handler); explicit SignatureDB(HandlerType handler);
explicit SignatureDB(const std::string& file_path); explicit SignatureDB(const std::string& file_path);

View File

@ -166,7 +166,8 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
{ {
static const wxString signature_selector = _("Dolphin Signature File (*.dsy)") + "|*.dsy|" + static const wxString signature_selector = _("Dolphin Signature File (*.dsy)") + "|*.dsy|" +
_("Dolphin Signature CSV File (*.csv)") + "|*.csv|" + _("Dolphin Signature CSV File (*.csv)") + "|*.csv|" +
wxGetTranslation(wxALL_FILES); _("WiiTools Signature MEGA File (*.mega)") +
"|*.mega|" + wxGetTranslation(wxALL_FILES);
Parent->ClearStatusBar(); Parent->ClearStatusBar();
if (!Core::IsRunning()) if (!Core::IsRunning())
@ -429,22 +430,6 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event)
} }
} }
break; break;
case IDM_USE_MEGA_SIGNATURE_FILE:
{
wxString path = wxFileSelector(
_("Apply MEGA signature file"), File::GetSysDirectory(), wxEmptyString, wxEmptyString,
_("MEGA Signature File (*.mega)") + "|*.mega|" + wxGetTranslation(wxALL_FILES),
wxFD_OPEN | wxFD_FILE_MUST_EXIST, this);
if (!path.IsEmpty())
{
MEGASignatureDB db;
db.Load(WxStrToStr(path));
db.Apply(&g_symbolDB);
db.List();
NotifyMapLoaded();
}
}
break;
case IDM_PATCH_HLE_FUNCTIONS: case IDM_PATCH_HLE_FUNCTIONS:
HLE::PatchFunctions(); HLE::PatchFunctions();
Repopulate(); Repopulate();

View File

@ -246,7 +246,6 @@ void CFrame::BindDebuggerMenuBarUpdateEvents()
Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_COMBINE_SIGNATURE_FILES); Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_COMBINE_SIGNATURE_FILES);
Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_RENAME_SYMBOLS); Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_RENAME_SYMBOLS);
Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_USE_SIGNATURE_FILE); Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_USE_SIGNATURE_FILE);
Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_USE_MEGA_SIGNATURE_FILE);
Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_PATCH_HLE_FUNCTIONS); Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreInitialized, IDM_PATCH_HLE_FUNCTIONS);
Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreUninitialized, IDM_JIT_NO_BLOCK_CACHE); Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreUninitialized, IDM_JIT_NO_BLOCK_CACHE);

View File

@ -232,7 +232,6 @@ enum
IDM_COMBINE_SIGNATURE_FILES, IDM_COMBINE_SIGNATURE_FILES,
IDM_RENAME_SYMBOLS, IDM_RENAME_SYMBOLS,
IDM_USE_SIGNATURE_FILE, IDM_USE_SIGNATURE_FILE,
IDM_USE_MEGA_SIGNATURE_FILE,
IDM_PATCH_HLE_FUNCTIONS, IDM_PATCH_HLE_FUNCTIONS,
// JIT // JIT

View File

@ -471,11 +471,7 @@ wxMenu* MainMenuBar::CreateSymbolsMenu() const
symbols_menu->Append( symbols_menu->Append(
IDM_USE_SIGNATURE_FILE, _("Apply Signat&ure File..."), IDM_USE_SIGNATURE_FILE, _("Apply Signat&ure File..."),
_("Must use Generate Symbols first! Recognise names of any standard library functions " _("Must use Generate Symbols first! Recognise names of any standard library functions "
"used in multiple games, by loading them from a .dsy file.")); "used in multiple games, by loading them from a .dsy, .csv, or .mega file."));
symbols_menu->Append(
IDM_USE_MEGA_SIGNATURE_FILE, _("Apply &MEGA Signature File..."),
_("Must use Generate Symbols first! Recognise names of any standard library functions "
"used in multiple games, by loading them from a .mega file."));
symbols_menu->AppendSeparator(); symbols_menu->AppendSeparator();
symbols_menu->Append(IDM_PATCH_HLE_FUNCTIONS, _("&Patch HLE Functions")); symbols_menu->Append(IDM_PATCH_HLE_FUNCTIONS, _("&Patch HLE Functions"));
symbols_menu->Append(IDM_RENAME_SYMBOLS, _("&Rename Symbols from File...")); symbols_menu->Append(IDM_RENAME_SYMBOLS, _("&Rename Symbols from File..."));