121 lines · cpp
1//===-- RegisterContextDummy.cpp ------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Core/Address.h"10#include "lldb/Core/AddressRange.h"11#include "lldb/Core/Module.h"12#include "lldb/Core/Value.h"13#include "lldb/Expression/DWARFExpression.h"14#include "lldb/Symbol/FuncUnwinders.h"15#include "lldb/Symbol/Function.h"16#include "lldb/Symbol/ObjectFile.h"17#include "lldb/Symbol/Symbol.h"18#include "lldb/Symbol/SymbolContext.h"19#include "lldb/Target/ABI.h"20#include "lldb/Target/DynamicLoader.h"21#include "lldb/Target/ExecutionContext.h"22#include "lldb/Target/Process.h"23#include "lldb/Target/StackFrame.h"24#include "lldb/Target/Target.h"25#include "lldb/Target/Thread.h"26#include "lldb/Utility/DataBufferHeap.h"27#include "lldb/Utility/Log.h"28#include "lldb/Utility/RegisterValue.h"29#include "lldb/lldb-private.h"30 31#include "RegisterContextDummy.h"32 33using namespace lldb;34using namespace lldb_private;35 36RegisterContextDummy::RegisterContextDummy(Thread &thread,37 uint32_t concrete_frame_idx,38 uint32_t address_byte_size)39 : RegisterContext(thread, concrete_frame_idx) {40 m_reg_set0.name = "General Purpose Registers";41 m_reg_set0.short_name = "GPR";42 m_reg_set0.num_registers = 1;43 m_reg_set0.registers = new uint32_t(0);44 45 m_pc_reg_info.name = "pc";46 m_pc_reg_info.alt_name = "pc";47 m_pc_reg_info.byte_offset = 0;48 m_pc_reg_info.byte_size = address_byte_size;49 m_pc_reg_info.encoding = eEncodingUint;50 m_pc_reg_info.format = eFormatPointer;51 m_pc_reg_info.invalidate_regs = nullptr;52 m_pc_reg_info.value_regs = nullptr;53 m_pc_reg_info.kinds[eRegisterKindEHFrame] = LLDB_INVALID_REGNUM;54 m_pc_reg_info.kinds[eRegisterKindDWARF] = LLDB_INVALID_REGNUM;55 m_pc_reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC;56 m_pc_reg_info.kinds[eRegisterKindProcessPlugin] = LLDB_INVALID_REGNUM;57 m_pc_reg_info.kinds[eRegisterKindLLDB] = LLDB_INVALID_REGNUM;58}59 60RegisterContextDummy::~RegisterContextDummy() {61 delete m_reg_set0.registers;62 delete m_pc_reg_info.invalidate_regs;63 delete m_pc_reg_info.value_regs;64}65 66void RegisterContextDummy::InvalidateAllRegisters() {}67 68size_t RegisterContextDummy::GetRegisterCount() { return 1; }69 70const lldb_private::RegisterInfo *71RegisterContextDummy::GetRegisterInfoAtIndex(size_t reg) {72 if (reg)73 return nullptr;74 return &m_pc_reg_info;75}76 77size_t RegisterContextDummy::GetRegisterSetCount() { return 1; }78 79const lldb_private::RegisterSet *80RegisterContextDummy::GetRegisterSet(size_t reg_set) {81 if (reg_set)82 return nullptr;83 return &m_reg_set0;84}85 86bool RegisterContextDummy::ReadRegister(87 const lldb_private::RegisterInfo *reg_info,88 lldb_private::RegisterValue &value) {89 if (!reg_info)90 return false;91 uint32_t reg_number = reg_info->kinds[eRegisterKindGeneric];92 if (reg_number == LLDB_REGNUM_GENERIC_PC) {93 value.SetUInt(LLDB_INVALID_ADDRESS, reg_info->byte_size);94 return true;95 }96 return false;97}98 99bool RegisterContextDummy::WriteRegister(100 const lldb_private::RegisterInfo *reg_info,101 const lldb_private::RegisterValue &value) {102 return false;103}104 105bool RegisterContextDummy::ReadAllRegisterValues(106 lldb::WritableDataBufferSP &data_sp) {107 return false;108}109 110bool RegisterContextDummy::WriteAllRegisterValues(111 const lldb::DataBufferSP &data_sp) {112 return false;113}114 115uint32_t RegisterContextDummy::ConvertRegisterKindToRegisterNumber(116 lldb::RegisterKind kind, uint32_t num) {117 if (kind == eRegisterKindGeneric && num == LLDB_REGNUM_GENERIC_PC)118 return 0;119 return LLDB_INVALID_REGNUM;120}121