VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/MdeModulePkg/Include/Protocol/EbcVmTest.h@ 77662

Last change on this file since 77662 was 77662, checked in by vboxsync, 6 years ago

EFI: First step in UDK2018 merge. Does not build yet.

  • Property svn:eol-style set to native
File size: 6.5 KB
Line 
1/** @file
2 EBC VM Test protocol for test purposes.
3
4Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
5
6This program and the accompanying materials
7are licensed and made available under the terms and conditions
8of the BSD License which accompanies this distribution. The
9full text of the license may be found at
10http://opensource.org/licenses/bsd-license.php
11
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15**/
16
17#ifndef _EBC_VM_TEST_PROTOCOL_H_
18#define _EBC_VM_TEST_PROTOCOL_H_
19
20//
21// Define a protocol for an EBC VM test interface.
22//
23#define EFI_EBC_VM_TEST_PROTOCOL_GUID \
24 { \
25 0xAAEACCFD, 0xF27B, 0x4C17, { 0xB6, 0x10, 0x75, 0xCA, 0x1F, 0x2D, 0xFB, 0x52 } \
26 }
27
28//
29// Define for forward reference.
30//
31typedef struct _EFI_EBC_VM_TEST_PROTOCOL EFI_EBC_VM_TEST_PROTOCOL;
32
33//
34// VM major/minor version
35//
36#define VM_MAJOR_VERSION 1
37#define VM_MINOR_VERSION 0
38
39//
40// Bits in the VM->StopFlags field
41//
42#define STOPFLAG_APP_DONE 0x0001
43#define STOPFLAG_BREAKPOINT 0x0002
44#define STOPFLAG_INVALID_BREAK 0x0004
45#define STOPFLAG_BREAK_ON_CALLEX 0x0008
46
47//
48// Masks for working with the VM flags register
49//
50#define VMFLAGS_CC 0x0001 // condition flag
51#define VMFLAGS_STEP 0x0002 // step instruction mode
52#define VMFLAGS_ALL_VALID (VMFLAGS_CC | VMFLAGS_STEP)
53
54//
55// Macros for operating on the VM flags register
56//
57#define VMFLAG_SET(pVM, Flag) (pVM->Flags |= (Flag))
58#define VMFLAG_ISSET(pVM, Flag) ((pVM->Flags & (Flag)) ? 1 : 0)
59#define VMFLAG_CLEAR(pVM, Flag) (pVM->Flags &= ~(Flag))
60
61//
62// Define a macro to get the operand. Then we can change it to be either a
63// direct read or have it call a function to read memory.
64//
65#define GETOPERANDS(pVM) (UINT8) (*(UINT8 *) (pVM->Ip + 1))
66#define GETOPCODE(pVM) (UINT8) (*(UINT8 *) pVM->Ip)
67
68//
69// Macros for operating on the VM GP registers
70//
71#define OPERAND1_REGDATA(pVM, Op) pVM->Gpr[OPERAND1_REGNUM (Op)]
72#define OPERAND2_REGDATA(pVM, Op) pVM->Gpr[OPERAND2_REGNUM (Op)]
73
74//
75// Bits of exception flags field of VM context
76//
77#define EXCEPTION_FLAG_FATAL 0x80000000 // can't continue
78#define EXCEPTION_FLAG_ERROR 0x40000000 // bad, but try to continue
79#define EXCEPTION_FLAG_WARNING 0x20000000 // harmless problem
80#define EXCEPTION_FLAG_NONE 0x00000000 // for normal return
81
82///
83/// instruction pointer for the VM
84///
85typedef UINT8 *VMIP;
86
87typedef INT64 VM_REGISTER;
88typedef UINT32 EXCEPTION_FLAGS;
89
90typedef struct {
91 VM_REGISTER Gpr[8]; ///< General purpose registers.
92 ///< Flags register:
93 ///< 0 Set to 1 if the result of the last compare was true
94 ///< 1 Set to 1 if stepping
95 UINT64 Flags; ///< 2..63 Reserved.
96 VMIP Ip; ///< Instruction pointer.
97 UINTN LastException;
98 EXCEPTION_FLAGS ExceptionFlags; ///< to keep track of exceptions
99 UINT32 StopFlags;
100 UINT32 CompilerVersion; ///< via break(6)
101 UINTN HighStackBottom; ///< bottom of the upper stack
102 UINTN LowStackTop; ///< top of the lower stack
103 UINT64 StackRetAddr; ///< location of final return address on stack
104 UINTN *StackMagicPtr; ///< pointer to magic value on stack to detect corruption
105 EFI_HANDLE ImageHandle; ///< for this EBC driver
106 EFI_SYSTEM_TABLE *SystemTable; ///< for debugging only
107 UINTN LastAddrConverted; ///< for debug
108 UINTN LastAddrConvertedValue; ///< for debug
109 VOID *FramePtr;
110 VOID *EntryPoint; ///< entry point of EBC image
111 UINTN ImageBase;
112 VOID *StackPool;
113 VOID *StackTop;
114} VM_CONTEXT;
115
116/**
117 Given a pointer to a new VM context, execute one or more instructions. This
118 function is only used for test purposes.
119
120 @param[in] This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
121 @param[in] VmPtr A pointer to a VM context.
122 @param[in, out] InstructionCount A pointer to a UINTN value holding the number of
123 instructions to execute. If it holds value of 0,
124 then the instruction to be executed is 1.
125
126 @retval EFI_UNSUPPORTED At least one of the opcodes is not supported.
127 @retval EFI_SUCCESS All of the instructions are executed successfully.
128
129**/
130typedef
131EFI_STATUS
132(EFIAPI *EBC_VM_TEST_EXECUTE) (
133 IN EFI_EBC_VM_TEST_PROTOCOL *This,
134 IN VM_CONTEXT *VmPtr,
135 IN OUT UINTN *InstructionCount
136 );
137
138/**
139 Convert AsmText to the instruction. This function is only used for test purposes.
140
141 @param[in] This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
142 @param[in] AsmText A pointer to EBC ASM text code.
143 @param[out] Buffer Buffer to store the instruction.
144 @param[out] BufferLen Size of buffer that is required to store data.
145
146 @retval EFI_UNSUPPORTED This functionality is unsupported.
147 @retval EFI_SUCCESS Successfully convert AsmText to the instruction.
148
149**/
150typedef
151EFI_STATUS
152(EFIAPI *EBC_VM_TEST_ASM) (
153 IN EFI_EBC_VM_TEST_PROTOCOL *This,
154 IN CHAR16 *AsmText,
155 IN OUT INT8 *Buffer,
156 IN OUT UINTN *BufferLen
157 );
158
159/**
160 Dump the executed instruction. This function is only used for test purposes.
161
162 @param[in] This A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
163 @param[out] AsmText Contain the disasm text.
164 @param[out] Buffer Buffer to store the instruction.
165 @param[out] BufferLen Size of buffer that is required to store data.
166
167 @retval EFI_UNSUPPORTED This functionality is unsupported.
168 @retval EFI_SUCCESS Successfully dump the executed instruction.
169
170**/
171typedef
172EFI_STATUS
173(EFIAPI *EBC_VM_TEST_DASM) (
174 IN EFI_EBC_VM_TEST_PROTOCOL *This,
175 IN OUT CHAR16 *AsmText,
176 IN OUT INT8 *Buffer,
177 IN OUT UINTN *Len
178 );
179
180//
181// Prototype for the actual EBC test protocol interface
182//
183struct _EFI_EBC_VM_TEST_PROTOCOL {
184 EBC_VM_TEST_EXECUTE Execute;
185 EBC_VM_TEST_ASM Assemble;
186 EBC_VM_TEST_DASM Disassemble;
187};
188
189extern EFI_GUID gEfiEbcVmTestProtocolGuid;
190
191#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette