From e6b40486c52142adfa7c4bd9e471280c1c600c60 Mon Sep 17 00:00:00 2001 From: Hamish Milne Date: Sat, 11 Apr 2020 19:47:06 +0100 Subject: [PATCH] Add a couple of useful SVC logs --- src/core/hle/kernel/svc.cpp | 1 + src/core/hle/kernel/svc_wrapper.h | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 8f1ba5e01..25eb9bb4e 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -1607,6 +1607,7 @@ void SVC::CallSVC(u32 immediate) { "Running threads from exiting processes is unimplemented"); const FunctionDef* info = GetSVCInfo(immediate); + LOG_TRACE(Kernel_SVC, "calling {}", info->name); if (info) { if (info->func) { (this->*(info->func))(); diff --git a/src/core/hle/kernel/svc_wrapper.h b/src/core/hle/kernel/svc_wrapper.h index b4fbbe0de..77334152d 100644 --- a/src/core/hle/kernel/svc_wrapper.h +++ b/src/core/hle/kernel/svc_wrapper.h @@ -280,6 +280,26 @@ private: } }; + template + struct WrapPass { + // Call function R(Context::svc)(Us...) and transfer the return value to registers + template + static void Call(Context& context, SVCT svc, Us... u) { + static_assert(std::is_same_v); + if constexpr (std::is_void_v) { + (context.*svc)(u...); + } else { + ResultCode r = (context.*svc)(u...); + if (r.IsError()) { + LOG_ERROR(Kernel_SVC, "level={} summary={} module={} description={}", + r.level.ExtractValue(r.raw), r.summary.ExtractValue(r.raw), + r.module.ExtractValue(r.raw), r.description.ExtractValue(r.raw)); + } + SetParam(context, r); + } + } + }; + template struct WrapHelper;