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