@@ -23,6 +23,8 @@ use kvm_ioctls::{Kvm, VcpuExit, VcpuFd, VmFd};
23
23
use tracing:: { instrument, Span } ;
24
24
25
25
use super :: fpu:: { FP_CONTROL_WORD_DEFAULT , FP_TAG_WORD_DEFAULT , MXCSR_DEFAULT } ;
26
+ #[ cfg( gdb) ]
27
+ use super :: gdb:: create_gdb_thread;
26
28
use super :: handlers:: { MemAccessHandlerWrapper , OutBHandlerWrapper } ;
27
29
use super :: {
28
30
HyperlightExit , Hypervisor , VirtualCPU , CR0_AM , CR0_ET , CR0_MP , CR0_NE , CR0_PE , CR0_PG , CR0_WP ,
@@ -31,6 +33,8 @@ use super::{
31
33
use crate :: hypervisor:: hypervisor_handler:: HypervisorHandler ;
32
34
use crate :: mem:: memory_region:: { MemoryRegion , MemoryRegionFlags } ;
33
35
use crate :: mem:: ptr:: { GuestPtr , RawPtr } ;
36
+ #[ cfg( gdb) ]
37
+ use crate :: sandbox:: uninitialized:: DebugInfo ;
34
38
use crate :: { log_then_return, new_error, Result } ;
35
39
36
40
/// Return `true` if the KVM API is available, version 12, and has UserMemory capability, or `false` otherwise
@@ -75,6 +79,7 @@ impl KVMDriver {
75
79
pml4_addr : u64 ,
76
80
entrypoint : u64 ,
77
81
rsp : u64 ,
82
+ #[ cfg( gdb) ] debug_info : & Option < DebugInfo > ,
78
83
) -> Result < Self > {
79
84
let kvm = Kvm :: new ( ) ?;
80
85
@@ -101,6 +106,11 @@ impl KVMDriver {
101
106
let mut vcpu_fd = vm_fd. create_vcpu ( 0 ) ?;
102
107
Self :: setup_initial_sregs ( & mut vcpu_fd, pml4_addr) ?;
103
108
109
+ #[ cfg( gdb) ]
110
+ if let Some ( DebugInfo { port } ) = debug_info {
111
+ create_gdb_thread ( * port) . map_err ( |_| new_error ! ( "Cannot create GDB thread" ) ) ?;
112
+ }
113
+
104
114
let rsp_gp = GuestPtr :: try_from ( RawPtr :: from ( rsp) ) ?;
105
115
Ok ( Self {
106
116
_kvm : kvm,
0 commit comments