void registerHleModule(const std::string &name, HleModule *module) { if (std::find(decaf::config::system::lle_modules.begin(), decaf::config::system::lle_modules.end(), name) != decaf::config::system::lle_modules.end()) { gLog->warn("Replacing HLE with LLE for module {}.", name); return; } // Register module decaf_check(sHleModules.find(name) == sHleModules.end()); sHleModules.emplace(name, module); // Register every function symbol auto &symbolMap = module->getSymbolMap(); for (auto &pair : symbolMap) { auto symbol = pair.second; if (symbol->type == HleSymbol::Function) { registerHleFunc(reinterpret_cast<HleFunction *>(symbol)); } } }
uint32_t registerUnimplementedHleFunc(const std::string &module, const std::string &name) { auto ppcFn = new functions::HleFunctionImpl<void>(); ppcFn->valid = false; ppcFn->module = module; ppcFn->name = name; ppcFn->wrapped_function = nullptr; registerHleFunc(ppcFn); return ppcFn->syscallID; }
void registerHleModule(const std::string &name, HleModule *module) { // TODO: Handle if there is a collision gHleModules.emplace(name, module); auto symbols = module->getSymbols(); for (auto &sym : symbols) { if (sym->type == HleSymbol::Function) { registerHleFunc(reinterpret_cast<HleFunction*>(sym)); } } }