Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextDummy.cpp
96381 views
//===-- RegisterContextDummy.cpp ------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Core/Address.h"9#include "lldb/Core/AddressRange.h"10#include "lldb/Core/Module.h"11#include "lldb/Core/Value.h"12#include "lldb/Expression/DWARFExpression.h"13#include "lldb/Symbol/FuncUnwinders.h"14#include "lldb/Symbol/Function.h"15#include "lldb/Symbol/ObjectFile.h"16#include "lldb/Symbol/Symbol.h"17#include "lldb/Symbol/SymbolContext.h"18#include "lldb/Target/ABI.h"19#include "lldb/Target/DynamicLoader.h"20#include "lldb/Target/ExecutionContext.h"21#include "lldb/Target/Process.h"22#include "lldb/Target/StackFrame.h"23#include "lldb/Target/Target.h"24#include "lldb/Target/Thread.h"25#include "lldb/Utility/DataBufferHeap.h"26#include "lldb/Utility/Log.h"27#include "lldb/Utility/RegisterValue.h"28#include "lldb/lldb-private.h"2930#include "RegisterContextDummy.h"3132using namespace lldb;33using namespace lldb_private;3435RegisterContextDummy::RegisterContextDummy(Thread &thread,36uint32_t concrete_frame_idx,37uint32_t address_byte_size)38: RegisterContext(thread, concrete_frame_idx) {39m_reg_set0.name = "General Purpose Registers";40m_reg_set0.short_name = "GPR";41m_reg_set0.num_registers = 1;42m_reg_set0.registers = new uint32_t(0);4344m_pc_reg_info.name = "pc";45m_pc_reg_info.alt_name = "pc";46m_pc_reg_info.byte_offset = 0;47m_pc_reg_info.byte_size = address_byte_size;48m_pc_reg_info.encoding = eEncodingUint;49m_pc_reg_info.format = eFormatPointer;50m_pc_reg_info.invalidate_regs = nullptr;51m_pc_reg_info.value_regs = nullptr;52m_pc_reg_info.kinds[eRegisterKindEHFrame] = LLDB_INVALID_REGNUM;53m_pc_reg_info.kinds[eRegisterKindDWARF] = LLDB_INVALID_REGNUM;54m_pc_reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC;55m_pc_reg_info.kinds[eRegisterKindProcessPlugin] = LLDB_INVALID_REGNUM;56m_pc_reg_info.kinds[eRegisterKindLLDB] = LLDB_INVALID_REGNUM;57}5859RegisterContextDummy::~RegisterContextDummy() {60delete m_reg_set0.registers;61delete m_pc_reg_info.invalidate_regs;62delete m_pc_reg_info.value_regs;63}6465void RegisterContextDummy::InvalidateAllRegisters() {}6667size_t RegisterContextDummy::GetRegisterCount() { return 1; }6869const lldb_private::RegisterInfo *70RegisterContextDummy::GetRegisterInfoAtIndex(size_t reg) {71if (reg)72return nullptr;73return &m_pc_reg_info;74}7576size_t RegisterContextDummy::GetRegisterSetCount() { return 1; }7778const lldb_private::RegisterSet *79RegisterContextDummy::GetRegisterSet(size_t reg_set) {80if (reg_set)81return nullptr;82return &m_reg_set0;83}8485bool RegisterContextDummy::ReadRegister(86const lldb_private::RegisterInfo *reg_info,87lldb_private::RegisterValue &value) {88if (!reg_info)89return false;90uint32_t reg_number = reg_info->kinds[eRegisterKindGeneric];91if (reg_number == LLDB_REGNUM_GENERIC_PC) {92value.SetUInt(LLDB_INVALID_ADDRESS, reg_info->byte_size);93return true;94}95return false;96}9798bool RegisterContextDummy::WriteRegister(99const lldb_private::RegisterInfo *reg_info,100const lldb_private::RegisterValue &value) {101return false;102}103104bool RegisterContextDummy::ReadAllRegisterValues(105lldb::WritableDataBufferSP &data_sp) {106return false;107}108109bool RegisterContextDummy::WriteAllRegisterValues(110const lldb::DataBufferSP &data_sp) {111return false;112}113114uint32_t RegisterContextDummy::ConvertRegisterKindToRegisterNumber(115lldb::RegisterKind kind, uint32_t num) {116if (kind == eRegisterKindGeneric && num == LLDB_REGNUM_GENERIC_PC)117return 0;118return LLDB_INVALID_REGNUM;119}120121122