< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java
Print this page
*** 438,454 ****
private Address addressOfInterpreterFrameBCX() {
return addressOfStackSlot(INTERPRETER_FRAME_BCX_OFFSET);
}
! public int getInterpreterFrameBCI() {
// FIXME: this is not atomic with respect to GC and is unsuitable
// for use in a non-debugging, or reflective, system. Need to
// figure out how to express this.
! Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0);
! Method method = (Method)Metadata.instantiateWrapperFor(methodHandle);
Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0);
// If we are in the top level frame then the bcp may have been set for us. If so then let it
// take priority. If we are in a top level interpreter frame, the bcp is live in R13 (on x86_64)
// and not saved in the BCX stack slot.
--- 438,453 ----
private Address addressOfInterpreterFrameBCX() {
return addressOfStackSlot(INTERPRETER_FRAME_BCX_OFFSET);
}
! public Address getInterpreterFrameBCP() {
// FIXME: this is not atomic with respect to GC and is unsuitable
// for use in a non-debugging, or reflective, system. Need to
// figure out how to express this.
! Method method = getInterpreterFrameMethod();
Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0);
// If we are in the top level frame then the bcp may have been set for us. If so then let it
// take priority. If we are in a top level interpreter frame, the bcp is live in R13 (on x86_64)
// and not saved in the BCX stack slot.
*** 459,468 ****
--- 458,473 ----
if (method.getConstMethod().isAddressInMethod(live_bcp)) {
bcp = live_bcp;
}
}
+ return bcp;
+ }
+
+ public int getInterpreterFrameBCI() {
+ Address bcp = getInterpreterFrameBCP();
+ Method method = getInterpreterFrameMethod();
return bcpToBci(bcp, method);
}
public Address addressOfInterpreterFrameMDX() {
return addressOfStackSlot(INTERPRETER_FRAME_MDX_OFFSET);
< prev index next >