3 Copyright (c) 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
21 #ifndef _EFI_EDB_COMMON_H_
22 #define _EFI_EDB_COMMON_H_
25 #include <Library/BaseLib.h>
26 #include <Library/BaseMemoryLib.h>
27 #include <Library/MemoryAllocationLib.h>
28 #include <Library/DebugLib.h>
29 #include <Library/UefiLib.h>
30 #include <Library/PrintLib.h>
31 #include <Library/UefiBootServicesTableLib.h>
32 #include <Protocol/Ebc.h>
33 #include <Protocol/EbcVmTest.h>
34 #include <Protocol/DebugSupport.h>
35 #include <Protocol/PciRootBridgeIo.h>
36 #include <Protocol/SimpleFileSystem.h>
37 #include <Protocol/DebuggerConfiguration.h>
38 #include <Guid/FileInfo.h>
39 #include <Guid/FileSystemInfo.h>
40 #include <Guid/FileSystemVolumeLabelInfo.h>
41 #include <Guid/DebugImageInfoTable.h>
43 typedef UINTN EFI_DEBUG_STATUS
;
45 typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA
;
48 // Definition for Debugger Command
52 (* EFI_DEBUGGER_COMMAND
) (
53 IN CHAR16
*CommandArg
,
54 IN EFI_DEBUGGER_PRIVATE_DATA
*DebuggerPrivate
,
55 IN EFI_EXCEPTION_TYPE ExceptionType
,
56 IN OUT EFI_SYSTEM_CONTEXT SystemContext
63 CHAR16
*CommandSyntax
;
65 EFI_INPUT_KEY CommandKey
;
66 EFI_DEBUGGER_COMMAND CommandFunc
;
67 } EFI_DEBUGGER_COMMAND_SET
;
70 // Definition for Debugger Symbol
72 #define EFI_DEBUGGER_SYMBOL_NAME_MAX 256
73 #define EFI_DEBUGGER_SYMBOL_ENTRY_MAX 512
74 #define EFI_DEBUGGER_SYMBOL_OBJECT_MAX 32
77 // We have following SYMBOL data structure:
79 // SYMBOL_CONTEXT -> SYMBOL_OBJECT -> SYMBOL_ENTRY (FuncXXX, 0xXXX)
80 // SYMBOL_ENTRY (VarYYY, 0xYYY)
83 // SYMBOL_OBJECT -> SYMBOL_ENTRY
86 // SYMBOL_OBJECT -> SYMBOL_ENTRY
91 EfiDebuggerSymbolFunction
,
92 EfiDebuggerSymbolStaticFunction
,
93 EfiDebuggerSymbolGlobalVariable
,
94 EfiDebuggerSymbolStaticVariable
,
95 EfiDebuggerSymbolTypeMax
,
96 } EFI_DEBUGGER_SYMBOL_TYPE
;
99 CHAR8 Name
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
101 EFI_DEBUGGER_SYMBOL_TYPE Type
;
102 CHAR8 ObjName
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
105 UINTN FuncOffsetBase
;
107 } EFI_DEBUGGER_SYMBOL_ENTRY
;
110 CHAR16 Name
[EFI_DEBUGGER_SYMBOL_NAME_MAX
];
114 UINTN StartEntrypointRVA
;
115 UINTN MainEntrypointRVA
;
116 EFI_DEBUGGER_SYMBOL_ENTRY
*Entry
;
118 } EFI_DEBUGGER_SYMBOL_OBJECT
;
122 UINTN MaxObjectCount
;
123 EFI_DEBUGGER_SYMBOL_OBJECT
*Object
;
124 BOOLEAN DisplaySymbol
;
125 BOOLEAN DisplayCodeOnly
;
126 } EFI_DEBUGGER_SYMBOL_CONTEXT
;
129 // Definition for Debugger Breakpoint
131 #define EFI_DEBUGGER_BREAKPOINT_MAX 0x10
134 EFI_PHYSICAL_ADDRESS BreakpointAddress
;
135 UINT64 OldInstruction
; // UINT64 is enough for an instruction
137 } EFI_DEBUGGER_BREAKPOINT_CONTEXT
;
140 // Definition for Debugger Call-Stack
142 #define EFI_DEBUGGER_CALLSTACK_MAX 0x10
145 EfiDebuggerBranchTypeEbcCall
,
146 EfiDebuggerBranchTypeEbcCallEx
,
147 EfiDebuggerBranchTypeEbcRet
,
148 EfiDebuggerBranchTypeEbcJmp
,
149 EfiDebuggerBranchTypeEbcJmp8
,
150 EfiDebuggerBranchTypeEbcMax
,
151 } EFI_DEBUGGER_BRANCH_TYPE
;
153 #define EFI_DEBUGGER_CALL_MAX_PARAMETER 0x16
154 #define EFI_DEBUGGER_CALL_DEFAULT_PARAMETER 0x8
157 EFI_PHYSICAL_ADDRESS SourceAddress
;
158 EFI_PHYSICAL_ADDRESS DestAddress
;
160 // We save all parameter here, because code may update the parameter as local variable.
163 UINTN Parameter
[EFI_DEBUGGER_CALL_MAX_PARAMETER
];
164 EFI_DEBUGGER_BRANCH_TYPE Type
;
165 } EFI_DEBUGGER_CALLSTACK_CONTEXT
;
168 // Definition for Debugger Trace
170 #define EFI_DEBUGGER_TRACE_MAX 0x10
173 EFI_PHYSICAL_ADDRESS SourceAddress
;
174 EFI_PHYSICAL_ADDRESS DestAddress
;
175 EFI_DEBUGGER_BRANCH_TYPE Type
;
176 } EFI_DEBUGGER_TRACE_CONTEXT
;
179 // Definition for Debugger Step
182 EFI_PHYSICAL_ADDRESS BreakAddress
;
183 EFI_PHYSICAL_ADDRESS FramePointer
;
184 } EFI_DEBUGGER_STEP_CONTEXT
;
187 // Definition for Debugger GoTil
190 EFI_PHYSICAL_ADDRESS BreakAddress
;
191 } EFI_DEBUGGER_GOTIL_CONTEXT
;
194 // Definition for Debugger private data structure
196 #define EFI_DEBUGGER_SIGNATURE SIGNATURE_32 ('e', 'd', 'b', '!')
198 #define EFI_DEBUG_DEFAULT_INSTRUCTION_NUMBER 5
200 #define EFI_DEBUG_BREAK_TIMER_INTERVAL 10000000 // 1 second
202 #define EFI_DEBUG_FLAG_EBC 0x80000000
203 #define EFI_DEBUG_FLAG_EBC_B_BOC 0x1
204 #define EFI_DEBUG_FLAG_EBC_B_BOCX 0x2
205 #define EFI_DEBUG_FLAG_EBC_B_BOR 0x4
206 #define EFI_DEBUG_FLAG_EBC_B_BOE 0x8
207 #define EFI_DEBUG_FLAG_EBC_B_BOT 0x10
208 #define EFI_DEBUG_FLAG_EBC_B_STEPOVER 0x20
209 #define EFI_DEBUG_FLAG_EBC_B_STEPOUT 0x40
210 #define EFI_DEBUG_FLAG_EBC_B_BP 0x80
211 #define EFI_DEBUG_FLAG_EBC_B_GT 0x100
212 #define EFI_DEBUG_FLAG_EBC_B_BOK 0x200
213 #define EFI_DEBUG_FLAG_EBC_BOC (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOC)
214 #define EFI_DEBUG_FLAG_EBC_BOCX (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOCX)
215 #define EFI_DEBUG_FLAG_EBC_BOR (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOR)
216 #define EFI_DEBUG_FLAG_EBC_BOE (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOE)
217 #define EFI_DEBUG_FLAG_EBC_BOT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOT)
218 #define EFI_DEBUG_FLAG_EBC_STEPOVER (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOVER)
219 #define EFI_DEBUG_FLAG_EBC_STEPOUT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOUT)
220 #define EFI_DEBUG_FLAG_EBC_BP (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BP)
221 #define EFI_DEBUG_FLAG_EBC_GT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_GT)
222 #define EFI_DEBUG_FLAG_EBC_BOK (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOK)
225 // Debugger private data structure
227 typedef struct _EFI_DEBUGGER_PRIVATE_DATA
{
229 EFI_INSTRUCTION_SET_ARCHITECTURE Isa
;
230 UINT32 EfiDebuggerRevision
;
231 UINT32 EbcVmRevision
;
232 EFI_DEBUGGER_CONFIGURATION_PROTOCOL DebuggerConfiguration
;
233 EFI_DEBUG_IMAGE_INFO_TABLE_HEADER
*DebugImageInfoTableHeader
;
234 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
*Vol
;
235 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*PciRootBridgeIo
;
236 EFI_DEBUGGER_COMMAND_SET
*DebuggerCommandSet
;
237 EFI_DEBUGGER_SYMBOL_CONTEXT DebuggerSymbolContext
;
238 UINTN DebuggerBreakpointCount
;
239 EFI_DEBUGGER_BREAKPOINT_CONTEXT DebuggerBreakpointContext
[EFI_DEBUGGER_BREAKPOINT_MAX
+ 1];
240 UINTN CallStackEntryCount
;
241 EFI_DEBUGGER_CALLSTACK_CONTEXT CallStackEntry
[EFI_DEBUGGER_CALLSTACK_MAX
+ 1];
242 UINTN TraceEntryCount
;
243 EFI_DEBUGGER_TRACE_CONTEXT TraceEntry
[EFI_DEBUGGER_TRACE_MAX
+ 1];
244 EFI_DEBUGGER_STEP_CONTEXT StepContext
;
245 EFI_DEBUGGER_GOTIL_CONTEXT GoTilContext
;
246 EFI_PHYSICAL_ADDRESS InstructionScope
;
247 UINTN InstructionNumber
;
250 BOOLEAN EnablePageBreak
;
251 EFI_EVENT BreakEvent
;
252 } EFI_DEBUGGER_PRIVATE_DATA
;