]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/EbcDxe/EbcDebugger/EdbCommon.h
MdeModulePkg/EbcDxe: add EBC Debugger configuration application
[mirror_edk2.git] / MdeModulePkg / Universal / EbcDxe / EbcDebugger / EdbCommon.h
1 /*++
2
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
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 Module Name:
13
14 EdbCommon.h
15
16 Abstract:
17
18
19 --*/
20
21 #ifndef _EFI_EDB_COMMON_H_
22 #define _EFI_EDB_COMMON_H_
23
24 #include <Uefi.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>
42
43 typedef UINTN EFI_DEBUG_STATUS;
44
45 typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA;
46
47 //
48 // Definition for Debugger Command
49 //
50 typedef
51 EFI_DEBUG_STATUS
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
57 );
58
59 typedef struct {
60 CHAR16 *CommandName;
61 CHAR16 *CommandTitle;
62 CHAR16 *CommandHelp;
63 CHAR16 *CommandSyntax;
64 CHAR16 *ClassName;
65 EFI_INPUT_KEY CommandKey;
66 EFI_DEBUGGER_COMMAND CommandFunc;
67 } EFI_DEBUGGER_COMMAND_SET;
68
69 //
70 // Definition for Debugger Symbol
71 //
72 #define EFI_DEBUGGER_SYMBOL_NAME_MAX 256
73 #define EFI_DEBUGGER_SYMBOL_ENTRY_MAX 512
74 #define EFI_DEBUGGER_SYMBOL_OBJECT_MAX 32
75
76 //
77 // We have following SYMBOL data structure:
78 //
79 // SYMBOL_CONTEXT -> SYMBOL_OBJECT -> SYMBOL_ENTRY (FuncXXX, 0xXXX)
80 // SYMBOL_ENTRY (VarYYY, 0xYYY)
81 // SYMBOL_ENTRY
82 //
83 // SYMBOL_OBJECT -> SYMBOL_ENTRY
84 // SYMBOL_ENTRY
85 //
86 // SYMBOL_OBJECT -> SYMBOL_ENTRY
87 // SYMBOL_ENTRY
88 //
89
90 typedef enum {
91 EfiDebuggerSymbolFunction,
92 EfiDebuggerSymbolStaticFunction,
93 EfiDebuggerSymbolGlobalVariable,
94 EfiDebuggerSymbolStaticVariable,
95 EfiDebuggerSymbolTypeMax,
96 } EFI_DEBUGGER_SYMBOL_TYPE;
97
98 typedef struct {
99 CHAR8 Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];
100 UINTN RVA;
101 EFI_DEBUGGER_SYMBOL_TYPE Type;
102 CHAR8 ObjName[EFI_DEBUGGER_SYMBOL_NAME_MAX];
103 CHAR8 *CodBuffer;
104 UINTN CodBufferSize;
105 UINTN FuncOffsetBase;
106 CHAR8 *SourceBuffer;
107 } EFI_DEBUGGER_SYMBOL_ENTRY;
108
109 typedef struct {
110 CHAR16 Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];
111 UINTN EntryCount;
112 UINTN MaxEntryCount;
113 UINTN BaseAddress;
114 UINTN StartEntrypointRVA;
115 UINTN MainEntrypointRVA;
116 EFI_DEBUGGER_SYMBOL_ENTRY *Entry;
117 VOID **SourceBuffer;
118 } EFI_DEBUGGER_SYMBOL_OBJECT;
119
120 typedef struct {
121 UINTN ObjectCount;
122 UINTN MaxObjectCount;
123 EFI_DEBUGGER_SYMBOL_OBJECT *Object;
124 BOOLEAN DisplaySymbol;
125 BOOLEAN DisplayCodeOnly;
126 } EFI_DEBUGGER_SYMBOL_CONTEXT;
127
128 //
129 // Definition for Debugger Breakpoint
130 //
131 #define EFI_DEBUGGER_BREAKPOINT_MAX 0x10
132
133 typedef struct {
134 EFI_PHYSICAL_ADDRESS BreakpointAddress;
135 UINT64 OldInstruction; // UINT64 is enough for an instruction
136 BOOLEAN State;
137 } EFI_DEBUGGER_BREAKPOINT_CONTEXT;
138
139 //
140 // Definition for Debugger Call-Stack
141 //
142 #define EFI_DEBUGGER_CALLSTACK_MAX 0x10
143
144 typedef enum {
145 EfiDebuggerBranchTypeEbcCall,
146 EfiDebuggerBranchTypeEbcCallEx,
147 EfiDebuggerBranchTypeEbcRet,
148 EfiDebuggerBranchTypeEbcJmp,
149 EfiDebuggerBranchTypeEbcJmp8,
150 EfiDebuggerBranchTypeEbcMax,
151 } EFI_DEBUGGER_BRANCH_TYPE;
152
153 #define EFI_DEBUGGER_CALL_MAX_PARAMETER 0x16
154 #define EFI_DEBUGGER_CALL_DEFAULT_PARAMETER 0x8
155
156 typedef struct {
157 EFI_PHYSICAL_ADDRESS SourceAddress;
158 EFI_PHYSICAL_ADDRESS DestAddress;
159 //
160 // We save all parameter here, because code may update the parameter as local variable.
161 //
162 UINTN ParameterAddr;
163 UINTN Parameter[EFI_DEBUGGER_CALL_MAX_PARAMETER];
164 EFI_DEBUGGER_BRANCH_TYPE Type;
165 } EFI_DEBUGGER_CALLSTACK_CONTEXT;
166
167 //
168 // Definition for Debugger Trace
169 //
170 #define EFI_DEBUGGER_TRACE_MAX 0x10
171
172 typedef struct {
173 EFI_PHYSICAL_ADDRESS SourceAddress;
174 EFI_PHYSICAL_ADDRESS DestAddress;
175 EFI_DEBUGGER_BRANCH_TYPE Type;
176 } EFI_DEBUGGER_TRACE_CONTEXT;
177
178 //
179 // Definition for Debugger Step
180 //
181 typedef struct {
182 EFI_PHYSICAL_ADDRESS BreakAddress;
183 EFI_PHYSICAL_ADDRESS FramePointer;
184 } EFI_DEBUGGER_STEP_CONTEXT;
185
186 //
187 // Definition for Debugger GoTil
188 //
189 typedef struct {
190 EFI_PHYSICAL_ADDRESS BreakAddress;
191 } EFI_DEBUGGER_GOTIL_CONTEXT;
192
193 //
194 // Definition for Debugger private data structure
195 //
196 #define EFI_DEBUGGER_SIGNATURE SIGNATURE_32 ('e', 'd', 'b', '!')
197
198 #define EFI_DEBUG_DEFAULT_INSTRUCTION_NUMBER 5
199
200 #define EFI_DEBUG_BREAK_TIMER_INTERVAL 10000000 // 1 second
201
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)
223
224 //
225 // Debugger private data structure
226 //
227 typedef struct _EFI_DEBUGGER_PRIVATE_DATA {
228 UINT32 Signature;
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;
248 UINT32 FeatureFlags;
249 UINT32 StatusFlags;
250 BOOLEAN EnablePageBreak;
251 EFI_EVENT BreakEvent;
252 } EFI_DEBUGGER_PRIVATE_DATA;
253
254 #endif