diff options
| author | 2019-09-21 18:43:03 +1000 | |
|---|---|---|
| committer | 2019-09-22 16:30:25 +1000 | |
| commit | a40e5b2def2502f3bc8c159959b4ac1e262b4188 (patch) | |
| tree | 7c11ba7894e598d948da5edf624d3a1eed13d7f1 /src/core/hle/service/fatal | |
| parent | Deglobalize System: Btm (diff) | |
| download | yuzu-a40e5b2def2502f3bc8c159959b4ac1e262b4188.tar.gz yuzu-a40e5b2def2502f3bc8c159959b4ac1e262b4188.tar.xz yuzu-a40e5b2def2502f3bc8c159959b4ac1e262b4188.zip | |
Deglobalize System: Fatal
Diffstat (limited to 'src/core/hle/service/fatal')
| -rw-r--r-- | src/core/hle/service/fatal/fatal.cpp | 29 | ||||
| -rw-r--r-- | src/core/hle/service/fatal/fatal.h | 9 | ||||
| -rw-r--r-- | src/core/hle/service/fatal/fatal_p.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/fatal/fatal_p.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/fatal/fatal_u.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/service/fatal/fatal_u.h | 2 |
6 files changed, 29 insertions, 20 deletions
diff --git a/src/core/hle/service/fatal/fatal.cpp b/src/core/hle/service/fatal/fatal.cpp index 01fa06ad3..b2ebf6240 100644 --- a/src/core/hle/service/fatal/fatal.cpp +++ b/src/core/hle/service/fatal/fatal.cpp | |||
| @@ -20,8 +20,8 @@ | |||
| 20 | 20 | ||
| 21 | namespace Service::Fatal { | 21 | namespace Service::Fatal { |
| 22 | 22 | ||
| 23 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) | 23 | Module::Interface::Interface(std::shared_ptr<Module> module, Core::System& system, const char* name) |
| 24 | : ServiceFramework(name), module(std::move(module)) {} | 24 | : ServiceFramework(name), module(std::move(module)), system(system) {} |
| 25 | 25 | ||
| 26 | Module::Interface::~Interface() = default; | 26 | Module::Interface::~Interface() = default; |
| 27 | 27 | ||
| @@ -64,7 +64,8 @@ enum class FatalType : u32 { | |||
| 64 | ErrorScreen = 2, | 64 | ErrorScreen = 2, |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | static void GenerateErrorReport(ResultCode error_code, const FatalInfo& info) { | 67 | static void GenerateErrorReport(Core::System& system, ResultCode error_code, |
| 68 | const FatalInfo& info) { | ||
| 68 | const auto title_id = Core::CurrentProcess()->GetTitleID(); | 69 | const auto title_id = Core::CurrentProcess()->GetTitleID(); |
| 69 | std::string crash_report = fmt::format( | 70 | std::string crash_report = fmt::format( |
| 70 | "Yuzu {}-{} crash report\n" | 71 | "Yuzu {}-{} crash report\n" |
| @@ -101,18 +102,19 @@ static void GenerateErrorReport(ResultCode error_code, const FatalInfo& info) { | |||
| 101 | 102 | ||
| 102 | LOG_ERROR(Service_Fatal, "{}", crash_report); | 103 | LOG_ERROR(Service_Fatal, "{}", crash_report); |
| 103 | 104 | ||
| 104 | Core::System::GetInstance().GetReporter().SaveCrashReport( | 105 | system.GetReporter().SaveCrashReport( |
| 105 | title_id, error_code, info.set_flags, info.program_entry_point, info.sp, info.pc, | 106 | title_id, error_code, info.set_flags, info.program_entry_point, info.sp, info.pc, |
| 106 | info.pstate, info.afsr0, info.afsr1, info.esr, info.far, info.registers, info.backtrace, | 107 | info.pstate, info.afsr0, info.afsr1, info.esr, info.far, info.registers, info.backtrace, |
| 107 | info.backtrace_size, info.ArchAsString(), info.unk10); | 108 | info.backtrace_size, info.ArchAsString(), info.unk10); |
| 108 | } | 109 | } |
| 109 | 110 | ||
| 110 | static void ThrowFatalError(ResultCode error_code, FatalType fatal_type, const FatalInfo& info) { | 111 | static void ThrowFatalError(Core::System& system, ResultCode error_code, FatalType fatal_type, |
| 112 | const FatalInfo& info) { | ||
| 111 | LOG_ERROR(Service_Fatal, "Threw fatal error type {} with error code 0x{:X}", | 113 | LOG_ERROR(Service_Fatal, "Threw fatal error type {} with error code 0x{:X}", |
| 112 | static_cast<u32>(fatal_type), error_code.raw); | 114 | static_cast<u32>(fatal_type), error_code.raw); |
| 113 | switch (fatal_type) { | 115 | switch (fatal_type) { |
| 114 | case FatalType::ErrorReportAndScreen: | 116 | case FatalType::ErrorReportAndScreen: |
| 115 | GenerateErrorReport(error_code, info); | 117 | GenerateErrorReport(system, error_code, info); |
| 116 | [[fallthrough]]; | 118 | [[fallthrough]]; |
| 117 | case FatalType::ErrorScreen: | 119 | case FatalType::ErrorScreen: |
| 118 | // Since we have no fatal:u error screen. We should just kill execution instead | 120 | // Since we have no fatal:u error screen. We should just kill execution instead |
| @@ -120,7 +122,7 @@ static void ThrowFatalError(ResultCode error_code, FatalType fatal_type, const F | |||
| 120 | break; | 122 | break; |
| 121 | // Should not throw a fatal screen but should generate an error report | 123 | // Should not throw a fatal screen but should generate an error report |
| 122 | case FatalType::ErrorReport: | 124 | case FatalType::ErrorReport: |
| 123 | GenerateErrorReport(error_code, info); | 125 | GenerateErrorReport(system, error_code, info); |
| 124 | break; | 126 | break; |
| 125 | } | 127 | } |
| 126 | } | 128 | } |
| @@ -130,7 +132,7 @@ void Module::Interface::ThrowFatal(Kernel::HLERequestContext& ctx) { | |||
| 130 | IPC::RequestParser rp{ctx}; | 132 | IPC::RequestParser rp{ctx}; |
| 131 | const auto error_code = rp.Pop<ResultCode>(); | 133 | const auto error_code = rp.Pop<ResultCode>(); |
| 132 | 134 | ||
| 133 | ThrowFatalError(error_code, FatalType::ErrorScreen, {}); | 135 | ThrowFatalError(system, error_code, FatalType::ErrorScreen, {}); |
| 134 | IPC::ResponseBuilder rb{ctx, 2}; | 136 | IPC::ResponseBuilder rb{ctx, 2}; |
| 135 | rb.Push(RESULT_SUCCESS); | 137 | rb.Push(RESULT_SUCCESS); |
| 136 | } | 138 | } |
| @@ -141,7 +143,8 @@ void Module::Interface::ThrowFatalWithPolicy(Kernel::HLERequestContext& ctx) { | |||
| 141 | const auto error_code = rp.Pop<ResultCode>(); | 143 | const auto error_code = rp.Pop<ResultCode>(); |
| 142 | const auto fatal_type = rp.PopEnum<FatalType>(); | 144 | const auto fatal_type = rp.PopEnum<FatalType>(); |
| 143 | 145 | ||
| 144 | ThrowFatalError(error_code, fatal_type, {}); // No info is passed with ThrowFatalWithPolicy | 146 | ThrowFatalError(system, error_code, fatal_type, |
| 147 | {}); // No info is passed with ThrowFatalWithPolicy | ||
| 145 | IPC::ResponseBuilder rb{ctx, 2}; | 148 | IPC::ResponseBuilder rb{ctx, 2}; |
| 146 | rb.Push(RESULT_SUCCESS); | 149 | rb.Push(RESULT_SUCCESS); |
| 147 | } | 150 | } |
| @@ -157,15 +160,15 @@ void Module::Interface::ThrowFatalWithCpuContext(Kernel::HLERequestContext& ctx) | |||
| 157 | ASSERT_MSG(fatal_info.size() == sizeof(FatalInfo), "Invalid fatal info buffer size!"); | 160 | ASSERT_MSG(fatal_info.size() == sizeof(FatalInfo), "Invalid fatal info buffer size!"); |
| 158 | std::memcpy(&info, fatal_info.data(), sizeof(FatalInfo)); | 161 | std::memcpy(&info, fatal_info.data(), sizeof(FatalInfo)); |
| 159 | 162 | ||
| 160 | ThrowFatalError(error_code, fatal_type, info); | 163 | ThrowFatalError(system, error_code, fatal_type, info); |
| 161 | IPC::ResponseBuilder rb{ctx, 2}; | 164 | IPC::ResponseBuilder rb{ctx, 2}; |
| 162 | rb.Push(RESULT_SUCCESS); | 165 | rb.Push(RESULT_SUCCESS); |
| 163 | } | 166 | } |
| 164 | 167 | ||
| 165 | void InstallInterfaces(SM::ServiceManager& service_manager) { | 168 | void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system) { |
| 166 | auto module = std::make_shared<Module>(); | 169 | auto module = std::make_shared<Module>(); |
| 167 | std::make_shared<Fatal_P>(module)->InstallAsService(service_manager); | 170 | std::make_shared<Fatal_P>(module, system)->InstallAsService(service_manager); |
| 168 | std::make_shared<Fatal_U>(module)->InstallAsService(service_manager); | 171 | std::make_shared<Fatal_U>(module, system)->InstallAsService(service_manager); |
| 169 | } | 172 | } |
| 170 | 173 | ||
| 171 | } // namespace Service::Fatal | 174 | } // namespace Service::Fatal |
diff --git a/src/core/hle/service/fatal/fatal.h b/src/core/hle/service/fatal/fatal.h index 09371ff7f..bd9339dfc 100644 --- a/src/core/hle/service/fatal/fatal.h +++ b/src/core/hle/service/fatal/fatal.h | |||
| @@ -6,13 +6,17 @@ | |||
| 6 | 6 | ||
| 7 | #include "core/hle/service/service.h" | 7 | #include "core/hle/service/service.h" |
| 8 | 8 | ||
| 9 | namespace Core { | ||
| 10 | class System; | ||
| 11 | } | ||
| 12 | |||
| 9 | namespace Service::Fatal { | 13 | namespace Service::Fatal { |
| 10 | 14 | ||
| 11 | class Module final { | 15 | class Module final { |
| 12 | public: | 16 | public: |
| 13 | class Interface : public ServiceFramework<Interface> { | 17 | class Interface : public ServiceFramework<Interface> { |
| 14 | public: | 18 | public: |
| 15 | explicit Interface(std::shared_ptr<Module> module, const char* name); | 19 | explicit Interface(std::shared_ptr<Module> module, Core::System& system, const char* name); |
| 16 | ~Interface() override; | 20 | ~Interface() override; |
| 17 | 21 | ||
| 18 | void ThrowFatal(Kernel::HLERequestContext& ctx); | 22 | void ThrowFatal(Kernel::HLERequestContext& ctx); |
| @@ -21,9 +25,10 @@ public: | |||
| 21 | 25 | ||
| 22 | protected: | 26 | protected: |
| 23 | std::shared_ptr<Module> module; | 27 | std::shared_ptr<Module> module; |
| 28 | Core::System& system; | ||
| 24 | }; | 29 | }; |
| 25 | }; | 30 | }; |
| 26 | 31 | ||
| 27 | void InstallInterfaces(SM::ServiceManager& service_manager); | 32 | void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system); |
| 28 | 33 | ||
| 29 | } // namespace Service::Fatal | 34 | } // namespace Service::Fatal |
diff --git a/src/core/hle/service/fatal/fatal_p.cpp b/src/core/hle/service/fatal/fatal_p.cpp index 9e5f872ff..066ccf6b0 100644 --- a/src/core/hle/service/fatal/fatal_p.cpp +++ b/src/core/hle/service/fatal/fatal_p.cpp | |||
| @@ -6,8 +6,8 @@ | |||
| 6 | 6 | ||
| 7 | namespace Service::Fatal { | 7 | namespace Service::Fatal { |
| 8 | 8 | ||
| 9 | Fatal_P::Fatal_P(std::shared_ptr<Module> module) | 9 | Fatal_P::Fatal_P(std::shared_ptr<Module> module, Core::System& system) |
| 10 | : Module::Interface(std::move(module), "fatal:p") {} | 10 | : Module::Interface(std::move(module), system, "fatal:p") {} |
| 11 | 11 | ||
| 12 | Fatal_P::~Fatal_P() = default; | 12 | Fatal_P::~Fatal_P() = default; |
| 13 | 13 | ||
diff --git a/src/core/hle/service/fatal/fatal_p.h b/src/core/hle/service/fatal/fatal_p.h index 6e9c5979f..c6d953cb5 100644 --- a/src/core/hle/service/fatal/fatal_p.h +++ b/src/core/hle/service/fatal/fatal_p.h | |||
| @@ -10,7 +10,7 @@ namespace Service::Fatal { | |||
| 10 | 10 | ||
| 11 | class Fatal_P final : public Module::Interface { | 11 | class Fatal_P final : public Module::Interface { |
| 12 | public: | 12 | public: |
| 13 | explicit Fatal_P(std::shared_ptr<Module> module); | 13 | explicit Fatal_P(std::shared_ptr<Module> module, Core::System& system); |
| 14 | ~Fatal_P() override; | 14 | ~Fatal_P() override; |
| 15 | }; | 15 | }; |
| 16 | 16 | ||
diff --git a/src/core/hle/service/fatal/fatal_u.cpp b/src/core/hle/service/fatal/fatal_u.cpp index 1572a2051..8d72ed485 100644 --- a/src/core/hle/service/fatal/fatal_u.cpp +++ b/src/core/hle/service/fatal/fatal_u.cpp | |||
| @@ -6,7 +6,8 @@ | |||
| 6 | 6 | ||
| 7 | namespace Service::Fatal { | 7 | namespace Service::Fatal { |
| 8 | 8 | ||
| 9 | Fatal_U::Fatal_U(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "fatal:u") { | 9 | Fatal_U::Fatal_U(std::shared_ptr<Module> module, Core::System& system) |
| 10 | : Module::Interface(std::move(module), system, "fatal:u") { | ||
| 10 | static const FunctionInfo functions[] = { | 11 | static const FunctionInfo functions[] = { |
| 11 | {0, &Fatal_U::ThrowFatal, "ThrowFatal"}, | 12 | {0, &Fatal_U::ThrowFatal, "ThrowFatal"}, |
| 12 | {1, &Fatal_U::ThrowFatalWithPolicy, "ThrowFatalWithPolicy"}, | 13 | {1, &Fatal_U::ThrowFatalWithPolicy, "ThrowFatalWithPolicy"}, |
diff --git a/src/core/hle/service/fatal/fatal_u.h b/src/core/hle/service/fatal/fatal_u.h index 72cb6d076..34c5c7f95 100644 --- a/src/core/hle/service/fatal/fatal_u.h +++ b/src/core/hle/service/fatal/fatal_u.h | |||
| @@ -10,7 +10,7 @@ namespace Service::Fatal { | |||
| 10 | 10 | ||
| 11 | class Fatal_U final : public Module::Interface { | 11 | class Fatal_U final : public Module::Interface { |
| 12 | public: | 12 | public: |
| 13 | explicit Fatal_U(std::shared_ptr<Module> module); | 13 | explicit Fatal_U(std::shared_ptr<Module> module, Core::System& system); |
| 14 | ~Fatal_U() override; | 14 | ~Fatal_U() override; |
| 15 | }; | 15 | }; |
| 16 | 16 | ||