0127ef0f2c
This is approximately "LLDB 3.5" although with a little bit of skew, and will go along with the Clang 3.5 import. Sponsored by: DARPA, AFRL
149 lines
4.6 KiB
C++
149 lines
4.6 KiB
C++
//===-- ARM64_DWARF_Registers.c ---------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include <string.h>
|
|
|
|
#include "ARM64_DWARF_Registers.h"
|
|
|
|
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";
|
|
}
|
|
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;
|
|
|
|
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;
|
|
}
|