216 |
216 |
217 // Interpreter frames: |
217 // Interpreter frames: |
218 |
218 |
219 private: |
219 private: |
220 intptr_t** interpreter_frame_locals_addr() const; |
220 intptr_t** interpreter_frame_locals_addr() const; |
221 intptr_t* interpreter_frame_bcx_addr() const; |
221 intptr_t* interpreter_frame_bcp_addr() const; |
222 intptr_t* interpreter_frame_mdx_addr() const; |
222 intptr_t* interpreter_frame_mdp_addr() const; |
223 |
223 |
224 public: |
224 public: |
225 // Locals |
225 // Locals |
226 |
226 |
227 // The _at version returns a pointer because the address is used for GC. |
227 // The _at version returns a pointer because the address is used for GC. |
228 intptr_t* interpreter_frame_local_at(int index) const; |
228 intptr_t* interpreter_frame_local_at(int index) const; |
229 |
229 |
230 void interpreter_frame_set_locals(intptr_t* locs); |
230 void interpreter_frame_set_locals(intptr_t* locs); |
231 |
231 |
232 // byte code index/pointer (use these functions for unchecked frame access only!) |
|
233 intptr_t interpreter_frame_bcx() const { return *interpreter_frame_bcx_addr(); } |
|
234 void interpreter_frame_set_bcx(intptr_t bcx); |
|
235 |
|
236 // byte code index |
232 // byte code index |
237 jint interpreter_frame_bci() const; |
233 jint interpreter_frame_bci() const; |
238 void interpreter_frame_set_bci(jint bci); |
|
239 |
234 |
240 // byte code pointer |
235 // byte code pointer |
241 address interpreter_frame_bcp() const; |
236 address interpreter_frame_bcp() const; |
242 void interpreter_frame_set_bcp(address bcp); |
237 void interpreter_frame_set_bcp(address bcp); |
243 |
|
244 // Unchecked access to the method data index/pointer. |
|
245 // Only use this if you know what you are doing. |
|
246 intptr_t interpreter_frame_mdx() const { return *interpreter_frame_mdx_addr(); } |
|
247 void interpreter_frame_set_mdx(intptr_t mdx); |
|
248 |
238 |
249 // method data pointer |
239 // method data pointer |
250 address interpreter_frame_mdp() const; |
240 address interpreter_frame_mdp() const; |
251 void interpreter_frame_set_mdp(address dp); |
241 void interpreter_frame_set_mdp(address dp); |
252 |
242 |
411 void oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cld_f, cf, map, true); } |
401 void oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cld_f, cf, map, true); } |
412 void nmethods_do(CodeBlobClosure* cf); |
402 void nmethods_do(CodeBlobClosure* cf); |
413 |
403 |
414 // RedefineClasses support for finding live interpreted methods on the stack |
404 // RedefineClasses support for finding live interpreted methods on the stack |
415 void metadata_do(void f(Metadata*)); |
405 void metadata_do(void f(Metadata*)); |
416 |
|
417 void gc_prologue(); |
|
418 void gc_epilogue(); |
|
419 void pd_gc_epilog(); |
|
420 |
406 |
421 # ifdef ENABLE_ZAP_DEAD_LOCALS |
407 # ifdef ENABLE_ZAP_DEAD_LOCALS |
422 private: |
408 private: |
423 class CheckValueClosure: public OopClosure { |
409 class CheckValueClosure: public OopClosure { |
424 public: |
410 public: |
452 void zap_dead_deoptimized_locals(JavaThread* thread, const RegisterMap* map); |
438 void zap_dead_deoptimized_locals(JavaThread* thread, const RegisterMap* map); |
453 # endif |
439 # endif |
454 // Verification |
440 // Verification |
455 void verify(const RegisterMap* map); |
441 void verify(const RegisterMap* map); |
456 static bool verify_return_pc(address x); |
442 static bool verify_return_pc(address x); |
457 static bool is_bci(intptr_t bcx); |
|
458 // Usage: |
443 // Usage: |
459 // assert(frame::verify_return_pc(return_address), "must be a return pc"); |
444 // assert(frame::verify_return_pc(return_address), "must be a return pc"); |
460 |
445 |
461 int pd_oop_map_offset_adjustment() const; |
446 int pd_oop_map_offset_adjustment() const; |
462 |
447 |