@@ -623,24 +623,11 @@ impl Hypervisor for HypervWindowsDriver {
623623 } ;
624624 self . processor . set_general_purpose_registers ( & regs) ?;
625625
626- // Extract mem_mgr to avoid borrowing conflicts
627- let mem_mgr = self
628- . mem_mgr
629- . take ( )
630- . ok_or_else ( || new_error ! ( "mem_mgr should be initialized" ) ) ?;
631-
632- let result = VirtualCPU :: run (
626+ VirtualCPU :: run (
633627 self . as_mut_hypervisor ( ) ,
634- & mem_mgr,
635628 #[ cfg( gdb) ]
636629 dbg_mem_access_hdl,
637- ) ;
638-
639- // Put mem_mgr back
640- self . mem_mgr = Some ( mem_mgr) ;
641- result?;
642-
643- Ok ( ( ) )
630+ )
644631 }
645632
646633 #[ instrument( err( Debug ) , skip_all, parent = Span :: current( ) , level = "Trace" ) ]
@@ -662,7 +649,6 @@ impl Hypervisor for HypervWindowsDriver {
662649 fn dispatch_call_from_host (
663650 & mut self ,
664651 dispatch_func_addr : RawPtr ,
665- mem_mgr : & MemMgrWrapper < HostSharedMemory > ,
666652 #[ cfg( gdb) ] dbg_mem_access_hdl : DbgMemAccessHandlerWrapper ,
667653 ) -> Result < ( ) > {
668654 // Reset general purpose registers, then set RIP and RSP
@@ -684,7 +670,6 @@ impl Hypervisor for HypervWindowsDriver {
684670
685671 VirtualCPU :: run (
686672 self . as_mut_hypervisor ( ) ,
687- mem_mgr,
688673 #[ cfg( gdb) ]
689674 dbg_mem_access_hdl,
690675 ) ?;
@@ -1094,6 +1079,14 @@ impl Hypervisor for HypervWindowsDriver {
10941079 Ok ( ( ) )
10951080 }
10961081
1082+ fn check_stack_guard ( & self ) -> Result < bool > {
1083+ if let Some ( mgr) = self . mem_mgr . as_ref ( ) {
1084+ mgr. check_stack_guard ( )
1085+ } else {
1086+ Err ( new_error ! ( "Memory manager is not initialized" ) )
1087+ }
1088+ }
1089+
10971090 #[ cfg( feature = "trace_guest" ) ]
10981091 fn read_trace_reg ( & self , reg : TraceRegister ) -> Result < u64 > {
10991092 let regs = self . processor . get_regs ( ) ?;
0 commit comments