Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/frame.hpp @ 7179:d0aa87f04bd5
8003720: NPG: Method in interpreter stack frame can be deallocated
Summary: Pass down a closure during root scanning to keep the class of the method alive.
Reviewed-by: coleenp, jcoomes
author | stefank |
---|---|
date | Tue, 27 Nov 2012 10:13:20 +0100 |
parents | da91efe96a93 |
children | d2f8c38e543d |
comparison
equal
deleted
inserted
replaced
7178:19c1bd641922 | 7179:d0aa87f04bd5 |
---|---|
411 // Conversion from an VMReg to physical stack location | 411 // Conversion from an VMReg to physical stack location |
412 oop* oopmapreg_to_location(VMReg reg, const RegisterMap* regmap) const; | 412 oop* oopmapreg_to_location(VMReg reg, const RegisterMap* regmap) const; |
413 | 413 |
414 // Oops-do's | 414 // Oops-do's |
415 void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f); | 415 void oops_compiled_arguments_do(Symbol* signature, bool has_receiver, const RegisterMap* reg_map, OopClosure* f); |
416 void oops_interpreted_do(OopClosure* f, const RegisterMap* map, bool query_oop_map_cache = true); | 416 void oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, const RegisterMap* map, bool query_oop_map_cache = true); |
417 | 417 |
418 private: | 418 private: |
419 void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f); | 419 void oops_interpreted_arguments_do(Symbol* signature, bool has_receiver, OopClosure* f); |
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, CLDToOopClosure* cld_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(Method* 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, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cld_f, cf, map, true); } |
429 void nmethods_do(CodeBlobClosure* cf); | 429 void nmethods_do(CodeBlobClosure* cf); |
430 | 430 |
431 // RedefineClasses support for finding live interpreted methods on the stack | 431 // RedefineClasses support for finding live interpreted methods on the stack |
432 void metadata_do(void f(Metadata*)); | 432 void metadata_do(void f(Metadata*)); |
433 | 433 |