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