• 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 <memory>
6 
7 #include "include/v8-unwinder-state.h"
8 #include "include/v8-unwinder.h"
9 #include "src/diagnostics/unwinder.h"
10 #include "src/execution/frame-constants.h"
11 
12 namespace v8 {
13 
GetCalleeSavedRegistersFromEntryFrame(void * fp,RegisterState * register_state)14 void GetCalleeSavedRegistersFromEntryFrame(void* fp,
15                                            RegisterState* register_state) {
16   const i::Address base_addr =
17       reinterpret_cast<i::Address>(fp) +
18       i::EntryFrameConstants::kDirectCallerGeneralRegistersOffset;
19 
20   if (!register_state->callee_saved) {
21     register_state->callee_saved = std::make_unique<CalleeSavedRegisters>();
22   }
23 
24   register_state->callee_saved->arm_r4 =
25       reinterpret_cast<void*>(Load(base_addr + 0 * i::kSystemPointerSize));
26   register_state->callee_saved->arm_r5 =
27       reinterpret_cast<void*>(Load(base_addr + 1 * i::kSystemPointerSize));
28   register_state->callee_saved->arm_r6 =
29       reinterpret_cast<void*>(Load(base_addr + 2 * i::kSystemPointerSize));
30   register_state->callee_saved->arm_r7 =
31       reinterpret_cast<void*>(Load(base_addr + 3 * i::kSystemPointerSize));
32   register_state->callee_saved->arm_r8 =
33       reinterpret_cast<void*>(Load(base_addr + 4 * i::kSystemPointerSize));
34   register_state->callee_saved->arm_r9 =
35       reinterpret_cast<void*>(Load(base_addr + 5 * i::kSystemPointerSize));
36   register_state->callee_saved->arm_r10 =
37       reinterpret_cast<void*>(Load(base_addr + 6 * i::kSystemPointerSize));
38 }
39 
40 }  // namespace v8
41