Mercurial > hg > truffle
diff src/share/vm/oops/methodKlass.cpp @ 5150:fdd9dd4508fa
some GC fixes
avoid non-Java bytecodes in code() array passed to Graal
author | Christian Haeubl <christian.haeubl@oracle.com> |
---|---|
date | Thu, 22 Mar 2012 18:54:02 -0700 |
parents | 18a5539bf19b |
children | af59b4dfc9e4 |
line wrap: on
line diff
--- a/src/share/vm/oops/methodKlass.cpp Wed Mar 21 16:33:58 2012 -0700 +++ b/src/share/vm/oops/methodKlass.cpp Thu Mar 22 18:54:02 2012 -0700 @@ -38,6 +38,10 @@ #include "oops/oop.inline2.hpp" #include "oops/symbol.hpp" #include "runtime/handles.inline.hpp" +#ifndef SERIALGC +#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" +#include "oops/oop.pcgc.inline.hpp" +#endif klassOop methodKlass::create_klass(TRAPS) { methodKlass o; @@ -134,9 +138,7 @@ #ifdef GRAAL MarkSweep::mark_and_push(m->adr_graal_mirror()); #endif - if (m->method_data() != NULL) { - MarkSweep::mark_and_push(m->adr_method_data()); - } + MarkSweep::mark_and_push(m->adr_method_data()); } #ifndef SERIALGC @@ -151,11 +153,7 @@ #ifdef GRAAL PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror()); #endif -#ifdef COMPILER2 - if (m->method_data() != NULL) { - PSParallelCompact::mark_and_push(cm, m->adr_method_data()); - } -#endif + PSParallelCompact::mark_and_push(cm, m->adr_method_data()); } #endif // SERIALGC @@ -172,9 +170,8 @@ #ifdef GRAAL blk->do_oop(m->adr_graal_mirror()); #endif - if (m->method_data() != NULL) { - blk->do_oop(m->adr_method_data()); - } + blk->do_oop(m->adr_method_data()); + return size; } @@ -196,10 +193,9 @@ adr = m->adr_graal_mirror(); if (mr.contains(adr)) blk->do_oop(adr); #endif - if (m->method_data() != NULL) { - adr = m->adr_method_data(); - if (mr.contains(adr)) blk->do_oop(adr); - } + adr = m->adr_method_data(); + if (mr.contains(adr)) blk->do_oop(adr); + return size; } @@ -217,15 +213,21 @@ #ifdef GRAAL MarkSweep::adjust_pointer(m->adr_graal_mirror()); #endif - if (m->method_data() != NULL) { - MarkSweep::adjust_pointer(m->adr_method_data()); - } + MarkSweep::adjust_pointer(m->adr_method_data()); + return size; } #ifndef SERIALGC void methodKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { assert(obj->is_method(), "should be method"); + methodOop m = methodOop(obj); +#ifdef GRAAL + oop* adr = m->adr_graal_mirror(); + if(PSScavenge::should_scavenge(adr)) { + pm->claim_or_forward_depth(adr); + } +#endif } int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { @@ -236,11 +238,7 @@ #ifdef GRAAL PSParallelCompact::adjust_pointer(m->adr_graal_mirror()); #endif -#ifdef COMPILER2 - if (m->method_data() != NULL) { - PSParallelCompact::adjust_pointer(m->adr_method_data()); - } -#endif // COMPILER2 + PSParallelCompact::adjust_pointer(m->adr_method_data()); return m->object_size(); } #endif // SERIALGC