REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			185 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  EBC VM Test protocol for test purposes.
 | 
						|
 | 
						|
Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EBC_VM_TEST_PROTOCOL_H_
 | 
						|
#define _EBC_VM_TEST_PROTOCOL_H_
 | 
						|
 | 
						|
//
 | 
						|
// Define a protocol for an EBC VM test interface.
 | 
						|
//
 | 
						|
#define EFI_EBC_VM_TEST_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0xAAEACCFD, 0xF27B, 0x4C17, { 0xB6, 0x10, 0x75, 0xCA, 0x1F, 0x2D, 0xFB, 0x52 } \
 | 
						|
  }
 | 
						|
 | 
						|
//
 | 
						|
// Define for forward reference.
 | 
						|
//
 | 
						|
typedef struct _EFI_EBC_VM_TEST_PROTOCOL EFI_EBC_VM_TEST_PROTOCOL;
 | 
						|
 | 
						|
//
 | 
						|
// VM major/minor version
 | 
						|
//
 | 
						|
#define VM_MAJOR_VERSION  1
 | 
						|
#define VM_MINOR_VERSION  0
 | 
						|
 | 
						|
//
 | 
						|
// Bits in the VM->StopFlags field
 | 
						|
//
 | 
						|
#define STOPFLAG_APP_DONE         0x0001
 | 
						|
#define STOPFLAG_BREAKPOINT       0x0002
 | 
						|
#define STOPFLAG_INVALID_BREAK    0x0004
 | 
						|
#define STOPFLAG_BREAK_ON_CALLEX  0x0008
 | 
						|
 | 
						|
//
 | 
						|
// Masks for working with the VM flags register
 | 
						|
//
 | 
						|
#define VMFLAGS_CC         0x0001 // condition flag
 | 
						|
#define VMFLAGS_STEP       0x0002 // step instruction mode
 | 
						|
#define VMFLAGS_ALL_VALID  (VMFLAGS_CC | VMFLAGS_STEP)
 | 
						|
 | 
						|
//
 | 
						|
// Macros for operating on the VM flags register
 | 
						|
//
 | 
						|
#define VMFLAG_SET(pVM, Flag)    (pVM->Flags |= (Flag))
 | 
						|
#define VMFLAG_ISSET(pVM, Flag)  ((pVM->Flags & (Flag)) ? 1 : 0)
 | 
						|
#define VMFLAG_CLEAR(pVM, Flag)  (pVM->Flags &= ~(Flag))
 | 
						|
 | 
						|
//
 | 
						|
// Define a macro to get the operand. Then we can change it to be either a
 | 
						|
// direct read or have it call a function to read memory.
 | 
						|
//
 | 
						|
#define GETOPERANDS(pVM)  (UINT8) (*(UINT8 *) (pVM->Ip + 1))
 | 
						|
#define GETOPCODE(pVM)    (UINT8) (*(UINT8 *) pVM->Ip)
 | 
						|
 | 
						|
//
 | 
						|
// Macros for operating on the VM GP registers
 | 
						|
//
 | 
						|
#define OPERAND1_REGDATA(pVM, Op)  pVM->Gpr[OPERAND1_REGNUM (Op)]
 | 
						|
#define OPERAND2_REGDATA(pVM, Op)  pVM->Gpr[OPERAND2_REGNUM (Op)]
 | 
						|
 | 
						|
//
 | 
						|
// Bits of exception flags field of VM context
 | 
						|
//
 | 
						|
#define EXCEPTION_FLAG_FATAL    0x80000000  // can't continue
 | 
						|
#define EXCEPTION_FLAG_ERROR    0x40000000  // bad, but try to continue
 | 
						|
#define EXCEPTION_FLAG_WARNING  0x20000000  // harmless problem
 | 
						|
#define EXCEPTION_FLAG_NONE     0x00000000  // for normal return
 | 
						|
 | 
						|
///
 | 
						|
/// instruction pointer for the VM
 | 
						|
///
 | 
						|
typedef UINT8 *VMIP;
 | 
						|
 | 
						|
typedef INT64  VM_REGISTER;
 | 
						|
typedef UINT32 EXCEPTION_FLAGS;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  VM_REGISTER         Gpr[8];               ///< General purpose registers.
 | 
						|
                                            ///< Flags register:
 | 
						|
                                            ///<   0  Set to 1 if the result of the last compare was true
 | 
						|
                                            ///<   1  Set to 1 if stepping
 | 
						|
  UINT64              Flags;                ///<   2..63 Reserved.
 | 
						|
  VMIP                Ip;                   ///< Instruction pointer.
 | 
						|
  UINTN               LastException;
 | 
						|
  EXCEPTION_FLAGS     ExceptionFlags;       ///< to keep track of exceptions
 | 
						|
  UINT32              StopFlags;
 | 
						|
  UINT32              CompilerVersion;        ///< via break(6)
 | 
						|
  UINTN               HighStackBottom;        ///< bottom of the upper stack
 | 
						|
  UINTN               LowStackTop;            ///< top of the lower stack
 | 
						|
  UINT64              StackRetAddr;           ///< location of final return address on stack
 | 
						|
  UINTN               *StackMagicPtr;         ///< pointer to magic value on stack to detect corruption
 | 
						|
  EFI_HANDLE          ImageHandle;            ///< for this EBC driver
 | 
						|
  EFI_SYSTEM_TABLE    *SystemTable;           ///< for debugging only
 | 
						|
  UINTN               LastAddrConverted;      ///< for debug
 | 
						|
  UINTN               LastAddrConvertedValue; ///< for debug
 | 
						|
  VOID                *FramePtr;
 | 
						|
  VOID                *EntryPoint;          ///< entry point of EBC image
 | 
						|
  UINTN               ImageBase;
 | 
						|
  VOID                *StackPool;
 | 
						|
  VOID                *StackTop;
 | 
						|
} VM_CONTEXT;
 | 
						|
 | 
						|
/**
 | 
						|
  Given a pointer to a new VM context, execute one or more instructions. This
 | 
						|
  function is only used for test purposes.
 | 
						|
 | 
						|
  @param[in]      This              A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
 | 
						|
  @param[in]      VmPtr             A pointer to a VM context.
 | 
						|
  @param[in, out] InstructionCount  A pointer to a UINTN value holding the number of
 | 
						|
                                    instructions to execute. If it holds value of 0,
 | 
						|
                                    then the instruction to be executed is 1.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED       At least one of the opcodes is not supported.
 | 
						|
  @retval EFI_SUCCESS           All of the instructions are executed successfully.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EBC_VM_TEST_EXECUTE)(
 | 
						|
  IN EFI_EBC_VM_TEST_PROTOCOL         *This,
 | 
						|
  IN VM_CONTEXT                       *VmPtr,
 | 
						|
  IN OUT UINTN                        *InstructionCount
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Convert AsmText to the instruction. This function is only used for test purposes.
 | 
						|
 | 
						|
  @param[in]  This              A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
 | 
						|
  @param[in]  AsmText           A pointer to EBC ASM text code.
 | 
						|
  @param[out] Buffer            Buffer to store the instruction.
 | 
						|
  @param[out] BufferLen         Size of buffer that is required to store data.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED       This functionality is unsupported.
 | 
						|
  @retval EFI_SUCCESS           Successfully convert AsmText to the instruction.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EBC_VM_TEST_ASM)(
 | 
						|
  IN EFI_EBC_VM_TEST_PROTOCOL         *This,
 | 
						|
  IN CHAR16                           *AsmText,
 | 
						|
  IN OUT INT8                         *Buffer,
 | 
						|
  IN OUT UINTN                        *BufferLen
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Dump the executed instruction. This function is only used for test purposes.
 | 
						|
 | 
						|
  @param[in]  This              A pointer to the EFI_EBC_VM_TEST_PROTOCOL structure.
 | 
						|
  @param[out] AsmText           Contain the disasm text.
 | 
						|
  @param[out] Buffer            Buffer to store the instruction.
 | 
						|
  @param[out] BufferLen         Size of buffer that is required to store data.
 | 
						|
 | 
						|
  @retval EFI_UNSUPPORTED       This functionality is unsupported.
 | 
						|
  @retval EFI_SUCCESS           Successfully dump the executed instruction.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EBC_VM_TEST_DASM)(
 | 
						|
  IN EFI_EBC_VM_TEST_PROTOCOL         *This,
 | 
						|
  IN OUT CHAR16                       *AsmText,
 | 
						|
  IN OUT INT8                         *Buffer,
 | 
						|
  IN OUT UINTN                        *Len
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// Prototype for the actual EBC test protocol interface
 | 
						|
//
 | 
						|
struct _EFI_EBC_VM_TEST_PROTOCOL {
 | 
						|
  EBC_VM_TEST_EXECUTE    Execute;
 | 
						|
  EBC_VM_TEST_ASM        Assemble;
 | 
						|
  EBC_VM_TEST_DASM       Disassemble;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID  gEfiEbcVmTestProtocolGuid;
 | 
						|
 | 
						|
#endif
 |