Project

General

Profile

Bug #2258 » 0001-make-SET_STACK_END-macro-respect-rb_thread_t.machine.patch

patch to make SET_STACK_END respect machine_stack_maxsize - sunaku (Suraj Kurapati), 10/25/2009 03:40 AM

View differences:

cont.c
size_t size;
rb_thread_t *sth = &cont->saved_thread;
SET_MACHINE_STACK_END(&th->machine_stack_end);
SET_THREAD_MACHINE_STACK_END(th);
#ifdef __ia64
th->machine_register_stack_end = rb_ia64_bsp();
#endif
gc.c
}
#ifdef __ia64
#define SET_STACK_END (SET_MACHINE_STACK_END(&th->machine_stack_end), th->machine_register_stack_end = rb_ia64_bsp())
#define SET_STACK_END (SET_THREAD_MACHINE_STACK_END(th), th->machine_register_stack_end = rb_ia64_bsp())
#else
#define SET_STACK_END SET_MACHINE_STACK_END(&th->machine_stack_end)
#define SET_STACK_END SET_THREAD_MACHINE_STACK_END(th)
#endif
#define STACK_START (th->machine_stack_start)
gc.h
#define USE_CONSERVATIVE_STACK_END
#endif
#define SET_THREAD_MACHINE_STACK_END(th) SET_MACHINE_STACK_END(&th->machine_stack_end);\
/* keep machine stack pointer within the maximum size limit */\
if (th->machine_stack_end && th->machine_stack_start - th->machine_stack_end > th->machine_stack_maxsize) {\
th->machine_stack_end = th->machine_stack_start + th->machine_stack_maxsize;\
}
/* for GC debug */
#ifndef RUBY_MARK_FREE_DEBUG
thread.c
void
rb_gc_save_machine_context(rb_thread_t *th)
{
SET_MACHINE_STACK_END(&th->machine_stack_end);
SET_THREAD_MACHINE_STACK_END(th);
FLUSH_REGISTER_WINDOWS;
#ifdef __ia64
th->machine_register_stack_end = rb_ia64_bsp();
(10-10/21)