24 |
24 |
25 #ifndef SHARE_VM_RUNTIME_FRAME_HPP |
25 #ifndef SHARE_VM_RUNTIME_FRAME_HPP |
26 #define SHARE_VM_RUNTIME_FRAME_HPP |
26 #define SHARE_VM_RUNTIME_FRAME_HPP |
27 |
27 |
28 #include "asm/assembler.hpp" |
28 #include "asm/assembler.hpp" |
29 #include "oops/methodOop.hpp" |
29 #include "oops/method.hpp" |
30 #include "runtime/basicLock.hpp" |
30 #include "runtime/basicLock.hpp" |
31 #include "runtime/monitorChunk.hpp" |
31 #include "runtime/monitorChunk.hpp" |
32 #include "runtime/registerMap.hpp" |
32 #include "runtime/registerMap.hpp" |
33 #include "utilities/top.hpp" |
33 #include "utilities/top.hpp" |
34 #ifdef COMPILER2 |
34 #ifdef COMPILER2 |
195 jint int_at(int offset) const { return *int_at_addr(offset); } |
195 jint int_at(int offset) const { return *int_at_addr(offset); } |
196 void int_at_put(int offset, jint value) { *int_at_addr(offset) = value; } |
196 void int_at_put(int offset, jint value) { *int_at_addr(offset) = value; } |
197 |
197 |
198 oop* obj_at_addr(int offset) const { return (oop*) addr_at(offset); } |
198 oop* obj_at_addr(int offset) const { return (oop*) addr_at(offset); } |
199 |
199 |
200 oop* adjusted_obj_at_addr(methodOop method, int index) { return obj_at_addr(adjust_offset(method, index)); } |
200 oop* adjusted_obj_at_addr(Method* method, int index) { return obj_at_addr(adjust_offset(method, index)); } |
201 |
201 |
202 private: |
202 private: |
203 jint* int_at_addr(int offset) const { return (jint*) addr_at(offset); } |
203 jint* int_at_addr(int offset) const { return (jint*) addr_at(offset); } |
204 |
204 |
205 public: |
205 public: |
341 // exiting due to an exception. |
341 // exiting due to an exception. |
342 BasicType interpreter_frame_result(oop* oop_result, jvalue* value_result); |
342 BasicType interpreter_frame_result(oop* oop_result, jvalue* value_result); |
343 |
343 |
344 public: |
344 public: |
345 // Method & constant pool cache |
345 // Method & constant pool cache |
346 methodOop interpreter_frame_method() const; |
346 Method* interpreter_frame_method() const; |
347 void interpreter_frame_set_method(methodOop method); |
347 void interpreter_frame_set_method(Method* method); |
348 methodOop* interpreter_frame_method_addr() const; |
348 Method** interpreter_frame_method_addr() const; |
349 constantPoolCacheOop* interpreter_frame_cache_addr() const; |
349 ConstantPoolCache** interpreter_frame_cache_addr() const; |
350 #ifdef PPC |
350 #ifdef PPC |
351 oop* interpreter_frame_mirror_addr() const; |
351 oop* interpreter_frame_mirror_addr() const; |
352 #endif |
352 #endif |
353 |
353 |
354 public: |
354 public: |
420 |
420 |
421 // Iteration of oops |
421 // Iteration of oops |
422 void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache); |
422 void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache); |
423 void oops_entry_do(OopClosure* f, const RegisterMap* map); |
423 void oops_entry_do(OopClosure* f, const RegisterMap* map); |
424 void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map); |
424 void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map); |
425 int adjust_offset(methodOop method, int index); // helper for above fn |
425 int adjust_offset(Method* method, int index); // helper for above fn |
426 public: |
426 public: |
427 // Memory management |
427 // Memory management |
428 void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); } |
428 void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); } |
429 void nmethods_do(CodeBlobClosure* cf); |
429 void nmethods_do(CodeBlobClosure* cf); |
|
430 |
|
431 // RedefineClasses support for finding live interpreted methods on the stack |
|
432 void metadata_do(void f(Metadata*)); |
430 |
433 |
431 void gc_prologue(); |
434 void gc_prologue(); |
432 void gc_epilogue(); |
435 void gc_epilogue(); |
433 void pd_gc_epilog(); |
436 void pd_gc_epilog(); |
434 |
437 |