From patchwork Sat Aug 29 13:29:43 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mohammed Gamal X-Patchwork-Id: 44689 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n7TDToqX026712 for ; Sat, 29 Aug 2009 13:29:50 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751662AbZH2N3q (ORCPT ); Sat, 29 Aug 2009 09:29:46 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751633AbZH2N3q (ORCPT ); Sat, 29 Aug 2009 09:29:46 -0400 Received: from mail-bw0-f219.google.com ([209.85.218.219]:43190 "EHLO mail-bw0-f219.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751627AbZH2N3p (ORCPT ); Sat, 29 Aug 2009 09:29:45 -0400 Received: by bwz19 with SMTP id 19so2039595bwz.37 for ; Sat, 29 Aug 2009 06:29:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer; bh=Qui3F0X/JmGewXOvDHQoCv3BLrE7HZ3z/BWiEQ5/fiQ=; b=Bpp2q1+WBHWdPHu4x00xWD0vAJzU4Q3MQHgaQR4Ly1CHpPRuWxU4pUxItsq9WcmzUZ oB9ncpJs0S5KMADFeyWSuuUVEWci9qMQBf+41K4RPu3z1NgIkFwTv2ONmImVP3Vgid8s sQVEX69GOrFhPUnIy+H+oaLNPtAfRC6B3cDiI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=TZpDwrBWxf4Eh6AegpLc+PybzSBxh2IyZuM0mEmlX5D5FyAjkEile1SArMJinshoKG PKckz4nX/dMJWjxIjOimaiDlZ4gLwfR82zHmSWL8CSIrDrBI6+sVpV6bTaT3dPyaQqD9 g/HTqQ48I+3VrufF+R8e5Cah4XfTEMYWnNHeY= Received: by 10.102.178.9 with SMTP id a9mr985322muf.91.1251552586332; Sat, 29 Aug 2009 06:29:46 -0700 (PDT) Received: from localhost ([41.238.114.100]) by mx.google.com with ESMTPS id i5sm9881359mue.46.2009.08.29.06.29.45 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 29 Aug 2009 06:29:45 -0700 (PDT) From: Mohammed Gamal To: avi@redhat.com Cc: kvm@vger.kernel.org, Mohammed Gamal Subject: [PATCH] Add pusha/popa instructions to the realmode test harness Date: Sat, 29 Aug 2009 15:29:43 +0200 Message-Id: <1251552583-14735-1-git-send-email-m.gamal005@gmail.com> X-Mailer: git-send-email 1.6.0.4 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org This adds tests for pusha/popa to the test harness. Added some new typedefs while as well. Signed-off-by: Mohammed Gamal --- kvm/user/test/x86/realmode.c | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-) diff --git a/kvm/user/test/x86/realmode.c b/kvm/user/test/x86/realmode.c index 0db09b8..20d038e 100644 --- a/kvm/user/test/x86/realmode.c +++ b/kvm/user/test/x86/realmode.c @@ -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)