equal
deleted
inserted
replaced
337 assert(pc == NULL && cb == NULL || pc != NULL, "can't have a cb and no pc!"); |
337 assert(pc == NULL && cb == NULL || pc != NULL, "can't have a cb and no pc!"); |
338 if (_cb == NULL && _pc != NULL ) { |
338 if (_cb == NULL && _pc != NULL ) { |
339 _cb = CodeCache::find_blob(_pc); |
339 _cb = CodeCache::find_blob(_pc); |
340 } |
340 } |
341 _deopt_state = unknown; |
341 _deopt_state = unknown; |
342 #ifdef ASSERT |
|
343 if ( _cb != NULL && _cb->is_compiled()) { |
|
344 // Without a valid unextended_sp() we can't convert the pc to "original" |
|
345 assert(!((CompiledMethod*)_cb)->is_deopt_pc(_pc), "invariant broken"); |
|
346 } |
|
347 #endif // ASSERT |
|
348 } |
342 } |
349 |
343 |
350 frame::frame(intptr_t* sp, unpatchable_t, address pc, CodeBlob* cb) { |
344 frame::frame(intptr_t* sp, unpatchable_t, address pc, CodeBlob* cb) { |
351 init(sp, pc, cb); |
345 init(sp, pc, cb); |
352 } |
346 } |
514 return frame(sp, younger_sp, frame_is_interpreted); |
508 return frame(sp, younger_sp, frame_is_interpreted); |
515 } |
509 } |
516 |
510 |
517 |
511 |
518 void frame::patch_pc(Thread* thread, address pc) { |
512 void frame::patch_pc(Thread* thread, address pc) { |
|
513 vmassert(_deopt_state != unknown, "frame is unpatchable"); |
519 if(thread == Thread::current()) { |
514 if(thread == Thread::current()) { |
520 StubRoutines::Sparc::flush_callers_register_windows_func()(); |
515 StubRoutines::Sparc::flush_callers_register_windows_func()(); |
521 } |
516 } |
522 if (TracePcPatching) { |
517 if (TracePcPatching) { |
523 // QQQ this assert is invalid (or too strong anyway) sice _pc could |
518 // QQQ this assert is invalid (or too strong anyway) sice _pc could |