about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/custommem.c2
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c1
-rw-r--r--src/dynarec/dynarec_native_functions.c1
-rw-r--r--src/emu/x64run.c1
-rw-r--r--src/include/box64context.h3
-rw-r--r--src/include/mypthread.h29
-rw-r--r--src/include/mysignal.h4
-rw-r--r--src/os/os_wine.c23
8 files changed, 54 insertions, 10 deletions
diff --git a/src/custommem.c b/src/custommem.c
index ae6df5b0..b840d3c9 100644
--- a/src/custommem.c
+++ b/src/custommem.c
@@ -14,13 +14,13 @@
 #include "bridge.h"
 #include "library.h"
 #include "callback.h"
-#include "threads.h"
 #include "x64trace.h"
 #include "custommem.h"
 #include "khash.h"
 #include "threads.h"
 #include "rbtree.h"
 #include "mysignal.h"
+#include "mypthread.h"
 #ifdef DYNAREC
 #include "dynablock.h"
 #include "dynarec/dynablock_private.h"
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index 24f127f5..059d9fcc 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -2,7 +2,6 @@
 #include <stdlib.h>
 #include <stddef.h>
 #include <errno.h>
-#include <signal.h>
 
 #include "os.h"
 #include "debug.h"
diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c
index 015058ad..2691e2cc 100644
--- a/src/dynarec/dynarec_native_functions.c
+++ b/src/dynarec/dynarec_native_functions.c
@@ -4,7 +4,6 @@
 #include <errno.h>
 #include <string.h>
 #include <math.h>
-#include <signal.h>
 #include <sys/types.h>
 #include <unistd.h>
 
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 40768f27..aaf27b18 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -4,7 +4,6 @@
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
-#include <signal.h>
 #include <sys/types.h>
 #include <unistd.h>
 
diff --git a/src/include/box64context.h b/src/include/box64context.h
index a3d651d2..e7c7b0cc 100644
--- a/src/include/box64context.h
+++ b/src/include/box64context.h
@@ -1,7 +1,8 @@
 #ifndef __BOX64CONTEXT_H_
 #define __BOX64CONTEXT_H_
 #include <stdint.h>
-#include <pthread.h>
+
+#include "mypthread.h"
 #include "pathcoll.h"
 #include "dictionnary.h"
 #ifdef DYNAREC
diff --git a/src/include/mypthread.h b/src/include/mypthread.h
new file mode 100644
index 00000000..ce9ea86c
--- /dev/null
+++ b/src/include/mypthread.h
@@ -0,0 +1,29 @@
+#ifndef __MYPTHREAD_H_
+#define __MYPTHREAD_H_
+
+#ifndef _WIN32
+#include <pthread.h>
+#else
+#include <windows.h>
+
+NTSTATUS  WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
+NTSTATUS  WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
+BOOL      WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
+NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
+
+typedef void* pthread_key_t;
+typedef void* pthread_mutexattr_t;
+#define pthread_mutex_t RTL_CRITICAL_SECTION
+#define pthread_mutex_init(x, y) RtlInitializeCriticalSection(x)
+#define pthread_mutex_lock(x) RtlEnterCriticalSection(x)
+#define pthread_mutex_unlock(x) RtlLeaveCriticalSection(x)
+#define pthread_mutex_trylock(x) !RtlTryEnterCriticalSection(x)
+
+#define pthread_mutex_destroy(x) 0
+#define pthread_mutexattr_init(x) 0
+#define pthread_mutexattr_destroy(x) 0
+#define pthread_mutexattr_settype(x, y) 0
+#define pthread_atfork(a, b, c) 0
+#endif
+
+#endif // __MYPTHREAD_H_
\ No newline at end of file
diff --git a/src/include/mysignal.h b/src/include/mysignal.h
index 22861634..6f3548ad 100644
--- a/src/include/mysignal.h
+++ b/src/include/mysignal.h
@@ -12,7 +12,11 @@ typedef sigset_t __sigset_t;
 
 #define sigfillset(x)
 
+#define SIGILL  4
 #define SIGTRAP 5
+#define SIGSEGV 11
+
+#define pthread_sigmask(a, b, c) 0
 #endif
 
 #endif // __MYSIGNAL_H_
\ No newline at end of file
diff --git a/src/os/os_wine.c b/src/os/os_wine.c
index e2cdba2e..949d7731 100644
--- a/src/os/os_wine.c
+++ b/src/os/os_wine.c
@@ -6,6 +6,14 @@
 
 #define HandleToULong(h) ((ULONG)(ULONG_PTR)(h))
 
+NTSTATUS WINAPI NtYieldExecution(void);
+
+static HANDLE myGetProcessHeap(void)
+{
+    return ((HANDLE**)NtCurrentTeb())[12][6];
+}
+
+
 int GetTID(void)
 {
     return HandleToULong(((HANDLE*)NtCurrentTeb())[9]);
@@ -13,7 +21,7 @@ int GetTID(void)
 
 int SchedYield(void)
 {
-    return SwitchToThread();
+    return (NtYieldExecution() != STATUS_NO_YIELD_PERFORMED);
 }
 
 int IsBridgeSignature(char s, char c)
@@ -151,7 +159,7 @@ int InternalMunmap(void* addr, unsigned long length)
 void* WinMalloc(size_t size)
 {
     void* ret;
-    ret = RtlAllocateHeap(GetProcessHeap(), 0, size);
+    ret = RtlAllocateHeap(myGetProcessHeap(), 0, size);
     return ret;
 }
 
@@ -160,18 +168,23 @@ void* WinRealloc(void* ptr, size_t size)
     void* ret;
     if (!ptr)
         return WinMalloc(size);
-    ret = RtlReAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, ptr, size);
+    ret = RtlReAllocateHeap(myGetProcessHeap(), HEAP_ZERO_MEMORY, ptr, size);
     return ret;
 }
 
 void* WinCalloc(size_t nmemb, size_t size)
 {
     void* ret;
-    ret = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, nmemb * size);
+    ret = RtlAllocateHeap(myGetProcessHeap(), HEAP_ZERO_MEMORY, nmemb * size);
     return ret;
 }
 
 void WinFree(void* ptr)
 {
-    RtlFreeHeap(GetProcessHeap(), 0, ptr);
+    RtlFreeHeap(myGetProcessHeap(), 0, ptr);
+}
+
+void free(void* ptr)
+{
+    RtlFreeHeap(myGetProcessHeap(), 0, ptr);
 }
\ No newline at end of file