-/*++\r
+/** @file\r
\r
-Copyright (c) 2007 - 2016, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
-Module Name:\r
\r
- EdbSymbol.c\r
+**/\r
\r
-Abstract:\r
+#include "Edb.h"\r
\r
+/**\r
\r
---*/\r
+ Load single symbol entry.\r
\r
-#include "Edb.h"\r
+ @param Object - Symbol file object\r
+ @param Name - Symbol name\r
+ @param ObjName - Object name\r
+ @param Address - Symbol address\r
+ @param Type - Symbol type\r
+\r
+ @retval EFI_SUCCESS - add single symbol entry successfully\r
\r
+**/\r
EFI_STATUS\r
EdbLoadSymbolSingleEntry (\r
IN EFI_DEBUGGER_SYMBOL_OBJECT *Object,\r
IN UINTN Address,\r
IN EFI_DEBUGGER_SYMBOL_TYPE Type\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load single symbol entry\r
-\r
-Arguments:\r
-\r
- Object - Symbol file object\r
- Name - Symbol name\r
- ObjName - Object name\r
- Address - Symbol address\r
- Type - Symbol type\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - add single symbol entry successfully\r
-\r
---*/\r
{\r
EFI_DEBUGGER_SYMBOL_ENTRY *Entry;\r
\r
EdbEbcSymbolParseStateMax,\r
} EDB_EBC_SYMBOL_PARSE_STATE;\r
\r
-/*++\r
+/**\r
\r
The following code depends on the MAP file generated by IEC compiler (actually Microsoft linker).\r
\r
0001:00000000 TestSubRoutine2 10000400 f EbcTest.obj\r
===============================================================================\r
\r
---*/\r
+**/\r
+\r
+/**\r
+\r
+ Load symbol entry by Iec.\r
+\r
+ @param Object - Symbol file object\r
+ @param BufferSize - Symbol file buffer size\r
+ @param Buffer - Symbol file buffer\r
+\r
+ @retval EFI_SUCCESS - add symbol entry successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbLoadSymbolEntryByIec (\r
IN EFI_DEBUGGER_SYMBOL_OBJECT *Object,\r
IN UINTN BufferSize,\r
IN VOID *Buffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load symbol entry by Iec\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- Object - Symbol file object\r
- BufferSize - Symbol file buffer size\r
- Buffer - Symbol file buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - add symbol entry successfully\r
-\r
---*/\r
{\r
CHAR8 *LineBuffer;\r
CHAR8 *FieldBuffer;\r
- EFI_DEBUGGER_SYMBOL_ENTRY *Entry;\r
EDB_EBC_MAP_PARSE_STATE MapParseState;\r
EDB_EBC_SYMBOL_PARSE_STATE SymbolParseState;\r
CHAR8 *Name;\r
UINTN Address;\r
EFI_DEBUGGER_SYMBOL_TYPE Type;\r
\r
- Entry = Object->Entry;\r
\r
//\r
// Begin to parse the Buffer\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+\r
+ Load symbol entry.\r
+\r
+ @param Object - Symbol file object\r
+ @param BufferSize - Symbol file buffer size\r
+ @param Buffer - Symbol file buffer\r
+\r
+ @retval EFI_SUCCESS - add symbol entry successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbLoadSymbolEntry (\r
IN EFI_DEBUGGER_SYMBOL_OBJECT *Object,\r
IN UINTN BufferSize,\r
IN VOID *Buffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load symbol entry\r
-\r
-Arguments:\r
-\r
- Object - Symbol file object\r
- BufferSize - Symbol file buffer size\r
- Buffer - Symbol file buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - add symbol entry successfully\r
-\r
---*/\r
{\r
//\r
// MAP file format depends on the compiler (actually linker).\r
return EdbLoadSymbolEntryByIec (Object, BufferSize, Buffer);\r
}\r
\r
+/**\r
+\r
+ Find symbol file by name.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param FileName - Symbol file name\r
+ @param Index - Symbol file index\r
+\r
+ @return Object\r
+\r
+**/\r
EFI_DEBUGGER_SYMBOL_OBJECT *\r
EdbFindSymbolFile (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN CHAR16 *FileName,\r
IN OUT UINTN *Index OPTIONAL\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Find symbol file by name\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- FileName - Symbol file name\r
- Index - Symbol file index\r
-\r
-Returns:\r
-\r
- Object\r
-\r
---*/\r
{\r
UINTN ObjectIndex;\r
\r
return NULL;\r
}\r
\r
+/**\r
+\r
+ Find symbol by address.\r
+\r
+ @param Address - Symbol address\r
+ @param Type - Search type\r
+ @param RetObject - Symbol object\r
+ @param RetEntry - Symbol entry\r
+\r
+ @return Nearest symbol address\r
+\r
+**/\r
UINTN\r
EbdFindSymbolAddress (\r
IN UINTN Address,\r
OUT EFI_DEBUGGER_SYMBOL_OBJECT **RetObject,\r
OUT EFI_DEBUGGER_SYMBOL_ENTRY **RetEntry\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Find symbol by address\r
-\r
-Arguments:\r
-\r
- Address - Symbol address\r
- Type - Search type\r
- RetObject - Symbol object\r
- RetEntry - Symbol entry\r
-\r
-Returns:\r
-\r
- Nearest symbol address\r
-\r
---*/\r
{\r
UINTN Index;\r
UINTN SubIndex;\r
return 0;\r
}\r
\r
+/**\r
+\r
+ Unload symbol file by name.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param FileName - Symbol file name\r
+\r
+ @retval EFI_SUCCESS - unload symbol successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbUnloadSymbol (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN CHAR16 *FileName\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Unload symbol file by name\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- FileName - Symbol file name\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - unload symbol successfully\r
-\r
---*/\r
{\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
UINTN ObjectIndex;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+\r
+ Load symbol file by name.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param FileName - Symbol file name\r
+ @param BufferSize - Symbol file buffer size\r
+ @param Buffer - Symbol file buffer\r
+\r
+ @retval EFI_SUCCESS - load symbol successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbLoadSymbol (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN UINTN BufferSize,\r
IN VOID *Buffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load symbol file by name\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- FileName - Symbol file name\r
- BufferSize - Symbol file buffer size\r
- Buffer - Symbol file buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - load symbol successfully\r
-\r
---*/\r
{\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
EFI_STATUS Status;\r
return EFI_SUCCESS;\r
}\r
\r
-CHAR8 *\r
-GetPdbPath (\r
- VOID *ImageBase\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Located PDB path name in PE image\r
+/**\r
\r
-Arguments:\r
+ Located PDB path name in PE image.\r
\r
- ImageBase - base of PE to search\r
+ @param ImageBase - base of PE to search\r
\r
-Returns:\r
-\r
- Pointer into image at offset of PDB file name if PDB file name is found,\r
+ @return Pointer into image at offset of PDB file name if PDB file name is found,\r
Otherwise a pointer to an empty string.\r
\r
---*/\r
+**/\r
+CHAR8 *\r
+GetPdbPath (\r
+ VOID *ImageBase\r
+ )\r
{\r
CHAR8 *PdbPath;\r
UINT32 DirCount;\r
return PdbPath;\r
}\r
\r
+/**\r
+\r
+ Check whether PDB file and MAP file have same name.\r
+\r
+ @param PdbFileName - PDB file name\r
+ @param MapFileName - MAP file name\r
+\r
+ @retval TRUE - PDB and MAP file name match\r
+ @retval FALSE - PDB and MAP file name not match\r
+\r
+**/\r
BOOLEAN\r
MatchPdbAndMap (\r
IN CHAR8 *PdbFileName,\r
IN CHAR16 *MapFileName\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Check whether PDB file and MAP file have same name\r
-\r
-Arguments:\r
-\r
- PdbFileName - PDB file name\r
- MapFileName - MAP file name\r
-\r
-Returns:\r
-\r
- TRUE - PDB and MAP file name match\r
- FALSE - PDB and MAP file name not match\r
-\r
---*/\r
{\r
UINTN PdbNameSize;\r
UINTN MapNameSize;\r
\r
EFI_DEBUG_IMAGE_INFO_TABLE_HEADER mDebugImageInfoTableHeader;\r
\r
-VOID\r
-EdbFixDebugImageInfoTable (\r
- IN OUT EFI_DEBUG_IMAGE_INFO_TABLE_HEADER **DebugImageInfoTableHeader\r
- )\r
-/*\r
+/**\r
For compatibility consideration, we handle 2 cases:\r
\r
1) IA32:\r
| TableSize | | |\r
+------------------------+ +------------------------+\r
\r
-*/\r
+ @param DebugImageInfoTableHeader Point to the EFI_DEBUG_IMAGE_INFO_TABLE_HEADER structure.\r
+\r
+**/\r
+VOID\r
+EdbFixDebugImageInfoTable (\r
+ IN OUT EFI_DEBUG_IMAGE_INFO_TABLE_HEADER **DebugImageInfoTableHeader\r
+ )\r
{\r
mDebugImageInfoTableHeader.EfiDebugImageInfoTable = ((EFI_DEBUG_IMAGE_INFO_TABLE_HEADER_OLD *)(*DebugImageInfoTableHeader))->EfiDebugImageInfoTable;\r
mDebugImageInfoTableHeader.UpdateStatus = ((EFI_DEBUG_IMAGE_INFO_TABLE_HEADER_OLD *)(*DebugImageInfoTableHeader))->UpdateStatus;\r
// BUGBUG: work-around end\r
//\r
\r
+/**\r
+\r
+ Patch symbol RVA.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param FileName - Symbol file name\r
+ @param SearchType - Search type for Object\r
+\r
+ @retval EFI_SUCCESS - Patch symbol RVA successfully\r
+ @retval EFI_NOT_FOUND - Symbol RVA base not found\r
+\r
+**/\r
EFI_STATUS\r
EdbPatchSymbolRVA (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN CHAR16 *FileName,\r
IN EDB_EBC_IMAGE_RVA_SEARCH_TYPE SearchType\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Patch symbol RVA\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- FileName - Symbol file name\r
- SearchType - Search type for Object\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Patch symbol RVA successfully\r
- EFI_NOT_FOUND - Symbol RVA base not found\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
UINTN ImageNumber;\r
return EFI_NOT_FOUND;\r
}\r
\r
+/**\r
+\r
+ Check whether OBJ file and COD file have same name.\r
+\r
+ @param ObjFileName - OBJ file name\r
+ @param CodFileName - COD file name\r
+\r
+ @retval TRUE - OBJ and COD file name match\r
+ @retval FALSE - OBJ and COD file name not match\r
+\r
+**/\r
BOOLEAN\r
MatchObjAndCod (\r
IN CHAR8 *ObjFileName,\r
IN CHAR16 *CodFileName\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Check whether OBJ file and COD file have same name\r
-\r
-Arguments:\r
-\r
- ObjFileName - OBJ file name\r
- CodFileName - COD file name\r
-\r
-Returns:\r
-\r
- TRUE - OBJ and COD file name match\r
- FALSE - OBJ and COD file name not match\r
-\r
---*/\r
{\r
UINTN ObjNameSize;\r
UINTN CodNameSize;\r
EdbEbcCodParseStateMax,\r
} EDB_EBC_COD_PARSE_STATE;\r
\r
-/*++\r
+/**\r
\r
The following code depends on the COD file generated by IEC compiler.\r
\r
- Sample as follows: EbcTest.cod\r
-===============================================================================\r
-; -- Machine type EFI\r
-; mark_description "Intel(R) C Compiler for EFI Byte Code, Version 1.2 Build 20040123";\r
-; mark_description "XXX";\r
-;ident "Intel(R) C Compiler for EFI Byte Code, Version 1.2 Build 20040123"\r
-;ident "XXX"\r
- .686P\r
- .387\r
-_TEXT SEGMENT PARA PUBLIC USE32 'CODE'\r
-_TEXT ENDS\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
- ALIGN 010H\r
-_DATA ENDS\r
-_BSS SEGMENT PARA PUBLIC USE32 'BSS'\r
- ALIGN 010H\r
-_BSS ENDS\r
-_VARBSS SEGMENT PARA PUBLIC USE32 'BSS'\r
- ALIGN 010H\r
-_VARBSS ENDS\r
- ASSUME CS:FLAT,DS:FLAT,SS:FLAT\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
-TestVariable2 DD 000000003H,000000000H ; u64\r
-_DATA ENDS\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
-_DATA ENDS\r
-_TEXT SEGMENT PARA PUBLIC USE32 'CODE'\r
-; -- Begin EfiMain\r
-; mark_begin;\r
- PUBLIC EfiMain\r
-EfiMain PROC NEAR\r
-$B3$1:; 11a\r
-$LN45:\r
-\r
-;117 ; {\r
-\r
- 0011a 60 00 70 80 MOVqw R0, R0(+0,-112) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:117\r
-$LN46:\r
-\r
-;118 ; UINT16 test = 0x1234;\r
-\r
- 0011e 77 58 58 00 34\r
- 12 MOVIww @R0(+0,+88), +4660 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:118\r
-$LN47:\r
-\r
-;121 ; EFI_STATUS Status;\r
-;121 ;\r
-;121 ; SystemTable->ConOut->OutputString (\r
-\r
- 00124 72 87 01 12 MOVnw R7, @R0(+1,+128) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:121\r
- 00128 72 f7 85 21 MOVnw R7, @R7(+5,+24) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:121\r
-$LN48:\r
-\r
-;122 ; SystemTable->ConOut,\r
-\r
- 0012c 72 84 01 12 MOVnw R4, @R0(+1,+128) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:122\r
- 00130 72 c8 85 21 MOVnw @R0, @R4(+5,+24) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:122\r
- 00134 b9 34 00 00 00\r
- 00 MOVreld R4, __STRING$1 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:122\r
- 0013a b2 48 01 10 MOVnw @R0(+1,+0), R4 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:122\r
- 0013e 83 2f 01 00 00\r
- 10 CALLEX @R7(+1,+0) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:122\r
-$B3$2:; 144\r
-$LN49:\r
-\r
-;125 ; L"Hello EBC Test!\n\r"\r
-;125 ; );\r
-;125 ; EFI_BREAKPOINT ();\r
-\r
- 00144 00 03 BREAK 3 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:125\r
-$B3$3:; 146\r
-$LN50:\r
-\r
-;126 ; TestVariable1 = 6;\r
-\r
- 00146 b9 37 00 00 00\r
- 00 MOVreld R7, TestVariable1 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:126\r
- 0014c 78 0f 06 00 MOVInw @R7, (0,6) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:126\r
-$LN51:\r
-\r
-;127 ; TestSubRoutineSub (1, 5);\r
-\r
- 00150 78 08 01 00 MOVInw @R0, (0,1) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:127\r
- 00154 78 48 01 10 05\r
- 00 MOVInw @R0(1,0), (0,5) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:127\r
- 0015a 83 10 00 00 00\r
- 00 CALL TestSubRoutineSub ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:127\r
-$B3$4:; 160\r
-$LN52:\r
-\r
-;129 ;\r
-;129 ; SystemTable->ConOut->OutputString (\r
-\r
- 00160 72 87 01 12 MOVnw R7, @R0(+1,+128) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:129\r
- 00164 72 f7 85 21 MOVnw R7, @R7(+5,+24) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:129\r
-$LN53:\r
-\r
-;130 ; SystemTable->ConOut,\r
-\r
- 00168 72 84 01 12 MOVnw R4, @R0(+1,+128) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:130\r
- 0016c 72 c8 85 21 MOVnw @R0, @R4(+5,+24) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:130\r
-$LN54:\r
-\r
-;131 ; TestStr\r
-\r
- 00170 b9 34 00 00 00\r
- 00 MOVreld R4, TestStr ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:131\r
- 00176 b2 c8 01 10 MOVnw @R0(+1, +0), @R4 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:131\r
- 0017a 83 2f 01 00 00\r
- 10 CALLEX @R7(+1,+0) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:131\r
-$B3$5:; 180\r
-$LN55:\r
-\r
-;134 ; );\r
-;134 ;\r
-;134 ; test = test & 0xFF;\r
-\r
- 00180 de 88 58 00 58\r
- 00 MOVww @R0(+0,+88), @R0(+0,+88) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:134\r
-$LN56:\r
-\r
-;139 ; if (test != 0x34) {\r
-;139 ; // EFI_BREAKPOINT ();\r
-;139 ; }\r
-;139 ;\r
-;139 ; Status = TestSubRoutine (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);\r
-\r
- 00186 78 08 01 00 MOVInw @R0, (0,1) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 0018a 78 48 01 10 02\r
- 00 MOVInw @R0(1,0), (0,2) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 00190 78 48 02 10 03\r
- 00 MOVInw @R0(2,0), (0,3) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 00196 78 48 03 10 04\r
- 00 MOVInw @R0(3,0), (0,4) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 0019c 78 48 04 20 05\r
- 00 MOVInw @R0(4,0), (0,5) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 001a2 78 48 05 20 06\r
- 00 MOVInw @R0(5,0), (0,6) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 001a8 78 48 06 20 07\r
- 00 MOVInw @R0(6,0), (0,7) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 001ae 78 48 07 20 08\r
- 00 MOVInw @R0(7,0), (0,8) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 001b4 78 48 08 20 09\r
- 00 MOVInw @R0(8,0), (0,9) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 001ba 78 48 09 20 0a\r
- 00 MOVInw @R0(9,0), (0,10) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
- 001c0 83 10 00 00 00\r
- 00 CALL TestSubRoutine ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
-$B3$10:; 1c6\r
- 001c6 b2 78 60 00 MOVnw @R0(+0,+96), R7 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
-$B3$6:; 1ca\r
-$LN57:\r
- 001ca f2 88 50 00 60\r
- 00 MOVnw @R0(+0,+80), @R0(+0,+96) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:139\r
-$LN58:\r
-\r
-;141 ;\r
-;141 ; SystemTable->ConOut->OutputString (\r
-\r
- 001d0 72 87 01 12 MOVnw R7, @R0(+1,+128) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:141\r
- 001d4 72 f7 85 21 MOVnw R7, @R7(+5,+24) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:141\r
-$LN59:\r
-\r
-;142 ; SystemTable->ConOut,\r
-\r
- 001d8 72 84 01 12 MOVnw R4, @R0(+1,+128) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:142\r
- 001dc 72 c8 85 21 MOVnw @R0, @R4(+5,+24) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:142\r
- 001e0 b9 34 00 00 00\r
- 00 MOVreld R4, __STRING$2 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:142\r
- 001e6 b2 48 01 10 MOVnw @R0(+1,+0), R4 ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:142\r
- 001ea 83 2f 01 00 00\r
- 10 CALLEX @R7(+1,+0) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:142\r
-$B3$7:; 1f0\r
-$LN60:\r
-\r
-;146 ; L"Goodbye EBC Test!\n\r"\r
-;146 ; );\r
-;146 ;\r
-;146 ; return Status;\r
-\r
- 001f0 72 87 50 00 MOVnw R7, @R0(+0,+80) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:146\r
- 001f4 60 00 70 00 MOVqw R0, R0(+0,+112) ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:146\r
- 001f8 04 00 RET ;C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest.c:146\r
-; mark_end;\r
-EfiMain ENDP\r
-_TEXT ENDS\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
- DB 3 DUP (0) ; pad\r
-__STRING$2 DW 71 ; u16\r
- DW 111 ; u16\r
- DW 111 ; u16\r
- DW 100 ; u16\r
- DW 98 ; u16\r
- DW 121 ; u16\r
- DW 101 ; u16\r
- DW 32 ; u16\r
- DW 69 ; u16\r
- DW 66 ; u16\r
- DW 67 ; u16\r
- DW 32 ; u16\r
- DW 84 ; u16\r
- DW 101 ; u16\r
- DW 115 ; u16\r
- DW 116 ; u16\r
- DW 33 ; u16\r
- DW 10 ; u16\r
- DW 13 ; u16\r
- DW 0 ; u16\r
-__STRING$1 DW 72 ; u16\r
- DW 101 ; u16\r
- DW 108 ; u16\r
- DW 108 ; u16\r
- DW 111 ; u16\r
- DW 32 ; u16\r
- DW 69 ; u16\r
- DW 66 ; u16\r
- DW 67 ; u16\r
- DW 32 ; u16\r
- DW 84 ; u16\r
- DW 101 ; u16\r
- DW 115 ; u16\r
- DW 116 ; u16\r
- DW 33 ; u16\r
- DW 10 ; u16\r
- DW 13 ; u16\r
- DW 0 ; u16\r
-_DATA ENDS\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
-_DATA ENDS\r
-; -- End EfiMain\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
-__STRING$0 DW 55 ; u16\r
- DW 56 ; u16\r
- DW 57 ; u16\r
- DW 52 ; u16\r
- DW 53 ; u16\r
- DW 54 ; u16\r
- DW 49 ; u16\r
- DW 50 ; u16\r
- DW 51 ; u16\r
- DW 13 ; u16\r
- DW 10 ; u16\r
- DW 0 ; u16\r
-_DATA ENDS\r
-_VARBSS SEGMENT PARA PUBLIC USE32 'BSS'\r
- PUBLIC TestStr\r
-TestStr DD 2 DUP (?) ; pad\r
- PUBLIC TestVariable1\r
-TestVariable1 DD 2 DUP (?) ; pad\r
-_VARBSS ENDS\r
-_VARBSS_INIT SEGMENT DWORD PUBLIC USE32 'CODE'\r
-; -- Begin varbss_init_C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest$c45b815d2\r
- PUBLIC varbss_init_C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest$c45b815d2\r
-varbss_init_C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest$c45b815d2 PROC NEAR\r
- 00000 b9 34 00 00 00\r
- 00 MOVreld R4, TestStr\r
- 00006 b9 35 00 00 00\r
- 00 MOVreld R5, __STRING$0\r
- 0000c 33 5c MOVnd @R4, R5\r
- 0000e b9 34 00 00 00\r
- 00 MOVreld R4, TestVariable1\r
- 00014 78 0c 04 00 MOVInw @R4, (0,4)\r
- 00018 04 00 RET\r
-; -- End varbss_init_C:\efi_src\TIANO\Edk\Sample\Universal\Ebc\Dxe\EbcTest\EbcTest$c45b815d2\r
-_VARBSS_INIT ENDS\r
-_DATA SEGMENT PARA PUBLIC USE32 'DATA'\r
-_DATA ENDS\r
-EXTRN TestSubRoutineSub:PROC\r
- END\r
+**/\r
\r
-===============================================================================\r
+/**\r
+\r
+ Load code by symbol by Iec.\r
+\r
+ @param Name - Symbol file name\r
+ @param Buffer - Symbol file buffer\r
+ @param BufferSize - Symbol file buffer size\r
+ @param CodeBufferSize - Code buffer size\r
+ @param FuncOffset - Code funcion offset\r
\r
---*/\r
+ @return CodeBuffer\r
+\r
+**/\r
CHAR8 *\r
EdbLoadCodBySymbolByIec (\r
IN CHAR8 *Name,\r
OUT UINTN *CodeBufferSize,\r
OUT UINTN *FuncOffset\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load code by symbol by Iec\r
-\r
-Arguments:\r
-\r
- Name - Symbol file name\r
- BufferSize - Symbol file buffer size\r
- Buffer - Symbol file buffer\r
- CodeBufferSize - Code buffer size\r
- FuncOffset - Code funcion offset\r
-\r
-Returns:\r
-\r
- CodeBuffer\r
-\r
---*/\r
{\r
CHAR8 *LineBuffer;\r
CHAR8 *FieldBuffer;\r
VOID *BufferEnd;\r
UINTN Offset;\r
EDB_EBC_COD_PARSE_STATE CodParseState;\r
- CHAR8 Char[2] = {9, 0};\r
+ CHAR8 Char[2];\r
\r
//\r
// Init\r
//\r
+ Char[0] = 9;\r
+ Char[1] = 0;\r
LineBuffer = AsciiStrGetNewTokenLine (Buffer, "\n\r");\r
Offset = (UINTN)-1;\r
BufferStart = NULL;\r
return NULL;\r
}\r
\r
+/**\r
+\r
+ Load code by symbol.\r
+\r
+ @param Name - Symbol file name\r
+ @param Buffer - Symbol file buffer\r
+ @param BufferSize - Symbol file buffer size\r
+ @param CodeBufferSize - Code buffer size\r
+ @param FuncOffset - Code funcion offset\r
+\r
+ @return CodeBuffer\r
+\r
+**/\r
CHAR8 *\r
EdbLoadCodBySymbol (\r
IN CHAR8 *Name,\r
OUT UINTN *CodeBufferSize,\r
OUT UINTN *FuncOffset\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load code by symbol\r
-\r
-Arguments:\r
-\r
- Name - Symbol file name\r
- BufferSize - Symbol file buffer size\r
- Buffer - Symbol file buffer\r
- CodeBufferSize - Code buffer size\r
- FuncOffset - Code funcion offset\r
-\r
-Returns:\r
-\r
- CodeBuffer\r
-\r
---*/\r
{\r
//\r
// COD file format depends on the compiler.\r
return EdbLoadCodBySymbolByIec (Name, Buffer, BufferSize, CodeBufferSize, FuncOffset);\r
}\r
\r
+/**\r
+\r
+ Find code from object.\r
+\r
+ @param DebuggerPrivate EBC Debugger private data structure\r
+ @param Object - Symbol object\r
+ @param FileName - File name\r
+\r
+**/\r
VOID *\r
EdbFindCodeFromObject (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN EFI_DEBUGGER_SYMBOL_OBJECT *Object,\r
IN CHAR16 *FileName\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Find code from object\r
-\r
-Arguments:\r
-\r
- Object - Symbol object\r
- FileName - File name\r
-\r
-Returns:\r
-\r
- CodeBuffer\r
-\r
---*/\r
{\r
UINTN EntryIndex;\r
\r
return NULL;\r
}\r
\r
+/**\r
+\r
+ Load code.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param MapFileName - Symbol file name\r
+ @param FileName - Code file name\r
+ @param BufferSize - Code file buffer size\r
+ @param Buffer - Code file buffer\r
+\r
+ @retval EFI_SUCCESS - Code loaded successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbLoadCode (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN UINTN BufferSize,\r
IN VOID *Buffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Load code\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- MapFileName - Symbol file name\r
- FileName - Code file name\r
- BufferSize - Code file buffer size\r
- Buffer - Code file buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Code loaded successfully\r
-\r
---*/\r
{\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
UINTN ObjectIndex;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+\r
+ Unload code.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param MapFileName - Symbol file name\r
+ @param FileName - Code file name\r
+ @param Buffer - Code file buffer\r
+\r
+ @retval EFI_SUCCESS - Code unloaded successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbUnloadCode (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN CHAR16 *FileName,\r
OUT VOID **Buffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Unload code\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- MapFileName - Symbol file name\r
- FileName - Code file name\r
- Buffer - Code file buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Code unloaded successfully\r
-\r
---*/\r
{\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
UINTN ObjectIndex;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+\r
+ Add code buffer.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param MapFileName - Symbol file name\r
+ @param CodeFileName - Code file name\r
+ @param SourceBufferSize- Code buffer size\r
+ @param SourceBuffer - Code buffer\r
+\r
+ @retval EFI_SUCCESS - CodeBuffer added successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbAddCodeBuffer (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN UINTN SourceBufferSize,\r
IN VOID *SourceBuffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Add code buffer\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- MapFileName - Symbol file name\r
- CodeFileName - Code file name\r
- SourceBufferSize- Code buffer size\r
- SourceBuffer - Code buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - CodeBuffer added successfully\r
-\r
---*/\r
{\r
UINTN Index;\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+\r
+ Delete code buffer.\r
+\r
+ @param DebuggerPrivate - EBC Debugger private data structure\r
+ @param MapFileName - Symbol file name\r
+ @param CodeFileName - Code file name\r
+ @param SourceBuffer - Code buffer\r
+\r
+ @retval EFI_SUCCESS - CodeBuffer deleted successfully\r
+\r
+**/\r
EFI_STATUS\r
EdbDeleteCodeBuffer (\r
IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
IN CHAR16 *CodeFileName,\r
IN VOID *SourceBuffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Delete code buffer\r
-\r
-Arguments:\r
-\r
- DebuggerPrivate - EBC Debugger private data structure\r
- MapFileName - Symbol file name\r
- CodeFileName - Code file name\r
- SourceBuffer - Code buffer\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - CodeBuffer deleted successfully\r
-\r
---*/\r
{\r
UINTN Index;\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
return EFI_SUCCESS;\r
}\r
\r
-CHAR8 *\r
-FindSymbolStr (\r
- IN UINTN Address\r
- )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
\r
- Find the symbol string according to address\r
+ Find the symbol string according to address.\r
\r
-Arguments:\r
+ @param Address - Symbol address\r
\r
- Address - Symbol address\r
+ @return Symbol string\r
\r
-Returns:\r
-\r
- Symbol string\r
-\r
---*/\r
+**/\r
+CHAR8 *\r
+FindSymbolStr (\r
+ IN UINTN Address\r
+ )\r
{\r
UINTN ObjectIndex;\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
return NULL;\r
}\r
\r
+/**\r
+\r
+ Get line number and offset from this line in code file.\r
+\r
+ @param Line - Line buffer in code file\r
+ @param Offset - Offset to functin entry\r
+\r
+ @return Line number\r
+\r
+**/\r
UINTN\r
EdbGetLineNumberAndOffsetFromThisLine (\r
IN VOID *Line,\r
OUT UINTN *Offset\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Get line number and offset from this line in code file\r
-\r
-Arguments:\r
-\r
- Line - Line buffer in code file\r
- Offset - Offset to functin entry\r
-\r
-Returns:\r
-\r
- Line number\r
-\r
---*/\r
{\r
UINTN LineNumber;\r
CHAR8 *LineBuffer;\r
EdbEbcLineSearchTypeMax,\r
} EDB_EBC_LINE_SEARCH_TYPE;\r
\r
+/**\r
+\r
+ Get line number from this code file.\r
+\r
+ @param Entry - Symbol entry\r
+ @param FuncOffset - Offset to functin entry\r
+ @param SearchType - Search type for the code\r
+\r
+ @return Line number\r
+\r
+**/\r
UINTN\r
EdbGetLineNumberFromCode (\r
IN EFI_DEBUGGER_SYMBOL_ENTRY *Entry,\r
IN UINTN FuncOffset,\r
IN EDB_EBC_LINE_SEARCH_TYPE SearchType\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Get line number from this code file\r
-\r
-Arguments:\r
-\r
- Entry - Symbol entry\r
- FuncOffset - Offset to functin entry\r
- SearchType - Search type for the code\r
-\r
-Returns:\r
-\r
- Line number\r
-\r
---*/\r
{\r
CHAR8 *LineBuffer;\r
UINTN LineNumber;\r
return (UINTN)-1;\r
}\r
\r
+/**\r
+\r
+ Get the source string from this code file by line.\r
+\r
+ @param Entry - Symbol entry\r
+ @param LineNumber - line number\r
+ @param FuncEnd - Function end\r
+\r
+ @return Funtion start\r
+\r
+**/\r
VOID *\r
EdbGetSourceStrFromCodeByLine (\r
IN EFI_DEBUGGER_SYMBOL_ENTRY *Entry,\r
IN UINTN LineNumber,\r
IN VOID **FuncEnd\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Get the source string from this code file by line\r
-\r
-Arguments:\r
-\r
- Entry - Symbol entry\r
- LineNumber - line number\r
- FuncEnd - Function end\r
-\r
-Returns:\r
-\r
- Funtion start\r
-\r
---*/\r
{\r
CHAR8 *LineBuffer;\r
CHAR8 *FieldBuffer;\r
return NULL;\r
}\r
\r
+/**\r
+\r
+ Get source string from this code file.\r
+\r
+ @param Entry - Symbol entry\r
+ @param FuncOffset - Offset to functin entry\r
+ @param FuncEnd - Function end\r
+\r
+ @retval Funtion start\r
+\r
+**/\r
VOID *\r
EdbGetSourceStrFromCode (\r
IN EFI_DEBUGGER_SYMBOL_ENTRY *Entry,\r
IN UINTN FuncOffset,\r
IN VOID **FuncEnd\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Get source string from this code file\r
-\r
-Arguments:\r
-\r
- Entry - Symbol entry\r
- FuncOffset - Offset to functin entry\r
- FuncEnd - Function end\r
-\r
-Returns:\r
-\r
- Funtion start\r
-\r
---*/\r
{\r
UINTN LineNumber;\r
\r
return EdbGetSourceStrFromCodeByLine (Entry, LineNumber, FuncEnd);\r
}\r
\r
+/**\r
+\r
+ Print source.\r
+\r
+ @param Address - Instruction address\r
+ @param IsPrint - Whether need to print\r
+\r
+ @retval 1 - find the source\r
+ @retval 0 - not find the source\r
+\r
+**/\r
UINTN\r
EdbPrintSource (\r
IN UINTN Address,\r
IN BOOLEAN IsPrint\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Print source\r
-\r
-Arguments:\r
-\r
- Address - Instruction address\r
- IsPrint - Whether need to print\r
-\r
-Returns:\r
-\r
- 1 - find the source\r
- 0 - not find the source\r
-\r
---*/\r
{\r
UINTN SymbolAddress;\r
EFI_DEBUGGER_SYMBOL_OBJECT *RetObject;\r
return 1 ;\r
}\r
\r
+/**\r
+\r
+ Get Mapfile and SymbolName from one symbol format: [MapFileName:]SymbolName.\r
+\r
+ @param Symbol - whole Symbol name\r
+ @param MapfileName - the mapfile name in the symbol\r
+ @param SymbolName - the symbol name in the symbol\r
+\r
+**/\r
VOID\r
GetMapfileAndSymbol (\r
IN CHAR16 *Symbol,\r
OUT CHAR16 **MapfileName,\r
OUT CHAR16 **SymbolName\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Get Mapfile and SymbolName from one symbol format: [MapFileName:]SymbolName\r
-\r
-Arguments:\r
-\r
- Symbol - whole Symbol name\r
- MapfileName - the mapfile name in the symbol\r
- SymbolName - the symbol name in the symbol\r
-\r
-Returns:\r
-\r
- None\r
-\r
---*/\r
{\r
CHAR16 *Ch;\r
\r
return ;\r
}\r
\r
+/**\r
+\r
+ Convert a symbol to an address.\r
+\r
+ @param Symbol - Symbol name\r
+ @param Address - Symbol address\r
+\r
+ @retval EFI_SUCCESS - symbol found and address returned.\r
+ @retval EFI_NOT_FOUND - symbol not found\r
+ @retval EFI_NO_MAPPING - duplicated symbol not found\r
+\r
+**/\r
EFI_STATUS\r
Symboltoi (\r
IN CHAR16 *Symbol,\r
OUT UINTN *Address\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Convert a symbol to an address\r
-\r
-Arguments:\r
-\r
- Symbol - Symbol name\r
- Address - Symbol address\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - symbol found and address returned.\r
- EFI_NOT_FOUND - symbol not found\r
- EFI_NO_MAPPING - duplicated symbol not found\r
-\r
---*/\r
{\r
UINTN ObjectIndex;\r
EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r