From 9482bd6704b7eb88dc693ccfd72e3d5b6b328652 Mon Sep 17 00:00:00 2001 From: DH Date: Thu, 13 Jul 2023 13:30:37 +0300 Subject: [PATCH] [rpcsx-os] Implement munmap Hack for unimplemented device mmap Hack to ignore ftruncate (requires shm implementation) --- rpcsx-os/ops.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/rpcsx-os/ops.cpp b/rpcsx-os/ops.cpp index 004a07b1f..3b69907d3 100644 --- a/rpcsx-os/ops.cpp +++ b/rpcsx-os/ops.cpp @@ -35,7 +35,12 @@ orbis::SysResult mmap(orbis::Thread *thread, orbis::caddr_t addr, return ErrorCode::BADF; } - result = handle->mmap(handle.get(), addr, len, prot, flags, pos); + if (handle->mmap != nullptr) { + result = handle->mmap(handle.get(), addr, len, prot, flags, pos); + } else { + std::printf("unimplemented mmap\n"); + result = rx::vm::map(addr, len, prot, flags); + } } if (result == (void *)-1) { @@ -46,8 +51,11 @@ orbis::SysResult mmap(orbis::Thread *thread, orbis::caddr_t addr, return {}; } -orbis::SysResult munmap(orbis::Thread *thread, orbis::ptr addr, +orbis::SysResult munmap(orbis::Thread *, orbis::ptr addr, orbis::size_t len) { + if (rx::vm::unmap(addr, len)) { + return {}; + } return ErrorCode::INVAL; } @@ -135,7 +143,7 @@ orbis::SysResult close(orbis::Thread *thread, orbis::sint fd) { #define IOC_DIRMASK (IOC_VOID | IOC_OUT | IOC_IN) #define _IOC(inout, group, num, len) \ - ((unsigned long)((inout) | (((len)&IOCPARM_MASK) << 16) | ((group) << 8) | \ + ((unsigned long)((inout) | (((len) & IOCPARM_MASK) << 16) | ((group) << 8) | \ (num))) #define _IO(g, n) _IOC(IOC_VOID, (g), (n), 0) #define _IOWINT(g, n) _IOC(IOC_VOID, (g), (n), sizeof(int)) @@ -328,7 +336,7 @@ orbis::SysResult lseek(orbis::Thread *thread, orbis::sint fd, } orbis::SysResult ftruncate(orbis::Thread *thread, orbis::sint fd, orbis::off_t length) { - return ErrorCode::NOTSUP; + return {}; } orbis::SysResult truncate(orbis::Thread *thread, orbis::ptr path, orbis::off_t length) {