Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/deoptimization.cpp @ 1814:fd5d4527cdf5
6986270: guarantee(*bcp != Bytecodes::_monitorenter || exec_mode != Deoptimization::Unpack_exception) fails
Summary: Propagate the compiler type of the deopting method to vframeArrayElement::unpack_on_stack()
Reviewed-by: jrose, never
author | iveresov |
---|---|
date | Tue, 21 Sep 2010 13:38:35 -0700 |
parents | d5d065957597 |
children | ce6848d0666d |
comparison
equal
deleted
inserted
replaced
1813:c77e8f982901 | 1814:fd5d4527cdf5 |
---|---|
122 frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect | 122 frame stub_frame = thread->last_frame(); // Makes stack walkable as side effect |
123 RegisterMap map(thread, true); | 123 RegisterMap map(thread, true); |
124 RegisterMap dummy_map(thread, false); | 124 RegisterMap dummy_map(thread, false); |
125 // Now get the deoptee with a valid map | 125 // Now get the deoptee with a valid map |
126 frame deoptee = stub_frame.sender(&map); | 126 frame deoptee = stub_frame.sender(&map); |
127 // Set the deoptee nmethod | |
128 assert(thread->deopt_nmethod() == NULL, "Pending deopt!"); | |
129 thread->set_deopt_nmethod(deoptee.cb()->as_nmethod_or_null()); | |
127 | 130 |
128 // Create a growable array of VFrames where each VFrame represents an inlined | 131 // Create a growable array of VFrames where each VFrame represents an inlined |
129 // Java frame. This storage is allocated with the usual system arena. | 132 // Java frame. This storage is allocated with the usual system arena. |
130 assert(deoptee.is_compiled_frame(), "Wrong frame type"); | 133 assert(deoptee.is_compiled_frame(), "Wrong frame type"); |
131 GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10); | 134 GrowableArray<compiledVFrame*>* chunk = new GrowableArray<compiledVFrame*>(10); |
443 // Deallocate any resource creating in this routine and any ResourceObjs allocated | 446 // Deallocate any resource creating in this routine and any ResourceObjs allocated |
444 // inside the vframeArray (StackValueCollections) | 447 // inside the vframeArray (StackValueCollections) |
445 | 448 |
446 delete thread->deopt_mark(); | 449 delete thread->deopt_mark(); |
447 thread->set_deopt_mark(NULL); | 450 thread->set_deopt_mark(NULL); |
451 thread->set_deopt_nmethod(NULL); | |
448 | 452 |
449 | 453 |
450 if (JvmtiExport::can_pop_frame()) { | 454 if (JvmtiExport::can_pop_frame()) { |
451 #ifndef CC_INTERP | 455 #ifndef CC_INTERP |
452 // Regardless of whether we entered this routine with the pending | 456 // Regardless of whether we entered this routine with the pending |