8040085: dtrace/jsdt tests crash on solaris. found an unadvertised bad scavengable oop in the code cache
authoranoll
Mon, 28 Apr 2014 12:39:12 +0200
changeset 24316 29ac69b2f1cc
parent 24089 4e49589fbfa8
child 24317 b693c6344b16
8040085: dtrace/jsdt tests crash on solaris. found an unadvertised bad scavengable oop in the code cache Summary: Add CodeCache::add_scavenge_root_nmethod(this) to the dtrace-constructor of nmethod Reviewed-by: roland, iveresov
hotspot/src/share/vm/code/nmethod.cpp
hotspot/src/share/vm/runtime/sharedRuntime.cpp
--- a/hotspot/src/share/vm/code/nmethod.cpp	Fri Apr 18 14:30:58 2014 -0400
+++ b/hotspot/src/share/vm/code/nmethod.cpp	Mon Apr 28 12:39:12 2014 +0200
@@ -750,7 +750,11 @@
     _hotness_counter         = NMethodSweeper::hotness_counter_reset_val();
 
     code_buffer->copy_values_to(this);
-    debug_only(verify_scavenge_root_oops());
+    if (ScavengeRootsInCode && detect_scavenge_root_oops()) {
+      CodeCache::add_scavenge_root_nmethod(this);
+      Universe::heap()->register_nmethod(this);
+    }
+    DEBUG_ONLY(verify_scavenge_root_oops();)
     CodeCache::commit(this);
   }
 
--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Fri Apr 18 14:30:58 2014 -0400
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp	Mon Apr 28 12:39:12 2014 +0200
@@ -2658,19 +2658,20 @@
 JRT_END
 
 #ifdef HAVE_DTRACE_H
-// Create a dtrace nmethod for this method.  The wrapper converts the
-// java compiled calling convention to the native convention, makes a dummy call
-// (actually nops for the size of the call instruction, which become a trap if
-// probe is enabled). The returns to the caller. Since this all looks like a
-// leaf no thread transition is needed.
-
+/**
+ * Create a dtrace nmethod for this method.  The wrapper converts the
+ * Java-compiled calling convention to the native convention, makes a dummy call
+ * (actually nops for the size of the call instruction, which become a trap if
+ * probe is enabled), and finally returns to the caller. Since this all looks like a
+ * leaf, no thread transition is needed.
+ */
 nmethod *AdapterHandlerLibrary::create_dtrace_nmethod(methodHandle method) {
   ResourceMark rm;
   nmethod* nm = NULL;
 
   if (PrintCompilation) {
     ttyLocker ttyl;
-    tty->print("---   n%s  ");
+    tty->print("---   n  ");
     method->print_short_name(tty);
     if (method->is_static()) {
       tty->print(" (static)");