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