diff src/share/vm/runtime/vframe_hp.cpp @ 6948:e522a00b91aa

Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
author Doug Simon <doug.simon@oracle.com>
date Mon, 12 Nov 2012 23:14:12 +0100
parents 957c266d8bc5 da91efe96a93
children b8f261ba79c6
line wrap: on
line diff
--- a/src/share/vm/runtime/vframe_hp.cpp	Mon Nov 12 18:11:17 2012 +0100
+++ b/src/share/vm/runtime/vframe_hp.cpp	Mon Nov 12 23:14:12 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -202,7 +202,7 @@
   // Natives has no scope
   if (scope() == NULL) {
     nmethod* nm = code();
-    methodOop method = nm->method();
+    Method* method = nm->method();
     assert(method->is_native(), "");
     if (!method->is_synchronized()) {
       return new GrowableArray<MonitorInfo*>(0);
@@ -232,8 +232,9 @@
       // Put klass for scalar replaced object.
       ScopeValue* kv = ((ObjectValue *)ov)->klass();
       assert(kv->is_constant_oop(), "klass should be oop constant for scalar replaced object");
-      KlassHandle k(((ConstantOopReadValue*)kv)->value()());
-      result->push(new MonitorInfo(k->as_klassOop(), resolve_monitor_lock(mv->basic_lock()),
+      Handle k(((ConstantOopReadValue*)kv)->value()());
+      assert(java_lang_Class::is_instance(k()), "must be");
+      result->push(new MonitorInfo(k(), resolve_monitor_lock(mv->basic_lock()),
                                    mv->eliminated(), true));
     } else {
       result->push(new MonitorInfo(owner_sv->get_obj()(), resolve_monitor_lock(mv->basic_lock()),
@@ -273,14 +274,14 @@
 }
 
 
-methodOop compiledVFrame::method() const {
+Method* compiledVFrame::method() const {
   if (scope() == NULL) {
     // native nmethods have no scope the method is implied
     nmethod* nm = code();
     assert(nm->is_native_method(), "must be native");
     return nm->method();
   }
-  return scope()->method()();
+  return scope()->method();
 }
 
 
@@ -324,7 +325,7 @@
   }
 }
 
-jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(methodOop method, int bci, intptr_t* id) {
+jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(Method* method, int bci, intptr_t* id) {
   _method = method;
   _bci = bci;
   _id = id;
@@ -359,8 +360,8 @@
 }
 
 void jvmtiDeferredLocalVariableSet::oops_do(OopClosure* f) {
-
-  f->do_oop((oop*) &_method);
+  // The Method* is on the stack so a live activation keeps it alive
+  // either by mirror in interpreter or code in compiled code.
   for ( int i = 0; i < locals()->length(); i++ ) {
     if ( locals()->at(i)->type() == T_OBJECT) {
       f->do_oop(locals()->at(i)->oop_addr());