https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			240 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#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/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
 |