| Index: src/frames.h
|
| diff --git a/src/frames.h b/src/frames.h
|
| index 18a3d82398c06e09593f14f67f57bd9a4c4fe1e1..f33eb167414af18081c82864dde237c3f5a46c2e 100644
|
| --- a/src/frames.h
|
| +++ b/src/frames.h
|
| @@ -111,6 +111,43 @@ class StackHandler BASE_EMBEDDED {
|
| V(CONSTRUCT, ConstructFrame) \
|
| V(ARGUMENTS_ADAPTOR, ArgumentsAdaptorFrame)
|
|
|
| +// Every pointer in a frame has a slot id. On 32-bit platforms, doubles consume
|
| +// two slots.
|
| +//
|
| +// Stack slot indices >= 0 access the callee stack with slot 0 corresponding to
|
| +// the callee's saved return address and 1 corresponding to the saved frame
|
| +// pointer. Some frames have additional information stored in the fixed header,
|
| +// for example JSFunctions store the function context and marker in the fixed
|
| +// header, with slot index 2 corresponding to the current function context and 3
|
| +// corresponding to the frame marker/JSFunction.
|
| +//
|
| +// slot JS frame
|
| +// +-----------------+--------------------------------
|
| +// -n-1 | parameter 0 | ^
|
| +// |- - - - - - - - -| |
|
| +// -n | | Caller
|
| +// ... | ... | frame slots
|
| +// -2 | parameter n-1 | (slot < 0)
|
| +// |- - - - - - - - -| |
|
| +// -1 | parameter n | v
|
| +// -----+-----------------+--------------------------------
|
| +// 0 | return addr | ^ ^
|
| +// |- - - - - - - - -| | |
|
| +// 1 | saved frame ptr | Fixed |
|
| +// |- - - - - - - - -| Header <-- frame ptr |
|
| +// 2 | [Constant Pool] | | |
|
| +// |- - - - - - - - -| | |
|
| +// 2+cp | Context | | if a constant pool |
|
| +// |- - - - - - - - -| | is used, cp = 1, |
|
| +// 3+cp |JSFunction/Marker| v otherwise, cp = 0 |
|
| +// +-----------------+---- |
|
| +// 4+cp | | ^ Callee
|
| +// |- - - - - - - - -| | frame slots
|
| +// ... | | Frame slots (slot >= 0)
|
| +// |- - - - - - - - -| | |
|
| +// | | v |
|
| +// -----+-----------------+----- <-- stack ptr -------------
|
| +//
|
|
|
| class StandardFrameConstants : public AllStatic {
|
| public:
|
| @@ -210,6 +247,15 @@ class InterpreterFrameConstants : public AllStatic {
|
| static const int kContextFromRegisterPointer = 5 * kPointerSize;
|
| };
|
|
|
| +inline static int FPOffsetToFrameSlot(int frame_offset) {
|
| + return StandardFrameConstants::kFixedSlotCountAboveFp - 1 -
|
| + frame_offset / kPointerSize;
|
| +}
|
| +
|
| +inline static int FrameSlotToFPOffset(int slot) {
|
| + return (StandardFrameConstants::kFixedSlotCountAboveFp - 1 - slot) *
|
| + kPointerSize;
|
| +}
|
|
|
| // Abstract base class for all stack frames.
|
| class StackFrame BASE_EMBEDDED {
|
|
|