equal
deleted
inserted
replaced
252 delete list; |
252 delete list; |
253 } |
253 } |
254 |
254 |
255 } |
255 } |
256 |
256 |
|
257 #ifndef SHARK |
257 // Compute the caller frame based on the sender sp of stub_frame and stored frame sizes info. |
258 // Compute the caller frame based on the sender sp of stub_frame and stored frame sizes info. |
258 CodeBlob* cb = stub_frame.cb(); |
259 CodeBlob* cb = stub_frame.cb(); |
259 // Verify we have the right vframeArray |
260 // Verify we have the right vframeArray |
260 assert(cb->frame_size() >= 0, "Unexpected frame size"); |
261 assert(cb->frame_size() >= 0, "Unexpected frame size"); |
261 intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size(); |
262 intptr_t* unpack_sp = stub_frame.sp() + cb->frame_size(); |
268 |
269 |
269 #ifdef ASSERT |
270 #ifdef ASSERT |
270 assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking"); |
271 assert(cb->is_deoptimization_stub() || cb->is_uncommon_trap_stub(), "just checking"); |
271 Events::log("fetch unroll sp " INTPTR_FORMAT, unpack_sp); |
272 Events::log("fetch unroll sp " INTPTR_FORMAT, unpack_sp); |
272 #endif |
273 #endif |
|
274 #else |
|
275 intptr_t* unpack_sp = stub_frame.sender(&dummy_map).unextended_sp(); |
|
276 #endif // !SHARK |
|
277 |
273 // This is a guarantee instead of an assert because if vframe doesn't match |
278 // This is a guarantee instead of an assert because if vframe doesn't match |
274 // we will unpack the wrong deoptimized frame and wind up in strange places |
279 // we will unpack the wrong deoptimized frame and wind up in strange places |
275 // where it will be very difficult to figure out what went wrong. Better |
280 // where it will be very difficult to figure out what went wrong. Better |
276 // to die an early death here than some very obscure death later when the |
281 // to die an early death here than some very obscure death later when the |
277 // trail is cold. |
282 // trail is cold. |
378 // since the frame will "magically" show the original pc before the deopt |
383 // since the frame will "magically" show the original pc before the deopt |
379 // and we'd undo the deopt. |
384 // and we'd undo the deopt. |
380 |
385 |
381 frame_pcs[0] = deopt_sender.raw_pc(); |
386 frame_pcs[0] = deopt_sender.raw_pc(); |
382 |
387 |
|
388 #ifndef SHARK |
383 assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc"); |
389 assert(CodeCache::find_blob_unsafe(frame_pcs[0]) != NULL, "bad pc"); |
|
390 #endif // SHARK |
384 |
391 |
385 UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord, |
392 UnrollBlock* info = new UnrollBlock(array->frame_size() * BytesPerWord, |
386 caller_adjustment * BytesPerWord, |
393 caller_adjustment * BytesPerWord, |
387 number_of_frames, |
394 number_of_frames, |
388 frame_sizes, |
395 frame_sizes, |
1071 thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address); |
1078 thread->popframe_preserve_args(in_ByteSize(bytes_to_save), start_address); |
1072 } |
1079 } |
1073 JRT_END |
1080 JRT_END |
1074 |
1081 |
1075 |
1082 |
1076 #ifdef COMPILER2 |
1083 #if defined(COMPILER2) || defined(SHARK) |
1077 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) { |
1084 void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) { |
1078 // in case of an unresolved klass entry, load the class. |
1085 // in case of an unresolved klass entry, load the class. |
1079 if (constant_pool->tag_at(index).is_unresolved_klass()) { |
1086 if (constant_pool->tag_at(index).is_unresolved_klass()) { |
1080 klassOop tk = constant_pool->klass_at(index, CHECK); |
1087 klassOop tk = constant_pool->klass_at(index, CHECK); |
1081 return; |
1088 return; |
1833 } |
1840 } |
1834 #undef PRINT_STAT_LINE |
1841 #undef PRINT_STAT_LINE |
1835 if (xtty != NULL) xtty->tail("statistics"); |
1842 if (xtty != NULL) xtty->tail("statistics"); |
1836 } |
1843 } |
1837 } |
1844 } |
1838 #else // COMPILER2 |
1845 #else // COMPILER2 || SHARK |
1839 |
1846 |
1840 |
1847 |
1841 // Stubs for C1 only system. |
1848 // Stubs for C1 only system. |
1842 bool Deoptimization::trap_state_is_recompiled(int trap_state) { |
1849 bool Deoptimization::trap_state_is_recompiled(int trap_state) { |
1843 return false; |
1850 return false; |
1869 int trap_state) { |
1876 int trap_state) { |
1870 jio_snprintf(buf, buflen, "#%d", trap_state); |
1877 jio_snprintf(buf, buflen, "#%d", trap_state); |
1871 return buf; |
1878 return buf; |
1872 } |
1879 } |
1873 |
1880 |
1874 #endif // COMPILER2 |
1881 #endif // COMPILER2 || SHARK |