# HG changeset patch # User vlivanov # Date 1450459406 -10800 # Node ID 9dccb7f9f65653de56dd9d86e38e50df22f990a8 # Parent cba047a086d53c7ac3acfe4710f773f9fc869aa5 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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/tools/hsdis/hsdis.c --- a/hotspot/src/share/tools/hsdis/hsdis.c Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/tools/hsdis/hsdis.c Fri Dec 18 20:23:26 2015 +0300 @@ -125,15 +125,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) { @@ -212,6 +212,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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/c1/c1_Runtime1.cpp --- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -1030,6 +1030,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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/ci/ciEnv.cpp --- a/hotspot/src/share/vm/ci/ciEnv.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/ci/ciEnv.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -1045,9 +1045,6 @@ if (printnmethods || PrintDebugInfo || PrintRelocations || PrintDependencies || PrintExceptionHandlers) { nm->print_nmethod(printnmethods); } - if (directives->PrintAssemblyOption) { - Disassembler::decode(nm); - } nm->set_has_unsafe_access(has_unsafe_access); nm->set_has_wide_vectors(has_wide_vectors); diff -r cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/code/codeBlob.cpp --- a/hotspot/src/share/vm/code/codeBlob.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/code/codeBlob.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -181,6 +181,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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/code/codeBlob.hpp --- a/hotspot/src/share/vm/code/codeBlob.hpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/code/codeBlob.hpp Fri Dec 18 20:23:26 2015 +0300 @@ -196,6 +196,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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/code/nmethod.cpp --- a/hotspot/src/share/vm/code/nmethod.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/code/nmethod.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -2639,6 +2639,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, p2i(pc)); print(); method()->print_codes(); @@ -2960,13 +2961,6 @@ nul_chk_table_size()); } -void nmethod::print_code() { - HandleMark hm; - ResourceMark m; - Disassembler::decode(this); -} - - #ifndef PRODUCT void nmethod::print_scopes() { diff -r cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/code/nmethod.hpp --- a/hotspot/src/share/vm/code/nmethod.hpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/code/nmethod.hpp Fri Dec 18 20:23:26 2015 +0300 @@ -704,7 +704,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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/compiler/disassembler.cpp --- a/hotspot/src/share/vm/compiler/disassembler.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/compiler/disassembler.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -497,6 +497,7 @@ void Disassembler::decode(CodeBlob* cb, outputStream* st) { + ttyLocker ttyl; if (!load_library()) return; if (cb->is_nmethod()) { decode((nmethod*)cb, st); @@ -510,12 +511,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("----------------------------------------------------------------------"); diff -r cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/interpreter/interpreterRuntime.cpp --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -1252,6 +1252,7 @@ } else { // debugging suppport if (PrintSignatureHandlers && (handler != Interpreter::slow_signature_handler())) { + ttyLocker ttyl; tty->cr(); tty->print_cr("argument handler #%d for: %s %s (fingerprint = " UINT64_FORMAT ", %d bytes generated)", _handlers->length(), diff -r cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp --- a/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/jvmci/jvmciCompilerToVM.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -897,10 +897,8 @@ if (!nm->is_alive()) { return NULL; } - Disassembler::decode(nm, &st); - } else { - Disassembler::decode(cb, &st); } + Disassembler::decode(cb, &st); if (st.size() <= 0) { return NULL; } diff -r cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/runtime/sharedRuntime.cpp --- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -726,6 +726,7 @@ #endif if (t == NULL) { + ttyLocker ttyl; tty->print_cr("MISSING EXCEPTION HANDLER for pc " INTPTR_FORMAT " and handler bci %d", p2i(ret_pc), handler_bci); tty->print_cr(" Exception:"); exception->print(); @@ -2759,7 +2760,7 @@ DirectiveSet* directive = DirectivesStack::getDefaultDirective(CompileBroker::compiler(CompLevel_simple)); if (directive->PrintAssemblyOption) { - Disassembler::decode(nm, tty); + nm->print_code(); } DirectivesStack::release(directive); } diff -r cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/runtime/vframe.hpp --- a/hotspot/src/share/vm/runtime/vframe.hpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/runtime/vframe.hpp Fri Dec 18 20:23:26 2015 +0300 @@ -406,6 +406,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 cba047a086d5 -r 9dccb7f9f656 hotspot/src/share/vm/utilities/debug.cpp --- a/hotspot/src/share/vm/utilities/debug.cpp Fri Jan 08 10:14:02 2016 +0100 +++ b/hotspot/src/share/vm/utilities/debug.cpp Fri Dec 18 20:23:26 2015 +0300 @@ -480,12 +480,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); } }