changeset 9451:2c95a7981541

8071374: -XX:+PrintAssembly -XX:+PrintSignatureHandlers crash fastdebug VM with assert(limit == __null || limit <= nm->code_end()) in RelocIterator::initialize Reviewed-by: kvn, iklam, shade
author vlivanov
date Fri, 18 Dec 2015 20:23:26 +0300
parents 0356ee98c814
children c42cb799628c
files src/share/tools/hsdis/hsdis.c src/share/vm/c1/c1_Runtime1.cpp src/share/vm/code/codeBlob.cpp src/share/vm/code/codeBlob.hpp src/share/vm/code/nmethod.cpp src/share/vm/code/nmethod.hpp src/share/vm/compiler/disassembler.cpp src/share/vm/interpreter/interpreterRuntime.cpp src/share/vm/runtime/sharedRuntime.cpp src/share/vm/runtime/vframe.hpp src/share/vm/utilities/debug.cpp
diffstat 11 files changed, 31 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/tools/hsdis/hsdis.c	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/tools/hsdis/hsdis.c	Fri Dec 18 20:23:26 2015 +0300
@@ -150,15 +150,15 @@
                     event_callback_t  event_callback_arg,  void* event_stream_arg,
                     printf_callback_t printf_callback_arg, void* printf_stream_arg,
                     const char* options) {
-  decode_instructions_virtual((uintptr_t)start_pv,
-                             (uintptr_t)end_pv,
-                             (unsigned char*)start_pv,
-                             (uintptr_t)end_pv - (uintptr_t)start_pv,
-                             event_callback_arg,
-                             event_stream_arg,
-                             printf_callback_arg,
-                             printf_stream_arg,
-                             options, false);
+  return decode_instructions_virtual((uintptr_t)start_pv,
+                                     (uintptr_t)end_pv,
+                                     (unsigned char*)start_pv,
+                                     (uintptr_t)end_pv - (uintptr_t)start_pv,
+                                     event_callback_arg,
+                                     event_stream_arg,
+                                     printf_callback_arg,
+                                     printf_stream_arg,
+                                     options, false);
 }
 
 static void* decode(struct hsdis_app_data* app_data, const char* options) {
@@ -237,6 +237,7 @@
   case dis_condjsr:     type = "condjsr";    break;
   case dis_dref:        type = "dref";       break;
   case dis_dref2:       type = "dref2";      break;
+  case dis_noninsn:     type = "noninsn";    break;
   }
 
   strcpy(buf, close);
--- a/src/share/vm/c1/c1_Runtime1.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/c1/c1_Runtime1.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -983,6 +983,7 @@
         address copy_buff = stub_location - *byte_skip - *byte_count;
         address being_initialized_entry = stub_location - *being_initialized_entry_offset;
         if (TracePatching) {
+          ttyLocker ttyl;
           tty->print_cr(" Patching %s at bci %d at address " INTPTR_FORMAT "  (%s)", Bytecodes::name(code), bci,
                         p2i(instr_pc), (stub_id == Runtime1::access_field_patching_id) ? "field" : "klass");
           nmethod* caller_code = CodeCache::find_nmethod(caller_frame.pc());
--- a/src/share/vm/code/codeBlob.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/code/codeBlob.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -198,6 +198,11 @@
   return oop_maps()->find_map_at_offset((intptr_t) return_address - (intptr_t) code_begin());
 }
 
+void CodeBlob::print_code() {
+  HandleMark hm;
+  ResourceMark m;
+  Disassembler::decode(this, tty);
+}
 
 //----------------------------------------------------------------------------------------------------
 // Implementation of BufferBlob
--- a/src/share/vm/code/codeBlob.hpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/code/codeBlob.hpp	Fri Dec 18 20:23:26 2015 +0300
@@ -190,6 +190,7 @@
   void print() const                             { print_on(tty); }
   virtual void print_on(outputStream* st) const;
   virtual void print_value_on(outputStream* st) const;
+  void print_code();
 
   // Deal with Disassembler, VTune, Forte, JvmtiExport, MemoryService.
   static void trace_new_stub(CodeBlob* blob, const char* name1, const char* name2 = "");
--- a/src/share/vm/code/nmethod.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/code/nmethod.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -2612,6 +2612,7 @@
     ResourceMark rm(thread);
     CodeBlob* cb = CodeCache::find_blob(pc);
     assert(cb != NULL && cb == this, "");
+    ttyLocker ttyl;
     tty->print_cr("implicit exception happened at " INTPTR_FORMAT, pc);
     print();
     method()->print_codes();
@@ -2933,13 +2934,6 @@
                                               nul_chk_table_size());
 }
 
-void nmethod::print_code() {
-  HandleMark hm;
-  ResourceMark m;
-  Disassembler::decode(this);
-}
-
-
 #ifndef PRODUCT
 
 void nmethod::print_scopes() {
--- a/src/share/vm/code/nmethod.hpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/code/nmethod.hpp	Fri Dec 18 20:23:26 2015 +0300
@@ -695,7 +695,6 @@
 
   // printing support
   void print()                          const;
-  void print_code();
   void print_relocations()                        PRODUCT_RETURN;
   void print_pcs()                                PRODUCT_RETURN;
   void print_scopes()                             PRODUCT_RETURN;
--- a/src/share/vm/compiler/disassembler.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/compiler/disassembler.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -504,6 +504,7 @@
 
 
 void Disassembler::decode(CodeBlob* cb, outputStream* st) {
+  ttyLocker ttyl;
   if (!load_library())  return;
   decode_env env(cb, st);
   env.output()->print_cr("Decoding CodeBlob " PTR_FORMAT, cb);
@@ -511,12 +512,14 @@
 }
 
 void Disassembler::decode(address start, address end, outputStream* st, CodeStrings c) {
+  ttyLocker ttyl;
   if (!load_library())  return;
   decode_env env(CodeCache::find_blob_unsafe(start), st, c);
   env.decode_instructions(start, end);
 }
 
 void Disassembler::decode(nmethod* nm, outputStream* st) {
+  ttyLocker ttyl;
   if (!load_library())  return;
   decode_env env(nm, st);
   env.output()->print_cr("Decoding compiled method " PTR_FORMAT ":", nm);
--- a/src/share/vm/interpreter/interpreterRuntime.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/interpreter/interpreterRuntime.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -1206,6 +1206,7 @@
         } else {
           // debugging suppport
           if (PrintSignatureHandlers) {
+            ttyLocker ttyl;
             tty->cr();
             tty->print_cr("argument handler #%d for: %s %s (fingerprint = " UINT64_FORMAT ", %d bytes generated)",
                           _handlers->length(),
--- a/src/share/vm/runtime/sharedRuntime.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/runtime/sharedRuntime.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -716,6 +716,7 @@
 #endif
 
   if (t == NULL) {
+    ttyLocker ttyl;
     tty->print_cr("MISSING EXCEPTION HANDLER for pc " INTPTR_FORMAT " and handler bci %d", ret_pc, handler_bci);
     tty->print_cr("   Exception:");
     exception->print();
--- a/src/share/vm/runtime/vframe.hpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/runtime/vframe.hpp	Fri Dec 18 20:23:26 2015 +0300
@@ -397,6 +397,7 @@
     // as it were a native compiled frame (no Java-level assumptions).
 #ifdef ASSERT
     if (WizardMode) {
+      ttyLocker ttyl;
       tty->print_cr("Error in fill_from_frame: pc_desc for "
                     INTPTR_FORMAT " not found or invalid at %d",
                     p2i(_frame.pc()), decode_offset);
--- a/src/share/vm/utilities/debug.cpp	Wed Sep 21 08:14:46 2016 +0200
+++ b/src/share/vm/utilities/debug.cpp	Fri Dec 18 20:23:26 2015 +0300
@@ -447,12 +447,13 @@
 extern "C" void disnm(intptr_t p) {
   Command c("disnm");
   CodeBlob* cb = CodeCache::find_blob((address) p);
-  nmethod* nm = cb->as_nmethod_or_null();
-  if (nm) {
-    nm->print();
-    Disassembler::decode(nm);
-  } else {
-    cb->print();
+  if (cb != NULL) {
+    nmethod* nm = cb->as_nmethod_or_null();
+    if (nm != NULL) {
+      nm->print();
+    } else {
+      cb->print();
+    }
     Disassembler::decode(cb);
   }
 }