inline frame::frame(intptr_t* sp, intptr_t* fp) {
  _sp = sp;
  _fp = fp;
  switch (zeroframe()->type()) {
  case ZeroFrame::ENTRY_FRAME:
    _pc = StubRoutines::call_stub_return_pc();
    _cb = NULL;
    break;

  case ZeroFrame::INTERPRETER_FRAME:
    _pc = NULL;
    _cb = NULL;
    break;

  case ZeroFrame::SHARK_FRAME:
    _pc = zero_sharkframe()->pc();
    _cb = CodeCache::find_blob_unsafe(pc());
    break;

  case ZeroFrame::FAKE_STUB_FRAME:
    _pc = NULL;
    _cb = NULL;
    break;

  default:
    ShouldNotReachHere();
  }
  _deopt_state = not_deoptimized;
}
Example #2
0
inline frame::frame(ZeroFrame* zf, intptr_t* sp) {
    _zeroframe = zf;
    _sp = sp;
    switch (zeroframe()->type()) {
    case ZeroFrame::ENTRY_FRAME:
        _pc = StubRoutines::call_stub_return_pc();
        _cb = NULL;
        _deopt_state = not_deoptimized;
        break;

    case ZeroFrame::INTERPRETER_FRAME:
        _pc = NULL;
        _cb = NULL;
        _deopt_state = not_deoptimized;
        break;

    case ZeroFrame::SHARK_FRAME: {
        _pc = zero_sharkframe()->pc();
        _cb = CodeCache::find_blob_unsafe(pc());
        address original_pc = nmethod::get_deopt_original_pc(this);
        if (original_pc != NULL) {
            _pc = original_pc;
            _deopt_state = is_deoptimized;
        } else {
            _deopt_state = not_deoptimized;
        }
        break;
    }
    case ZeroFrame::FAKE_STUB_FRAME:
        _pc = NULL;
        _cb = NULL;
        _deopt_state = not_deoptimized;
        break;

    default:
        ShouldNotReachHere();
    }
}
inline intptr_t* frame::unextended_sp() const {
  if (zeroframe()->is_shark_frame())
    return zero_sharkframe()->unextended_sp();
  else
    return (intptr_t *) -1;
}