Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Rebecca Cran <rebecca@bluestop.org> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: He Junjie <junjie.he@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
		
			
				
	
	
		
			574 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			574 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
| Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
 | |
| This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| 
 | |
| **/
 | |
| 
 | |
| #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
 |