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