For variable name, it should contain lower case characters. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
		
			
				
	
	
		
			248 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			8.8 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_COMMON_H_
 | |
| #define _EFI_EDB_COMMON_H_
 | |
| 
 | |
| #include <Uefi.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/UefiLib.h>
 | |
| #include <Library/PrintLib.h>
 | |
| #include <Library/UefiBootServicesTableLib.h>
 | |
| #include <Protocol/Ebc.h>
 | |
| #include <Protocol/EbcVmTest.h>
 | |
| #include <Protocol/DebugSupport.h>
 | |
| #include <Protocol/PciRootBridgeIo.h>
 | |
| #include <Protocol/SimpleFileSystem.h>
 | |
| #include <Protocol/DebuggerConfiguration.h>
 | |
| #include <Guid/FileInfo.h>
 | |
| #include <Guid/FileSystemInfo.h>
 | |
| #include <Guid/FileSystemVolumeLabelInfo.h>
 | |
| #include <Guid/DebugImageInfoTable.h>
 | |
| 
 | |
| typedef UINTN EFI_DEBUG_STATUS;
 | |
| 
 | |
| typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger Command
 | |
| //
 | |
| typedef
 | |
| EFI_DEBUG_STATUS
 | |
| (* EFI_DEBUGGER_COMMAND) (
 | |
|   IN     CHAR16                    *CommandArg,
 | |
|   IN     EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,
 | |
|   IN     EFI_EXCEPTION_TYPE        ExceptionType,
 | |
|   IN OUT EFI_SYSTEM_CONTEXT        SystemContext
 | |
| );
 | |
| 
 | |
| typedef struct {
 | |
|   CHAR16                *CommandName;
 | |
|   CHAR16                *CommandTitle;
 | |
|   CHAR16                *CommandHelp;
 | |
|   CHAR16                *CommandSyntax;
 | |
|   CHAR16                *ClassName;
 | |
|   EFI_INPUT_KEY         CommandKey;
 | |
|   EFI_DEBUGGER_COMMAND  CommandFunc;
 | |
| } EFI_DEBUGGER_COMMAND_SET;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger Symbol
 | |
| //
 | |
| #define EFI_DEBUGGER_SYMBOL_NAME_MAX     256
 | |
| #define EFI_DEBUGGER_SYMBOL_ENTRY_MAX    512
 | |
| #define EFI_DEBUGGER_SYMBOL_OBJECT_MAX   32
 | |
| 
 | |
| //
 | |
| // We have following SYMBOL data structure:
 | |
| //
 | |
| // SYMBOL_CONTEXT -> SYMBOL_OBJECT -> SYMBOL_ENTRY (FuncXXX, 0xXXX)
 | |
| //                                    SYMBOL_ENTRY (VarYYY,  0xYYY)
 | |
| //                                    SYMBOL_ENTRY
 | |
| //
 | |
| //                   SYMBOL_OBJECT -> SYMBOL_ENTRY
 | |
| //                                    SYMBOL_ENTRY
 | |
| //
 | |
| //                   SYMBOL_OBJECT -> SYMBOL_ENTRY
 | |
| //                                    SYMBOL_ENTRY
 | |
| //
 | |
| 
 | |
| typedef enum {
 | |
|   EfiDebuggerSymbolFunction,
 | |
|   EfiDebuggerSymbolStaticFunction,
 | |
|   EfiDebuggerSymbolGlobalVariable,
 | |
|   EfiDebuggerSymbolStaticVariable,
 | |
|   EfiDebuggerSymbolTypeMax,
 | |
| } EFI_DEBUGGER_SYMBOL_TYPE;
 | |
| 
 | |
| typedef struct {
 | |
|   CHAR8                      Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];
 | |
|   UINTN                      Rva;
 | |
|   EFI_DEBUGGER_SYMBOL_TYPE   Type;
 | |
|   CHAR8                      ObjName[EFI_DEBUGGER_SYMBOL_NAME_MAX];
 | |
|   CHAR8                      *CodBuffer;
 | |
|   UINTN                      CodBufferSize;
 | |
|   UINTN                      FuncOffsetBase;
 | |
|   CHAR8                      *SourceBuffer;
 | |
| } EFI_DEBUGGER_SYMBOL_ENTRY;
 | |
| 
 | |
| typedef struct {
 | |
|   CHAR16                     Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];
 | |
|   UINTN                      EntryCount;
 | |
|   UINTN                      MaxEntryCount;
 | |
|   UINTN                      BaseAddress;
 | |
|   UINTN                      StartEntrypointRVA;
 | |
|   UINTN                      MainEntrypointRVA;
 | |
|   EFI_DEBUGGER_SYMBOL_ENTRY  *Entry;
 | |
|   VOID                       **SourceBuffer;
 | |
| } EFI_DEBUGGER_SYMBOL_OBJECT;
 | |
| 
 | |
| typedef struct {
 | |
|   UINTN                       ObjectCount;
 | |
|   UINTN                       MaxObjectCount;
 | |
|   EFI_DEBUGGER_SYMBOL_OBJECT  *Object;
 | |
|   BOOLEAN                     DisplaySymbol;
 | |
|   BOOLEAN                     DisplayCodeOnly;
 | |
| } EFI_DEBUGGER_SYMBOL_CONTEXT;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger Breakpoint
 | |
| //
 | |
| #define EFI_DEBUGGER_BREAKPOINT_MAX    0x10
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS      BreakpointAddress;
 | |
|   UINT64                    OldInstruction;    // UINT64 is enough for an instruction
 | |
|   BOOLEAN                   State;
 | |
| } EFI_DEBUGGER_BREAKPOINT_CONTEXT;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger Call-Stack
 | |
| //
 | |
| #define EFI_DEBUGGER_CALLSTACK_MAX     0x10
 | |
| 
 | |
| typedef enum {
 | |
|   EfiDebuggerBranchTypeEbcCall,
 | |
|   EfiDebuggerBranchTypeEbcCallEx,
 | |
|   EfiDebuggerBranchTypeEbcRet,
 | |
|   EfiDebuggerBranchTypeEbcJmp,
 | |
|   EfiDebuggerBranchTypeEbcJmp8,
 | |
|   EfiDebuggerBranchTypeEbcMax,
 | |
| } EFI_DEBUGGER_BRANCH_TYPE;
 | |
| 
 | |
| #define EFI_DEBUGGER_CALL_MAX_PARAMETER      0x16
 | |
| #define EFI_DEBUGGER_CALL_DEFAULT_PARAMETER  0x8
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS      SourceAddress;
 | |
|   EFI_PHYSICAL_ADDRESS      DestAddress;
 | |
|   //
 | |
|   // We save all parameter here, because code may update the parameter as local variable.
 | |
|   //
 | |
|   UINTN                     ParameterAddr;
 | |
|   UINTN                     Parameter[EFI_DEBUGGER_CALL_MAX_PARAMETER];
 | |
|   EFI_DEBUGGER_BRANCH_TYPE  Type;
 | |
| } EFI_DEBUGGER_CALLSTACK_CONTEXT;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger Trace
 | |
| //
 | |
| #define EFI_DEBUGGER_TRACE_MAX         0x10
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS      SourceAddress;
 | |
|   EFI_PHYSICAL_ADDRESS      DestAddress;
 | |
|   EFI_DEBUGGER_BRANCH_TYPE  Type;
 | |
| } EFI_DEBUGGER_TRACE_CONTEXT;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger Step
 | |
| //
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS      BreakAddress;
 | |
|   EFI_PHYSICAL_ADDRESS      FramePointer;
 | |
| } EFI_DEBUGGER_STEP_CONTEXT;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger GoTil
 | |
| //
 | |
| typedef struct {
 | |
|   EFI_PHYSICAL_ADDRESS      BreakAddress;
 | |
| } EFI_DEBUGGER_GOTIL_CONTEXT;
 | |
| 
 | |
| //
 | |
| // Definition for Debugger private data structure
 | |
| //
 | |
| #define EFI_DEBUGGER_SIGNATURE         SIGNATURE_32 ('e', 'd', 'b', '!')
 | |
| 
 | |
| #define EFI_DEBUG_DEFAULT_INSTRUCTION_NUMBER  5
 | |
| 
 | |
| #define EFI_DEBUG_BREAK_TIMER_INTERVAL        10000000   // 1 second
 | |
| 
 | |
| #define EFI_DEBUG_FLAG_EBC            0x80000000
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BOC      0x1
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BOCX     0x2
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BOR      0x4
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BOE      0x8
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BOT      0x10
 | |
| #define EFI_DEBUG_FLAG_EBC_B_STEPOVER 0x20
 | |
| #define EFI_DEBUG_FLAG_EBC_B_STEPOUT  0x40
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BP       0x80
 | |
| #define EFI_DEBUG_FLAG_EBC_B_GT       0x100
 | |
| #define EFI_DEBUG_FLAG_EBC_B_BOK      0x200
 | |
| #define EFI_DEBUG_FLAG_EBC_BOC        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOC)
 | |
| #define EFI_DEBUG_FLAG_EBC_BOCX       (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOCX)
 | |
| #define EFI_DEBUG_FLAG_EBC_BOR        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOR)
 | |
| #define EFI_DEBUG_FLAG_EBC_BOE        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOE)
 | |
| #define EFI_DEBUG_FLAG_EBC_BOT        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOT)
 | |
| #define EFI_DEBUG_FLAG_EBC_STEPOVER   (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOVER)
 | |
| #define EFI_DEBUG_FLAG_EBC_STEPOUT    (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOUT)
 | |
| #define EFI_DEBUG_FLAG_EBC_BP         (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BP)
 | |
| #define EFI_DEBUG_FLAG_EBC_GT         (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_GT)
 | |
| #define EFI_DEBUG_FLAG_EBC_BOK        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOK)
 | |
| 
 | |
| //
 | |
| // Debugger private data structure
 | |
| //
 | |
| typedef struct _EFI_DEBUGGER_PRIVATE_DATA {
 | |
|   UINT32                                      Signature;
 | |
|   EFI_INSTRUCTION_SET_ARCHITECTURE            Isa;
 | |
|   UINT32                                      EfiDebuggerRevision;
 | |
|   UINT32                                      EbcVmRevision;
 | |
|   EFI_DEBUGGER_CONFIGURATION_PROTOCOL         DebuggerConfiguration;
 | |
|   EFI_DEBUG_IMAGE_INFO_TABLE_HEADER           *DebugImageInfoTableHeader;
 | |
|   EFI_SIMPLE_FILE_SYSTEM_PROTOCOL             *Vol;
 | |
|   EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL             *PciRootBridgeIo;
 | |
|   EFI_DEBUGGER_COMMAND_SET                    *DebuggerCommandSet;
 | |
|   EFI_DEBUGGER_SYMBOL_CONTEXT                 DebuggerSymbolContext;
 | |
|   UINTN                                       DebuggerBreakpointCount;
 | |
|   EFI_DEBUGGER_BREAKPOINT_CONTEXT             DebuggerBreakpointContext[EFI_DEBUGGER_BREAKPOINT_MAX + 1];
 | |
|   UINTN                                       CallStackEntryCount;
 | |
|   EFI_DEBUGGER_CALLSTACK_CONTEXT              CallStackEntry[EFI_DEBUGGER_CALLSTACK_MAX + 1];
 | |
|   UINTN                                       TraceEntryCount;
 | |
|   EFI_DEBUGGER_TRACE_CONTEXT                  TraceEntry[EFI_DEBUGGER_TRACE_MAX + 1];
 | |
|   EFI_DEBUGGER_STEP_CONTEXT                   StepContext;
 | |
|   EFI_DEBUGGER_GOTIL_CONTEXT                  GoTilContext;
 | |
|   EFI_PHYSICAL_ADDRESS                        InstructionScope;
 | |
|   UINTN                                       InstructionNumber;
 | |
|   UINT32                                      FeatureFlags;
 | |
|   UINT32                                      StatusFlags;
 | |
|   BOOLEAN                                     EnablePageBreak;
 | |
|   EFI_EVENT                                   BreakEvent;
 | |
| } EFI_DEBUGGER_PRIVATE_DATA;
 | |
| 
 | |
| #endif
 |