1use xen_sys::vm_event_regs_x86;
2
3use super::super::super::{VmEventRegs, VmEventSelectorReg};
4
5#[derive(Debug)]
6pub struct VmEventRegsX86 {
7 pub rax: u64,
8 pub rcx: u64,
9 pub rdx: u64,
10 pub rbx: u64,
11 pub rsp: u64,
12 pub rbp: u64,
13 pub rsi: u64,
14 pub rdi: u64,
15 pub r8: u64,
16 pub r9: u64,
17 pub r10: u64,
18 pub r11: u64,
19 pub r12: u64,
20 pub r13: u64,
21 pub r14: u64,
22 pub r15: u64,
23 pub rflags: u64,
24 pub dr6: u64,
25 pub dr7: u64,
26 pub rip: u64,
27 pub cr0: u64,
28 pub cr2: u64,
29 pub cr3: u64,
30 pub cr4: u64,
31 pub sysenter_cs: u64,
32 pub sysenter_esp: u64,
33 pub sysenter_eip: u64,
34 pub msr_efer: u64,
35 pub msr_star: u64,
36 pub msr_lstar: u64,
37 pub gdtr_base: u64,
38
39 pub npt_base: u64,
46
47 pub vmtrace_pos: u64,
51
52 pub cs_base: u32,
53 pub ss_base: u32,
54 pub ds_base: u32,
55 pub es_base: u32,
56 pub fs_base: u64,
57 pub gs_base: u64,
58 pub cs: VmEventSelectorReg,
59 pub ss: VmEventSelectorReg,
60 pub ds: VmEventSelectorReg,
61 pub es: VmEventSelectorReg,
62 pub fs: VmEventSelectorReg,
63 pub gs: VmEventSelectorReg,
64 pub shadow_gs: u64,
65 pub gdtr_limit: u16,
66 pub cs_sel: u16,
67 pub ss_sel: u16,
68 pub ds_sel: u16,
69 pub es_sel: u16,
70 pub fs_sel: u16,
71 pub gs_sel: u16,
72}
73
74impl From<vm_event_regs_x86> for VmEventRegsX86 {
75 fn from(value: vm_event_regs_x86) -> Self {
76 Self {
77 rax: value.rax,
78 rcx: value.rcx,
79 rdx: value.rdx,
80 rbx: value.rbx,
81 rsp: value.rsp,
82 rbp: value.rbp,
83 rsi: value.rsi,
84 rdi: value.rdi,
85 r8: value.r8,
86 r9: value.r9,
87 r10: value.r10,
88 r11: value.r11,
89 r12: value.r12,
90 r13: value.r13,
91 r14: value.r14,
92 r15: value.r15,
93 rflags: value.rflags,
94 dr6: value.dr6,
95 dr7: value.dr7,
96 rip: value.rip,
97 cr0: value.cr0,
98 cr2: value.cr2,
99 cr3: value.cr3,
100 cr4: value.cr4,
101 sysenter_cs: value.sysenter_cs,
102 sysenter_esp: value.sysenter_esp,
103 sysenter_eip: value.sysenter_eip,
104 msr_efer: value.msr_efer,
105 msr_star: value.msr_star,
106 msr_lstar: value.msr_lstar,
107 gdtr_base: value.gdtr_base,
108 npt_base: value.npt_base,
109 vmtrace_pos: value.vmtrace_pos,
110 cs_base: value.cs_base,
111 ss_base: value.ss_base,
112 ds_base: value.ds_base,
113 es_base: value.es_base,
114 fs_base: value.fs_base,
115 gs_base: value.gs_base,
116 cs: value.cs.into(),
117 ss: value.ss.into(),
118 ds: value.ds.into(),
119 es: value.es.into(),
120 fs: value.fs.into(),
121 gs: value.gs.into(),
122 shadow_gs: value.shadow_gs,
123 gdtr_limit: value.gdtr_limit,
124 cs_sel: value.cs_sel,
125 ss_sel: value.ss_sel,
126 ds_sel: value.ds_sel,
127 es_sel: value.es_sel,
128 fs_sel: value.fs_sel,
129 gs_sel: value.gs_sel,
130 }
131 }
132}
133
134impl From<VmEventRegsX86> for vm_event_regs_x86 {
135 fn from(value: VmEventRegsX86) -> Self {
136 Self {
137 rax: value.rax,
138 rcx: value.rcx,
139 rdx: value.rdx,
140 rbx: value.rbx,
141 rsp: value.rsp,
142 rbp: value.rbp,
143 rsi: value.rsi,
144 rdi: value.rdi,
145 r8: value.r8,
146 r9: value.r9,
147 r10: value.r10,
148 r11: value.r11,
149 r12: value.r12,
150 r13: value.r13,
151 r14: value.r14,
152 r15: value.r15,
153 rflags: value.rflags,
154 dr6: value.dr6,
155 dr7: value.dr7,
156 rip: value.rip,
157 cr0: value.cr0,
158 cr2: value.cr2,
159 cr3: value.cr3,
160 cr4: value.cr4,
161 sysenter_cs: value.sysenter_cs,
162 sysenter_esp: value.sysenter_esp,
163 sysenter_eip: value.sysenter_eip,
164 msr_efer: value.msr_efer,
165 msr_star: value.msr_star,
166 msr_lstar: value.msr_lstar,
167 gdtr_base: value.gdtr_base,
168 npt_base: value.npt_base,
169 vmtrace_pos: value.vmtrace_pos,
170 cs_base: value.cs_base,
171 ss_base: value.ss_base,
172 ds_base: value.ds_base,
173 es_base: value.es_base,
174 fs_base: value.fs_base,
175 gs_base: value.gs_base,
176 cs: value.cs.into(),
177 ss: value.ss.into(),
178 ds: value.ds.into(),
179 es: value.es.into(),
180 fs: value.fs.into(),
181 gs: value.gs.into(),
182 shadow_gs: value.shadow_gs,
183 gdtr_limit: value.gdtr_limit,
184 cs_sel: value.cs_sel,
185 ss_sel: value.ss_sel,
186 ds_sel: value.ds_sel,
187 es_sel: value.es_sel,
188 fs_sel: value.fs_sel,
189 gs_sel: value.gs_sel,
190 _pad: Default::default(),
191 }
192 }
193}
194
195impl From<vm_event_regs_x86> for VmEventRegs {
196 fn from(value: vm_event_regs_x86) -> Self {
197 Self::X86(value.into())
198 }
199}
200
201impl From<VmEventRegs> for vm_event_regs_x86 {
202 fn from(value: VmEventRegs) -> Self {
203 match value {
204 VmEventRegs::X86(regs) => regs.into(),
205 }
206 }
207}