hi, all.
I modify the vmcore, but an assert error happened when the method
"si_goto_previous" in stack_iterator_ia32.cpp is executed. The souce code of
method "si_goto_previous" is as follow. The bold line is the error assert
and it is the second condition " si->cci->get_method()" that makes the whole
express false.
Could anyone tell me why the "_method" field of "si->cci" is NULL and
when it will happen?
void si_goto_previous(StackIterator* si, bool over_popped)
{
ASSERT_NO_INTERPRETER
if (si->cci) {
TRACE2("si", ("si_goto_previous from ip = %p (%s%s)",
(void*)si_get_ip(si),
method_get_name(si->cci->get_method()),
method_get_descriptor(si->cci->get_method())));
*assert(si->cci->get_jit() && si->cci->get_method());
* si->cci->get_jit()->unwind_stack_frame(si->cci->get_method(),
si_get_jit_context(si));
si->c.is_ip_past = TRUE;
} else {
TRACE2("si", ("si_goto_previous from ip = %p (M2N)",
(void*)si_get_ip(si)));
if (!si->m2nfl) return;
si_unwind_from_m2n(si, over_popped);
}
Global_Env *vm_env = VM_Global_State::loader_env;
si->cci = vm_env->vm_methods->find(si_get_ip(si),
si_get_jit_context(si)->is_ip_past);
if (si->cci) {
TRACE2("si", ("si_goto_previous to ip = %p (%s%s)",
(void*)si_get_ip(si),
method_get_name(si->cci->get_method()),
method_get_descriptor(si->cci->get_method())));
} else {
TRACE2("si", ("si_goto_previous to ip = %p (M2N)",
(void*)si_get_ip(si)));
}
}