Add push instructions test in test harness
PATCH 1/1 Add push instructions test in test harness
Signed-off-by Mohammed Gamal <[email protected]>
--- kvm/user/test/x86/realmode.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 files changed, 38 insertions(+), 2 deletions(-)
kvm/user/test/x86/realmode.c +38 -2
@@ -467,6 +467,41 @@ void test_long_jmp()if (!regs_equal (&inregs, &outregs,R_AX ) || outregs.eax !=0x1234 )print_serial ("Long JMP Test: FAIL\n" ); } +void test_push () +{ +struct regs inregs = {0 }, outregs; +MK_INSN (push32,"mov $0x12345678, %eax\n\t" +"push %eax\n\t" +"pop %ebx\n\t" ); +MK_INSN (push16,"mov $0x1234, %ax\n\t" +"push %ax\n\t" +"pop %bx\n\t" ); +MK_INSN (push_es,"mov $0x231, %bx\n\t" //Just write a dummy value to see if it gets overwritten +"mov $0x123, %ax\n\t" +"mov %ax, %es\n\t" +"push %es\n\t" +"pop %bx \n\t" + ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_push32, + insn_push32_end - insn_push32); +if (!regs_equal (&inregs, &outregs,R_AX |R_BX ) || outregs.eax != outregs.ebx || outregs.eax !=0x12345678 ) +print_serial ("Push Test 1: FAIL\n" ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_push16, + insn_push16_end - insn_push16); + +if (!regs_equal (&inregs, &outregs,R_AX |R_BX ) || outregs.eax != outregs.ebx || outregs.eax !=0x1234 ) +print_serial ("Push Test 2: FAIL\n" ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_push_es, + insn_push_es_end - insn_push_es); +if (!regs_equal (&inregs, &outregs,R_AX |R_BX ) || outregs.ebx != outregs.eax || outregs.eax !=0x123 ) +print_serial ("Push Test 3: FAIL\n" ); +}void test_null (void ) {
@@ -479,8 +514,9 @@ void test_null(void)void start (void ) {test_null (); - +test_shld (); +test_push ();test_mov_imm ();test_cmp_imm ();test_add_imm ();
@@ -492,7 +528,7 @@ void start(void)test_call ();/* long jmp test uses call near so test it after testing call */ test_long_jmp (); - +exit (0 ); }
Signature · 1 line
1.6.0.4