274 lines
12 KiB
Diff
274 lines
12 KiB
Diff
|
diff --git a/Source/Tests/LinuxSyscalls/Arm64/SyscallsEnum.h b/Source/Tests/LinuxSyscalls/Arm64/SyscallsEnum.h
|
||
|
index abbb3c92..a91871bf 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/Arm64/SyscallsEnum.h
|
||
|
+++ b/Source/Tests/LinuxSyscalls/Arm64/SyscallsEnum.h
|
||
|
@@ -204,10 +204,10 @@ enum Syscalls_Arm64 {
|
||
|
SYSCALL_Arm64_semctl = 191,
|
||
|
SYSCALL_Arm64_semtimedop = 192,
|
||
|
SYSCALL_Arm64_semop = 193,
|
||
|
- SYSCALL_Arm64_shmget = 194,
|
||
|
- SYSCALL_Arm64_shmctl = 195,
|
||
|
- SYSCALL_Arm64_shmat = 196,
|
||
|
- SYSCALL_Arm64_shmdt = 197,
|
||
|
+ SYSCALL_Arm64__shmget = 194,
|
||
|
+ SYSCALL_Arm64__shmctl = 195,
|
||
|
+ SYSCALL_Arm64__shmat = 196,
|
||
|
+ SYSCALL_Arm64__shmdt = 197,
|
||
|
SYSCALL_Arm64_socket = 198,
|
||
|
SYSCALL_Arm64_socketpair = 199,
|
||
|
SYSCALL_Arm64_bind = 200,
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/LinuxAllocator.cpp b/Source/Tests/LinuxSyscalls/LinuxAllocator.cpp
|
||
|
index cb310be8..90b0a50d 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/LinuxAllocator.cpp
|
||
|
+++ b/Source/Tests/LinuxSyscalls/LinuxAllocator.cpp
|
||
|
@@ -47,8 +47,8 @@ public:
|
||
|
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) override;
|
||
|
int munmap(void *addr, size_t length) override;
|
||
|
void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, void *new_address) override;
|
||
|
- uint64_t shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) override;
|
||
|
- uint64_t shmdt(const void* shmaddr) override;
|
||
|
+ uint64_t Shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) override;
|
||
|
+ uint64_t Shmdt(const void* shmaddr) override;
|
||
|
static constexpr bool SearchDown = true;
|
||
|
|
||
|
// PageAddr is a page already shifted to page index
|
||
|
@@ -434,7 +434,7 @@ void *MemAllocator32Bit::mremap(void *old_address, size_t old_size, size_t new_s
|
||
|
return reinterpret_cast<void*>(-errno);
|
||
|
}
|
||
|
|
||
|
-uint64_t MemAllocator32Bit::shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) {
|
||
|
+uint64_t MemAllocator32Bit::Shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) {
|
||
|
std::scoped_lock<std::mutex> lk{AllocMutex};
|
||
|
|
||
|
if (shmaddr != nullptr) {
|
||
|
@@ -547,7 +547,7 @@ restart:
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
-uint64_t MemAllocator32Bit::shmdt(const void* shmaddr) {
|
||
|
+uint64_t MemAllocator32Bit::Shmdt(const void* shmaddr) {
|
||
|
uint32_t AddrPage = reinterpret_cast<uint64_t>(shmaddr) >> FHU::FEX_PAGE_SHIFT;
|
||
|
auto it = PageToShm.find(AddrPage);
|
||
|
|
||
|
@@ -584,7 +584,7 @@ public:
|
||
|
return reinterpret_cast<void*>(Result);
|
||
|
}
|
||
|
|
||
|
- uint64_t shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) override {
|
||
|
+ uint64_t Shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) override {
|
||
|
uint64_t Result = (uint64_t)::shmat(shmid, reinterpret_cast<const void*>(shmaddr), shmflg);
|
||
|
if (Result != ~0ULL) {
|
||
|
*ResultAddress = Result;
|
||
|
@@ -593,7 +593,7 @@ public:
|
||
|
SYSCALL_ERRNO();
|
||
|
}
|
||
|
|
||
|
- uint64_t shmdt(const void* shmaddr) override {
|
||
|
+ uint64_t Shmdt(const void* shmaddr) override {
|
||
|
uint64_t Result = ::shmdt(shmaddr);
|
||
|
SYSCALL_ERRNO();
|
||
|
}
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/LinuxAllocator.h b/Source/Tests/LinuxSyscalls/LinuxAllocator.h
|
||
|
index 0fa8f0ba..a12947a5 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/LinuxAllocator.h
|
||
|
+++ b/Source/Tests/LinuxSyscalls/LinuxAllocator.h
|
||
|
@@ -12,8 +12,9 @@ namespace FEX::HLE {
|
||
|
virtual void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset) = 0;
|
||
|
virtual int munmap(void *addr, size_t length) = 0;
|
||
|
virtual void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, void *new_address) = 0;
|
||
|
- virtual uint64_t shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) = 0;
|
||
|
- virtual uint64_t shmdt(const void* shmaddr) = 0;
|
||
|
+ // Global symbol collision on undercase
|
||
|
+ virtual uint64_t Shmat(int shmid, const void* shmaddr, int shmflg, uint32_t *ResultAddress) = 0;
|
||
|
+ virtual uint64_t Shmdt(const void* shmaddr) = 0;
|
||
|
};
|
||
|
|
||
|
std::unique_ptr<FEX::HLE::MemAllocator> Create32BitAllocator();
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/Syscalls/SHM.cpp b/Source/Tests/LinuxSyscalls/Syscalls/SHM.cpp
|
||
|
index f3be716e..fa537d92 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/Syscalls/SHM.cpp
|
||
|
+++ b/Source/Tests/LinuxSyscalls/Syscalls/SHM.cpp
|
||
|
@@ -18,14 +18,14 @@ namespace FEX::HLE {
|
||
|
void RegisterSHM() {
|
||
|
using namespace FEXCore::IR;
|
||
|
|
||
|
- REGISTER_SYSCALL_IMPL_PASS_FLAGS(shmget, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
+ REGISTER_SYSCALL_IMPL_PASS_FLAGS(_shmget, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
[](FEXCore::Core::CpuStateFrame *Frame, key_t key, size_t size, int shmflg) -> uint64_t {
|
||
|
uint64_t Result = shmget(key, size, shmflg);
|
||
|
SYSCALL_ERRNO();
|
||
|
});
|
||
|
|
||
|
// XXX: shmid_ds is definitely not correct for 32-bit
|
||
|
- REGISTER_SYSCALL_IMPL_PASS_FLAGS(shmctl, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
+ REGISTER_SYSCALL_IMPL_PASS_FLAGS(_shmctl, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
[](FEXCore::Core::CpuStateFrame *Frame, int shmid, int cmd, struct shmid_ds *buf) -> uint64_t {
|
||
|
uint64_t Result = ::shmctl(shmid, cmd, buf);
|
||
|
SYSCALL_ERRNO();
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/x32/Memory.cpp b/Source/Tests/LinuxSyscalls/x32/Memory.cpp
|
||
|
index 1254df8b..91851ef4 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/x32/Memory.cpp
|
||
|
+++ b/Source/Tests/LinuxSyscalls/x32/Memory.cpp
|
||
|
@@ -94,10 +94,10 @@ namespace FEX::HLE::x32 {
|
||
|
SYSCALL_ERRNO();
|
||
|
});
|
||
|
|
||
|
- REGISTER_SYSCALL_IMPL_X32(shmat, [](FEXCore::Core::CpuStateFrame *Frame, int shmid, const void *shmaddr, int shmflg) -> uint64_t {
|
||
|
+ REGISTER_SYSCALL_IMPL_X32(_shmat, [](FEXCore::Core::CpuStateFrame *Frame, int shmid, const void *shmaddr, int shmflg) -> uint64_t {
|
||
|
uint32_t ResultAddr{};
|
||
|
uint64_t Result = static_cast<FEX::HLE::x32::x32SyscallHandler*>(FEX::HLE::_SyscallHandler)->GetAllocator()->
|
||
|
- shmat(shmid, reinterpret_cast<const void*>(shmaddr), shmflg, &ResultAddr);
|
||
|
+ Shmat(shmid, reinterpret_cast<const void*>(shmaddr), shmflg, &ResultAddr);
|
||
|
if (Result == 0) {
|
||
|
return ResultAddr;
|
||
|
}
|
||
|
@@ -106,9 +106,9 @@ namespace FEX::HLE::x32 {
|
||
|
}
|
||
|
});
|
||
|
|
||
|
- REGISTER_SYSCALL_IMPL_X32(shmdt, [](FEXCore::Core::CpuStateFrame *Frame, const void *shmaddr) -> uint64_t {
|
||
|
+ REGISTER_SYSCALL_IMPL_X32(_shmdt, [](FEXCore::Core::CpuStateFrame *Frame, const void *shmaddr) -> uint64_t {
|
||
|
uint64_t Result = static_cast<FEX::HLE::x32::x32SyscallHandler*>(FEX::HLE::_SyscallHandler)->GetAllocator()->
|
||
|
- shmdt(shmaddr);
|
||
|
+ Shmdt(shmaddr);
|
||
|
SYSCALL_ERRNO();
|
||
|
});
|
||
|
}
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp b/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp
|
||
|
index 7cb79fe8..36a096a4 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp
|
||
|
+++ b/Source/Tests/LinuxSyscalls/x32/Semaphore.cpp
|
||
|
@@ -280,12 +280,12 @@ namespace FEX::HLE::x32 {
|
||
|
}
|
||
|
case OP_SHMAT: {
|
||
|
Result = static_cast<FEX::HLE::x32::x32SyscallHandler*>(FEX::HLE::_SyscallHandler)->GetAllocator()->
|
||
|
- shmat(first, reinterpret_cast<const void*>(ptr), second, reinterpret_cast<uint32_t*>(third));
|
||
|
+ Shmat(first, reinterpret_cast<const void*>(ptr), second, reinterpret_cast<uint32_t*>(third));
|
||
|
break;
|
||
|
}
|
||
|
case OP_SHMDT: {
|
||
|
Result = static_cast<FEX::HLE::x32::x32SyscallHandler*>(FEX::HLE::_SyscallHandler)->GetAllocator()->
|
||
|
- shmdt(reinterpret_cast<void*>(ptr));
|
||
|
+ Shmdt(reinterpret_cast<void*>(ptr));
|
||
|
break;
|
||
|
}
|
||
|
case OP_SHMGET: {
|
||
|
@@ -309,7 +309,7 @@ namespace FEX::HLE::x32 {
|
||
|
else {
|
||
|
buf = *shmun.buf32;
|
||
|
}
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, &buf);
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, &buf);
|
||
|
// IPC_SET sets the internal data structure that the kernel uses
|
||
|
// No need to writeback
|
||
|
break;
|
||
|
@@ -318,7 +318,7 @@ namespace FEX::HLE::x32 {
|
||
|
case SHM_STAT_ANY:
|
||
|
case IPC_STAT: {
|
||
|
struct shmid64_ds buf{};
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, &buf);
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, &buf);
|
||
|
if (Result != -1) {
|
||
|
if (IPC64) {
|
||
|
*shmun.buf64 = buf;
|
||
|
@@ -331,7 +331,7 @@ namespace FEX::HLE::x32 {
|
||
|
}
|
||
|
case IPC_INFO: {
|
||
|
struct shminfo si{};
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, reinterpret_cast<struct shmid_ds*>(&si));
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, reinterpret_cast<struct shmid_ds*>(&si));
|
||
|
if (Result != -1) {
|
||
|
if (IPC64) {
|
||
|
*shmun.__buf64 = si;
|
||
|
@@ -344,7 +344,7 @@ namespace FEX::HLE::x32 {
|
||
|
}
|
||
|
case SHM_INFO: {
|
||
|
struct shm_info si{};
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, reinterpret_cast<struct shmid_ds*>(&si));
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, reinterpret_cast<struct shmid_ds*>(&si));
|
||
|
if (Result != -1) {
|
||
|
// SHM_INFO doesn't follow IPC64 behaviour
|
||
|
*shmun.__buf_info_32 = si;
|
||
|
@@ -352,13 +352,13 @@ namespace FEX::HLE::x32 {
|
||
|
break;
|
||
|
}
|
||
|
case SHM_LOCK:
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, nullptr);
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, nullptr);
|
||
|
break;
|
||
|
case SHM_UNLOCK:
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, nullptr);
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, nullptr);
|
||
|
break;
|
||
|
case IPC_RMID:
|
||
|
- Result = ::syscall(SYSCALL_DEF(shmctl), shmid, cmd, nullptr);
|
||
|
+ Result = ::syscall(SYSCALL_DEF(_shmctl), shmid, cmd, nullptr);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/x32/SyscallsEnum.h b/Source/Tests/LinuxSyscalls/x32/SyscallsEnum.h
|
||
|
index 341678a2..b8bc99eb 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/x32/SyscallsEnum.h
|
||
|
+++ b/Source/Tests/LinuxSyscalls/x32/SyscallsEnum.h
|
||
|
@@ -410,10 +410,10 @@ enum Syscalls_x86 {
|
||
|
SYSCALL_x86_rseq = 386,
|
||
|
SYSCALL_x86_semget = 393,
|
||
|
SYSCALL_x86_semctl = 394,
|
||
|
- SYSCALL_x86_shmget = 395,
|
||
|
- SYSCALL_x86_shmctl = 396,
|
||
|
- SYSCALL_x86_shmat = 397,
|
||
|
- SYSCALL_x86_shmdt = 398,
|
||
|
+ SYSCALL_x86__shmget = 395,
|
||
|
+ SYSCALL_x86__shmctl = 396,
|
||
|
+ SYSCALL_x86__shmat = 397,
|
||
|
+ SYSCALL_x86__shmdt = 398,
|
||
|
SYSCALL_x86_msgget = 399,
|
||
|
SYSCALL_x86_msgsnd = 400,
|
||
|
SYSCALL_x86_msgrcv = 401,
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/x64/Memory.cpp b/Source/Tests/LinuxSyscalls/x64/Memory.cpp
|
||
|
index 7fa02d2d..acae1027 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/x64/Memory.cpp
|
||
|
+++ b/Source/Tests/LinuxSyscalls/x64/Memory.cpp
|
||
|
@@ -119,13 +119,13 @@ namespace FEX::HLE::x64 {
|
||
|
SYSCALL_ERRNO();
|
||
|
});
|
||
|
|
||
|
- REGISTER_SYSCALL_IMPL_X64_PASS_FLAGS(shmat, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
+ REGISTER_SYSCALL_IMPL_X64_PASS_FLAGS(_shmat, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
[](FEXCore::Core::CpuStateFrame *Frame, int shmid, const void *shmaddr, int shmflg) -> uint64_t {
|
||
|
uint64_t Result = reinterpret_cast<uint64_t>(shmat(shmid, shmaddr, shmflg));
|
||
|
SYSCALL_ERRNO();
|
||
|
});
|
||
|
|
||
|
- REGISTER_SYSCALL_IMPL_X64_PASS_FLAGS(shmdt, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
+ REGISTER_SYSCALL_IMPL_X64_PASS_FLAGS(_shmdt, SyscallFlags::OPTIMIZETHROUGH | SyscallFlags::NOSYNCSTATEONENTRY,
|
||
|
[](FEXCore::Core::CpuStateFrame *Frame, const void *shmaddr) -> uint64_t {
|
||
|
uint64_t Result = ::shmdt(shmaddr);
|
||
|
SYSCALL_ERRNO();
|
||
|
diff --git a/Source/Tests/LinuxSyscalls/x64/SyscallsEnum.h b/Source/Tests/LinuxSyscalls/x64/SyscallsEnum.h
|
||
|
index 53c05c03..75db8832 100644
|
||
|
--- a/Source/Tests/LinuxSyscalls/x64/SyscallsEnum.h
|
||
|
+++ b/Source/Tests/LinuxSyscalls/x64/SyscallsEnum.h
|
||
|
@@ -36,9 +36,9 @@ enum Syscalls_x64 {
|
||
|
SYSCALL_x64_msync = 26,
|
||
|
SYSCALL_x64_mincore = 27,
|
||
|
SYSCALL_x64_madvise = 28,
|
||
|
- SYSCALL_x64_shmget = 29,
|
||
|
- SYSCALL_x64_shmat = 30,
|
||
|
- SYSCALL_x64_shmctl = 31,
|
||
|
+ SYSCALL_x64__shmget = 29,
|
||
|
+ SYSCALL_x64__shmat = 30,
|
||
|
+ SYSCALL_x64__shmctl = 31,
|
||
|
SYSCALL_x64_dup = 32,
|
||
|
SYSCALL_x64_dup2 = 33,
|
||
|
SYSCALL_x64_pause = 34,
|
||
|
@@ -74,7 +74,7 @@ enum Syscalls_x64 {
|
||
|
SYSCALL_x64_semget = 64,
|
||
|
SYSCALL_x64_semop = 65,
|
||
|
SYSCALL_x64_semctl = 66,
|
||
|
- SYSCALL_x64_shmdt = 67,
|
||
|
+ SYSCALL_x64__shmdt = 67,
|
||
|
SYSCALL_x64_msgget = 68,
|
||
|
SYSCALL_x64_msgsnd = 69,
|
||
|
SYSCALL_x64_msgrcv = 70,
|