src/share/vm/prims/forte.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/prims/forte.cpp	Wed Jul 19 09:56:33 2017
--- new/src/share/vm/prims/forte.cpp	Wed Jul 19 09:56:33 2017

*** 78,88 **** --- 78,88 ---- vframeStreamForte(JavaThread *jt, frame fr, bool stop_at_java_call_stub); void forte_next(); }; ! static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm); ! static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, CompiledMethod* nm); static bool is_decipherable_interpreted_frame(JavaThread* thread, frame* fr, Method** method_p, int* bci_p);
*** 142,154 **** --- 142,154 ---- } while (!fill_from_frame()); } // Determine if 'fr' is a decipherable compiled frame. We are already ! // assured that fr is for a java nmethod. ! // assured that fr is for a java compiled method. ! static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm) { ! static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, CompiledMethod* nm) { assert(nm->is_java_method(), "invariant"); if (thread->has_last_Java_frame() && thread->last_Java_pc() == fr->pc()) { // We're stopped at a call into the JVM so look for a PcDesc with // the actual pc reported by the frame.
*** 159,169 **** --- 159,169 ---- pc_desc->scope_decode_offset() != DebugInformationRecorder::serialized_null) { return true; } } ! // We're at some random pc in the nmethod so search for the PcDesc ! // We're at some random pc in the compiled method so search for the PcDesc // whose pc is greater than the current PC. It's done this way // because the extra PcDescs that are recorded for improved debug // info record the end of the region covered by the ScopeDesc // instead of the beginning. PcDesc* pc_desc = nm->pc_desc_near(fr->pc() + 1);
*** 297,307 **** --- 297,307 ---- frame* fr, frame* initial_frame_p, Method** method_p, int* bci_p) { ! // It is possible that for a frame containing an nmethod ! // It is possible that for a frame containing a compiled method // we can capture the method but no bci. If we get no // bci the frame isn't walkable but the method is usable. // Therefore we init the returned Method* to NULL so the // caller can make the distinction.
*** 358,370 **** --- 358,370 ---- // Hopefully we got some data return false; } ! if (candidate.cb()->is_nmethod()) { ! if (candidate.cb()->is_compiled()) { ! nmethod* nm = (nmethod*) candidate.cb(); ! CompiledMethod* nm = candidate.cb()->as_compiled_method(); *method_p = nm->method(); // If the frame is not decipherable, then the value of -1 // for the BCI is used to signal that no BCI is available. // Furthermore, the method returns false in this case.

src/share/vm/prims/forte.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File