/** @file Copyright (c) 2007, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _EFI_EDB_DISASM_SUPPORT_H_ #define _EFI_EDB_DISASM_SUPPORT_H_ #include #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