Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h
39645 views
1
//===-- EmulationStateARM.h -------------------------------------*- C++ -*-===//
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_SOURCE_PLUGINS_INSTRUCTION_ARM_EMULATIONSTATEARM_H
10
#define LLDB_SOURCE_PLUGINS_INSTRUCTION_ARM_EMULATIONSTATEARM_H
11
12
#include <map>
13
14
#include "lldb/Core/EmulateInstruction.h"
15
#include "lldb/Core/Opcode.h"
16
17
class EmulationStateARM {
18
public:
19
EmulationStateARM();
20
21
virtual ~EmulationStateARM();
22
23
bool StorePseudoRegisterValue(uint32_t reg_num, uint64_t value);
24
25
uint64_t ReadPseudoRegisterValue(uint32_t reg_num, bool &success);
26
27
bool StoreToPseudoAddress(lldb::addr_t p_address, uint32_t value);
28
29
uint32_t ReadFromPseudoAddress(lldb::addr_t p_address, bool &success);
30
31
void ClearPseudoRegisters();
32
33
void ClearPseudoMemory();
34
35
bool LoadStateFromDictionary(lldb_private::OptionValueDictionary *test_data);
36
37
bool CompareState(EmulationStateARM &other_state,
38
lldb_private::Stream &out_stream);
39
40
static size_t
41
ReadPseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton,
42
const lldb_private::EmulateInstruction::Context &context,
43
lldb::addr_t addr, void *dst, size_t length);
44
45
static size_t
46
WritePseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton,
47
const lldb_private::EmulateInstruction::Context &context,
48
lldb::addr_t addr, const void *dst, size_t length);
49
50
static bool ReadPseudoRegister(lldb_private::EmulateInstruction *instruction,
51
void *baton,
52
const lldb_private::RegisterInfo *reg_info,
53
lldb_private::RegisterValue &reg_value);
54
55
static bool
56
WritePseudoRegister(lldb_private::EmulateInstruction *instruction,
57
void *baton,
58
const lldb_private::EmulateInstruction::Context &context,
59
const lldb_private::RegisterInfo *reg_info,
60
const lldb_private::RegisterValue &reg_value);
61
62
private:
63
bool LoadRegistersStateFromDictionary(
64
lldb_private::OptionValueDictionary *reg_dict, char kind, int first_reg,
65
int num);
66
67
uint32_t m_gpr[17] = {0};
68
struct _sd_regs {
69
uint32_t s_regs[32]; // sregs 0 - 31 & dregs 0 - 15
70
71
uint64_t d_regs[16]; // dregs 16-31
72
73
} m_vfp_regs;
74
75
std::map<lldb::addr_t, uint32_t> m_memory; // Eventually will want to change
76
// uint32_t to a data buffer heap
77
// type.
78
79
EmulationStateARM(const EmulationStateARM &) = delete;
80
const EmulationStateARM &operator=(const EmulationStateARM &) = delete;
81
};
82
83
#endif // LLDB_SOURCE_PLUGINS_INSTRUCTION_ARM_EMULATIONSTATEARM_H
84
85