aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc_wrap.h
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-11-26 18:23:12 -0500
committerLioncash <mathew1800@gmail.com>2018-11-26 21:10:31 -0500
commit4ef2af8c98354aea8a4a3758d798c6a2b7bf9321 (patch)
tree229565ce72652a2cef9fb051d8340c371e810016 /src/core/hle/kernel/svc_wrap.h
parentf9a211220c59b332a94450a85d3baa1934d6d07e (diff)
svc: Implement svcCreateResourceLimit()
This function simply creates a ResourceLimit instance and attempts to create a handle for it within the current process' handle table. If the kernal fails to either create the ResourceLimit instance or create a handle for the ResourceLimit instance, it returns a failure code (OUT_OF_RESOURCE, and HANDLE_TABLE_FULL respectively). Finally, it exits by providing the output parameter with the handle value for the ResourceLimit instance and returning that it was successful. Note: We do not return OUT_OF_RESOURCE because, if yuzu runs out of available memory, then new will currently throw. We *could* allocate the kernel instance with std::nothrow, however this would be inconsistent with how all other kernel objects are currently allocated.
Diffstat (limited to 'src/core/hle/kernel/svc_wrap.h')
-rw-r--r--src/core/hle/kernel/svc_wrap.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h
index 233a99fb0..fa1116624 100644
--- a/src/core/hle/kernel/svc_wrap.h
+++ b/src/core/hle/kernel/svc_wrap.h
@@ -43,6 +43,14 @@ void SvcWrap() {
FuncReturn(func(static_cast<u32>(Param(0)), static_cast<u32>(Param(1))).raw);
}
+template <ResultCode func(u32*)>
+void SvcWrap() {
+ u32 param = 0;
+ const u32 retval = func(&param).raw;
+ Core::CurrentArmInterface().SetReg(1, param);
+ FuncReturn(retval);
+}
+
template <ResultCode func(u32*, u32)>
void SvcWrap() {
u32 param_1 = 0;