1// Copyright 2016 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 "src/eh-frame.h"
6
7namespace v8 {
8namespace internal {
9
10static const int kX0DwarfCode = 0;
11static const int kJsSpDwarfCode = 28;
12static const int kFpDwarfCode = 29;
13static const int kLrDwarfCode = 30;
14static const int kCSpDwarfCode = 31;
15
16const int EhFrameConstants::kCodeAlignmentFactor = 4;
17const int EhFrameConstants::kDataAlignmentFactor = -8;
18
19void EhFrameWriter::WriteReturnAddressRegisterCode() {
20  WriteULeb128(kLrDwarfCode);
21}
22
23void EhFrameWriter::WriteInitialStateInCie() {
24  SetBaseAddressRegisterAndOffset(x29, 0);
25  RecordRegisterNotModified(x30);
26}
27
28// static
29int EhFrameWriter::RegisterToDwarfCode(Register name) {
30  switch (name.code()) {
31    case Register::kCode_x28:
32      return kJsSpDwarfCode;
33    case Register::kCode_x29:
34      return kFpDwarfCode;
35    case Register::kCode_x30:
36      return kLrDwarfCode;
37    case Register::kCode_x31:
38      return kCSpDwarfCode;
39    case Register::kCode_x0:
40      return kX0DwarfCode;
41    default:
42      UNIMPLEMENTED();
43      return -1;
44  }
45}
46
47#ifdef ENABLE_DISASSEMBLER
48
49// static
50const char* EhFrameDisassembler::DwarfRegisterCodeToString(int code) {
51  switch (code) {
52    case kFpDwarfCode:
53      return "fp";
54    case kLrDwarfCode:
55      return "lr";
56    case kJsSpDwarfCode:
57      return "jssp";
58    case kCSpDwarfCode:
59      return "csp";  // This could be zr as well
60    default:
61      UNIMPLEMENTED();
62      return nullptr;
63  }
64}
65
66#endif
67
68}  // namespace internal
69}  // namespace v8
70