diff options
Diffstat (limited to 'source/Utility/ARM64_DWARF_Registers.cpp')
| -rw-r--r-- | source/Utility/ARM64_DWARF_Registers.cpp | 316 |
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 ®_info) -{ - ::memset (®_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 ®_info) { + ::memset(®_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; } |
