diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbDisasmSupport.h')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbDisasmSupport.h | 567 |
1 files changed, 567 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbDisasmSupport.h b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbDisasmSupport.h new file mode 100644 index 00000000..f4ddb0f7 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbDisasmSupport.h @@ -0,0 +1,567 @@ +/** @file + +Copyright (c) 2007, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + + +**/ + +#ifndef _EFI_EDB_DISASM_SUPPORT_H_ +#define _EFI_EDB_DISASM_SUPPORT_H_ + +#include <Uefi.h> + +#define EDB_BYTECODE_NUMBER_IN_LINE 5 + +#ifdef EFI32 +#define EDB_PRINT_ADDRESS_FORMAT L"%08x: " +#else +// To use 012l instead of 016l because space is not enough +#define EDB_PRINT_ADDRESS_FORMAT L"%012lx: " +#endif + +#define OPCODE_MAX 0x40 + +#define EDB_INSTRUCTION_NAME_MAX_LENGTH 10 +#define EDB_INSTRUCTION_NAME_MAX_SIZE (EDB_INSTRUCTION_NAME_MAX_LENGTH * sizeof(CHAR16)) +#define EDB_INSTRUCTION_CONTENT_MAX_LENGTH 30 +#define EDB_INSTRUCTION_CONTENT_MAX_SIZE (EDB_INSTRUCTION_CONTENT_MAX_LENGTH * sizeof(CHAR16)) + +/** + + Set offset for Instruction name and content. + + @param InstructionNameOffset - Instruction name offset + @param InstructionContentOffset - Instruction content offset + +**/ +VOID +EdbSetOffset ( + IN UINTN InstructionNameOffset, + IN UINTN InstructionContentOffset + ); + +/** + + Pre instruction string construction. + + @return Instruction string + +**/ +CHAR16 * +EdbPreInstructionString ( + VOID + ); + +/** + + Post instruction string construction. + + @return Instruction string + +**/ +CHAR16 * +EdbPostInstructionString ( + VOID + ); + +/** + + Print the instruction name. + + @param Name - instruction name + + @return Instruction name offset + +**/ +UINTN +EdbPrintInstructionName ( + IN CHAR16 *Name + ); + +/** + + Get Sign, NaturalUnits, and ConstantUnits of the WORD data. + + @param Data16 - WORD data + @param NaturalUnits - Natural Units of the WORD + @param ConstantUnits - Constant Units of the WORD + + @return Sign value of WORD + +**/ +BOOLEAN +EdbGetNaturalIndex16 ( + IN UINT16 Data16, + OUT UINTN *NaturalUnits, + OUT UINTN *ConstantUnits + ); + +/** + + Get Sign, NaturalUnits, and ConstantUnits of the DWORD data. + + @param Data32 - DWORD data + @param NaturalUnits - Natural Units of the DWORD + @param ConstantUnits - Constant Units of the DWORD + + @return Sign value of DWORD + +**/ +BOOLEAN +EdbGetNaturalIndex32 ( + IN UINT32 Data32, + OUT UINTN *NaturalUnits, + OUT UINTN *ConstantUnits + ); + +/** + + Get Sign, NaturalUnits, and ConstantUnits of the QWORD data. + + @param Data64 - QWORD data + @param NaturalUnits - Natural Units of the QWORD + @param ConstantUnits - Constant Units of the QWORD + + @return Sign value of QWORD + +**/ +BOOLEAN +EdbGetNaturalIndex64 ( + IN UINT64 Data64, + OUT UINT64 *NaturalUnits, + OUT UINT64 *ConstantUnits + ); + +/** + + Print the hexical WORD raw index data to instruction content. + + @param Data16 - WORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintRawIndexData16 ( + IN UINT16 Data16 + ); + +/** + + Print the hexical DWORD raw index data to instruction content. + + @param Data32 - DWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintRawIndexData32 ( + IN UINT32 Data32 + ); + +/** + + Print the hexical QWORD raw index data to instruction content. + + @param Data64 - QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintRawIndexData64 ( + IN UINT64 Data64 + ); + +/** + + Print register 1 in operands. + + @param Operands - instruction operands + + @return Instruction content offset + +**/ +UINTN +EdbPrintRegister1 ( + IN UINT8 Operands + ); + +/** + + Print register 2 in operands. + + @param Operands - instruction operands + + @return Instruction content offset + +**/ +UINTN +EdbPrintRegister2 ( + IN UINT8 Operands + ); + +/** + + Print dedicated register 1 in operands. + + @param Operands - instruction operands + + @return Instruction content offset + +**/ +UINTN +EdbPrintDedicatedRegister1 ( + IN UINT8 Operands + ); + +/** + + Print dedicated register 2 in operands. + + @param Operands - instruction operands + + @return Instruction content offset + +**/ +UINTN +EdbPrintDedicatedRegister2 ( + IN UINT8 Operands + ); + +/** + + Print the hexical UINTN index data to instruction content. + + @param Sign - Signed bit of UINTN data + @param NaturalUnits - natural units of UINTN data + @param ConstantUnits - natural units of UINTN data + + @return Instruction content offset + +**/ +UINTN +EdbPrintIndexData ( + IN BOOLEAN Sign, + IN UINTN NaturalUnits, + IN UINTN ConstantUnits + ); + +/** + + Print the hexical QWORD index data to instruction content. + + @param Sign - Signed bit of QWORD data + @param NaturalUnits - natural units of QWORD data + @param ConstantUnits - natural units of QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintIndexData64 ( + IN BOOLEAN Sign, + IN UINT64 NaturalUnits, + IN UINT64 ConstantUnits + ); + +/** + + Print the hexical BYTE immediate data to instruction content. + + @param Data - BYTE data + + @return Instruction content offset + +**/ +UINTN +EdbPrintImmData8 ( + IN UINT8 Data + ); + +/** + + Print the hexical WORD immediate data to instruction content. + + @param Data - WORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintImmData16 ( + IN UINT16 Data + ); + +/** + + Print the hexical DWORD immediate data to instruction content. + + @param Data - DWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintImmData32 ( + IN UINT32 Data + ); + +/** + + Print the hexical QWORD immediate data to instruction content. + + @param Data - QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintImmData64 ( + IN UINT64 Data + ); + +/** + + Print the decimal UINTN immediate data to instruction content. + + @param Data - UINTN data + + @return Instruction content offset + +**/ +UINTN +EdbPrintImmDatan ( + IN UINTN Data + ); + +/** + + Print the decimal QWORD immediate data to instruction content. + + @param Data64 - QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintImmData64n ( + IN UINT64 Data64 + ); + +/** + + Print the hexical BYTE to instruction content. + + @param Data8 - BYTE data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData8 ( + IN UINT8 Data8 + ); + +/** + + Print the hexical WORD to instruction content. + + @param Data16 - WORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData16 ( + IN UINT16 Data16 + ); + +/** + + Print the hexical DWORD to instruction content. + + @param Data32 - DWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData32 ( + IN UINT32 Data32 + ); + +/** + + Print the hexical QWORD to instruction content. + + @param Data64 - QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData64 ( + IN UINT64 Data64 + ); + +/** + + Print the decimal unsigned UINTN to instruction content. + + @param Data - unsigned UINTN data + + @return Instruction content offset + +**/ +UINTN +EdbPrintDatan ( + IN UINTN Data + ); + +/** + + Print the decimal unsigned QWORD to instruction content. + + @param Data64 - unsigned QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData64n ( + IN UINT64 Data64 + ); + +/** + + Print the decimal signed BYTE to instruction content. + + @param Data8 - signed BYTE data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData8s ( + IN UINT8 Data8 + ); + +/** + + Print the decimal signed WORD to instruction content. + + @param Data16 - signed WORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData16s ( + IN UINT16 Data16 + ); + +/** + + Print the decimal signed DWORD to instruction content. + + @param Data32 - signed DWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData32s ( + IN UINT32 Data32 + ); + +/** + + Print the decimal signed QWORD to instruction content. + + @param Data64 - signed QWORD data + + @return Instruction content offset + +**/ +UINTN +EdbPrintData64s ( + IN UINT64 Data64 + ); + +/** + + Print the comma to instruction content. + + @return Instruction content offset + +**/ +UINTN +EdbPrintComma ( + VOID + ); + +/** + + Find the symbol string according to address, then print it. + + @param Address - instruction address + + @retval 1 - symbol string is found and printed + @retval 0 - symbol string not found + +**/ +UINTN +EdbFindAndPrintSymbol ( + IN UINTN Address + ); + +/** + + Print the EBC byte code. + + @param InstructionAddress - instruction address + @param InstructionNumber - instruction number + +**/ +VOID +EdbPrintRaw ( + IN EFI_PHYSICAL_ADDRESS InstructionAddress, + IN UINTN InstructionNumber + ); + +/** + + Print the EBC asm code. + + @param DebuggerPrivate - EBC Debugger private data structure + @param SystemContext - EBC system context. + + @retval EFI_SUCCESS - show disasm successfully + +**/ +EFI_STATUS +EdbShowDisasm ( + IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate, + IN EFI_SYSTEM_CONTEXT SystemContext + ); + +/** + + Get register value according to the system context, and register index. + + @param SystemContext - EBC system context. + @param Index - EBC register index + + @return register value + +**/ +UINT64 +GetRegisterValue ( + IN EFI_SYSTEM_CONTEXT SystemContext, + IN UINT8 Index + ); + +#endif |