summaryrefslogtreecommitdiff
path: root/source/Utility/ARM64_DWARF_Registers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Utility/ARM64_DWARF_Registers.cpp')
-rw-r--r--source/Utility/ARM64_DWARF_Registers.cpp316
1 files changed, 190 insertions, 126 deletions
diff --git a/source/Utility/ARM64_DWARF_Registers.cpp b/source/Utility/ARM64_DWARF_Registers.cpp
index d9b3863194342..8c2a7160346d4 100644
--- a/source/Utility/ARM64_DWARF_Registers.cpp
+++ b/source/Utility/ARM64_DWARF_Registers.cpp
@@ -1,4 +1,4 @@
-//===-- ARM64_DWARF_Registers.c ---------------------------------*- C++ -*-===//
+//===-- ARM64_DWARF_Registers.cpp -------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -15,134 +15,198 @@ using namespace lldb;
using namespace lldb_private;
using namespace arm64_dwarf;
-const char *
-arm64_dwarf::GetRegisterName (unsigned reg_num, bool altnernate_name)
-{
- if (altnernate_name)
- {
- switch (reg_num)
- {
- case fp: return "x29";
- case lr: return "x30";
- case sp: return "x31";
- default:
- break;
- }
- return nullptr;
- }
-
- switch (reg_num)
- {
- case x0: return "x0";
- case x1: return "x1";
- case x2: return "x2";
- case x3: return "x3";
- case x4: return "x4";
- case x5: return "x5";
- case x6: return "x6";
- case x7: return "x7";
- case x8: return "x8";
- case x9: return "x9";
- case x10: return "x10";
- case x11: return "x11";
- case x12: return "x12";
- case x13: return "x13";
- case x14: return "x14";
- case x15: return "x15";
- case x16: return "x16";
- case x17: return "x17";
- case x18: return "x18";
- case x19: return "x19";
- case x20: return "x20";
- case x21: return "x21";
- case x22: return "x22";
- case x23: return "x23";
- case x24: return "x24";
- case x25: return "x25";
- case x26: return "x26";
- case x27: return "x27";
- case x28: return "x28";
- case fp: return "fp";
- case lr: return "lr";
- case sp: return "sp";
- case pc: return "pc";
- case cpsr: return "cpsr";
- case v0: return "v0";
- case v1: return "v1";
- case v2: return "v2";
- case v3: return "v3";
- case v4: return "v4";
- case v5: return "v5";
- case v6: return "v6";
- case v7: return "v7";
- case v8: return "v8";
- case v9: return "v9";
- case v10: return "v10";
- case v11: return "v11";
- case v12: return "v12";
- case v13: return "v13";
- case v14: return "v14";
- case v15: return "v15";
- case v16: return "v16";
- case v17: return "v17";
- case v18: return "v18";
- case v19: return "v19";
- case v20: return "v20";
- case v21: return "v21";
- case v22: return "v22";
- case v23: return "v23";
- case v24: return "v24";
- case v25: return "v25";
- case v26: return "v26";
- case v27: return "v27";
- case v28: return "v28";
- case v29: return "v29";
- case v30: return "v30";
- case v31: return "v31";
+const char *arm64_dwarf::GetRegisterName(unsigned reg_num,
+ bool altnernate_name) {
+ if (altnernate_name) {
+ switch (reg_num) {
+ case fp:
+ return "x29";
+ case lr:
+ return "x30";
+ case sp:
+ return "x31";
+ default:
+ break;
}
return nullptr;
+ }
+
+ switch (reg_num) {
+ case x0:
+ return "x0";
+ case x1:
+ return "x1";
+ case x2:
+ return "x2";
+ case x3:
+ return "x3";
+ case x4:
+ return "x4";
+ case x5:
+ return "x5";
+ case x6:
+ return "x6";
+ case x7:
+ return "x7";
+ case x8:
+ return "x8";
+ case x9:
+ return "x9";
+ case x10:
+ return "x10";
+ case x11:
+ return "x11";
+ case x12:
+ return "x12";
+ case x13:
+ return "x13";
+ case x14:
+ return "x14";
+ case x15:
+ return "x15";
+ case x16:
+ return "x16";
+ case x17:
+ return "x17";
+ case x18:
+ return "x18";
+ case x19:
+ return "x19";
+ case x20:
+ return "x20";
+ case x21:
+ return "x21";
+ case x22:
+ return "x22";
+ case x23:
+ return "x23";
+ case x24:
+ return "x24";
+ case x25:
+ return "x25";
+ case x26:
+ return "x26";
+ case x27:
+ return "x27";
+ case x28:
+ return "x28";
+ case fp:
+ return "fp";
+ case lr:
+ return "lr";
+ case sp:
+ return "sp";
+ case pc:
+ return "pc";
+ case cpsr:
+ return "cpsr";
+ case v0:
+ return "v0";
+ case v1:
+ return "v1";
+ case v2:
+ return "v2";
+ case v3:
+ return "v3";
+ case v4:
+ return "v4";
+ case v5:
+ return "v5";
+ case v6:
+ return "v6";
+ case v7:
+ return "v7";
+ case v8:
+ return "v8";
+ case v9:
+ return "v9";
+ case v10:
+ return "v10";
+ case v11:
+ return "v11";
+ case v12:
+ return "v12";
+ case v13:
+ return "v13";
+ case v14:
+ return "v14";
+ case v15:
+ return "v15";
+ case v16:
+ return "v16";
+ case v17:
+ return "v17";
+ case v18:
+ return "v18";
+ case v19:
+ return "v19";
+ case v20:
+ return "v20";
+ case v21:
+ return "v21";
+ case v22:
+ return "v22";
+ case v23:
+ return "v23";
+ case v24:
+ return "v24";
+ case v25:
+ return "v25";
+ case v26:
+ return "v26";
+ case v27:
+ return "v27";
+ case v28:
+ return "v28";
+ case v29:
+ return "v29";
+ case v30:
+ return "v30";
+ case v31:
+ return "v31";
+ }
+ return nullptr;
}
-bool
-arm64_dwarf::GetRegisterInfo (unsigned reg_num, RegisterInfo &reg_info)
-{
- ::memset (&reg_info, 0, sizeof(RegisterInfo));
- ::memset (reg_info.kinds, LLDB_INVALID_REGNUM, sizeof(reg_info.kinds));
-
- if (reg_num >= x0 && reg_num <= pc)
- {
- reg_info.byte_size = 8;
- reg_info.format = eFormatHex;
- reg_info.encoding = eEncodingUint;
- }
- else if (reg_num >= v0 && reg_num <= v31)
- {
- reg_info.byte_size = 16;
- reg_info.format = eFormatVectorOfFloat32;
- reg_info.encoding = eEncodingVector;
- }
- else if (reg_num == cpsr)
- {
- reg_info.byte_size = 4;
- reg_info.format = eFormatHex;
- reg_info.encoding = eEncodingUint;
- }
- else
- {
- return false;
- }
-
- reg_info.name = arm64_dwarf::GetRegisterName (reg_num, false);
- reg_info.alt_name = arm64_dwarf::GetRegisterName (reg_num, true);
- reg_info.kinds[eRegisterKindDWARF] = reg_num;
+bool arm64_dwarf::GetRegisterInfo(unsigned reg_num, RegisterInfo &reg_info) {
+ ::memset(&reg_info, 0, sizeof(RegisterInfo));
+ ::memset(reg_info.kinds, LLDB_INVALID_REGNUM, sizeof(reg_info.kinds));
- switch (reg_num)
- {
- case fp: reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_FP; break;
- case lr: reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_RA; break;
- case sp: reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_SP; break;
- case pc: reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC; break;
- default: break;
- }
- return true;
+ if (reg_num >= x0 && reg_num <= pc) {
+ reg_info.byte_size = 8;
+ reg_info.format = eFormatHex;
+ reg_info.encoding = eEncodingUint;
+ } else if (reg_num >= v0 && reg_num <= v31) {
+ reg_info.byte_size = 16;
+ reg_info.format = eFormatVectorOfFloat32;
+ reg_info.encoding = eEncodingVector;
+ } else if (reg_num == cpsr) {
+ reg_info.byte_size = 4;
+ reg_info.format = eFormatHex;
+ reg_info.encoding = eEncodingUint;
+ } else {
+ return false;
+ }
+
+ reg_info.name = arm64_dwarf::GetRegisterName(reg_num, false);
+ reg_info.alt_name = arm64_dwarf::GetRegisterName(reg_num, true);
+ reg_info.kinds[eRegisterKindDWARF] = reg_num;
+
+ switch (reg_num) {
+ case fp:
+ reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_FP;
+ break;
+ case lr:
+ reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_RA;
+ break;
+ case sp:
+ reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_SP;
+ break;
+ case pc:
+ reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC;
+ break;
+ default:
+ break;
+ }
+ return true;
}