Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 77c7bb99f78771e92432a40921cc0dc8b7bcc7f6..eb1f18de7dad9ad2b08b95475284de2af96cfa38 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -11226,9 +11226,10 @@ static const int kFrameDetailsLocalCountIndex = 4; |
static const int kFrameDetailsSourcePositionIndex = 5; |
static const int kFrameDetailsConstructCallIndex = 6; |
static const int kFrameDetailsAtReturnIndex = 7; |
-static const int kFrameDetailsFlagsIndex = 8; |
-static const int kFrameDetailsFirstDynamicIndex = 9; |
- |
+static const int kFrameDetailsFramePointerHighIndex = 8; |
+static const int kFrameDetailsFramePointerLowIndex = 9; |
+static const int kFrameDetailsFlagsIndex = 10; |
+static const int kFrameDetailsFirstDynamicIndex = 11; |
static SaveContext* FindSavedContextForFrame(Isolate* isolate, |
JavaScriptFrame* frame) { |
@@ -11271,7 +11272,9 @@ static int FindIndexedNonNativeFrame(JavaScriptFrameIterator* it, int index) { |
// 5: Source position |
// 6: Constructor call |
// 7: Is at return |
-// 8: Flags |
+// 8: Frame pointer high |
+// 9: Frame pointer low |
+// 10: Flags |
// Arguments name, value |
// Locals name, value |
// Return value if any |
@@ -11448,6 +11451,20 @@ RUNTIME_FUNCTION(Runtime_GetFrameDetails) { |
// Add the at return information. |
details->set(kFrameDetailsAtReturnIndex, heap->ToBoolean(at_return)); |
+ uintptr_t frame_pointer = |
+ reinterpret_cast<uintptr_t>(it.frame()->UnpaddedFP()); |
+ |
+#ifdef V8_HOST_ARCH_64_BIT |
+ Handle<Object> frame_pointer_high = isolate->factory()->NewNumberFromUint( |
+ static_cast<uint32_t>(frame_pointer >> 32)); |
+ details->set(kFrameDetailsFramePointerHighIndex, *frame_pointer_high); |
+#else |
+ details->set(kFrameDetailsFramePointerHighIndex, Smi::FromInt(0)); |
+#endif |
+ Handle<Object> frame_pointer_low = isolate->factory()->NewNumberFromUint( |
+ static_cast<uint32_t>(frame_pointer & 0xffffffff)); |
+ details->set(kFrameDetailsFramePointerLowIndex, *frame_pointer_low); |
+ |
// Add flags to indicate information on whether this frame is |
// bit 0: invoked in the debugger context. |
// bit 1: optimized frame. |