@@ -562,19 +562,21 @@ pub mod migrate {
562
562
) ;
563
563
let gdtr = SegDescV1 :: from_raw (
564
564
vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_GDTR ) ?,
565
+ // GDT has no selector register
565
566
0 ,
566
567
) ;
567
568
let idtr = SegDescV1 :: from_raw (
568
569
vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_IDTR ) ?,
570
+ // IDT has no selector register
569
571
0 ,
570
572
) ;
571
573
let ldtr = SegDescV1 :: from_raw (
572
574
vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_LDTR ) ?,
573
- 0 ,
575
+ vcpu . get_reg ( vm_reg_name :: VM_REG_GUEST_LDTR ) ? as u16 ,
574
576
) ;
575
577
let tr = SegDescV1 :: from_raw (
576
578
vcpu. get_segreg ( vm_reg_name:: VM_REG_GUEST_TR ) ?,
577
- 0 ,
579
+ vcpu . get_reg ( vm_reg_name :: VM_REG_GUEST_TR ) ? as u16 ,
578
580
) ;
579
581
Ok ( Self { cs, ds, es, fs, gs, ss, gdtr, idtr, ldtr, tr } )
580
582
}
@@ -610,11 +612,13 @@ pub mod migrate {
610
612
let ( idtr, _) = self . idtr . into_raw ( ) ;
611
613
vcpu. set_segreg ( vm_reg_name:: VM_REG_GUEST_IDTR , & idtr) ?;
612
614
613
- let ( ldtr, _ ) = self . ldtr . into_raw ( ) ;
615
+ let ( ldtr, ldtrs ) = self . ldtr . into_raw ( ) ;
614
616
vcpu. set_segreg ( vm_reg_name:: VM_REG_GUEST_LDTR , & ldtr) ?;
617
+ vcpu. set_reg ( vm_reg_name:: VM_REG_GUEST_LDTR , ldtrs. into ( ) ) ?;
615
618
616
- let ( tr, _ ) = self . tr . into_raw ( ) ;
619
+ let ( tr, trs ) = self . tr . into_raw ( ) ;
617
620
vcpu. set_segreg ( vm_reg_name:: VM_REG_GUEST_TR , & tr) ?;
621
+ vcpu. set_reg ( vm_reg_name:: VM_REG_GUEST_TR , trs. into ( ) ) ?;
618
622
Ok ( ( ) )
619
623
}
620
624
}
0 commit comments