]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbCommon.h
MdeModulePkg/EbcDxe: Make variable name follow rules
[mirror_edk2.git] / MdeModulePkg / Universal / EbcDxe / EbcDebugger / EdbCommon.h
CommitLineData
e8a5ac7c 1/** @file\r
748edcd5 2\r
e8a5ac7c
DB
3Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials\r
748edcd5
PB
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT 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
36typedef UINTN EFI_DEBUG_STATUS;\r
37\r
38typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA;\r
39\r
40//\r
41// Definition for Debugger Command\r
42//\r
43typedef\r
44EFI_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
52typedef 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
83typedef 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
91typedef 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
102typedef 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
113typedef 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
126typedef 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
137typedef 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
149typedef 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
165typedef 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
174typedef 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
182typedef 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
220typedef 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