Add loader to the emulator state

This will allow accessing data from the loader within other parts of the
emulator, such as in fssrv for RomFS.
This commit is contained in:
Billy Laws 2020-06-22 12:13:35 +01:00 committed by ◱ PixelyIon
parent 57b5630422
commit b9b889fc3c
2 changed files with 6 additions and 3 deletions

View File

@ -361,6 +361,9 @@ namespace skyline {
namespace audio { namespace audio {
class Audio; class Audio;
} }
namespace loader {
class Loader;
}
/** /**
* @brief This struct is used to hold the state of a device * @brief This struct is used to hold the state of a device
@ -375,6 +378,7 @@ namespace skyline {
std::shared_ptr<NCE> nce; //!< This holds a reference to the NCE class std::shared_ptr<NCE> nce; //!< This holds a reference to the NCE class
std::shared_ptr<gpu::GPU> gpu; //!< This holds a reference to the GPU class std::shared_ptr<gpu::GPU> gpu; //!< This holds a reference to the GPU class
std::shared_ptr<audio::Audio> audio; //!< This holds a reference to the Audio class std::shared_ptr<audio::Audio> audio; //!< This holds a reference to the Audio class
std::shared_ptr<loader::Loader> loader; //!< This holds a reference to the Loader class
std::shared_ptr<JvmManager> jvm; //!< This holds a reference to the JvmManager class std::shared_ptr<JvmManager> jvm; //!< This holds a reference to the JvmManager class
std::shared_ptr<Settings> settings; //!< This holds a reference to the Settings class std::shared_ptr<Settings> settings; //!< This holds a reference to the Settings class
std::shared_ptr<Logger> logger; //!< This holds a reference to the Logger class std::shared_ptr<Logger> logger; //!< This holds a reference to the Logger class

View File

@ -10,16 +10,15 @@ namespace skyline::kernel {
OS::OS(std::shared_ptr<JvmManager> &jvmManager, std::shared_ptr<Logger> &logger, std::shared_ptr<Settings> &settings) : state(this, process, jvmManager, settings, logger), memory(state), serviceManager(state) {} OS::OS(std::shared_ptr<JvmManager> &jvmManager, std::shared_ptr<Logger> &logger, std::shared_ptr<Settings> &settings) : state(this, process, jvmManager, settings, logger), memory(state), serviceManager(state) {}
void OS::Execute(int romFd, loader::RomFormat romType) { void OS::Execute(int romFd, loader::RomFormat romType) {
std::shared_ptr<loader::Loader> loader;
auto romFile = std::make_shared<vfs::OsBacking>(romFd); auto romFile = std::make_shared<vfs::OsBacking>(romFd);
if (romType == loader::RomFormat::NRO) { if (romType == loader::RomFormat::NRO) {
loader = std::make_shared<loader::NroLoader>(romFile); state.loader = std::make_shared<loader::NroLoader>(romFile);
} else } else
throw exception("Unsupported ROM extension."); throw exception("Unsupported ROM extension.");
auto process = CreateProcess(constant::BaseAddress, 0, constant::DefStackSize); auto process = CreateProcess(constant::BaseAddress, 0, constant::DefStackSize);
loader->LoadProcessData(process, state); state.loader->LoadProcessData(process, state);
process->InitializeMemory(); process->InitializeMemory();
process->threads.at(process->pid)->Start(); // The kernel itself is responsible for starting the main thread process->threads.at(process->pid)->Start(); // The kernel itself is responsible for starting the main thread