a82bce56777eca320cbcc5041946b7512943b183wrowe; $Id$
a82bce56777eca320cbcc5041946b7512943b183wrowe;; @file
a82bce56777eca320cbcc5041946b7512943b183wrowe; Instruction Test Environment - Boot Sector Type 2, Ring-0.
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe; Copyright (C) 2006-2013 Oracle Corporation
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe; This file is part of VirtualBox Open Source Edition (OSE), as
a82bce56777eca320cbcc5041946b7512943b183wrowe; available from http://www.virtualbox.org. This file is free software;
a82bce56777eca320cbcc5041946b7512943b183wrowe; you can redistribute it and/or modify it under the terms of the GNU
a82bce56777eca320cbcc5041946b7512943b183wrowe; General Public License (GPL) as published by the Free Software
a82bce56777eca320cbcc5041946b7512943b183wrowe; Foundation, in version 2 as it comes in the "COPYING" file of the
a82bce56777eca320cbcc5041946b7512943b183wrowe; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a82bce56777eca320cbcc5041946b7512943b183wrowe; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%ifndef ___env_bs2_r0_common_mac
a82bce56777eca320cbcc5041946b7512943b183wrowe%define ___env_bs2_r0_common_mac
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;; Same as BEGINPROC in asmdefs.mac.
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_BEGINPROC 1
a82bce56777eca320cbcc5041946b7512943b183wroweVBINSTST_GLOBALNAME_EX %1, function hidden
a82bce56777eca320cbcc5041946b7512943b183wrowe%endm
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;; Same as ENDPROC in asmdefs.mac.
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_ENDPROC 1,
a82bce56777eca320cbcc5041946b7512943b183wroweVBINSTST_GLOBALNAME_EX %1 %+ _EndProc, function hidden
a82bce56777eca320cbcc5041946b7512943b183wrowe%endm
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;; Same as NAME in asmdefs.mac.
a82bce56777eca320cbcc5041946b7512943b183wrowe%define VBINSTST_NAME(a_Name) TMPL_NM(a_Name)
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;; Same as GLOBALNAME_EX in asmdefs.mac.
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_GLOBALNAME_EX 2,
a82bce56777eca320cbcc5041946b7512943b183wroweVBINSTST_NAME(%1):
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;; Same as BEGINCODE in asmdefs.mac.
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_BEGINCODE 0,
a82bce56777eca320cbcc5041946b7512943b183wroweBEGINCODE
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;; Same as BEGINDATA in asmdefs.mac.
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_BEGINDATA 0,
a82bce56777eca320cbcc5041946b7512943b183wroweBEGINDATA
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe; Trap related macros.
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe%define VBINSTST_CAN_DO_TRAPS 1
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_TRAP_INSTR 3+,
a82bce56777eca320cbcc5041946b7512943b183wrowe section .traprecs
a82bce56777eca320cbcc5041946b7512943b183wrowe istruc BS2TRAPREC
a82bce56777eca320cbcc5041946b7512943b183wrowe at BS2TRAPREC.offWhere, dd (%%trapinstr - VBINSTST_IMAGE_BASE_LABLE)
a82bce56777eca320cbcc5041946b7512943b183wrowe at BS2TRAPREC.offResumeAddend, db (%%resume - %%trapinstr)
a82bce56777eca320cbcc5041946b7512943b183wrowe at BS2TRAPREC.u8TrapNo, db %1
a82bce56777eca320cbcc5041946b7512943b183wrowe at BS2TRAPREC.u16ErrCd, dw %2
a82bce56777eca320cbcc5041946b7512943b183wrowe iend
a82bce56777eca320cbcc5041946b7512943b183wrowe VBINSTST_BEGINCODE
a82bce56777eca320cbcc5041946b7512943b183wrowe %if %1 != X86_XCPT_BP
a82bce56777eca320cbcc5041946b7512943b183wrowe %%trapinstr:
a82bce56777eca320cbcc5041946b7512943b183wrowe %3
a82bce56777eca320cbcc5041946b7512943b183wrowe %else
a82bce56777eca320cbcc5041946b7512943b183wrowe %3
a82bce56777eca320cbcc5041946b7512943b183wrowe %%trapinstr:
a82bce56777eca320cbcc5041946b7512943b183wrowe %endif
a82bce56777eca320cbcc5041946b7512943b183wrowe call VBINSTST_NAME(Common_MissingTrap_ %+ %1)
a82bce56777eca320cbcc5041946b7512943b183wrowe %%resume:
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_TRAP_RECS_BEGIN 0,
a82bce56777eca320cbcc5041946b7512943b183wrowe VBINSTST_BEGINDATA
a82bce56777eca320cbcc5041946b7512943b183wrowe section .traprecs progbits valign=8 vfollows=.data align=8 follows=.data
a82bce56777eca320cbcc5041946b7512943b183wrowe dq 0ffffffffeeeeeeeeh
a82bce56777eca320cbcc5041946b7512943b183wrowe dq 0ddddddddcccccccch
a82bce56777eca320cbcc5041946b7512943b183wroweVBINSTST_GLOBALNAME_EX g_aTrapRecs, hidden
a82bce56777eca320cbcc5041946b7512943b183wrowe VBINSTST_BEGINCODE
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_TRAP_RECS_END 0,
a82bce56777eca320cbcc5041946b7512943b183wrowe section .traprecs
a82bce56777eca320cbcc5041946b7512943b183wroweVBINSTST_GLOBALNAME_EX g_aTrapRecsEnd, hidden
a82bce56777eca320cbcc5041946b7512943b183wrowe dq 0ddddddddcccccccch
a82bce56777eca320cbcc5041946b7512943b183wrowe dq 0ffffffffeeeeeeeeh
a82bce56777eca320cbcc5041946b7512943b183wrowe VBINSTST_BEGINCODE
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_TRAP_RECS_INSTALL 0,
a82bce56777eca320cbcc5041946b7512943b183wrowe mov sAX, VBINSTST_NAME(g_aTrapRecs)
a82bce56777eca320cbcc5041946b7512943b183wrowe mov edx, VBINSTST_NAME(g_aTrapRecsEnd) - VBINSTST_NAME(g_aTrapRecs)
a82bce56777eca320cbcc5041946b7512943b183wrowe shr edx, BS2TRAPREC_SIZE_SHIFT
a82bce56777eca320cbcc5041946b7512943b183wrowe mov sCX, VBINSTST_IMAGE_BASE_LABLE
a82bce56777eca320cbcc5041946b7512943b183wrowe VBINSTST_CALL_TEST_INSTALL_TRAP_RECS
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%macro VBINSTST_TRAP_RECS_UNINSTALL 0,
a82bce56777eca320cbcc5041946b7512943b183wrowe xor sAX, sAX
a82bce56777eca320cbcc5041946b7512943b183wrowe xor edx, edx
a82bce56777eca320cbcc5041946b7512943b183wrowe xor sCX, sCX
a82bce56777eca320cbcc5041946b7512943b183wrowe VBINSTST_CALL_TEST_INSTALL_TRAP_RECS
a82bce56777eca320cbcc5041946b7512943b183wrowe%endmacro
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe; Include the common bits (contains code using above macros)
a82bce56777eca320cbcc5041946b7512943b183wrowe;
a82bce56777eca320cbcc5041946b7512943b183wrowe%include "env-common.mac"
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe%endif
a82bce56777eca320cbcc5041946b7512943b183wrowe
a82bce56777eca320cbcc5041946b7512943b183wrowe