From 342241a24d4edf5a288d50c5b2bd04fef57a29d9 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 13 Sep 2022 16:17:37 +0200 Subject: Improved thread_self stack size detection --- src/libtools/threads.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/libtools/threads.c') diff --git a/src/libtools/threads.c b/src/libtools/threads.c index 12352031..1a295345 100755 --- a/src/libtools/threads.c +++ b/src/libtools/threads.c @@ -440,7 +440,24 @@ EXPORT int my_pthread_attr_setstackaddr(x64emu_t* emu, pthread_attr_t* attr, voi EXPORT int my_pthread_getattr_np(x64emu_t* emu, pthread_t thread_id, pthread_attr_t* attr) { (void)emu; - return pthread_getattr_np(thread_id, getAlignedAttrWithInit(attr, 0)); + int ret = pthread_getattr_np(thread_id, getAlignedAttrWithInit(attr, 0)); + if(!ret && thread_id==pthread_self()) { + if(!emu->context->stacksizes) { + emu->context->stacksizes = kh_init(threadstack); + } + void* stack = emu->init_stack; + size_t sz = emu->size_stack; + if (!sz) { + // get default stack size + pthread_attr_t attr; + pthread_getattr_default_np(&attr); + pthread_attr_getstacksize(&attr, &sz); + pthread_attr_destroy(&attr); + // should stack be adjusted? + } + AddStackSize(emu->context->stacksizes, (uintptr_t)attr, stack, sz); + } + return ret; } EXPORT int my_pthread_getattr_default_np(x64emu_t* emu, pthread_attr_t* attr) { -- cgit 1.4.1