Add pusha/popa instructions to the realmode test harness
PATCH 1/1 Add pusha/popa instructions to the realmode test harness
This adds tests for pusha/popa to the test harness. Added some new typedefs as well.
Signed-off-by Mohammed Gamal <[email protected]>
--- kvm/user/test/x86/realmode.c | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-)
kvm/user/test/x86/realmode.c +37 -0
@@ -4,6 +4,10 @@ typedef unsigned char u8;typedef unsigned short u16 ;typedef unsigned u32 ;typedef unsigned long long u64 ; +typedef signed char s8 ; +typedef signed short s16 ; +typedef signed s32 ; +typedef signed long long s64 ;void test_function (void );
@@ -470,6 +474,7 @@ void test_long_jmp()void test_push_pop () {struct regs inregs = {0 }, outregs; +MK_INSN (push32,"mov $0x12345678, %eax\n\t" "push %eax\n\t" "pop %ebx\n\t" );
@@ -499,6 +504,10 @@ void test_push_pop()"mov %fs, %ebx\n\t" "pop %fs\n\t" ); +MK_INSN (pusha,"pushaw\n\t" ); +MK_INSN (pushad,"pushal\n\t" ); +MK_INSN (popa,"popaw\n\t" ); +MK_INSN (popad,"popal\n\t" ); exec_in_big_real_mode(&inregs, &outregs, insn_push32,
@@ -539,6 +548,34 @@ void test_push_pop()if (!regs_equal (&inregs, &outregs,R_AX |R_BX ) || outregs.ebx != outregs.eax)print_serial ("Push/Pop Test 6: FAIL\n" ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_pusha, + insn_pusha_end - insn_pusha); +if (!regs_equal (&inregs, &outregs,R_SP ) + || (s16 )outregs.esp != (s16)(inregs.esp -16 )) +print_serial ("Push/Pop Test 7: FAIL\n" ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_popa, + insn_popa_end - insn_popa); +if (outregs.esp != (inregs.esp +16 )) +print_serial ("Push/Pop Test 8: FAIL\n" ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_pushad, + insn_pushad_end - insn_pushad); + +if (!regs_equal (&inregs, &outregs,R_SP ) + || (s16 )outregs.esp != (s16)(inregs.esp -32 )) +print_serial ("Push/Pop Test 9: FAIL\n" ); + +exec_in_big_real_mode (&inregs, &outregs, + insn_popad, + insn_popad_end - insn_popad); + +if (outregs.esp != (inregs.esp +32 )) +print_serial ("Push/Pop Test 10: FAIL\n" ); }void test_null (void )
Signature · 1 line
1.6.0.4
Quoted 3 lines · Mohammed Gamal
This adds tests for pusha/popa to the test harness. Added some new typedefs as well.
It would be good to test memory contents after pusha, and register contents after popa.
Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.