mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* thread.c (RB_GC_SAVE_MACHINE_CONTEXT, rb_gc_save_machine_context):
extract rb_gc_save_machine_context to RB_GC_SAVE_MACHINE_CONTEXT. NOTE: machine_regs and machine_stack_end must be set in current scope. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f6f388a5bd
commit
c1e6052bfe
3 changed files with 19 additions and 15 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Sun Dec 2 19:26:47 2012 Masaya Tarui <tarui@ruby-lang.org>
|
||||||
|
|
||||||
|
* thread.c (RB_GC_SAVE_MACHINE_CONTEXT, rb_gc_save_machine_context):
|
||||||
|
extract rb_gc_save_machine_context to RB_GC_SAVE_MACHINE_CONTEXT.
|
||||||
|
NOTE: machine_regs and machine_stack_end must be set in current scope.
|
||||||
|
|
||||||
Sun Dec 2 18:46:24 2012 Koichi Sasada <ko1@atdot.net>
|
Sun Dec 2 18:46:24 2012 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* array.c, enum.c, insns.def, io.c, numeric.c, parse.y, process.c,
|
* array.c, enum.c, insns.def, io.c, numeric.c, parse.y, process.c,
|
||||||
|
|
27
thread.c
27
thread.c
|
@ -99,11 +99,19 @@ static inline int blocking_region_begin(rb_thread_t *th, struct rb_blocking_regi
|
||||||
rb_unblock_function_t *ubf, void *arg, int fail_if_interrupted);
|
rb_unblock_function_t *ubf, void *arg, int fail_if_interrupted);
|
||||||
static inline void blocking_region_end(rb_thread_t *th, struct rb_blocking_region_buffer *region);
|
static inline void blocking_region_end(rb_thread_t *th, struct rb_blocking_region_buffer *region);
|
||||||
|
|
||||||
#define RB_GC_SAVE_MACHINE_CONTEXT(th) \
|
#ifdef __ia64
|
||||||
do { \
|
#define RB_GC_SAVE_MACHINE_REGISTER_STACK(th) \
|
||||||
rb_gc_save_machine_context(th); \
|
do{(th)->machine_register_stack_end = rb_ia64_bsp()}while(0)
|
||||||
SET_MACHINE_STACK_END(&(th)->machine_stack_end); \
|
#else
|
||||||
} while (0)
|
#define RB_GC_SAVE_MACHINE_REGISTER_STACK(th)
|
||||||
|
#endif
|
||||||
|
#define RB_GC_SAVE_MACHINE_CONTEXT(th) \
|
||||||
|
do { \
|
||||||
|
FLUSH_REGISTER_WINDOWS; \
|
||||||
|
RB_GC_SAVE_MACHINE_REGISTER_STACK(th); \
|
||||||
|
setjmp((th)->machine_regs); \
|
||||||
|
SET_MACHINE_STACK_END(&(th)->machine_stack_end); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define GVL_UNLOCK_BEGIN() do { \
|
#define GVL_UNLOCK_BEGIN() do { \
|
||||||
rb_thread_t *_th_stored = GET_THREAD(); \
|
rb_thread_t *_th_stored = GET_THREAD(); \
|
||||||
|
@ -3611,15 +3619,6 @@ rb_gc_set_stack_end(VALUE **stack_end_p)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
|
||||||
rb_gc_save_machine_context(rb_thread_t *th)
|
|
||||||
{
|
|
||||||
FLUSH_REGISTER_WINDOWS;
|
|
||||||
#ifdef __ia64
|
|
||||||
th->machine_register_stack_end = rb_ia64_bsp();
|
|
||||||
#endif
|
|
||||||
setjmp(th->machine_regs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
|
|
|
@ -815,7 +815,6 @@ VALUE rb_name_err_mesg_new(VALUE obj, VALUE mesg, VALUE recv, VALUE method);
|
||||||
void rb_vm_stack_to_heap(rb_thread_t *th);
|
void rb_vm_stack_to_heap(rb_thread_t *th);
|
||||||
void ruby_thread_init_stack(rb_thread_t *th);
|
void ruby_thread_init_stack(rb_thread_t *th);
|
||||||
|
|
||||||
NOINLINE(void rb_gc_save_machine_context(rb_thread_t *));
|
|
||||||
void rb_gc_mark_machine_stack(rb_thread_t *th);
|
void rb_gc_mark_machine_stack(rb_thread_t *th);
|
||||||
|
|
||||||
int rb_autoloading_value(VALUE mod, ID id, VALUE* value);
|
int rb_autoloading_value(VALUE mod, ID id, VALUE* value);
|
||||||
|
|
Loading…
Add table
Reference in a new issue