3 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
8 #ifndef _EFI_EDB_COMMON_H_
9 #define _EFI_EDB_COMMON_H_
12 #include <Library/BaseLib.h>
13 #include <Library/BaseMemoryLib.h>
14 #include <Library/MemoryAllocationLib.h>
15 #include <Library/DebugLib.h>
16 #include <Library/UefiLib.h>
17 #include <Library/PrintLib.h>
18 #include <Library/UefiBootServicesTableLib.h>
19 #include <Protocol/Ebc.h>
20 #include <Protocol/EbcVmTest.h>
21 #include <Protocol/DebugSupport.h>
22 #include <Protocol/PciRootBridgeIo.h>
23 #include <Protocol/SimpleFileSystem.h>
24 #include <Protocol/DebuggerConfiguration.h>
25 #include <Guid/FileInfo.h>
26 #include <Guid/DebugImageInfoTable.h>
28 typedef UINTN EFI_DEBUG_STATUS
;
30 typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA
;
33 // Definition for Debugger Command
37 (* EFI_DEBUGGER_COMMAND
) (
38 IN CHAR16
*CommandArg
,
39 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
40 IN EFI_EXCEPTION_TYPE ExceptionType
,
41 IN OUT EFI_SYSTEM_CONTEXT SystemContext
48 CHAR16
*CommandSyntax
;
50 EFI_INPUT_KEY CommandKey
;
51 EFI_DEBUGGER_COMMAND CommandFunc
;
52 } EFI_DEBUGGER_COMMAND_SET
;
55 // Definition for Debugger Symbol
57 #define EFI_DEBUGGER_SYMBOL_NAME_MAX 256
58 #define EFI_DEBUGGER_SYMBOL_ENTRY_MAX 512
59 #define EFI_DEBUGGER_SYMBOL_OBJECT_MAX 32
62 // We have following SYMBOL data structure:
64 // SYMBOL_CONTEXT -> SYMBOL_OBJECT -> SYMBOL_ENTRY (FuncXXX, 0xXXX)
65 // SYMBOL_ENTRY (VarYYY, 0xYYY)
68 // SYMBOL_OBJECT -> SYMBOL_ENTRY
71 // SYMBOL_OBJECT -> SYMBOL_ENTRY
76 EfiDebuggerSymbolFunction
,
77 EfiDebuggerSymbolStaticFunction
,
78 EfiDebuggerSymbolGlobalVariable
,
79 EfiDebuggerSymbolStaticVariable
,
80 EfiDebuggerSymbolTypeMax
,
81 } EFI_DEBUGGER_SYMBOL_TYPE
;
84 CHAR8 Name
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
86 EFI_DEBUGGER_SYMBOL_TYPE Type
;
87 CHAR8 ObjName
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
92 } EFI_DEBUGGER_SYMBOL_ENTRY
;
95 CHAR16 Name
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
99 UINTN StartEntrypointRVA
;
100 UINTN MainEntrypointRVA
;
101 EFI_DEBUGGER_SYMBOL_ENTRY
*Entry
;
103 } EFI_DEBUGGER_SYMBOL_OBJECT
;
107 UINTN MaxObjectCount
;
108 EFI_DEBUGGER_SYMBOL_OBJECT
*Object
;
109 BOOLEAN DisplaySymbol
;
110 BOOLEAN DisplayCodeOnly
;
111 } EFI_DEBUGGER_SYMBOL_CONTEXT
;
114 // Definition for Debugger Breakpoint
116 #define EFI_DEBUGGER_BREAKPOINT_MAX 0x10
119 EFI_PHYSICAL_ADDRESS BreakpointAddress
;
120 UINT64 OldInstruction
; // UINT64 is enough for an instruction
122 } EFI_DEBUGGER_BREAKPOINT_CONTEXT
;
125 // Definition for Debugger Call-Stack
127 #define EFI_DEBUGGER_CALLSTACK_MAX 0x10
130 EfiDebuggerBranchTypeEbcCall
,
131 EfiDebuggerBranchTypeEbcCallEx
,
132 EfiDebuggerBranchTypeEbcRet
,
133 EfiDebuggerBranchTypeEbcJmp
,
134 EfiDebuggerBranchTypeEbcJmp8
,
135 EfiDebuggerBranchTypeEbcMax
,
136 } EFI_DEBUGGER_BRANCH_TYPE
;
138 #define EFI_DEBUGGER_CALL_MAX_PARAMETER 0x16
139 #define EFI_DEBUGGER_CALL_DEFAULT_PARAMETER 0x8
142 EFI_PHYSICAL_ADDRESS SourceAddress
;
143 EFI_PHYSICAL_ADDRESS DestAddress
;
145 // We save all parameter here, because code may update the parameter as local variable.
148 UINTN Parameter
[EFI_DEBUGGER_CALL_MAX_PARAMETER
];
149 EFI_DEBUGGER_BRANCH_TYPE Type
;
150 } EFI_DEBUGGER_CALLSTACK_CONTEXT
;
153 // Definition for Debugger Trace
155 #define EFI_DEBUGGER_TRACE_MAX 0x10
158 EFI_PHYSICAL_ADDRESS SourceAddress
;
159 EFI_PHYSICAL_ADDRESS DestAddress
;
160 EFI_DEBUGGER_BRANCH_TYPE Type
;
161 } EFI_DEBUGGER_TRACE_CONTEXT
;
164 // Definition for Debugger Step
167 EFI_PHYSICAL_ADDRESS BreakAddress
;
168 EFI_PHYSICAL_ADDRESS FramePointer
;
169 } EFI_DEBUGGER_STEP_CONTEXT
;
172 // Definition for Debugger GoTil
175 EFI_PHYSICAL_ADDRESS BreakAddress
;
176 } EFI_DEBUGGER_GOTIL_CONTEXT
;
179 // Definition for Debugger private data structure
181 #define EFI_DEBUGGER_SIGNATURE SIGNATURE_32 ('e', 'd', 'b', '!')
183 #define EFI_DEBUG_DEFAULT_INSTRUCTION_NUMBER 5
185 #define EFI_DEBUG_BREAK_TIMER_INTERVAL 10000000 // 1 second
187 #define EFI_DEBUG_FLAG_EBC 0x80000000
188 #define EFI_DEBUG_FLAG_EBC_B_BOC 0x1
189 #define EFI_DEBUG_FLAG_EBC_B_BOCX 0x2
190 #define EFI_DEBUG_FLAG_EBC_B_BOR 0x4
191 #define EFI_DEBUG_FLAG_EBC_B_BOE 0x8
192 #define EFI_DEBUG_FLAG_EBC_B_BOT 0x10
193 #define EFI_DEBUG_FLAG_EBC_B_STEPOVER 0x20
194 #define EFI_DEBUG_FLAG_EBC_B_STEPOUT 0x40
195 #define EFI_DEBUG_FLAG_EBC_B_BP 0x80
196 #define EFI_DEBUG_FLAG_EBC_B_GT 0x100
197 #define EFI_DEBUG_FLAG_EBC_B_BOK 0x200
198 #define EFI_DEBUG_FLAG_EBC_BOC (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOC)
199 #define EFI_DEBUG_FLAG_EBC_BOCX (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOCX)
200 #define EFI_DEBUG_FLAG_EBC_BOR (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOR)
201 #define EFI_DEBUG_FLAG_EBC_BOE (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOE)
202 #define EFI_DEBUG_FLAG_EBC_BOT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOT)
203 #define EFI_DEBUG_FLAG_EBC_STEPOVER (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOVER)
204 #define EFI_DEBUG_FLAG_EBC_STEPOUT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOUT)
205 #define EFI_DEBUG_FLAG_EBC_BP (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BP)
206 #define EFI_DEBUG_FLAG_EBC_GT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_GT)
207 #define EFI_DEBUG_FLAG_EBC_BOK (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOK)
210 // Debugger private data structure
212 typedef struct _EFI_DEBUGGER_PRIVATE_DATA
{
214 EFI_INSTRUCTION_SET_ARCHITECTURE Isa
;
215 UINT32 EfiDebuggerRevision
;
216 UINT32 EbcVmRevision
;
217 EFI_DEBUGGER_CONFIGURATION_PROTOCOL DebuggerConfiguration
;
218 EFI_DEBUG_IMAGE_INFO_TABLE_HEADER
*DebugImageInfoTableHeader
;
219 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
*Vol
;
220 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*PciRootBridgeIo
;
221 EFI_DEBUGGER_COMMAND_SET
*DebuggerCommandSet
;
222 EFI_DEBUGGER_SYMBOL_CONTEXT DebuggerSymbolContext
;
223 UINTN DebuggerBreakpointCount
;
224 EFI_DEBUGGER_BREAKPOINT_CONTEXT DebuggerBreakpointContext
[EFI_DEBUGGER_BREAKPOINT_MAX
+ 1];
225 UINTN CallStackEntryCount
;
226 EFI_DEBUGGER_CALLSTACK_CONTEXT CallStackEntry
[EFI_DEBUGGER_CALLSTACK_MAX
+ 1];
227 UINTN TraceEntryCount
;
228 EFI_DEBUGGER_TRACE_CONTEXT TraceEntry
[EFI_DEBUGGER_TRACE_MAX
+ 1];
229 EFI_DEBUGGER_STEP_CONTEXT StepContext
;
230 EFI_DEBUGGER_GOTIL_CONTEXT GoTilContext
;
231 EFI_PHYSICAL_ADDRESS InstructionScope
;
232 UINTN InstructionNumber
;
235 BOOLEAN EnablePageBreak
;
236 EFI_EVENT BreakEvent
;
237 } EFI_DEBUGGER_PRIVATE_DATA
;