diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/custommem.c | 2 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 1 | ||||
| -rw-r--r-- | src/dynarec/dynarec_native_functions.c | 1 | ||||
| -rw-r--r-- | src/emu/x64run.c | 1 | ||||
| -rw-r--r-- | src/include/box64context.h | 3 | ||||
| -rw-r--r-- | src/include/mypthread.h | 29 | ||||
| -rw-r--r-- | src/include/mysignal.h | 4 | ||||
| -rw-r--r-- | src/os/os_wine.c | 23 |
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 |