1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

rename rb_execution_context_t::stack(_size) to vm_stack(_size).

* vm_core.h: Ruby processes run with two stacks, a machine stack and a
  VM stack. To make it clear, this fix renames
  rb_execution_context_t::stack(_size) to vm_stack(_size).


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59563 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2017-08-10 04:55:12 +00:00
parent 25213719c2
commit 6881279149
9 changed files with 68 additions and 68 deletions

54
cont.c
View file

@ -87,8 +87,8 @@ typedef struct rb_context_struct {
VALUE value;
VALUE *vm_stack;
#ifdef CAPTURE_JUST_VALID_VM_STACK
size_t vm_stack_slen; /* length of stack (head of th->ec.stack) */
size_t vm_stack_clen; /* length of control frames (tail of th->ec.stack) */
size_t vm_stack_slen; /* length of stack (head of th->ec.svm_tack) */
size_t vm_stack_clen; /* length of control frames (tail of th->ec.vm_stack) */
#endif
struct {
VALUE *stack;
@ -265,7 +265,7 @@ cont_free(void *ptr)
rb_context_t *cont = ptr;
RUBY_FREE_ENTER("cont");
RUBY_FREE_UNLESS_NULL(cont->saved_thread.ec.stack);
RUBY_FREE_UNLESS_NULL(cont->saved_thread.ec.vm_stack);
#if FIBER_USE_NATIVE
if (cont->type == CONTINUATION_CONTEXT) {
/* cont */
@ -324,7 +324,7 @@ cont_memsize(const void *ptr)
#ifdef CAPTURE_JUST_VALID_VM_STACK
size_t n = (cont->vm_stack_slen + cont->vm_stack_clen);
#else
size_t n = cont->saved_thread.ec.stack_size;
size_t n = cont->saved_thread.ec.vm_stack_size;
#endif
size += n * sizeof(*cont->vm_stack);
}
@ -346,10 +346,10 @@ fiber_verify(const rb_fiber_t *fib)
#if VM_CHECK_MODE > 0
switch (fib->status) {
case FIBER_RESUMED:
VM_ASSERT(fib->cont.saved_thread.ec.stack == NULL);
VM_ASSERT(fib->cont.saved_thread.ec.vm_stack == NULL);
break;
case FIBER_SUSPENDED:
VM_ASSERT(fib->cont.saved_thread.ec.stack != NULL);
VM_ASSERT(fib->cont.saved_thread.ec.vm_stack != NULL);
break;
case FIBER_CREATED:
case FIBER_TERMINATED:
@ -531,17 +531,17 @@ cont_capture(volatile int *volatile stat)
contval = cont->self;
#ifdef CAPTURE_JUST_VALID_VM_STACK
cont->vm_stack_slen = ec->cfp->sp - ec->stack;
cont->vm_stack_clen = ec->stack + ec->stack_size - (VALUE*)ec->cfp;
cont->vm_stack_slen = ec->cfp->sp - ec->vm_stack;
cont->vm_stack_clen = ec->vm_stack + ec->vm_stack_size - (VALUE*)ec->cfp;
cont->vm_stack = ALLOC_N(VALUE, cont->vm_stack_slen + cont->vm_stack_clen);
MEMCPY(cont->vm_stack, ec->stack, VALUE, cont->vm_stack_slen);
MEMCPY(cont->vm_stack, ec->vm_stack, VALUE, cont->vm_stack_slen);
MEMCPY(cont->vm_stack + cont->vm_stack_slen,
(VALUE*)ec->cfp, VALUE, cont->vm_stack_clen);
#else
cont->vm_stack = ALLOC_N(VALUE, ec->stack_size);
MEMCPY(cont->vm_stack, ec->stack, VALUE, ec->stack_size);
cont->vm_stack = ALLOC_N(VALUE, ec->vm_stack_size);
MEMCPY(cont->vm_stack, ec->vm_stack, VALUE, ec->vm_stack_size);
#endif
cont->saved_thread.ec.stack = NULL;
cont->saved_thread.ec.vm_stack = NULL;
cont_save_machine_stack(th, cont);
@ -590,16 +590,16 @@ cont_restore_thread(rb_context_t *cont)
th->fiber = sth->fiber;
fib = th->fiber ? th->fiber : th->root_fiber;
if (fib && fib->cont.saved_thread.ec.stack) {
th->ec.stack_size = fib->cont.saved_thread.ec.stack_size;
th->ec.stack = fib->cont.saved_thread.ec.stack;
if (fib && fib->cont.saved_thread.ec.vm_stack) {
th->ec.vm_stack_size = fib->cont.saved_thread.ec.vm_stack_size;
th->ec.vm_stack = fib->cont.saved_thread.ec.vm_stack;
}
#ifdef CAPTURE_JUST_VALID_VM_STACK
MEMCPY(th->ec.stack, cont->vm_stack, VALUE, cont->vm_stack_slen);
MEMCPY(th->ec.stack + sth->ec.stack_size - cont->vm_stack_clen,
MEMCPY(th->ec.vm_stack, cont->vm_stack, VALUE, cont->vm_stack_slen);
MEMCPY(th->ec.vm_stack + sth->ec.vm_stack_size - cont->vm_stack_clen,
cont->vm_stack + cont->vm_stack_slen, VALUE, cont->vm_stack_clen);
#else
MEMCPY(th->ec.stack, cont->vm_stack, VALUE, sth->ec.stack_size);
MEMCPY(th->ec.vm_stack, cont->vm_stack, VALUE, sth->ec.vm_stack_size);
#endif
/* other members of ec */
@ -617,11 +617,11 @@ cont_restore_thread(rb_context_t *cont)
else {
/* fiber */
th->ec = sth->ec;
sth->ec.stack = NULL;
sth->ec.vm_stack = NULL;
th->fiber = (rb_fiber_t*)cont;
}
VM_ASSERT(th->ec.stack != NULL);
VM_ASSERT(th->ec.vm_stack != NULL);
VM_ASSERT(sth->status == THREAD_RUNNABLE);
}
@ -1258,12 +1258,12 @@ fiber_init(VALUE fibval, VALUE proc)
/* initialize cont */
cont->vm_stack = 0;
th->ec.stack = NULL;
th->ec.stack_size = 0;
th->ec.vm_stack = NULL;
th->ec.vm_stack_size = 0;
th->ec.stack_size = cth->vm->default_params.fiber_vm_stack_size / sizeof(VALUE);
th->ec.stack = ALLOC_N(VALUE, th->ec.stack_size);
th->ec.cfp = (void *)(th->ec.stack + th->ec.stack_size);
th->ec.vm_stack_size = cth->vm->default_params.fiber_vm_stack_size / sizeof(VALUE);
th->ec.vm_stack = ALLOC_N(VALUE, th->ec.vm_stack_size);
th->ec.cfp = (void *)(th->ec.vm_stack + th->ec.vm_stack_size);
rb_vm_push_frame(th,
NULL,
@ -1272,7 +1272,7 @@ fiber_init(VALUE fibval, VALUE proc)
VM_BLOCK_HANDLER_NONE,
0, /* specval */
NULL, /* pc */
th->ec.stack, /* sp */
th->ec.vm_stack, /* sp */
0, /* local_size */
0);
@ -1374,7 +1374,7 @@ fiber_current(void)
if (th->fiber == 0) {
rb_fiber_t *fib = root_fiber_alloc(th);
/* Running thread object has stack management responsibility */
fib->cont.saved_thread.ec.stack = NULL;
fib->cont.saved_thread.ec.vm_stack = NULL;
}
return th->fiber;
}

2
eval.c
View file

@ -1127,7 +1127,7 @@ previous_frame(rb_thread_t *th)
{
rb_control_frame_t *prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->ec.cfp);
/* check if prev_cfp can be accessible */
if ((void *)(th->ec.stack + th->ec.stack_size) == (void *)(prev_cfp)) {
if ((void *)(th->ec.vm_stack + th->ec.vm_stack_size) == (void *)(prev_cfp)) {
return 0;
}
return prev_cfp;

View file

@ -694,8 +694,8 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
rb_threadptr_unlock_all_locking_mutexes(th);
rb_check_deadlock(th->vm);
rb_thread_recycle_stack_release(th->ec.stack);
th->ec.stack = NULL;
rb_thread_recycle_stack_release(th->ec.vm_stack);
th->ec.vm_stack = NULL;
}
native_mutex_lock(&th->vm->thread_destruct_lock);
/* make sure vm->running_thread never point me after this point.*/

32
vm.c
View file

@ -88,8 +88,8 @@ rb_vm_frame_block_handler(const rb_control_frame_t *cfp)
static int
VM_CFP_IN_HEAP_P(const rb_thread_t *th, const rb_control_frame_t *cfp)
{
const VALUE *start = th->ec.stack;
const VALUE *end = (VALUE *)th->ec.stack + th->ec.stack_size;
const VALUE *start = th->ec.vm_stack;
const VALUE *end = (VALUE *)th->ec.vm_stack + th->ec.vm_stack_size;
VM_ASSERT(start != NULL);
if (start <= (VALUE *)cfp && (VALUE *)cfp < end) {
@ -103,7 +103,7 @@ VM_CFP_IN_HEAP_P(const rb_thread_t *th, const rb_control_frame_t *cfp)
static int
VM_EP_IN_HEAP_P(const rb_thread_t *th, const VALUE *ep)
{
const VALUE *start = th->ec.stack;
const VALUE *start = th->ec.vm_stack;
const VALUE *end = (VALUE *)th->ec.cfp;
VM_ASSERT(start != NULL);
@ -2370,11 +2370,11 @@ rb_thread_mark(void *ptr)
RUBY_MARK_ENTER("thread");
/* mark VM stack */
if (th->ec.stack) {
VALUE *p = th->ec.stack;
if (th->ec.vm_stack) {
VALUE *p = th->ec.vm_stack;
VALUE *sp = th->ec.cfp->sp;
rb_control_frame_t *cfp = th->ec.cfp;
rb_control_frame_t *limit_cfp = (void *)(th->ec.stack + th->ec.stack_size);
rb_control_frame_t *limit_cfp = (void *)(th->ec.vm_stack + th->ec.vm_stack_size);
rb_gc_mark_values((long)(sp - p), p);
@ -2435,9 +2435,9 @@ thread_free(void *ptr)
rb_thread_t *th = ptr;
RUBY_FREE_ENTER("thread");
if (th->ec.stack != NULL) {
rb_thread_recycle_stack_release(th->ec.stack);
th->ec.stack = NULL;
if (th->ec.vm_stack != NULL) {
rb_thread_recycle_stack_release(th->ec.vm_stack);
th->ec.vm_stack = NULL;
}
if (th->locking_mutex != Qfalse) {
@ -2475,7 +2475,7 @@ thread_memsize(const void *ptr)
size_t size = sizeof(rb_thread_t);
if (!th->root_fiber) {
size += th->ec.stack_size * sizeof(VALUE);
size += th->ec.vm_stack_size * sizeof(VALUE);
}
if (th->ec.local_storage) {
size += st_memsize(th->ec.local_storage);
@ -2525,18 +2525,18 @@ th_init(rb_thread_t *th, VALUE self)
/* altstack of main thread is reallocated in another place */
th->altstack = malloc(rb_sigaltstack_size());
#endif
/* th->ec.stack_size is word number.
/* th->ec.vm_stack_size is word number.
* th->vm->default_params.thread_vm_stack_size is byte size.
*/
th->ec.stack_size = th->vm->default_params.thread_vm_stack_size / sizeof(VALUE);
th->ec.stack = thread_recycle_stack(th->ec.stack_size);
th->ec.vm_stack_size = th->vm->default_params.thread_vm_stack_size / sizeof(VALUE);
th->ec.vm_stack = thread_recycle_stack(th->ec.vm_stack_size);
th->ec.cfp = (void *)(th->ec.stack + th->ec.stack_size);
th->ec.cfp = (void *)(th->ec.vm_stack + th->ec.vm_stack_size);
vm_push_frame(th, 0 /* dummy iseq */, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH | VM_FRAME_FLAG_CFRAME /* dummy frame */,
Qnil /* dummy self */, VM_BLOCK_HANDLER_NONE /* dummy block ptr */,
0 /* dummy cref/me */,
0 /* dummy pc */, th->ec.stack, 0, 0);
0 /* dummy pc */, th->ec.vm_stack, 0, 0);
th->status = THREAD_RUNNABLE;
th->last_status = Qnil;
@ -3102,7 +3102,7 @@ void
rb_vm_set_progname(VALUE filename)
{
rb_thread_t *th = GET_VM()->main_thread;
rb_control_frame_t *cfp = (void *)(th->ec.stack + th->ec.stack_size);
rb_control_frame_t *cfp = (void *)(th->ec.vm_stack + th->ec.vm_stack_size);
--cfp;
rb_iseq_pathobj_set(cfp->iseq, rb_str_dup(filename), rb_iseq_realpath(cfp->iseq));

View file

@ -737,8 +737,8 @@ typedef struct rb_fiber_struct rb_fiber_t;
typedef struct rb_thread_context_struct {
/* execution information */
VALUE *stack; /* must free, must mark */
size_t stack_size; /* size in word (byte size / sizeof(VALUE)) */
VALUE *vm_stack; /* must free, must mark */
size_t vm_stack_size; /* size in word (byte size / sizeof(VALUE)) */
rb_control_frame_t *cfp;
struct rb_vm_tag *tag;
@ -1235,7 +1235,7 @@ VALUE rb_vm_frame_block_handler(const rb_control_frame_t *cfp);
#define RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp) ((cfp)+1)
#define RUBY_VM_NEXT_CONTROL_FRAME(cfp) ((cfp)-1)
#define RUBY_VM_END_CONTROL_FRAME(th) \
((rb_control_frame_t *)((th)->ec.stack + (th)->ec.stack_size))
((rb_control_frame_t *)((th)->ec.vm_stack + (th)->ec.vm_stack_size))
#define RUBY_VM_VALID_CONTROL_FRAME_P(cfp, ecfp) \
((void *)(ecfp) > (void *)(cfp))
#define RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, cfp) \

View file

@ -22,14 +22,14 @@
#define MAX_POSBUF 128
#define VM_CFP_CNT(th, cfp) \
((rb_control_frame_t *)((th)->ec.stack + (th)->ec.stack_size) - \
((rb_control_frame_t *)((th)->ec.vm_stack + (th)->ec.vm_stack_size) - \
(rb_control_frame_t *)(cfp))
static void
control_frame_dump(rb_thread_t *th, rb_control_frame_t *cfp)
{
ptrdiff_t pc = -1;
ptrdiff_t ep = cfp->ep - th->ec.stack;
ptrdiff_t ep = cfp->ep - th->ec.vm_stack;
char ep_in_heap = ' ';
char posbuf[MAX_POSBUF+1];
int line = 0;
@ -39,7 +39,7 @@ control_frame_dump(rb_thread_t *th, rb_control_frame_t *cfp)
const rb_callable_method_entry_t *me;
if (ep < 0 || (size_t)ep > th->ec.stack_size) {
if (ep < 0 || (size_t)ep > th->ec.vm_stack_size) {
ep = (ptrdiff_t)cfp->ep;
ep_in_heap = 'p';
}
@ -112,14 +112,14 @@ control_frame_dump(rb_thread_t *th, rb_control_frame_t *cfp)
}
fprintf(stderr, "c:%04"PRIdPTRDIFF" ",
((rb_control_frame_t *)(th->ec.stack + th->ec.stack_size) - cfp));
((rb_control_frame_t *)(th->ec.vm_stack + th->ec.vm_stack_size) - cfp));
if (pc == -1) {
fprintf(stderr, "p:---- ");
}
else {
fprintf(stderr, "p:%04"PRIdPTRDIFF" ", pc);
}
fprintf(stderr, "s:%04"PRIdPTRDIFF" ", cfp->sp - th->ec.stack);
fprintf(stderr, "s:%04"PRIdPTRDIFF" ", cfp->sp - th->ec.vm_stack);
fprintf(stderr, ep_in_heap == ' ' ? "e:%06"PRIdPTRDIFF" " : "E:%06"PRIxPTRDIFF" ", ep % 10000);
fprintf(stderr, "%-6s", magic);
if (line) {
@ -145,12 +145,12 @@ rb_vmdebug_stack_dump_raw(rb_thread_t *th, rb_control_frame_t *cfp)
VALUE *p, *st, *t;
fprintf(stderr, "-- stack frame ------------\n");
for (p = st = th->ec.stack; p < sp; p++) {
for (p = st = th->ec.vm_stack; p < sp; p++) {
fprintf(stderr, "%04ld (%p): %08"PRIxVALUE, (long)(p - st), p, *p);
t = (VALUE *)*p;
if (th->ec.stack <= t && t < sp) {
fprintf(stderr, " (= %ld)", (long)((VALUE *)GC_GUARDED_PTR_REF(t) - th->ec.stack));
if (th->ec.vm_stack <= t && t < sp) {
fprintf(stderr, " (= %ld)", (long)((VALUE *)GC_GUARDED_PTR_REF(t) - th->ec.vm_stack));
}
if (p == ep)
@ -162,7 +162,7 @@ rb_vmdebug_stack_dump_raw(rb_thread_t *th, rb_control_frame_t *cfp)
fprintf(stderr, "-- Control frame information "
"-----------------------------------------------\n");
while ((void *)cfp < (void *)(th->ec.stack + th->ec.stack_size)) {
while ((void *)cfp < (void *)(th->ec.vm_stack + th->ec.vm_stack_size)) {
control_frame_dump(th, cfp);
cfp++;
}
@ -285,7 +285,7 @@ vm_stack_dump_each(rb_thread_t *th, rb_control_frame_t *cfp)
break;
}
fprintf(stderr, " stack %2d: %8s (%"PRIdPTRDIFF")\n", i, StringValueCStr(rstr),
(ptr - th->ec.stack));
(ptr - th->ec.vm_stack));
}
}
else if (VM_FRAME_FINISHED_P(cfp)) {
@ -307,20 +307,20 @@ rb_vmdebug_debug_print_register(rb_thread_t *th)
{
rb_control_frame_t *cfp = th->ec.cfp;
ptrdiff_t pc = -1;
ptrdiff_t ep = cfp->ep - th->ec.stack;
ptrdiff_t ep = cfp->ep - th->ec.vm_stack;
ptrdiff_t cfpi;
if (VM_FRAME_RUBYFRAME_P(cfp)) {
pc = cfp->pc - cfp->iseq->body->iseq_encoded;
}
if (ep < 0 || (size_t)ep > th->ec.stack_size) {
if (ep < 0 || (size_t)ep > th->ec.vm_stack_size) {
ep = -1;
}
cfpi = ((rb_control_frame_t *)(th->ec.stack + th->ec.stack_size)) - cfp;
cfpi = ((rb_control_frame_t *)(th->ec.vm_stack + th->ec.vm_stack_size)) - cfp;
fprintf(stderr, " [PC] %04"PRIdPTRDIFF", [SP] %04"PRIdPTRDIFF", [EP] %04"PRIdPTRDIFF", [CFP] %04"PRIdPTRDIFF"\n",
pc, (cfp->sp - th->ec.stack), ep, cfpi);
pc, (cfp->sp - th->ec.vm_stack), ep, cfpi);
}
void
@ -342,7 +342,7 @@ rb_vmdebug_debug_print_pre(rb_thread_t *th, rb_control_frame_t *cfp, const VALUE
printf(" ");
}
printf("| ");
if(0)printf("[%03ld] ", (long)(cfp->sp - th->ec.stack));
if(0)printf("[%03ld] ", (long)(cfp->sp - th->ec.vm_stack));
/* printf("%3"PRIdPTRDIFF" ", VM_CFP_CNT(th, cfp)); */
if (pc >= 0) {

View file

@ -157,7 +157,7 @@ default: \
#endif
#define VM_SP_CNT(th, sp) ((sp) - (th)->ec.stack)
#define VM_SP_CNT(th, sp) ((sp) - (th)->ec.vm_stack)
#if OPT_CALL_THREADED_CODE
#define THROW_EXCEPTION(exc) do { \

View file

@ -1516,8 +1516,8 @@ vm_base_ptr(const rb_control_frame_t *cfp)
#if VM_DEBUG_BP_CHECK
if (bp != cfp->bp_check) {
fprintf(stderr, "bp_check: %ld, bp: %ld\n",
(long)(cfp->bp_check - GET_THREAD()->ec.stack),
(long)(bp - GET_THREAD()->ec.stack));
(long)(cfp->bp_check - GET_THREAD()->ec.vm_stack),
(long)(bp - GET_THREAD()->ec.vm_stack));
rb_bug("vm_base_ptr: unreachable");
}
#endif

View file

@ -95,7 +95,7 @@ enum vm_regan_acttype {
#define SET_SV(x) (*GET_SP() = (x))
/* set current stack value as x */
#define GET_SP_COUNT() (VM_REG_SP - th->ec.stack)
#define GET_SP_COUNT() (VM_REG_SP - th->ec.vm_stack)
/* instruction sequence C struct */
#define GET_ISEQ() (GET_CFP()->iseq)