Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
96380 views
1
//===-- RegisterContextFreeBSD_i386.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-exception
6
//
7
//===---------------------------------------------------------------------===//
8
9
#include "RegisterContextFreeBSD_i386.h"
10
#include "RegisterContextPOSIX_x86.h"
11
12
using namespace lldb_private;
13
using namespace lldb;
14
15
// http://svnweb.freebsd.org/base/head/sys/x86/include/reg.h
16
struct GPR {
17
uint32_t fs;
18
uint32_t es;
19
uint32_t ds;
20
uint32_t edi;
21
uint32_t esi;
22
uint32_t ebp;
23
uint32_t isp;
24
uint32_t ebx;
25
uint32_t edx;
26
uint32_t ecx;
27
uint32_t eax;
28
uint32_t trapno;
29
uint32_t err;
30
uint32_t eip;
31
uint32_t cs;
32
uint32_t eflags;
33
uint32_t esp;
34
uint32_t ss;
35
uint32_t gs;
36
};
37
38
struct DBG {
39
uint32_t dr[8]; /* debug registers */
40
/* Index 0-3: debug address registers */
41
/* Index 4-5: reserved */
42
/* Index 6: debug status */
43
/* Index 7: debug control */
44
};
45
46
using FPR_i386 = FXSAVE;
47
48
struct UserArea {
49
GPR gpr;
50
FPR_i386 i387;
51
DBG dbg;
52
};
53
54
#define DR_SIZE sizeof(uint32_t)
55
#define DR_OFFSET(reg_index) \
56
(LLVM_EXTENSION offsetof(UserArea, dbg) + \
57
LLVM_EXTENSION offsetof(DBG, dr[reg_index]))
58
59
// Include RegisterInfos_i386 to declare our g_register_infos_i386 structure.
60
#define DECLARE_REGISTER_INFOS_I386_STRUCT
61
#include "RegisterInfos_i386.h"
62
#undef DECLARE_REGISTER_INFOS_I386_STRUCT
63
64
RegisterContextFreeBSD_i386::RegisterContextFreeBSD_i386(
65
const ArchSpec &target_arch)
66
: RegisterInfoInterface(target_arch) {}
67
68
size_t RegisterContextFreeBSD_i386::GetGPRSize() const { return sizeof(GPR); }
69
70
const RegisterInfo *RegisterContextFreeBSD_i386::GetRegisterInfo() const {
71
switch (GetTargetArchitecture().GetMachine()) {
72
case llvm::Triple::x86:
73
return g_register_infos_i386;
74
default:
75
assert(false && "Unhandled target architecture.");
76
return nullptr;
77
}
78
}
79
80
uint32_t RegisterContextFreeBSD_i386::GetRegisterCount() const {
81
return static_cast<uint32_t>(sizeof(g_register_infos_i386) /
82
sizeof(g_register_infos_i386[0]));
83
}
84
85