| /** @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 |