aboutsummaryrefslogtreecommitdiffstats
path: root/thread.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-19 17:07:15 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-19 20:39:10 +1200
commit714703805370767efb859078d5095a014417a692 (patch)
tree5f7145161ba2a0375490cb27f23799959c1630f0 /thread.c
parentdee0cfbb4757ca954853de48814367c51f255933 (diff)
downloadruby-714703805370767efb859078d5095a014417a692.tar.gz
Update `stack_start` and `stack_maxsize` according to stack direction.
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/thread.c b/thread.c
index 758b6faf03..cf418da0e4 100644
--- a/thread.c
+++ b/thread.c
@@ -715,6 +715,7 @@ rb_vm_push_frame(rb_execution_context_t *sec,
static int
thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_start)
{
+ STACK_GROW_DIR_DETECTION;
enum ruby_tag_type state;
rb_thread_list_t *join_list;
rb_thread_t *main_th;
@@ -740,8 +741,8 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
ruby_thread_set_native(th);
- th->ec->machine.stack_start = vm_stack;
- th->ec->machine.stack_maxsize = th->ec->machine.stack_end - th->ec->machine.stack_start;
+ th->ec->machine.stack_start = STACK_DIR_UPPER(vm_stack + size, vm_stack);
+ th->ec->machine.stack_maxsize -= size * sizeof(VALUE);
#ifdef __ia64
th->ec->machine.register_stack_start = register_stack_start;
#endif