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