]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbCommon.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Universal / EbcDxe / EbcDebugger / EdbCommon.h
CommitLineData
e8a5ac7c 1/** @file\r
748edcd5 2\r
e8a5ac7c 3Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
9d510e61 4SPDX-License-Identifier: BSD-2-Clause-Patent\r
748edcd5 5\r
e8a5ac7c 6**/\r
748edcd5
PB
7\r
8#ifndef _EFI_EDB_COMMON_H_\r
9#define _EFI_EDB_COMMON_H_\r
10\r
11#include <Uefi.h>\r
3e2c7843
PB
12#include <Library/BaseLib.h>\r
13#include <Library/BaseMemoryLib.h>\r
14#include <Library/MemoryAllocationLib.h>\r
15#include <Library/DebugLib.h>\r
748edcd5
PB
16#include <Library/UefiLib.h>\r
17#include <Library/PrintLib.h>\r
18#include <Library/UefiBootServicesTableLib.h>\r
3e2c7843 19#include <Protocol/Ebc.h>\r
2b2efe33 20#include <Protocol/EbcVmTest.h>\r
748edcd5
PB
21#include <Protocol/DebugSupport.h>\r
22#include <Protocol/PciRootBridgeIo.h>\r
23#include <Protocol/SimpleFileSystem.h>\r
2b2efe33 24#include <Protocol/DebuggerConfiguration.h>\r
748edcd5 25#include <Guid/FileInfo.h>\r
748edcd5
PB
26#include <Guid/DebugImageInfoTable.h>\r
27\r
28typedef UINTN EFI_DEBUG_STATUS;\r
29\r
30typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA;\r
31\r
32//\r
33// Definition for Debugger Command\r
34//\r
35typedef\r
36EFI_DEBUG_STATUS\r
37(* EFI_DEBUGGER_COMMAND) (\r
38 IN CHAR16 *CommandArg,\r
39 IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
40 IN EFI_EXCEPTION_TYPE ExceptionType,\r
41 IN OUT EFI_SYSTEM_CONTEXT SystemContext\r
42);\r
43\r
44typedef struct {\r
45 CHAR16 *CommandName;\r
46 CHAR16 *CommandTitle;\r
47 CHAR16 *CommandHelp;\r
48 CHAR16 *CommandSyntax;\r
49 CHAR16 *ClassName;\r
50 EFI_INPUT_KEY CommandKey;\r
51 EFI_DEBUGGER_COMMAND CommandFunc;\r
52} EFI_DEBUGGER_COMMAND_SET;\r
53\r
54//\r
55// Definition for Debugger Symbol\r
56//\r
57#define EFI_DEBUGGER_SYMBOL_NAME_MAX 256\r
58#define EFI_DEBUGGER_SYMBOL_ENTRY_MAX 512\r
59#define EFI_DEBUGGER_SYMBOL_OBJECT_MAX 32\r
60\r
61//\r
62// We have following SYMBOL data structure:\r
63//\r
64// SYMBOL_CONTEXT -> SYMBOL_OBJECT -> SYMBOL_ENTRY (FuncXXX, 0xXXX)\r
65// SYMBOL_ENTRY (VarYYY, 0xYYY)\r
66// SYMBOL_ENTRY\r
67//\r
68// SYMBOL_OBJECT -> SYMBOL_ENTRY\r
69// SYMBOL_ENTRY\r
70//\r
71// SYMBOL_OBJECT -> SYMBOL_ENTRY\r
72// SYMBOL_ENTRY\r
73//\r
74\r
75typedef enum {\r
76 EfiDebuggerSymbolFunction,\r
77 EfiDebuggerSymbolStaticFunction,\r
78 EfiDebuggerSymbolGlobalVariable,\r
79 EfiDebuggerSymbolStaticVariable,\r
80 EfiDebuggerSymbolTypeMax,\r
81} EFI_DEBUGGER_SYMBOL_TYPE;\r
82\r
83typedef struct {\r
84 CHAR8 Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];\r
789b86ac 85 UINTN Rva;\r
748edcd5
PB
86 EFI_DEBUGGER_SYMBOL_TYPE Type;\r
87 CHAR8 ObjName[EFI_DEBUGGER_SYMBOL_NAME_MAX];\r
88 CHAR8 *CodBuffer;\r
89 UINTN CodBufferSize;\r
90 UINTN FuncOffsetBase;\r
91 CHAR8 *SourceBuffer;\r
92} EFI_DEBUGGER_SYMBOL_ENTRY;\r
93\r
94typedef struct {\r
95 CHAR16 Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];\r
96 UINTN EntryCount;\r
97 UINTN MaxEntryCount;\r
98 UINTN BaseAddress;\r
99 UINTN StartEntrypointRVA;\r
100 UINTN MainEntrypointRVA;\r
101 EFI_DEBUGGER_SYMBOL_ENTRY *Entry;\r
102 VOID **SourceBuffer;\r
103} EFI_DEBUGGER_SYMBOL_OBJECT;\r
104\r
105typedef struct {\r
106 UINTN ObjectCount;\r
107 UINTN MaxObjectCount;\r
108 EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
109 BOOLEAN DisplaySymbol;\r
110 BOOLEAN DisplayCodeOnly;\r
111} EFI_DEBUGGER_SYMBOL_CONTEXT;\r
112\r
113//\r
114// Definition for Debugger Breakpoint\r
115//\r
116#define EFI_DEBUGGER_BREAKPOINT_MAX 0x10\r
117\r
118typedef struct {\r
119 EFI_PHYSICAL_ADDRESS BreakpointAddress;\r
120 UINT64 OldInstruction; // UINT64 is enough for an instruction\r
121 BOOLEAN State;\r
122} EFI_DEBUGGER_BREAKPOINT_CONTEXT;\r
123\r
124//\r
125// Definition for Debugger Call-Stack\r
126//\r
127#define EFI_DEBUGGER_CALLSTACK_MAX 0x10\r
128\r
129typedef enum {\r
130 EfiDebuggerBranchTypeEbcCall,\r
131 EfiDebuggerBranchTypeEbcCallEx,\r
132 EfiDebuggerBranchTypeEbcRet,\r
133 EfiDebuggerBranchTypeEbcJmp,\r
134 EfiDebuggerBranchTypeEbcJmp8,\r
135 EfiDebuggerBranchTypeEbcMax,\r
136} EFI_DEBUGGER_BRANCH_TYPE;\r
137\r
138#define EFI_DEBUGGER_CALL_MAX_PARAMETER 0x16\r
139#define EFI_DEBUGGER_CALL_DEFAULT_PARAMETER 0x8\r
140\r
141typedef struct {\r
142 EFI_PHYSICAL_ADDRESS SourceAddress;\r
143 EFI_PHYSICAL_ADDRESS DestAddress;\r
144 //\r
145 // We save all parameter here, because code may update the parameter as local variable.\r
146 //\r
147 UINTN ParameterAddr;\r
148 UINTN Parameter[EFI_DEBUGGER_CALL_MAX_PARAMETER];\r
149 EFI_DEBUGGER_BRANCH_TYPE Type;\r
150} EFI_DEBUGGER_CALLSTACK_CONTEXT;\r
151\r
152//\r
153// Definition for Debugger Trace\r
154//\r
155#define EFI_DEBUGGER_TRACE_MAX 0x10\r
156\r
157typedef struct {\r
158 EFI_PHYSICAL_ADDRESS SourceAddress;\r
159 EFI_PHYSICAL_ADDRESS DestAddress;\r
160 EFI_DEBUGGER_BRANCH_TYPE Type;\r
161} EFI_DEBUGGER_TRACE_CONTEXT;\r
162\r
163//\r
164// Definition for Debugger Step\r
165//\r
166typedef struct {\r
167 EFI_PHYSICAL_ADDRESS BreakAddress;\r
168 EFI_PHYSICAL_ADDRESS FramePointer;\r
169} EFI_DEBUGGER_STEP_CONTEXT;\r
170\r
171//\r
172// Definition for Debugger GoTil\r
173//\r
174typedef struct {\r
175 EFI_PHYSICAL_ADDRESS BreakAddress;\r
176} EFI_DEBUGGER_GOTIL_CONTEXT;\r
177\r
178//\r
179// Definition for Debugger private data structure\r
180//\r
181#define EFI_DEBUGGER_SIGNATURE SIGNATURE_32 ('e', 'd', 'b', '!')\r
182\r
183#define EFI_DEBUG_DEFAULT_INSTRUCTION_NUMBER 5\r
184\r
185#define EFI_DEBUG_BREAK_TIMER_INTERVAL 10000000 // 1 second\r
186\r
187#define EFI_DEBUG_FLAG_EBC 0x80000000\r
188#define EFI_DEBUG_FLAG_EBC_B_BOC 0x1\r
189#define EFI_DEBUG_FLAG_EBC_B_BOCX 0x2\r
190#define EFI_DEBUG_FLAG_EBC_B_BOR 0x4\r
191#define EFI_DEBUG_FLAG_EBC_B_BOE 0x8\r
192#define EFI_DEBUG_FLAG_EBC_B_BOT 0x10\r
193#define EFI_DEBUG_FLAG_EBC_B_STEPOVER 0x20\r
194#define EFI_DEBUG_FLAG_EBC_B_STEPOUT 0x40\r
195#define EFI_DEBUG_FLAG_EBC_B_BP 0x80\r
196#define EFI_DEBUG_FLAG_EBC_B_GT 0x100\r
197#define EFI_DEBUG_FLAG_EBC_B_BOK 0x200\r
198#define EFI_DEBUG_FLAG_EBC_BOC (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOC)\r
199#define EFI_DEBUG_FLAG_EBC_BOCX (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOCX)\r
200#define EFI_DEBUG_FLAG_EBC_BOR (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOR)\r
201#define EFI_DEBUG_FLAG_EBC_BOE (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOE)\r
202#define EFI_DEBUG_FLAG_EBC_BOT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOT)\r
203#define EFI_DEBUG_FLAG_EBC_STEPOVER (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOVER)\r
204#define EFI_DEBUG_FLAG_EBC_STEPOUT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOUT)\r
205#define EFI_DEBUG_FLAG_EBC_BP (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BP)\r
206#define EFI_DEBUG_FLAG_EBC_GT (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_GT)\r
207#define EFI_DEBUG_FLAG_EBC_BOK (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOK)\r
208\r
209//\r
210// Debugger private data structure\r
211//\r
212typedef struct _EFI_DEBUGGER_PRIVATE_DATA {\r
213 UINT32 Signature;\r
214 EFI_INSTRUCTION_SET_ARCHITECTURE Isa;\r
215 UINT32 EfiDebuggerRevision;\r
216 UINT32 EbcVmRevision;\r
2b2efe33 217 EFI_DEBUGGER_CONFIGURATION_PROTOCOL DebuggerConfiguration;\r
748edcd5
PB
218 EFI_DEBUG_IMAGE_INFO_TABLE_HEADER *DebugImageInfoTableHeader;\r
219 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Vol;\r
220 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
221 EFI_DEBUGGER_COMMAND_SET *DebuggerCommandSet;\r
222 EFI_DEBUGGER_SYMBOL_CONTEXT DebuggerSymbolContext;\r
223 UINTN DebuggerBreakpointCount;\r
224 EFI_DEBUGGER_BREAKPOINT_CONTEXT DebuggerBreakpointContext[EFI_DEBUGGER_BREAKPOINT_MAX + 1];\r
225 UINTN CallStackEntryCount;\r
226 EFI_DEBUGGER_CALLSTACK_CONTEXT CallStackEntry[EFI_DEBUGGER_CALLSTACK_MAX + 1];\r
227 UINTN TraceEntryCount;\r
228 EFI_DEBUGGER_TRACE_CONTEXT TraceEntry[EFI_DEBUGGER_TRACE_MAX + 1];\r
229 EFI_DEBUGGER_STEP_CONTEXT StepContext;\r
230 EFI_DEBUGGER_GOTIL_CONTEXT GoTilContext;\r
231 EFI_PHYSICAL_ADDRESS InstructionScope;\r
232 UINTN InstructionNumber;\r
233 UINT32 FeatureFlags;\r
234 UINT32 StatusFlags;\r
235 BOOLEAN EnablePageBreak;\r
236 EFI_EVENT BreakEvent;\r
237} EFI_DEBUGGER_PRIVATE_DATA;\r
238\r
239#endif\r