1 // Copyright 2020 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "include/v8-unwinder-state.h" 6 #include "src/diagnostics/unwinder.h" 7 #include "src/execution/frame-constants.h" 8 9 namespace v8 { 10 GetCalleeSavedRegistersFromEntryFrame(void * fp,RegisterState * register_state)11void GetCalleeSavedRegistersFromEntryFrame(void* fp, 12 RegisterState* register_state) { 13 const i::Address base_addr = 14 reinterpret_cast<i::Address>(fp) + 15 i::EntryFrameConstants::kDirectCallerRRegistersOffset; 16 17 if (!register_state->callee_saved) { 18 register_state->callee_saved = std::make_unique<CalleeSavedRegisters>(); 19 } 20 21 register_state->callee_saved->arm_r4 = 22 reinterpret_cast<void*>(Load(base_addr + 0 * i::kSystemPointerSize)); 23 register_state->callee_saved->arm_r5 = 24 reinterpret_cast<void*>(Load(base_addr + 1 * i::kSystemPointerSize)); 25 register_state->callee_saved->arm_r6 = 26 reinterpret_cast<void*>(Load(base_addr + 2 * i::kSystemPointerSize)); 27 register_state->callee_saved->arm_r7 = 28 reinterpret_cast<void*>(Load(base_addr + 3 * i::kSystemPointerSize)); 29 register_state->callee_saved->arm_r8 = 30 reinterpret_cast<void*>(Load(base_addr + 4 * i::kSystemPointerSize)); 31 register_state->callee_saved->arm_r9 = 32 reinterpret_cast<void*>(Load(base_addr + 5 * i::kSystemPointerSize)); 33 register_state->callee_saved->arm_r10 = 34 reinterpret_cast<void*>(Load(base_addr + 6 * i::kSystemPointerSize)); 35 } 36 37 } // namespace v8 38