Additional top-level classes in compilation unit: InterpreterFrameClosure, ArgumentOopFinder.
A frame represents a physical stack frame (an activation). Frames can be C or Java frames, and the Java frames can be interpreted or compiled. In contrast, vframes represent source-level activations, so that one physical frame can correspond to multiple source level frames because of inlining.
NOTE that this is not a VMObject and does not wrap an Address -- this is an actual port of the VM's Frame code to Java.
NOTE also that this is incomplete -- just trying to get reading of interpreted frames working for now, so all non-core and setter methods are removed for now. (FIXME)
| Modifier and Type | Class and Description |
|---|---|
| private static class |
| Modifier and Type | Field and Description |
|---|---|
| private static long | ConstMethodSize
Size of ConstMethod for computing BCI from BCP (FIXME: hack) |
| protected boolean | |
| protected Address | pc
Program counter (the next instruction after the call) |
| private static int | |
| protected Address | raw_sp
A raw stack pointer. |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public abstract Address | |
| public abstract Address | addressOfInterpreterFrameExpressionStack()
Find receiver for an invoke when arguments are just pushed on stack (i.e., callee stack-frame is not setup) |
| public Address | |
| public Address | |
| public abstract Address | |
| public abstract Address | |
| public abstract Address | |
| public abstract Address | |
| protected abstract Address | |
| protected abstract Address | |
| public Address | |
| protected void | |
| protected int | |
| protected int | |
| public boolean | |
| public CodeBlob | |
| public abstract Object | |
| public boolean | |
| public abstract boolean | |
| public abstract long | |
| public abstract JavaCallWrapper | |
| public abstract Address | |
| public abstract Address | |
| public int | |
| public abstract int | |
| public ConstantPoolCache | |
| public abstract int | |
| public int | |
| public Method | |
| public abstract Address | |
| public abstract Address | |
| public OopHandle | |
| public Address | |
| public OopHandle | |
| public OopHandle | |
| public abstract Address | |
| public abstract Address | |
| public abstract String | getSignalNameDbg()
If this is a signal handler frame (again, on a platform with a notion of signals), get the name of the signal. |
| public abstract int | getSignalNumberDbg()
If this is a signal handler frame (again, on a platform with a notion of signals), get the signal number. |
| public abstract Address | |
| public abstract Address | getUnextendedSP()
The frame's original SP, before any extension by an interpreted callee; used for packing debug info into vframeArray objects and vframeArray lookup. |
| protected abstract boolean | |
| private static synchronized void | |
| public abstract BasicObjectLock | |
| public abstract BasicObjectLock | |
| public abstract int | |
| public void | |
| public boolean | |
| public boolean | |
| public boolean | |
| public boolean | |
| public boolean | |
| public boolean | |
| public abstract boolean | |
| public boolean | |
| public boolean | |
| public boolean | |
| public abstract boolean | isSignalHandlerFrameDbg()
This is an addition for debugging purposes on platforms which have the notion of signals. |
| public BasicObjectLock | |
| public Address | oopMapRegToLocation(VMReg reg, RegisterMap regMap)
Conversion from an VMReg::Name to physical stack location |
| private void | |
| public void | |
| private void | |
| public void | |
| private void | |
| public static int | |
| public BasicObjectLock | |
| public void | |
| public void | |
| public void | |
| public void | |
| public Frame | |
| public abstract Frame | |
| public Frame | |
| public void | |
| public abstract void | |
| public boolean |
| ConstMethodSize | back to summary |
|---|---|
| private static long ConstMethodSize Size of ConstMethod for computing BCI from BCP (FIXME: hack) | |
| deoptimized | back to summary |
|---|---|
| protected boolean deoptimized | |
| pc | back to summary |
|---|---|
| protected Address pc Program counter (the next instruction after the call) | |
| pcReturnOffset | back to summary |
|---|---|
| private static int pcReturnOffset | |
| raw_sp | back to summary |
|---|---|
| protected Address raw_sp A raw stack pointer. The accessor getSP() will return a real (usable) stack pointer (e.g. from Thread::last_Java_sp) | |
| Frame | back to summary |
|---|---|
| public Frame() | |
| addressOfInterpreterFrameCPCache | back to summary |
|---|---|
| public abstract Address addressOfInterpreterFrameCPCache() Constant pool cache | |
| addressOfInterpreterFrameExpressionStack | back to summary |
|---|---|
| public abstract Address addressOfInterpreterFrameExpressionStack() Find receiver for an invoke when arguments are just pushed on stack (i.e., callee stack-frame is not setup) | |
| addressOfInterpreterFrameExpressionStackSlot | back to summary |
|---|---|
| public Address addressOfInterpreterFrameExpressionStackSlot(int slot) | |
| addressOfInterpreterFrameLocal | back to summary |
|---|---|
| public Address addressOfInterpreterFrameLocal(int slot) | |
| addressOfInterpreterFrameLocals | back to summary |
|---|---|
| public abstract Address addressOfInterpreterFrameLocals() | |
| addressOfInterpreterFrameMethod | back to summary |
|---|---|
| public abstract Address addressOfInterpreterFrameMethod() Current method | |
| addressOfInterpreterFrameTOS | back to summary |
|---|---|
| public abstract Address addressOfInterpreterFrameTOS() Top of expression stack | |
| addressOfInterpreterFrameTOSAt | back to summary |
|---|---|
| public abstract Address addressOfInterpreterFrameTOSAt(int slot) Expression stack from top down | |
| addressOfSavedOopResult | back to summary |
|---|---|
| protected abstract Address addressOfSavedOopResult() | |
| addressOfSavedReceiver | back to summary |
|---|---|
| protected abstract Address addressOfSavedReceiver() | |
| addressOfStackSlot | back to summary |
|---|---|
| public Address addressOfStackSlot(int slot) Returns the address of the requested "slot" on the stack. Slots are as wide as addresses, so are 32 bits wide on a 32-bit machine and 64 bits wide on a 64-bit machine. | |
| adjustForDeopt | back to summary |
|---|---|
| protected void adjustForDeopt() | |
| bcpToBci | back to summary |
|---|---|
| protected int bcpToBci(Address bcp, ConstMethod cm) | |
| bcpToBci | back to summary |
|---|---|
| protected int bcpToBci(Address bcp, Method m) | |
| canBeDeoptimized | back to summary |
|---|---|
| public boolean canBeDeoptimized() tells whether this frame can be deoptimized | |
| cb | back to summary |
|---|---|
| public CodeBlob cb() | |
| clone | back to summary |
|---|---|
| public abstract Object clone() Overrides java. Doc from java. Creates and returns a copy of this object. The precise meaning
of "copy" may depend on the class of the object. The general
intent is that, for any object will be true, and that the expression:x.clone() != x will bex.clone().getClass() == x.getClass() true, but these are not absolute requirements.
While it is typically the case that:
will bex.clone().equals(x) true, this is not an absolute requirement.
By convention, the returned object should be obtained by calling
By convention, the object returned by this method should be independent
of this object (which is being cloned). To achieve this independence,
it may be necessary to modify one or more fields of the object returned
by | |
| entryFrameIsFirst | back to summary |
|---|---|
| public boolean entryFrameIsFirst() Tells whether there is another chunk of Delta stack above | |
| equals | back to summary |
|---|---|
| public abstract boolean equals(Object arg) Overrides java. testers -- platform dependent | |
| frameSize | back to summary |
|---|---|
| public abstract long frameSize() returns the frame size in stack slots | |
| getEntryFrameCallWrapper | back to summary |
|---|---|
| public abstract JavaCallWrapper getEntryFrameCallWrapper() | |
| getFP | back to summary |
|---|---|
| public abstract Address getFP() | |
| getID | back to summary |
|---|---|
| public abstract Address getID() | |
| getIntAt | back to summary |
|---|---|
| public int getIntAt(int slot) Fetches the (Java) int at the requested slot | |
| getInterpreterFrameBCI | back to summary |
|---|---|
| public abstract int getInterpreterFrameBCI() Byte code index. In the underlying frame, what is actually stored is a byte code pointer (BCP), which is converted to a BCI and back by the GC when methods are moved. In this system, interior pointers are not allowed, so we must make the access to the interpreter frame's BCI atomic with respect to GC. This may mean implementation with an underlying call through native code into the VM or a magic sequence in the compiler. (FIXME) | |
| getInterpreterFrameCPCache | back to summary |
|---|---|
| public ConstantPoolCache getInterpreterFrameCPCache() Constant pool cache | |
| getInterpreterFrameExpressionStackDirection | back to summary |
|---|---|
| public abstract int getInterpreterFrameExpressionStackDirection() | |
| getInterpreterFrameExpressionStackSize | back to summary |
|---|---|
| public int getInterpreterFrameExpressionStackSize() FIXME: is this portable? | |
| getInterpreterFrameMethod | back to summary |
|---|---|
| public Method getInterpreterFrameMethod() Current method | |
| getInterpreterFrameSenderSP | back to summary |
|---|---|
| public abstract Address getInterpreterFrameSenderSP() | |
| getLink | back to summary |
|---|---|
| public abstract Address getLink() Link (i.e., the pointer to the previous frame) | |
| getOopHandleAt | back to summary |
|---|---|
| public OopHandle getOopHandleAt(int slot) Fetches the OopHandle at the requested slot | |
| getPC | back to summary |
|---|---|
| public Address getPC() pc: Returns the pc at which this frame will continue normally. It must point at the beginning of the next instruction to execute. | |
| getSavedOopResult | back to summary |
|---|---|
| public OopHandle getSavedOopResult() | |
| getSavedReceiver | back to summary |
|---|---|
| public OopHandle getSavedReceiver() | |
| getSenderPC | back to summary |
|---|---|
| public abstract Address getSenderPC() Return address | |
| getSenderSP | back to summary |
|---|---|
| public abstract Address getSenderSP() Returns the stack pointer of the calling frame | |
| getSignalNameDbg | back to summary |
|---|---|
| public abstract String getSignalNameDbg() If this is a signal handler frame (again, on a platform with a notion of signals), get the name of the signal. | |
| getSignalNumberDbg | back to summary |
|---|---|
| public abstract int getSignalNumberDbg() If this is a signal handler frame (again, on a platform with a notion of signals), get the signal number. | |
| getSP | back to summary |
|---|---|
| public abstract Address getSP() | |
| getUnextendedSP | back to summary |
|---|---|
| public abstract Address getUnextendedSP() The frame's original SP, before any extension by an interpreted callee; used for packing debug info into vframeArray objects and vframeArray lookup. | |
| hasSenderPD | back to summary |
|---|---|
| protected abstract boolean hasSenderPD() Platform-dependent query indicating whether this frame has a sender. Should return true if it is possible to call sender() at all on this frame. (This is currently only needed for the debugging system, if a stack trace is attempted for a Java thread which has no Java frames, i.e., the signal thread; we have to know to stop traversal at the bottom frame.) | |
| initialize | back to summary |
|---|---|
| private static synchronized void initialize(TypeDataBase db) | |
| interpreterFrameMonitorBegin | back to summary |
|---|---|
| public abstract BasicObjectLock interpreterFrameMonitorBegin() | |
| interpreterFrameMonitorEnd | back to summary |
|---|---|
| public abstract BasicObjectLock interpreterFrameMonitorEnd() | |
| interpreterFrameMonitorSize | back to summary |
|---|---|
| public abstract int interpreterFrameMonitorSize() Note this returns a size in BYTES in this system! | |
| interpreterFramePrintOn | back to summary |
|---|---|
| public void interpreterFramePrintOn(PrintStream tty) | |
| isCompiledFrame | back to summary |
|---|---|
| public boolean isCompiledFrame() | |
| isDeoptimized | back to summary |
|---|---|
| public boolean isDeoptimized() | |
| isEntryFrame | back to summary |
|---|---|
| public boolean isEntryFrame() Java frame called from C? | |
| isFirstFrame | back to summary |
|---|---|
| public boolean isFirstFrame() oldest frame? (has no sender) FIXME: this is modified from the C++ code to handle the debugging situation where we try to traverse the stack for, for example, the signal thread, and don't find any valid Java frames. Would really like to put the second half of the conditional in some sort of debugging-only if statement. | |
| isFirstJavaFrame | back to summary |
|---|---|
| public boolean isFirstJavaFrame() same for Java frame | |
| isInterpretedFrame | back to summary |
|---|---|
| public boolean isInterpretedFrame() type testers | |
| isInterpretedFrameValid | back to summary |
|---|---|
| public abstract boolean isInterpretedFrameValid() performs sanity checks on interpreted frames. | |
| isJavaFrame | back to summary |
|---|---|
| public boolean isJavaFrame() | |
| isNativeFrame | back to summary |
|---|---|
| public boolean isNativeFrame() | |
| isRuntimeFrame | back to summary |
|---|---|
| public boolean isRuntimeFrame() | |
| isSignalHandlerFrameDbg | back to summary |
|---|---|
| public abstract boolean isSignalHandlerFrameDbg() This is an addition for debugging purposes on platforms which have the notion of signals. | |
| nextMonitorInInterpreterFrame | back to summary |
|---|---|
| public BasicObjectLock nextMonitorInInterpreterFrame(BasicObjectLock cur) | |
| oopMapRegToLocation | back to summary |
|---|---|
| public Address oopMapRegToLocation(VMReg reg, RegisterMap regMap) Conversion from an VMReg::Name to physical stack location | |
| oopsCodeBlobDo | back to summary |
|---|---|
| private void oopsCodeBlobDo(AddressVisitor oopVisitor, RegisterMap regMap) | |
| oopsDo | back to summary |
|---|---|
| public void oopsDo(AddressVisitor oopVisitor, RegisterMap map) | |
| oopsEntryDo | back to summary |
|---|---|
| private void oopsEntryDo(AddressVisitor oopVisitor, RegisterMap regMap) | |
| oopsInterpretedArgumentsDo | back to summary |
|---|---|
| public void oopsInterpretedArgumentsDo(Symbol signature, boolean isStatic, AddressVisitor f) | |
| oopsInterpretedDo | back to summary |
|---|---|
| private void oopsInterpretedDo(AddressVisitor oopVisitor, RegisterMap map) | |
| pcReturnOffset | back to summary |
|---|---|
| public static int pcReturnOffset() | |
| previousMonitorInInterpreterFrame | back to summary |
|---|---|
| public BasicObjectLock previousMonitorInInterpreterFrame(BasicObjectLock cur) | |
| back to summary | |
|---|---|
| public void print() | |
| printOn | back to summary |
|---|---|
| public void printOn(PrintStream tty) | |
| printValue | back to summary |
|---|---|
| public void printValue() | |
| printValueOn | back to summary |
|---|---|
| public void printValueOn(PrintStream tty) | |
| realSender | back to summary |
|---|---|
| public Frame realSender(RegisterMap map) returns the sender, but skips conversion frames | |
| sender | back to summary |
|---|---|
| public abstract Frame sender(RegisterMap map, CodeBlob nm) returns the sending frame | |
| sender | back to summary |
|---|---|
| public Frame sender(RegisterMap map) equivalent to sender(map, null) | |
| setPC | back to summary |
|---|---|
| public void setPC(Address newpc) | |
| setSP | back to summary |
|---|---|
| public abstract void setSP(Address newSP) | |
| shouldBeDeoptimized | back to summary |
|---|---|
| public boolean shouldBeDeoptimized() tells whether this frame is marked for deoptimization | |
| Modifier and Type | Field and Description |
|---|---|
| private AddressVisitor |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public void | |
| public void | visitDerivedOopLocation(Address baseOopAddr, Address derivedOopAddr)
Implements sun.
|
| public void | visitNarrowOopLocation(Address compOopAddr)
Implements sun.
|
| public void | visitOopLocation(Address oopAddr)
Implements sun.
|
| addressVisitor | back to summary |
|---|---|
| private AddressVisitor addressVisitor | |
| InterpVisitor | back to summary |
|---|---|
| public InterpVisitor(AddressVisitor oopVisitor) | |
| setAddressVisitor | back to summary |
|---|---|
| public void setAddressVisitor(AddressVisitor addressVisitor) | |
| visitDerivedOopLocation | back to summary |
|---|---|
| public void visitDerivedOopLocation(Address baseOopAddr, Address derivedOopAddr) Implements sun. | |
| visitNarrowOopLocation | back to summary |
|---|---|
| public void visitNarrowOopLocation(Address compOopAddr) Implements sun. | |
| visitOopLocation | back to summary |
|---|---|
| public void visitOopLocation(Address oopAddr) Implements sun. | |