From 096ed29b5e785dcd8554e383f52b689fe8fbc615 Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Misis Poiitidis Date: Thu, 2 Jun 2022 20:52:06 +0300 Subject: [PATCH] Mtrack/x86: Track shmat, shmdt via ipc syscall as well --- Source/Tests/LinuxSyscalls/x32/Memory.cpp | 2 ++ Source/Tests/LinuxSyscalls/x32/Semaphore.cpp | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/Source/Tests/LinuxSyscalls/x32/Memory.cpp b/Source/Tests/LinuxSyscalls/x32/Memory.cpp index ba817c6eb..1c6c38c55 100644 --- a/Source/Tests/LinuxSyscalls/x32/Memory.cpp +++ b/Source/Tests/LinuxSyscalls/x32/Memory.cpp @@ -112,6 +112,7 @@ namespace FEX::HLE::x32 { }); REGISTER_SYSCALL_IMPL_X32(shmat, [](FEXCore::Core::CpuStateFrame *Frame, int shmid, const void *shmaddr, int shmflg) -> uint64_t { + // also implemented in ipc:OP_SHMAT uint32_t ResultAddr{}; uint64_t Result = static_cast(FEX::HLE::_SyscallHandler)->GetAllocator()-> shmat(shmid, reinterpret_cast(shmaddr), shmflg, &ResultAddr); @@ -126,6 +127,7 @@ namespace FEX::HLE::x32 { }); REGISTER_SYSCALL_IMPL_X32(shmdt, [](FEXCore::Core::CpuStateFrame *Frame, const void *shmaddr) -> uint64_t { + // also implemented in ipc:OP_SHMDT uint64_t Result = static_cast(FEX::HLE::_SyscallHandler)->GetAllocator()-> shmdt(shmaddr); diff --git a/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp b/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp index 7cb79fe8a..53a662695 100644 --- a/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp +++ b/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp @@ -279,13 +279,21 @@ namespace FEX::HLE::x32 { break; } case OP_SHMAT: { + // also implemented in memory:shmat Result = static_cast(FEX::HLE::_SyscallHandler)->GetAllocator()-> shmat(first, reinterpret_cast(ptr), second, reinterpret_cast(third)); + if (!FEX::HLE::HasSyscallError(Result)) { + FEX::HLE::_SyscallHandler->TrackShmat(first, *reinterpret_cast(third), second); + } break; } case OP_SHMDT: { + // also implemented in memory:shmdt Result = static_cast(FEX::HLE::_SyscallHandler)->GetAllocator()-> shmdt(reinterpret_cast(ptr)); + if (!FEX::HLE::HasSyscallError(Result)) { + FEX::HLE::_SyscallHandler->TrackShmdt(ptr); + } break; } case OP_SHMGET: {