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