hotspot/src/share/vm/aot/aotCompiledMethod.cpp
changeset 43461 3a591205b9bc
parent 43459 80727d67b5e2
child 46289 1904e7ec236e
child 43942 fff6b7b5611f
equal deleted inserted replaced
43460:591b3e506e67 43461:3a591205b9bc
    69     }
    69     }
    70   }
    70   }
    71 }
    71 }
    72 #endif
    72 #endif
    73 
    73 
       
    74 void AOTCompiledMethod::oops_do(OopClosure* f) {
       
    75   if (_oop != NULL) {
       
    76     f->do_oop(&_oop);
       
    77   }
       
    78 #if 0
       
    79   metadata_oops_do(metadata_begin(), metadata_end(), f);
       
    80 #endif
       
    81 }
       
    82 
    74 bool AOTCompiledMethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) {
    83 bool AOTCompiledMethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) {
    75   return false;
    84   return false;
    76 }
    85 }
    77 
    86 
    78 oop AOTCompiledMethod::oop_at(int index) const {
    87 oop AOTCompiledMethod::oop_at(int index) const {
   150       }
   159       }
   151       meta = ((intptr_t)m) | 1;
   160       meta = ((intptr_t)m) | 1;
   152       *entry = (Metadata*)meta; // Should be atomic on x64
   161       *entry = (Metadata*)meta; // Should be atomic on x64
   153       return (Metadata*)m;
   162       return (Metadata*)m;
   154     }
   163     }
       
   164     // need to resolve it here..., patching of GOT need to be CAS or atomic operation.
       
   165     // FIXIT: need methods for debuginfo.
       
   166     // return _method;
   155   }
   167   }
   156   ShouldNotReachHere(); return NULL;
   168   ShouldNotReachHere(); return NULL;
   157 }
   169 }
   158 
   170 
   159 bool AOTCompiledMethod::make_not_entrant_helper(int new_state) {
   171 bool AOTCompiledMethod::make_not_entrant_helper(int new_state) {
   274         if (ic->is_icholder_call()) {
   286         if (ic->is_icholder_call()) {
   275           CompiledICHolder* cichk = ic->cached_icholder();
   287           CompiledICHolder* cichk = ic->cached_icholder();
   276           f(cichk->holder_method());
   288           f(cichk->holder_method());
   277           f(cichk->holder_klass());
   289           f(cichk->holder_klass());
   278         } else {
   290         } else {
   279           // Get Klass* or NULL (if value is -1) from GOT cell of virtual call PLT stub.
       
   280           Metadata* ic_oop = ic->cached_metadata();
   291           Metadata* ic_oop = ic->cached_metadata();
   281           if (ic_oop != NULL) {
   292           if (ic_oop != NULL) {
   282             f(ic_oop);
   293             f(ic_oop);
   283           }
   294           }
   284         }
       
   285       } else if (iter.type() == relocInfo::static_call_type ||
       
   286                  iter.type() == relocInfo::opt_virtual_call_type){
       
   287         // Check Method* in AOT c2i stub for other calls.
       
   288         Metadata* meta = (Metadata*)nativeLoadGot_at(nativePltCall_at(iter.addr())->plt_c2i_stub())->data();
       
   289         if (meta != NULL) {
       
   290           f(meta);
       
   291         }
   295         }
   292       }
   296       }
   293     }
   297     }
   294   }
   298   }
   295 
   299 
   326     ttyLocker ttyl;
   330     ttyLocker ttyl;
   327     st->print("%7d ", (int) st->time_stamp().milliseconds());
   331     st->print("%7d ", (int) st->time_stamp().milliseconds());
   328     st->print("%4d ", _aot_id);    // print compilation number
   332     st->print("%4d ", _aot_id);    // print compilation number
   329     st->print("    aot[%2d]", _heap->dso_id());
   333     st->print("    aot[%2d]", _heap->dso_id());
   330     // Stubs have _method == NULL
   334     // Stubs have _method == NULL
   331     if (_method == NULL) {
   335     st->print("   %s", (_method == NULL ? _name : _method->name_and_sig_as_C_string()));
   332       st->print("   %s", _name);
       
   333     } else {
       
   334       ResourceMark m;
       
   335       st->print("   %s", _method->name_and_sig_as_C_string());
       
   336     }
       
   337     if (Verbose) {
   336     if (Verbose) {
   338       st->print(" entry at " INTPTR_FORMAT, p2i(_code));
   337       st->print(" entry at " INTPTR_FORMAT, p2i(_code));
   339     }
   338     }
   340     if (msg != NULL) {
   339     if (msg != NULL) {
   341       st->print("   %s", msg);
   340       st->print("   %s", msg);