diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-03-15 07:02:09 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-03-15 07:02:09 +0000 |
commit | ed921b85dc25a31a36f2614b8b64691f69c67f1e (patch) | |
tree | 36933e5f74ee6ed667286d3552b8546d2cf80c9b | |
parent | d4248739808c122e09bb4822d0c44599abc079aa (diff) |
gc.c: mark_stack_locations
* gc.c (mark_stack_locations): extract the common part from
mark_current_machine_context and rb_gc_mark_machine_stack.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54116 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | gc.c | 23 |
1 files changed, 12 insertions, 11 deletions
@@ -4109,6 +4109,9 @@ mark_const_tbl(rb_objspace_t *objspace, struct rb_id_table *tbl) ((start) = STACK_END, (end) = STACK_START) : ((start) = STACK_START, (end) = STACK_END+(appendix))) #endif +static void mark_stack_locations(rb_objspace_t *objspace, rb_thread_t *th, + const VALUE *stack_start, const VALUE *stack_end); + static void mark_current_machine_context(rb_objspace_t *objspace, rb_thread_t *th) { @@ -4130,17 +4133,7 @@ mark_current_machine_context(rb_objspace_t *objspace, rb_thread_t *th) mark_locations_array(objspace, save_regs_gc_mark.v, numberof(save_regs_gc_mark.v)); - gc_mark_locations(objspace, stack_start, stack_end); -#ifdef __ia64 - gc_mark_locations(objspace, - th->machine.register_stack_start, - th->machine.register_stack_end); -#endif -#if defined(__mc68000__) - gc_mark_locations(objspace, - (VALUE*)((char*)stack_start + 2), - (VALUE*)((char*)stack_end - 2)); -#endif + mark_stack_locations(objspace, th, stack_start, stack_end); } void @@ -4150,6 +4143,14 @@ rb_gc_mark_machine_stack(rb_thread_t *th) VALUE *stack_start, *stack_end; GET_STACK_BOUNDS(stack_start, stack_end, 0); + mark_stack_locations(objspace, th, stack_start, stack_end); +} + +static void +mark_stack_locations(rb_objspace_t *objspace, rb_thread_t *th, + const VALUE *stack_start, const VALUE *stack_end) +{ + gc_mark_locations(objspace, stack_start, stack_end); #ifdef __ia64 gc_mark_locations(objspace, |