diff --git a/gc.c b/gc.c index c345f2113f..c564fa7274 100644 --- a/gc.c +++ b/gc.c @@ -4052,6 +4052,8 @@ stack_check(rb_execution_context_t *ec, int water_mark) ec->machine.register_stack_maxsize/sizeof(VALUE) - water_mark; } #endif + if (ret) + fprintf(stderr, "DEBUG: STACK_LENGTH=%zu, STACK_LEVEL_MAX=%zu, water_mark=%d\n", STACK_LENGTH, STACK_LEVEL_MAX, water_mark); return ret; } #else diff --git a/thread_pthread.c b/thread_pthread.c index 951885ffa0..68cf3e3bce 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -544,11 +544,13 @@ get_stack(void **addr, size_t *size) #define CHECK_ERR(expr) \ {int err = (expr); if (err) return err;} #ifdef HAVE_PTHREAD_GETATTR_NP /* Linux */ +// musl pthread_attr_t attr; size_t guard = 0; STACK_GROW_DIR_DETECTION; CHECK_ERR(pthread_getattr_np(pthread_self(), &attr)); # ifdef HAVE_PTHREAD_ATTR_GETSTACK +// musl CHECK_ERR(pthread_attr_getstack(&attr, addr, size)); STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + *size)); # else @@ -556,6 +558,7 @@ get_stack(void **addr, size_t *size) CHECK_ERR(pthread_attr_getstacksize(&attr, size)); # endif # ifdef HAVE_PTHREAD_ATTR_GETGUARDSIZE +// musl CHECK_ERR(pthread_attr_getguardsize(&attr, &guard)); *size -= guard; # else @@ -722,6 +725,7 @@ ruby_init_stack(volatile VALUE *addr } #endif #if MAINSTACKADDR_AVAILABLE +// musl if (native_main_thread.stack_maxsize) return; { void* stackaddr; @@ -730,6 +734,7 @@ ruby_init_stack(volatile VALUE *addr native_main_thread.stack_maxsize = size; native_main_thread.stack_start = stackaddr; reserve_stack(stackaddr, size); + fprintf(stderr, "DEBUG: stack_maxsize=%zu\n", size); goto bound_check; } } @@ -737,6 +742,7 @@ ruby_init_stack(volatile VALUE *addr #ifdef STACK_END_ADDRESS native_main_thread.stack_start = STACK_END_ADDRESS; #else +// musl if (!native_main_thread.stack_start || STACK_UPPER((VALUE *)(void *)&addr, native_main_thread.stack_start > addr,