Skip to contentSkip to conversation

: test fninit/fnstsw/fnstcw instructions emulation

PATCH New Gleb Natapov 1 participant 1 message Dec 20, 2012 KVM

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 : test fninit/fnstsw/fnstcw instructions emulation

Add test for fninit/fnstsw/fnstcw instructions emulation. This exact code sequence is executed by Linux kernel during boot and sometimes gets emulated by KVM.

x86/realmode.c +13 -0
index 549b36a..f5426e0 100644
@@ -1384,6 +1384,18 @@ static void test_aad(void)
     report("aad", R_AX, outregs.eax == 0x123400d4);
 }
 
+static void test_fninit(void)
+{
+	u16 fcw = -1, fsw = -1;
+	MK_INSN(fninit, "fninit ; fnstsw (%eax) ; fnstcw (%ebx)");
+
+	inregs.eax = (u32)&fsw;
+	inregs.ebx = (u32)&fcw;
+
+	exec_in_big_real_mode(&insn_fninit);
+	report("fninit", 0, fsw == 0 && (fcw & 0x103f) == 0x003f);
+}
+
 void realmode_start(void)
 {
 	test_null();
@@ -1424,6 +1436,7 @@ void realmode_start(void)
 	test_movzx_movsx();
 	test_bswap();
 	test_aad();
+	test_fninit();
 
 	exit(0);
 }

--
Gleb.