149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata//===-- RegisterContextDummy.cpp ---------------------------------*- C++ -*-===// 249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata// 349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata// The LLVM Compiler Infrastructure 449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata// 549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata// This file is distributed under the University of Illinois Open Source 649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata// License. See LICENSE.TXT for details. 749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata// 849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata//===----------------------------------------------------------------------===// 949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 1049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 1149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/lldb-private.h" 1249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/Address.h" 1349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/AddressRange.h" 1449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/DataBufferHeap.h" 1549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/Log.h" 1649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/Module.h" 1749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/RegisterValue.h" 1849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Core/Value.h" 1949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Expression/DWARFExpression.h" 2049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Symbol/FuncUnwinders.h" 2149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Symbol/Function.h" 2249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Symbol/ObjectFile.h" 2349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Symbol/SymbolContext.h" 2449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Symbol/Symbol.h" 2549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/ABI.h" 2649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/ExecutionContext.h" 2749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/Process.h" 2849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/StackFrame.h" 2949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/Target.h" 3049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/Thread.h" 3149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "lldb/Target/DynamicLoader.h" 3249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 3349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata#include "RegisterContextDummy.h" 3449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 3549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatausing namespace lldb; 3649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatausing namespace lldb_private; 3749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 3849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::RegisterContextDummy (Thread &thread, uint32_t concrete_frame_idx, uint32_t address_byte_size) : 3949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContext (thread, concrete_frame_idx) 4049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 4149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_reg_set0.name = "General Purpose Registers"; 4249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_reg_set0.short_name = "GPR"; 4349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_reg_set0.num_registers = 1; 4449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_reg_set0.registers = new uint32_t(0); 4549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 4649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.name = "pc"; 4749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.alt_name = "pc"; 4849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.byte_offset = 0; 4949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.byte_size = address_byte_size; 5049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.encoding = eEncodingUint; 5149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.format = eFormatPointer; 5249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.invalidate_regs = NULL; 5349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.value_regs = NULL; 5449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.kinds[eRegisterKindGCC] = LLDB_INVALID_REGNUM; 5549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.kinds[eRegisterKindDWARF] = LLDB_INVALID_REGNUM; 5649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC; 5749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.kinds[eRegisterKindGDB] = LLDB_INVALID_REGNUM; 5849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata m_pc_reg_info.kinds[eRegisterKindLLDB] = LLDB_INVALID_REGNUM; 5949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 6049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 6149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::~RegisterContextDummy () 6249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 6349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata delete m_reg_set0.registers; 6449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata delete m_pc_reg_info.invalidate_regs; 6549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata delete m_pc_reg_info.value_regs; 6649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 6749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 6849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatavoid 6949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::InvalidateAllRegisters () {} 7049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 7149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatasize_t 7249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::GetRegisterCount () 7349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 7449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return 1; 7549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 7649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 7749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granataconst lldb_private::RegisterInfo * 7849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::GetRegisterInfoAtIndex (size_t reg) 7949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 8049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata if (reg) 8149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return NULL; 8249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return &m_pc_reg_info; 8349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 8449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 8549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatasize_t 8649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::GetRegisterSetCount () 8749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 8849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return 1; 8949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 9049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 9149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granataconst lldb_private::RegisterSet * 9249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::GetRegisterSet (size_t reg_set) 9349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 9449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata if (reg_set) 9549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return NULL; 9649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return &m_reg_set0; 9749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 9849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 9949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatabool 10049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::ReadRegister (const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value) 10149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 10249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata if (!reg_info) 10349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return false; 10449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata uint32_t reg_number = reg_info->kinds[eRegisterKindGeneric]; 10549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata if (reg_number == LLDB_REGNUM_GENERIC_PC) 10649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata { 10749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata value.SetUInt(LLDB_INVALID_ADDRESS, reg_info->byte_size); 10849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return true; 10949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata } 11049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return false; 11149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 11249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 11349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatabool 11449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::WriteRegister (const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value) 11549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 11649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return false; 11749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 11849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 11949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatabool 12049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::ReadAllRegisterValues (lldb::DataBufferSP &data_sp) 12149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 12249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return false; 12349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 12449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 12549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatabool 12649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) 12749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 12849ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return false; 12949ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 13049ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata 13149ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granatauint32_t 13249ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico GranataRegisterContextDummy::ConvertRegisterKindToRegisterNumber (uint32_t kind, uint32_t num) 13349ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata{ 13449ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata if (kind == eRegisterKindGeneric && num == LLDB_REGNUM_GENERIC_PC) 13549ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return 0; 13649ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata return LLDB_INVALID_REGNUM; 13749ff4e6008bdeb28de57fa4c931aeb8cc67152d4Enrico Granata} 138