summaryrefslogtreecommitdiff
path: root/src/core/hle/service/ldr
diff options
context:
space:
mode:
authorGravatar Liam2023-02-18 16:26:48 -0500
committerGravatar Liam2023-02-21 12:19:25 -0500
commita9369726147c7499e0016e183d5d56a7b44efe4b (patch)
treec1d1b4a9fdafd92863c0922b05d72c14de83ffa7 /src/core/hle/service/ldr
parentcore: defer cpu shutdown (diff)
downloadyuzu-a9369726147c7499e0016e183d5d56a7b44efe4b.tar.gz
yuzu-a9369726147c7499e0016e183d5d56a7b44efe4b.tar.xz
yuzu-a9369726147c7499e0016e183d5d56a7b44efe4b.zip
service: refactor server architecture
Converts services to have their own processes
Diffstat (limited to 'src/core/hle/service/ldr')
-rw-r--r--src/core/hle/service/ldr/ldr.cpp18
-rw-r--r--src/core/hle/service/ldr/ldr.h7
2 files changed, 12 insertions, 13 deletions
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp
index 2d4d6fe3e..c82e189f4 100644
--- a/src/core/hle/service/ldr/ldr.cpp
+++ b/src/core/hle/service/ldr/ldr.cpp
@@ -14,6 +14,7 @@
14#include "core/hle/kernel/svc_results.h" 14#include "core/hle/kernel/svc_results.h"
15#include "core/hle/kernel/svc_types.h" 15#include "core/hle/kernel/svc_types.h"
16#include "core/hle/service/ldr/ldr.h" 16#include "core/hle/service/ldr/ldr.h"
17#include "core/hle/service/server_manager.h"
17#include "core/hle/service/service.h" 18#include "core/hle/service/service.h"
18#include "core/loader/nro.h" 19#include "core/loader/nro.h"
19#include "core/memory.h" 20#include "core/memory.h"
@@ -159,8 +160,7 @@ public:
159 160
160class RelocatableObject final : public ServiceFramework<RelocatableObject> { 161class RelocatableObject final : public ServiceFramework<RelocatableObject> {
161public: 162public:
162 explicit RelocatableObject(Core::System& system_) 163 explicit RelocatableObject(Core::System& system_) : ServiceFramework{system_, "ldr:ro"} {
163 : ServiceFramework{system_, "ldr:ro", ServiceThreadType::CreateNew} {
164 // clang-format off 164 // clang-format off
165 static const FunctionInfo functions[] = { 165 static const FunctionInfo functions[] = {
166 {0, &RelocatableObject::LoadModule, "LoadModule"}, 166 {0, &RelocatableObject::LoadModule, "LoadModule"},
@@ -682,11 +682,15 @@ private:
682 } 682 }
683}; 683};
684 684
685void InstallInterfaces(SM::ServiceManager& sm, Core::System& system) { 685void LoopProcess(Core::System& system) {
686 std::make_shared<DebugMonitor>(system)->InstallAsService(sm); 686 auto server_manager = std::make_unique<ServerManager>(system);
687 std::make_shared<ProcessManager>(system)->InstallAsService(sm); 687
688 std::make_shared<Shell>(system)->InstallAsService(sm); 688 server_manager->RegisterNamedService("ldr:dmnt", std::make_shared<DebugMonitor>(system));
689 std::make_shared<RelocatableObject>(system)->InstallAsService(sm); 689 server_manager->RegisterNamedService("ldr:pm", std::make_shared<ProcessManager>(system));
690 server_manager->RegisterNamedService("ldr:shel", std::make_shared<Shell>(system));
691 server_manager->RegisterNamedService("ldr:ro", std::make_shared<RelocatableObject>(system));
692
693 ServerManager::RunServer(std::move(server_manager));
690} 694}
691 695
692} // namespace Service::LDR 696} // namespace Service::LDR
diff --git a/src/core/hle/service/ldr/ldr.h b/src/core/hle/service/ldr/ldr.h
index 25ffd8442..c9281dbfb 100644
--- a/src/core/hle/service/ldr/ldr.h
+++ b/src/core/hle/service/ldr/ldr.h
@@ -7,13 +7,8 @@ namespace Core {
7class System; 7class System;
8} 8}
9 9
10namespace Service::SM {
11class ServiceManager;
12}
13
14namespace Service::LDR { 10namespace Service::LDR {
15 11
16/// Registers all LDR services with the specified service manager. 12void LoopProcess(Core::System& system);
17void InstallInterfaces(SM::ServiceManager& sm, Core::System& system);
18 13
19} // namespace Service::LDR 14} // namespace Service::LDR