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 
9 #ifndef _EFI_EDB_SYMBOL_H_
10 #define _EFI_EDB_SYMBOL_H_
11 
12 #include <Uefi.h>
13 
14 //
15 // The default base address is 0x10000000
16 //
17 #define EFI_DEBUGGER_DEFAULT_LINK_IMAGEBASE  0x10000000
18 
19 #define EFI_DEBUGGER_MAX_SYMBOL_ADDRESS_DELTA_VALUE  0x100000 // 1 M delta
20 
21 typedef enum {
22   EdbMatchSymbolTypeSameAdderss,
23   EdbMatchSymbolTypeNearestAddress,
24   EdbMatchSymbolTypeLowerAddress,
25   EdbMatchSymbolTypeUpperAddress,
26   EdbMatchSymbolTypeMax,
27 } EDB_MATCH_SYMBOL_TYPE;
28 
29 typedef enum {
30   EdbEbcImageRvaSearchTypeAny,
31   EdbEbcImageRvaSearchTypeFirst,
32   EdbEbcImageRvaSearchTypeLast,
33   EdbEbcImageRvaSearchTypeMax,
34 } EDB_EBC_IMAGE_RVA_SEARCH_TYPE;
35 
36 /**
37 
38   Find symbol by address.
39 
40   @param  Address         - Symbol address
41   @param  Type            - Search type
42   @param  RetObject       - Symbol object
43   @param  RetEntry        - Symbol entry
44 
45   @return Nearest symbol address
46 
47 **/
48 UINTN
49 EbdFindSymbolAddress (
50   IN UINTN                       Address,
51   IN EDB_MATCH_SYMBOL_TYPE       Type,
52   OUT EFI_DEBUGGER_SYMBOL_OBJECT **Object,
53   OUT EFI_DEBUGGER_SYMBOL_ENTRY  **Entry
54   );
55 
56 /**
57 
58   Load symbol file by name.
59 
60   @param  DebuggerPrivate - EBC Debugger private data structure
61   @param  FileName        - Symbol file name
62   @param  BufferSize      - Symbol file buffer size
63   @param  Buffer          - Symbol file buffer
64 
65   @retval EFI_SUCCESS - load symbol successfully
66 
67 **/
68 EFI_STATUS
69 EdbLoadSymbol (
70   IN EFI_DEBUGGER_PRIVATE_DATA   *DebuggerPrivate,
71   IN CHAR16                      *FileName,
72   IN UINTN                       BufferSize,
73   IN VOID                        *Buffer
74   );
75 
76 /**
77 
78   Unload symbol file by name.
79 
80   @param  DebuggerPrivate - EBC Debugger private data structure
81   @param  FileName        - Symbol file name
82 
83   @retval EFI_SUCCESS - unload symbol successfully
84 
85 **/
86 EFI_STATUS
87 EdbUnloadSymbol (
88   IN EFI_DEBUGGER_PRIVATE_DATA   *DebuggerPrivate,
89   IN CHAR16                      *FileName
90   );
91 
92 /**
93 
94   Patch symbol RVA.
95 
96   @param  DebuggerPrivate - EBC Debugger private data structure
97   @param  FileName        - Symbol file name
98   @param  SearchType      - Search type for Object
99 
100   @retval EFI_SUCCESS   - Patch symbol RVA successfully
101   @retval EFI_NOT_FOUND - Symbol RVA base not found
102 
103 **/
104 EFI_STATUS
105 EdbPatchSymbolRVA (
106   IN EFI_DEBUGGER_PRIVATE_DATA     *DebuggerPrivate,
107   IN CHAR16                        *FileName,
108   IN EDB_EBC_IMAGE_RVA_SEARCH_TYPE SearchType
109   );
110 
111 /**
112 
113   Load code.
114 
115   @param  DebuggerPrivate - EBC Debugger private data structure
116   @param  MapFileName     - Symbol file name
117   @param  FileName        - Code file name
118   @param  BufferSize      - Code file buffer size
119   @param  Buffer          - Code file buffer
120 
121   @retval EFI_SUCCESS - Code loaded successfully
122 
123 **/
124 EFI_STATUS
125 EdbLoadCode (
126   IN EFI_DEBUGGER_PRIVATE_DATA   *DebuggerPrivate,
127   IN CHAR16                      *MapFileName,
128   IN CHAR16                      *FileName,
129   IN UINTN                       BufferSize,
130   IN VOID                        *Buffer
131   );
132 
133 /**
134 
135   Unload code.
136 
137   @param  DebuggerPrivate - EBC Debugger private data structure
138   @param  MapFileName     - Symbol file name
139   @param  FileName        - Code file name
140   @param  Buffer          - Code file buffer
141 
142   @retval EFI_SUCCESS - Code unloaded successfully
143 
144 **/
145 EFI_STATUS
146 EdbUnloadCode (
147   IN EFI_DEBUGGER_PRIVATE_DATA   *DebuggerPrivate,
148   IN CHAR16                      *MapFileName,
149   IN CHAR16                      *FileName,
150   OUT VOID                       **Buffer
151   );
152 
153 /**
154 
155   Add code buffer.
156 
157   @param  DebuggerPrivate - EBC Debugger private data structure
158   @param  MapFileName     - Symbol file name
159   @param  CodeFileName    - Code file name
160   @param  SourceBufferSize- Code buffer size
161   @param  SourceBuffer    - Code buffer
162 
163   @retval EFI_SUCCESS - CodeBuffer added successfully
164 
165 **/
166 EFI_STATUS
167 EdbAddCodeBuffer (
168   IN     EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,
169   IN     CHAR16                    *MapFileName,
170   IN     CHAR16                    *CodeFileName,
171   IN     UINTN                     SourceBufferSize,
172   IN     VOID                      *SourceBuffer
173   );
174 
175 /**
176 
177   Delete code buffer.
178 
179   @param  DebuggerPrivate - EBC Debugger private data structure
180   @param  MapFileName     - Symbol file name
181   @param  CodeFileName    - Code file name
182   @param  SourceBuffer    - Code buffer
183 
184   @retval EFI_SUCCESS - CodeBuffer deleted successfully
185 
186 **/
187 EFI_STATUS
188 EdbDeleteCodeBuffer (
189   IN     EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,
190   IN     CHAR16                    *MapFileName,
191   IN     CHAR16                    *CodeFileName,
192   IN     VOID                      *SourceBuffer
193   );
194 
195 /**
196 
197   Find the symbol string according to address.
198 
199   @param  Address         - Symbol address
200 
201   @return Symbol string
202 
203 **/
204 CHAR8 *
205 FindSymbolStr (
206   IN UINTN Address
207   );
208 
209 /**
210 
211   Print source.
212 
213   @param  Address         - Instruction address
214   @param  IsPrint         - Whether need to print
215 
216   @retval 1 - find the source
217   @retval 0 - not find the source
218 
219 **/
220 UINTN
221 EdbPrintSource (
222   IN UINTN     Address,
223   IN BOOLEAN   IsPrint
224   );
225 
226 /**
227 
228   Convert a symbol to an address.
229 
230   @param  Symbol          - Symbol name
231   @param  Address         - Symbol address
232 
233   @retval EFI_SUCCESS    - symbol found and address returned.
234   @retval EFI_NOT_FOUND  - symbol not found
235   @retval EFI_NO_MAPPING - duplicated symbol not found
236 
237 **/
238 EFI_STATUS
239 Symboltoi (
240   IN CHAR16   *Symbol,
241   OUT UINTN   *Address
242   );
243 
244 #endif
245