< prev index next >

src/share/vm/utilities/vmError.cpp

Print this page

        

@@ -24,10 +24,11 @@
 
 #include <fcntl.h>
 #include "precompiled.hpp"
 #include "code/codeCache.hpp"
 #include "compiler/compileBroker.hpp"
+#include "compiler/disassembler.hpp"
 #include "gc/shared/collectedHeap.hpp"
 #include "prims/whitebox.hpp"
 #include "runtime/arguments.hpp"
 #include "runtime/atomic.inline.hpp"
 #include "runtime/frame.inline.hpp"

@@ -509,15 +510,19 @@
                                   JDK_Version::runtime_name() : "";
      const char* runtime_version = JDK_Version::runtime_version() != NULL ?
                                   JDK_Version::runtime_version() : "";
      st->print_cr("# JRE version: %s (%s) (build %s)", runtime_name, buf, runtime_version);
      // This is the long version with some default settings added
-     st->print_cr("# Java VM: %s (%s, %s%s%s, %s, %s)",
+     st->print_cr("# Java VM: %s (%s, %s%s%s%s%s, %s, %s)",
                    Abstract_VM_Version::vm_name(),
                    Abstract_VM_Version::vm_release(),
                    Abstract_VM_Version::vm_info_string(),
                    TieredCompilation ? ", tiered" : "",
+#if INCLUDE_JVMCI
+                   EnableJVMCI ? ", jvmci" : "",
+                   UseJVMCICompiler ? ", jvmci compiler" : "",
+#endif
                    UseCompressedOops ? ", compressed oops" : "",
                    gc_mode(),
                    Abstract_VM_Version::vm_platform_string()
                  );
 

@@ -702,10 +707,35 @@
      if (_verbose && _context) {
        os::print_context(st, _context);
        st->cr();
      }
 
+  STEP(265, "(printing code blob if possible)")
+
+     if (_verbose && _context) {
+       CodeBlob* cb = CodeCache::find_blob(_pc);
+       if (cb != NULL) {
+         if (Interpreter::contains(_pc)) {
+           // The interpreter CodeBlob is very large so try to print the codelet instead.
+           InterpreterCodelet* codelet = Interpreter::codelet_containing(_pc);
+           if (codelet != NULL) {
+             codelet->print_on(st);
+             Disassembler::decode(codelet->code_begin(), codelet->code_end(), st);
+           }
+         } else {
+           StubCodeDesc* desc = StubCodeDesc::desc_for(_pc);
+           if (desc != NULL) {
+             desc->print_on(st);
+             Disassembler::decode(desc->begin(), desc->end(), st);
+           } else {
+             Disassembler::decode(cb, st);
+             st->cr();
+           }
+         }
+       }
+     }
+
   STEP(270, "(printing VM operation)" )
 
      if (_verbose && _thread && _thread->is_VM_thread()) {
         VMThread* t = (VMThread*)_thread;
         VM_Operation* op = t->vm_operation();
< prev index next >