< prev index next >
src/share/vm/runtime/frame.cpp
Print this page
*** 965,974 ****
--- 965,975 ----
}
virtual void handle_oop_offset() {
// Extract low order register number from register array.
// In LP64-land, the high-order bits are valid but unhelpful.
+ assert(_offset < _arg_size, "out of bounds");
VMReg reg = _regs[_offset].first();
oop *loc = _fr.oopmapreg_to_location(reg, _reg_map);
_f->do_oop(loc);
}
*** 981,995 ****
_offset = 0;
_has_receiver = has_receiver;
_has_appendix = has_appendix;
_fr = fr;
_reg_map = (RegisterMap*)reg_map;
! _arg_size = ArgumentSizeComputer(signature).size() + (has_receiver ? 1 : 0) + (has_appendix ? 1 : 0);
!
! int arg_size;
! _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, has_appendix, &arg_size);
! assert(arg_size == _arg_size, "wrong arg size");
}
void oops_do() {
if (_has_receiver) {
handle_oop_offset();
--- 982,992 ----
_offset = 0;
_has_receiver = has_receiver;
_has_appendix = has_appendix;
_fr = fr;
_reg_map = (RegisterMap*)reg_map;
! _regs = SharedRuntime::find_callee_arguments(signature, has_receiver, has_appendix, &_arg_size);
}
void oops_do() {
if (_has_receiver) {
handle_oop_offset();
< prev index next >