From c0d2971b66ace92ff4e3dad10acab54e461cda1b Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 15 Mar 2016 07:02:09 +0000 Subject: 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 --- gc.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/gc.c b/gc.c index 2604b10285..58953b94e2 100644 --- a/gc.c +++ b/gc.c @@ -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, -- cgit v1.2.3