• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)11 void 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