# HG changeset patch # User vlivanov # Date 1450459406 -10800 # Node ID 2c95a7981541c21cd774e0cb545c9fd7d42b0704 # Parent 0356ee98c814cd7c7da5f74509ad799490a28a03 8071374: -XX:+PrintAssembly -XX:+PrintSignatureHandlers crash fastdebug VM with assert(limit == __null || limit <= nm->code_end()) in RelocIterator::initialize Reviewed-by: kvn, iklam, shade diff -r 0356ee98c814 -r 2c95a7981541 src/share/tools/hsdis/hsdis.c --- 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); diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/c1/c1_Runtime1.cpp --- 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()); diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/code/codeBlob.cpp --- 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 diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/code/codeBlob.hpp --- 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 = ""); diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/code/nmethod.cpp --- 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() { diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/code/nmethod.hpp --- 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; diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/compiler/disassembler.cpp --- 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); diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/interpreter/interpreterRuntime.cpp --- 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(), diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/runtime/sharedRuntime.cpp --- 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(); diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/runtime/vframe.hpp --- 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); diff -r 0356ee98c814 -r 2c95a7981541 src/share/vm/utilities/debug.cpp --- 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); } }