LLDB  mainline
RegisterContextDummy.cpp
Go to the documentation of this file.
1 //===-- RegisterContextDummy.cpp ---------------------------------*- C++
2 //-*-===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "lldb/Core/Address.h"
11 #include "lldb/Core/AddressRange.h"
12 #include "lldb/Core/Module.h"
13 #include "lldb/Core/Value.h"
16 #include "lldb/Symbol/Function.h"
17 #include "lldb/Symbol/ObjectFile.h"
18 #include "lldb/Symbol/Symbol.h"
20 #include "lldb/Target/ABI.h"
23 #include "lldb/Target/Process.h"
24 #include "lldb/Target/StackFrame.h"
25 #include "lldb/Target/Target.h"
26 #include "lldb/Target/Thread.h"
28 #include "lldb/Utility/Log.h"
30 #include "lldb/lldb-private.h"
31 
32 #include "RegisterContextDummy.h"
33 
34 using namespace lldb;
35 using namespace lldb_private;
36 
37 RegisterContextDummy::RegisterContextDummy(Thread &thread,
38  uint32_t concrete_frame_idx,
39  uint32_t address_byte_size)
40  : RegisterContext(thread, concrete_frame_idx) {
41  m_reg_set0.name = "General Purpose Registers";
42  m_reg_set0.short_name = "GPR";
43  m_reg_set0.num_registers = 1;
44  m_reg_set0.registers = new uint32_t(0);
45 
46  m_pc_reg_info.name = "pc";
47  m_pc_reg_info.alt_name = "pc";
48  m_pc_reg_info.byte_offset = 0;
49  m_pc_reg_info.byte_size = address_byte_size;
50  m_pc_reg_info.encoding = eEncodingUint;
51  m_pc_reg_info.format = eFormatPointer;
52  m_pc_reg_info.invalidate_regs = NULL;
53  m_pc_reg_info.value_regs = NULL;
54  m_pc_reg_info.kinds[eRegisterKindEHFrame] = LLDB_INVALID_REGNUM;
55  m_pc_reg_info.kinds[eRegisterKindDWARF] = LLDB_INVALID_REGNUM;
56  m_pc_reg_info.kinds[eRegisterKindGeneric] = LLDB_REGNUM_GENERIC_PC;
57  m_pc_reg_info.kinds[eRegisterKindProcessPlugin] = LLDB_INVALID_REGNUM;
58  m_pc_reg_info.kinds[eRegisterKindLLDB] = LLDB_INVALID_REGNUM;
59 }
60 
62  delete m_reg_set0.registers;
63  delete m_pc_reg_info.invalidate_regs;
64  delete m_pc_reg_info.value_regs;
65 }
66 
68 
70 
71 const lldb_private::RegisterInfo *
73  if (reg)
74  return NULL;
75  return &m_pc_reg_info;
76 }
77 
79 
80 const lldb_private::RegisterSet *
82  if (reg_set)
83  return NULL;
84  return &m_reg_set0;
85 }
86 
88  const lldb_private::RegisterInfo *reg_info,
90  if (!reg_info)
91  return false;
92  uint32_t reg_number = reg_info->kinds[eRegisterKindGeneric];
93  if (reg_number == LLDB_REGNUM_GENERIC_PC) {
94  value.SetUInt(LLDB_INVALID_ADDRESS, reg_info->byte_size);
95  return true;
96  }
97  return false;
98 }
99 
101  const lldb_private::RegisterInfo *reg_info,
102  const lldb_private::RegisterValue &value) {
103  return false;
104 }
105 
106 bool RegisterContextDummy::ReadAllRegisterValues(lldb::DataBufferSP &data_sp) {
107  return false;
108 }
109 
111  const lldb::DataBufferSP &data_sp) {
112  return false;
113 }
114 
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 }
#define LLDB_REGNUM_GENERIC_PC
Definition: lldb-defines.h:63
bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override
Enumerations for broadcasting.
Definition: SBLaunchInfo.h:14
bool ReadAllRegisterValues(lldb::DataBufferSP &data_sp) override
const lldb_private::RegisterSet * GetRegisterSet(size_t reg_set) override
bool SetUInt(uint64_t uint, uint32_t byte_size)
#define LLDB_INVALID_ADDRESS
Invalid value definitions.
Definition: lldb-defines.h:85
uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override
Convert from a given register numbering scheme to the lldb register numbering scheme.
bool WriteRegister(const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value) override
Definition: SBAddress.h:15
const lldb_private::RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
bool ReadRegister(const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value) override
#define LLDB_INVALID_REGNUM
Definition: lldb-defines.h:90