diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-02-17 17:56:33 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-02-17 17:56:33 +0100 |
| commit | 2200c4af6b38c771c7d44f8cbf606809915ae1d8 (patch) | |
| tree | 53b2590d323869e8542787e79c8bae50f7c18c91 /src/libtools/threads.c | |
| parent | 838dfa453c4e1596ef3a9b60aed05a7cc34bee8e (diff) | |
| download | box64-2200c4af6b38c771c7d44f8cbf606809915ae1d8.tar.gz box64-2200c4af6b38c771c7d44f8cbf606809915ae1d8.zip | |
Various improvment to backtrace, protection tracking, and SHOWBT. Also SIGABRT is tracked like SIGSEGV, SIGILL and SIGBUS
Diffstat (limited to 'src/libtools/threads.c')
| -rwxr-xr-x | src/libtools/threads.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libtools/threads.c b/src/libtools/threads.c index 711db947..0d15debf 100755 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -46,6 +46,9 @@ void _pthread_cleanup_pop(void* buffer, int exec); // it will be pthread_kill@GLIBC_2.17 on aarch64, but it's GLIBC_2.2.5 on x86_64 static iFli_t real_phtread_kill_old = NULL; +// from src/wrapped/wrappedlibc.c +void* my_mmap(x64emu_t* emu, void* addr, unsigned long length, int prot, int flags, int fd, int64_t offset); + typedef struct threadstack_s { void* stack; size_t stacksize; @@ -210,7 +213,7 @@ x64emu_t* thread_get_emu() stacksize = stack_size; pthread_attr_destroy(&attr); } - void* stack = mmap(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + void* stack = my_mmap(NULL, NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); x64emu_t *emu = NewX64Emu(my_context, 0, (uintptr_t)stack, stacksize, 1); SetupX64Emu(emu); thread_set_emu(emu); @@ -481,7 +484,7 @@ EXPORT int my_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_rou stacksize = attr_stacksize; own = 0; } else { - stack = mmap(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + stack = my_mmap(NULL, NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); own = 1; } @@ -506,7 +509,7 @@ EXPORT int my_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_rou void* my_prepare_thread(x64emu_t *emu, void* f, void* arg, int ssize, void** pet) { int stacksize = (ssize)?ssize:(2*1024*1024); //default stack size is 2Mo - void* stack = mmap(NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); + void* stack = my_mmap(NULL, NULL, stacksize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0); emuthread_t *et = (emuthread_t*)box_calloc(1, sizeof(emuthread_t)); x64emu_t *emuthread = NewX64Emu(emu->context, (uintptr_t)f, (uintptr_t)stack, stacksize, 1); SetupX64Emu(emuthread); |