hotspot/src/share/vm/aot/aotCompiledMethod.cpp
changeset 43461 3a591205b9bc
parent 43459 80727d67b5e2
child 46289 1904e7ec236e
child 43942 fff6b7b5611f
--- a/hotspot/src/share/vm/aot/aotCompiledMethod.cpp	Wed Jan 18 19:54:18 2017 -0500
+++ b/hotspot/src/share/vm/aot/aotCompiledMethod.cpp	Wed Jan 18 19:37:52 2017 -0800
@@ -71,6 +71,15 @@
 }
 #endif
 
+void AOTCompiledMethod::oops_do(OopClosure* f) {
+  if (_oop != NULL) {
+    f->do_oop(&_oop);
+  }
+#if 0
+  metadata_oops_do(metadata_begin(), metadata_end(), f);
+#endif
+}
+
 bool AOTCompiledMethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) {
   return false;
 }
@@ -152,6 +161,9 @@
       *entry = (Metadata*)meta; // Should be atomic on x64
       return (Metadata*)m;
     }
+    // need to resolve it here..., patching of GOT need to be CAS or atomic operation.
+    // FIXIT: need methods for debuginfo.
+    // return _method;
   }
   ShouldNotReachHere(); return NULL;
 }
@@ -276,19 +288,11 @@
           f(cichk->holder_method());
           f(cichk->holder_klass());
         } else {
-          // Get Klass* or NULL (if value is -1) from GOT cell of virtual call PLT stub.
           Metadata* ic_oop = ic->cached_metadata();
           if (ic_oop != NULL) {
             f(ic_oop);
           }
         }
-      } else if (iter.type() == relocInfo::static_call_type ||
-                 iter.type() == relocInfo::opt_virtual_call_type){
-        // Check Method* in AOT c2i stub for other calls.
-        Metadata* meta = (Metadata*)nativeLoadGot_at(nativePltCall_at(iter.addr())->plt_c2i_stub())->data();
-        if (meta != NULL) {
-          f(meta);
-        }
       }
     }
   }
@@ -328,12 +332,7 @@
     st->print("%4d ", _aot_id);    // print compilation number
     st->print("    aot[%2d]", _heap->dso_id());
     // Stubs have _method == NULL
-    if (_method == NULL) {
-      st->print("   %s", _name);
-    } else {
-      ResourceMark m;
-      st->print("   %s", _method->name_and_sig_as_C_string());
-    }
+    st->print("   %s", (_method == NULL ? _name : _method->name_and_sig_as_C_string()));
     if (Verbose) {
       st->print(" entry at " INTPTR_FORMAT, p2i(_code));
     }