RegisterContextHistory.cpp revision 314564
12061Sjkh//===-- RegisterContextHistory.cpp ---------------------------------*- C++ 236683Sbde//-*-===// 32061Sjkh// 433611Sjb// The LLVM Compiler Infrastructure 532427Sjb// 632427Sjb// This file is distributed under the University of Illinois Open Source 736111Sjb// License. See LICENSE.TXT for details. 833611Sjb// 932427Sjb//===----------------------------------------------------------------------===// 1032427Sjb 112061Sjkh#include "lldb/Core/Address.h" 1215603Smarkm#include "lldb/Core/AddressRange.h" 1330169Sjkh#include "lldb/Core/DataBufferHeap.h" 1420710Sasami#include "lldb/Core/Log.h" 1520710Sasami#include "lldb/Core/Module.h" 163197Scsgr#include "lldb/Core/RegisterValue.h" 172061Sjkh#include "lldb/Core/Value.h" 1812483Speter#include "lldb/Expression/DWARFExpression.h" 1934509Sbde#include "lldb/Symbol/FuncUnwinders.h" 202160Scsgr#include "lldb/Symbol/Function.h" 212834Swollman#include "lldb/Symbol/ObjectFile.h" 222061Sjkh#include "lldb/Symbol/Symbol.h" 232061Sjkh#include "lldb/Symbol/SymbolContext.h" 242160Scsgr#include "lldb/Target/ABI.h" 2517308Speter#include "lldb/Target/DynamicLoader.h" 2619320Sadam#include "lldb/Target/ExecutionContext.h" 2727788Sasami#include "lldb/Target/Process.h" 2830169Sjkh#include "lldb/Target/StackFrame.h" 2925980Sasami#include "lldb/Target/Target.h" 301594Srgrimes#include "lldb/Target/Thread.h" 3117308Speter#include "lldb/lldb-private.h" 3217308Speter 3327910Sasami#include "RegisterContextHistory.h" 3427910Sasami 3527910Sasamiusing namespace lldb; 3617308Speterusing namespace lldb_private; 3717308Speter 3817308SpeterRegisterContextHistory::RegisterContextHistory(Thread &thread, 3919175Sbde uint32_t concrete_frame_idx, 4019175Sbde uint32_t address_byte_size, 4119175Sbde addr_t pc_value) 4219175Sbde : RegisterContext(thread, concrete_frame_idx), m_pc_value(pc_value) { 4317308Speter m_reg_set0.name = "General Purpose Registers"; 4427910Sasami m_reg_set0.short_name = "GPR"; 4534509Sbde m_reg_set0.num_registers = 1; 4627910Sasami m_reg_set0.registers = new uint32_t(0); 4717308Speter 482061Sjkh m_pc_reg_info.name = "pc"; 492061Sjkh m_pc_reg_info.alt_name = "pc"; 501594Srgrimes m_pc_reg_info.byte_offset = 0; 5130169Sjkh m_pc_reg_info.byte_size = address_byte_size; 5230169Sjkh m_pc_reg_info.encoding = eEncodingUint; 5330169Sjkh m_pc_reg_info.format = eFormatPointer; 5430169Sjkh m_pc_reg_info.invalidate_regs = NULL; 5530169Sjkh m_pc_reg_info.value_regs = NULL; 5630169Sjkh m_pc_reg_info.kinds[eRegisterKindEHFrame] = LLDB_INVALID_REGNUM; 5730169Sjkh m_pc_reg_info.kinds[eRegisterKindDWARF] = LLDB_INVALID_REGNUM; 5830169Sjkh m_pc_reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC; 597407Srgrimes m_pc_reg_info.kinds[eRegisterKindProcessPlugin] = LLDB_INVALID_REGNUM; 607108Sphk m_pc_reg_info.kinds[eRegisterKindLLDB] = LLDB_INVALID_REGNUM; 617108Sphk} 627108Sphk 637407SrgrimesRegisterContextHistory::~RegisterContextHistory() { 647407Srgrimes delete m_reg_set0.registers; 657407Srgrimes delete m_pc_reg_info.invalidate_regs; 667108Sphk delete m_pc_reg_info.value_regs; 672061Sjkh} 682061Sjkh 692061Sjkhvoid RegisterContextHistory::InvalidateAllRegisters() {} 7017308Speter 712061Sjkhsize_t RegisterContextHistory::GetRegisterCount() { return 1; } 722061Sjkh 732061Sjkhconst lldb_private::RegisterInfo * 742061SjkhRegisterContextHistory::GetRegisterInfoAtIndex(size_t reg) { 752061Sjkh if (reg) 7635427Sbde return NULL; 7735427Sbde return &m_pc_reg_info; 7830169Sjkh} 792626Scsgr 802061Sjkhsize_t RegisterContextHistory::GetRegisterSetCount() { return 1; } 812061Sjkh 822061Sjkhconst lldb_private::RegisterSet * 832061SjkhRegisterContextHistory::GetRegisterSet(size_t reg_set) { 842061Sjkh if (reg_set) 852061Sjkh return NULL; 8619320Sadam return &m_reg_set0; 872061Sjkh} 882061Sjkh 892061Sjkhbool RegisterContextHistory::ReadRegister( 902061Sjkh const lldb_private::RegisterInfo *reg_info, 912061Sjkh lldb_private::RegisterValue &value) { 922061Sjkh if (!reg_info) 932061Sjkh return false; 942061Sjkh uint32_t reg_number = reg_info->kinds[eRegisterKindGeneric]; 952061Sjkh if (reg_number == LLDB_REGNUM_GENERIC_PC) { 962061Sjkh value.SetUInt(m_pc_value, reg_info->byte_size); 972061Sjkh return true; 982834Swollman } 992834Swollman return false; 1002834Swollman} 1012834Swollman 1022834Swollmanbool RegisterContextHistory::WriteRegister( 1032834Swollman const lldb_private::RegisterInfo *reg_info, 1041594Srgrimes const lldb_private::RegisterValue &value) { 1054486Sphk return false; 1064486Sphk} 1074486Sphk 1084486Sphkbool RegisterContextHistory::ReadAllRegisterValues( 1094486Sphk lldb::DataBufferSP &data_sp) { 1102061Sjkh return false; 1112061Sjkh} 11225979Sjkh 11325979Sjkhbool RegisterContextHistory::WriteAllRegisterValues( 11425979Sjkh const lldb::DataBufferSP &data_sp) { 11525979Sjkh return false; 1162061Sjkh} 11725979Sjkh 1182061Sjkhuint32_t RegisterContextHistory::ConvertRegisterKindToRegisterNumber( 1192061Sjkh lldb::RegisterKind kind, uint32_t num) { 12017308Speter if (kind == eRegisterKindGeneric && num == LLDB_REGNUM_GENERIC_PC) 1212061Sjkh return 0; 1222061Sjkh return LLDB_INVALID_REGNUM; 1232061Sjkh} 1242061Sjkh