/** @file\r
\r
-Copyright (c) 2007 - 2016, Intel Corporatio. 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
-\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
+Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
\r
**/\r
//\r
// Print Debug info\r
//\r
- if (sizeof (UINTN) == sizeof(UINT64)) {\r
+ if (sizeof (UINTN) == sizeof (UINT64)) {\r
DEBUG ((DEBUG_ERROR, " Symbol: %a, Address: 0x%016lx (%d)\n", Name, (UINT64)Address, (UINTN)Type));\r
} else {\r
DEBUG ((DEBUG_ERROR, " Symbol: %a, Address: 0x%08x (%d)\n", Name, Address, (UINTN)Type));\r
//\r
// Fill the entry - name, RVA, type\r
//\r
- AsciiStrnCpyS (Entry->Name, sizeof(Entry->Name), Name, sizeof(Entry->Name) - 1);\r
+ AsciiStrnCpyS (Entry->Name, sizeof (Entry->Name), Name, sizeof (Entry->Name) - 1);\r
if (ObjName != NULL) {\r
- AsciiStrnCpyS (Entry->ObjName, sizeof(Entry->ObjName), ObjName, sizeof(Entry->ObjName) - 1);\r
+ AsciiStrnCpyS (Entry->ObjName, sizeof (Entry->ObjName), ObjName, sizeof (Entry->ObjName) - 1);\r
}\r
- Entry->RVA = Address % EFI_DEBUGGER_DEFAULT_LINK_IMAGEBASE;\r
+\r
+ Entry->Rva = Address % EFI_DEBUGGER_DEFAULT_LINK_IMAGEBASE;\r
Entry->Type = Type;\r
\r
//\r
IN VOID *Buffer\r
)\r
{\r
- CHAR8 *LineBuffer;\r
- CHAR8 *FieldBuffer;\r
- EDB_EBC_MAP_PARSE_STATE MapParseState;\r
- EDB_EBC_SYMBOL_PARSE_STATE SymbolParseState;\r
- CHAR8 *Name;\r
- CHAR8 *ObjName;\r
- UINTN Address;\r
- EFI_DEBUGGER_SYMBOL_TYPE Type;\r
-\r
+ CHAR8 *LineBuffer;\r
+ CHAR8 *FieldBuffer;\r
+ EDB_EBC_MAP_PARSE_STATE MapParseState;\r
+ EDB_EBC_SYMBOL_PARSE_STATE SymbolParseState;\r
+ CHAR8 *Name;\r
+ CHAR8 *ObjName;\r
+ UINTN Address;\r
+ EFI_DEBUGGER_SYMBOL_TYPE Type;\r
\r
//\r
// Begin to parse the Buffer\r
//\r
- LineBuffer = AsciiStrGetNewTokenLine (Buffer, "\n\r");\r
+ LineBuffer = AsciiStrGetNewTokenLine (Buffer, "\n\r");\r
MapParseState = EdbEbcMapParseStateUninitialized;\r
//\r
// Check each line\r
//\r
while (LineBuffer != NULL) {\r
- FieldBuffer = AsciiStrGetNewTokenField (LineBuffer, " ");\r
+ FieldBuffer = AsciiStrGetNewTokenField (LineBuffer, " ");\r
SymbolParseState = EdbEbcSymbolParseStateUninitialized;\r
//\r
// Init entry value\r
//\r
- Name = NULL;\r
+ Name = NULL;\r
ObjName = NULL;\r
Address = 0;\r
- Type = EfiDebuggerSymbolTypeMax;\r
+ Type = EfiDebuggerSymbolTypeMax;\r
//\r
// Check each field\r
//\r
FieldBuffer = AsciiStrGetNextTokenField (" ");\r
continue;\r
}\r
+\r
//\r
// check "Address"\r
//\r
MapParseState = EdbEbcMapParseStateSymbolStart;\r
break;\r
}\r
+\r
//\r
// check "Static"\r
//\r
//\r
break;\r
}\r
+\r
if (AsciiStrCmp (FieldBuffer, "entry") == 0) {\r
//\r
// Skip entry point\r
// Now we start to parse this line for Name, Address, and Object\r
//\r
switch (SymbolParseState) {\r
- case EdbEbcSymbolParseStateUninitialized:\r
- //\r
- // Get the Address\r
- //\r
- SymbolParseState = EdbEbcSymbolParseStateReadyForName;\r
- break;\r
- case EdbEbcSymbolParseStateReadyForName:\r
- //\r
- // Get the Name\r
- //\r
- if (AsciiStrnCmp (FieldBuffer, "___safe_se_handler", AsciiStrLen ("___safe_se_handler")) == 0) {\r
+ case EdbEbcSymbolParseStateUninitialized:\r
//\r
- // skip SeHandler\r
+ // Get the Address\r
//\r
- MapParseState = EdbEbcMapParseStateSeHandlerSymbol;\r
- goto ExitFieldParse;\r
- } else if (AsciiStrnCmp (FieldBuffer, "varbss_init", AsciiStrLen ("varbss_init")) == 0) {\r
+ SymbolParseState = EdbEbcSymbolParseStateReadyForName;\r
+ break;\r
+ case EdbEbcSymbolParseStateReadyForName:\r
//\r
- // check VarbssInit\r
+ // Get the Name\r
//\r
- MapParseState = EdbEbcMapParseStateVarbssInitSymbol;\r
-// goto ExitFieldParse;\r
- Name = FieldBuffer;\r
- SymbolParseState = EdbEbcSymbolParseStateReadyForRVA;\r
- } else if (AsciiStrnCmp (FieldBuffer, "Crt", AsciiStrLen ("Crt")) == 0) {\r
+ if (AsciiStrnCmp (FieldBuffer, "___safe_se_handler", AsciiStrLen ("___safe_se_handler")) == 0) {\r
+ //\r
+ // skip SeHandler\r
+ //\r
+ MapParseState = EdbEbcMapParseStateSeHandlerSymbol;\r
+ goto ExitFieldParse;\r
+ } else if (AsciiStrnCmp (FieldBuffer, "varbss_init", AsciiStrLen ("varbss_init")) == 0) {\r
+ //\r
+ // check VarbssInit\r
+ //\r
+ MapParseState = EdbEbcMapParseStateVarbssInitSymbol;\r
+ // goto ExitFieldParse;\r
+ Name = FieldBuffer;\r
+ SymbolParseState = EdbEbcSymbolParseStateReadyForRVA;\r
+ } else if (AsciiStrnCmp (FieldBuffer, "Crt", AsciiStrLen ("Crt")) == 0) {\r
+ //\r
+ // check Crt\r
+ //\r
+ MapParseState = EdbEbcMapParseStateCrtSymbol;\r
+ // goto ExitFieldParse;\r
+ Name = FieldBuffer;\r
+ SymbolParseState = EdbEbcSymbolParseStateReadyForRVA;\r
+ } else {\r
+ //\r
+ // Now, it is normal function\r
+ //\r
+ switch (MapParseState) {\r
+ case EdbEbcMapParseStateSeHandlerSymbol:\r
+ MapParseState = EdbEbcMapParseStateFunctionSymbol;\r
+ break;\r
+ case EdbEbcMapParseStateCrtSymbol:\r
+ MapParseState = EdbEbcMapParseStateVariableSymbol;\r
+ break;\r
+ case EdbEbcMapParseStateFunctionSymbol:\r
+ case EdbEbcMapParseStateVariableSymbol:\r
+ case EdbEbcMapParseStateStaticFunctionSymbol:\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
+\r
+ Name = FieldBuffer;\r
+ SymbolParseState = EdbEbcSymbolParseStateReadyForRVA;\r
+ }\r
+\r
+ break;\r
+ case EdbEbcSymbolParseStateReadyForRVA:\r
//\r
- // check Crt\r
+ // Get the RVA\r
//\r
- MapParseState = EdbEbcMapParseStateCrtSymbol;\r
-// goto ExitFieldParse;\r
- Name = FieldBuffer;\r
- SymbolParseState = EdbEbcSymbolParseStateReadyForRVA;\r
- } else {\r
+ Address = AsciiXtoi (FieldBuffer);\r
+ SymbolParseState = EdbEbcSymbolParseStateReadyForType;\r
+ break;\r
+ case EdbEbcSymbolParseStateReadyForType:\r
//\r
- // Now, it is normal function\r
+ // Get the Type. This is optional, only for "f".\r
//\r
- switch (MapParseState) {\r
- case EdbEbcMapParseStateSeHandlerSymbol:\r
- MapParseState = EdbEbcMapParseStateFunctionSymbol;\r
- break;\r
- case EdbEbcMapParseStateCrtSymbol:\r
- MapParseState = EdbEbcMapParseStateVariableSymbol;\r
- break;\r
- case EdbEbcMapParseStateFunctionSymbol:\r
- case EdbEbcMapParseStateVariableSymbol:\r
- case EdbEbcMapParseStateStaticFunctionSymbol:\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
- break;\r
- }\r
- Name = FieldBuffer;\r
- SymbolParseState = EdbEbcSymbolParseStateReadyForRVA;\r
- }\r
- break;\r
- case EdbEbcSymbolParseStateReadyForRVA:\r
- //\r
- // Get the RVA\r
- //\r
- Address = AsciiXtoi (FieldBuffer);\r
- SymbolParseState = EdbEbcSymbolParseStateReadyForType;\r
- break;\r
- case EdbEbcSymbolParseStateReadyForType:\r
- //\r
- // Get the Type. This is optional, only for "f".\r
- //\r
- if (AsciiStrCmp (FieldBuffer, "f") == 0) {\r
- SymbolParseState = EdbEbcSymbolParseStateReadyForObject;\r
- switch (MapParseState) {\r
- case EdbEbcMapParseStateFunctionSymbol:\r
- case EdbEbcMapParseStateVarbssInitSymbol:\r
- Type = EfiDebuggerSymbolFunction;\r
- break;\r
- case EdbEbcMapParseStateStaticFunctionSymbol:\r
- Type = EfiDebuggerSymbolStaticFunction;\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
+ if (AsciiStrCmp (FieldBuffer, "f") == 0) {\r
+ SymbolParseState = EdbEbcSymbolParseStateReadyForObject;\r
+ switch (MapParseState) {\r
+ case EdbEbcMapParseStateFunctionSymbol:\r
+ case EdbEbcMapParseStateVarbssInitSymbol:\r
+ Type = EfiDebuggerSymbolFunction;\r
+ break;\r
+ case EdbEbcMapParseStateStaticFunctionSymbol:\r
+ Type = EfiDebuggerSymbolStaticFunction;\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
+\r
break;\r
}\r
- break;\r
- }\r
+\r
//\r
// Else it should be Object.\r
// let it bypass here\r
//\r
- case EdbEbcSymbolParseStateReadyForObject:\r
- switch (Type) {\r
- case EfiDebuggerSymbolTypeMax:\r
- switch (MapParseState) {\r
- case EdbEbcMapParseStateVariableSymbol:\r
- case EdbEbcMapParseStateCrtSymbol:\r
- Type = EfiDebuggerSymbolGlobalVariable;\r
- break;\r
- case EdbEbcMapParseStateSeHandlerSymbol:\r
- //\r
- // do nothing here\r
- //\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
- break;\r
+ case EdbEbcSymbolParseStateReadyForObject:\r
+ switch (Type) {\r
+ case EfiDebuggerSymbolTypeMax:\r
+ switch (MapParseState) {\r
+ case EdbEbcMapParseStateVariableSymbol:\r
+ case EdbEbcMapParseStateCrtSymbol:\r
+ Type = EfiDebuggerSymbolGlobalVariable;\r
+ break;\r
+ case EdbEbcMapParseStateSeHandlerSymbol:\r
+ //\r
+ // do nothing here\r
+ //\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
+\r
+ break;\r
+ case EfiDebuggerSymbolFunction:\r
+ case EfiDebuggerSymbolStaticFunction:\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
}\r
- break;\r
- case EfiDebuggerSymbolFunction:\r
- case EfiDebuggerSymbolStaticFunction:\r
+\r
+ //\r
+ // Get the Object\r
+ //\r
+ ObjName = FieldBuffer;\r
+ SymbolParseState = EdbEbcSymbolParseStateUninitialized;\r
break;\r
default:\r
ASSERT (FALSE);\r
break;\r
- }\r
- //\r
- // Get the Object\r
- //\r
- ObjName = FieldBuffer;\r
- SymbolParseState = EdbEbcSymbolParseStateUninitialized;\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
- break;\r
}\r
\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
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *FileName,\r
+ IN OUT UINTN *Index OPTIONAL\r
)\r
{\r
- UINTN ObjectIndex;\r
+ UINTN ObjectIndex;\r
\r
//\r
// Check each Object\r
if (Index != NULL) {\r
*Index = ObjectIndex;\r
}\r
+\r
return &DebuggerPrivate->DebuggerSymbolContext.Object[ObjectIndex];\r
}\r
}\r
**/\r
UINTN\r
EbdFindSymbolAddress (\r
- IN UINTN Address,\r
- IN EDB_MATCH_SYMBOL_TYPE Type,\r
- OUT EFI_DEBUGGER_SYMBOL_OBJECT **RetObject,\r
- OUT EFI_DEBUGGER_SYMBOL_ENTRY **RetEntry\r
+ IN UINTN Address,\r
+ IN EDB_MATCH_SYMBOL_TYPE Type,\r
+ OUT EFI_DEBUGGER_SYMBOL_OBJECT **RetObject,\r
+ OUT EFI_DEBUGGER_SYMBOL_ENTRY **RetEntry\r
)\r
{\r
- UINTN Index;\r
- UINTN SubIndex;\r
- UINTN CandidateLowerAddress;\r
- UINTN CandidateUpperAddress;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
- EFI_DEBUGGER_SYMBOL_ENTRY *Entry;\r
- EFI_DEBUGGER_SYMBOL_ENTRY *LowEntry;\r
- EFI_DEBUGGER_SYMBOL_ENTRY *UpperEntry;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *LowObject;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *UpperObject;\r
+ UINTN Index;\r
+ UINTN SubIndex;\r
+ UINTN CandidateLowerAddress;\r
+ UINTN CandidateUpperAddress;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ EFI_DEBUGGER_SYMBOL_ENTRY *Entry;\r
+ EFI_DEBUGGER_SYMBOL_ENTRY *LowEntry;\r
+ EFI_DEBUGGER_SYMBOL_ENTRY *UpperEntry;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *LowObject;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *UpperObject;\r
\r
if ((Type < 0) || (Type >= EdbMatchSymbolTypeMax)) {\r
return 0;\r
//\r
CandidateLowerAddress = 0;\r
CandidateUpperAddress = (UINTN)-1;\r
- LowEntry = NULL;\r
- UpperEntry = NULL;\r
- LowObject = NULL;\r
- UpperObject = NULL;\r
+ LowEntry = NULL;\r
+ UpperEntry = NULL;\r
+ LowObject = NULL;\r
+ UpperObject = NULL;\r
\r
//\r
// Go through each object\r
if (Object->EntryCount == 0) {\r
continue;\r
}\r
+\r
//\r
// Go through each entry\r
//\r
Entry = Object->Entry;\r
for (SubIndex = 0; SubIndex < Object->EntryCount; SubIndex++, Entry++) {\r
- if (Address != Entry->RVA + Object->BaseAddress) {\r
+ if (Address != Entry->Rva + Object->BaseAddress) {\r
//\r
// Check for nearest address\r
//\r
- if (Address > Entry->RVA + Object->BaseAddress) {\r
+ if (Address > Entry->Rva + Object->BaseAddress) {\r
//\r
// Record it if Current RVA < Address\r
//\r
- if (CandidateLowerAddress < Entry->RVA + Object->BaseAddress) {\r
- CandidateLowerAddress = Entry->RVA + Object->BaseAddress;\r
- LowEntry = Entry;\r
- LowObject = Object;\r
+ if (CandidateLowerAddress < Entry->Rva + Object->BaseAddress) {\r
+ CandidateLowerAddress = Entry->Rva + Object->BaseAddress;\r
+ LowEntry = Entry;\r
+ LowObject = Object;\r
}\r
} else {\r
//\r
// Record it if Current RVA > Address\r
//\r
- if (CandidateUpperAddress > Entry->RVA + Object->BaseAddress) {\r
- CandidateUpperAddress = Entry->RVA + Object->BaseAddress;\r
- UpperEntry = Entry;\r
- UpperObject = Object;\r
+ if (CandidateUpperAddress > Entry->Rva + Object->BaseAddress) {\r
+ CandidateUpperAddress = Entry->Rva + Object->BaseAddress;\r
+ UpperEntry = Entry;\r
+ UpperObject = Object;\r
}\r
}\r
+\r
continue;\r
}\r
+\r
//\r
// address match, return directly\r
//\r
- *RetEntry = Entry;\r
+ *RetEntry = Entry;\r
*RetObject = Object;\r
return Address;\r
}\r
//\r
if (((Type == EdbMatchSymbolTypeNearestAddress) &&\r
((CandidateUpperAddress - Address) > (Address - CandidateLowerAddress))) ||\r
- (Type == EdbMatchSymbolTypeLowerAddress)) {\r
+ (Type == EdbMatchSymbolTypeLowerAddress))\r
+ {\r
//\r
// return nearest lower address\r
//\r
- *RetEntry = LowEntry;\r
+ *RetEntry = LowEntry;\r
*RetObject = LowObject;\r
return CandidateLowerAddress;\r
}\r
//\r
if (((Type == EdbMatchSymbolTypeNearestAddress) &&\r
((CandidateUpperAddress - Address) < (Address - CandidateLowerAddress))) ||\r
- (Type == EdbMatchSymbolTypeUpperAddress)) {\r
+ (Type == EdbMatchSymbolTypeUpperAddress))\r
+ {\r
//\r
// return nearest upper address\r
//\r
- *RetEntry = UpperEntry;\r
+ *RetEntry = UpperEntry;\r
*RetObject = UpperObject;\r
return CandidateUpperAddress;\r
}\r
**/\r
EFI_STATUS\r
EdbUnloadSymbol (\r
- IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
- IN CHAR16 *FileName\r
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *FileName\r
)\r
{\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
- UINTN ObjectIndex;\r
- UINTN Index;\r
- EFI_DEBUGGER_SYMBOL_ENTRY *OldEntry;\r
- UINTN OldEntryCount;\r
- UINTN MaxEntryCount;\r
- VOID **OldSourceBuffer;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ UINTN ObjectIndex;\r
+ UINTN Index;\r
+ EFI_DEBUGGER_SYMBOL_ENTRY *OldEntry;\r
+ UINTN OldEntryCount;\r
+ UINTN MaxEntryCount;\r
+ VOID **OldSourceBuffer;\r
\r
//\r
// Find Symbol\r
//\r
// Record old data\r
//\r
- Object = DebuggerPrivate->DebuggerSymbolContext.Object;\r
- OldEntry = Object->Entry;\r
+ Object = DebuggerPrivate->DebuggerSymbolContext.Object;\r
+ OldEntry = Object->Entry;\r
OldSourceBuffer = Object->SourceBuffer;\r
- MaxEntryCount = Object->MaxEntryCount;\r
- OldEntryCount = Object->EntryCount;\r
+ MaxEntryCount = Object->MaxEntryCount;\r
+ OldEntryCount = Object->EntryCount;\r
\r
//\r
// Remove the matched Object\r
//\r
for (Index = ObjectIndex; Index < DebuggerPrivate->DebuggerSymbolContext.ObjectCount - 1; Index++) {\r
- CopyMem (&Object[Index], &Object[Index + 1], sizeof(EFI_DEBUGGER_SYMBOL_OBJECT));\r
+ CopyMem (&Object[Index], &Object[Index + 1], sizeof (EFI_DEBUGGER_SYMBOL_OBJECT));\r
}\r
- ZeroMem (&Object[Index], sizeof(Object[Index]));\r
+\r
+ ZeroMem (&Object[Index], sizeof (Object[Index]));\r
\r
//\r
// Move old data to new place\r
//\r
- Object[Index].Entry = OldEntry;\r
- Object[Index].SourceBuffer = OldSourceBuffer;\r
+ Object[Index].Entry = OldEntry;\r
+ Object[Index].SourceBuffer = OldSourceBuffer;\r
Object[Index].MaxEntryCount = MaxEntryCount;\r
- DebuggerPrivate->DebuggerSymbolContext.ObjectCount --;\r
+ DebuggerPrivate->DebuggerSymbolContext.ObjectCount--;\r
\r
//\r
// Clean old entry data\r
//\r
for (Index = 0; Index < OldEntryCount; Index++) {\r
- ZeroMem (&OldEntry[Index], sizeof(OldEntry[Index]));\r
+ ZeroMem (&OldEntry[Index], sizeof (OldEntry[Index]));\r
}\r
\r
//\r
**/\r
EFI_STATUS\r
EdbLoadSymbol (\r
- IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
- IN CHAR16 *FileName,\r
- IN UINTN BufferSize,\r
- IN VOID *Buffer\r
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *FileName,\r
+ IN UINTN BufferSize,\r
+ IN VOID *Buffer\r
)\r
{\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
- EFI_STATUS Status;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ EFI_STATUS Status;\r
\r
//\r
// Check duplicated File\r
Object = EdbFindSymbolFile (DebuggerPrivate, FileName, NULL);\r
if (Object != NULL) {\r
Status = EdbUnloadSymbol (DebuggerPrivate, FileName);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Unload Duplicated Symbol File Error!\n"));\r
return Status;\r
}\r
//\r
// Init Object\r
//\r
- Object->EntryCount = 0;\r
+ Object->EntryCount = 0;\r
Object->MaxEntryCount = EFI_DEBUGGER_SYMBOL_ENTRY_MAX;\r
\r
//\r
//\r
// Fill Object value\r
//\r
- StrnCpyS (Object->Name, sizeof(Object->Name) / sizeof(CHAR16),\r
- FileName, (sizeof(Object->Name) / sizeof(CHAR16)) - 1);\r
+ StrnCpyS (\r
+ Object->Name,\r
+ sizeof (Object->Name) / sizeof (CHAR16),\r
+ FileName,\r
+ (sizeof (Object->Name) / sizeof (CHAR16)) - 1\r
+ );\r
Object->BaseAddress = 0;\r
\r
//\r
// Increase the object count\r
//\r
- DebuggerPrivate->DebuggerSymbolContext.ObjectCount ++;\r
+ DebuggerPrivate->DebuggerSymbolContext.ObjectCount++;\r
\r
return EFI_SUCCESS;\r
}\r
**/\r
CHAR8 *\r
GetPdbPath (\r
- VOID *ImageBase\r
+ VOID *ImageBase\r
)\r
{\r
- CHAR8 *PdbPath;\r
- UINT32 DirCount;\r
- EFI_IMAGE_DOS_HEADER *DosHdr;\r
- EFI_IMAGE_OPTIONAL_HEADER_UNION *NtHdr;\r
- EFI_IMAGE_OPTIONAL_HEADER32 *OptionalHdr32;\r
- EFI_IMAGE_OPTIONAL_HEADER64 *OptionalHdr64;\r
- EFI_IMAGE_DATA_DIRECTORY *DirectoryEntry;\r
- EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *DebugEntry;\r
- VOID *CodeViewEntryPointer;\r
+ CHAR8 *PdbPath;\r
+ UINT32 DirCount;\r
+ EFI_IMAGE_DOS_HEADER *DosHdr;\r
+ EFI_IMAGE_OPTIONAL_HEADER_UNION *NtHdr;\r
+ EFI_IMAGE_OPTIONAL_HEADER32 *OptionalHdr32;\r
+ EFI_IMAGE_OPTIONAL_HEADER64 *OptionalHdr64;\r
+ EFI_IMAGE_DATA_DIRECTORY *DirectoryEntry;\r
+ EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *DebugEntry;\r
+ VOID *CodeViewEntryPointer;\r
\r
//\r
// Init value\r
//\r
- CodeViewEntryPointer = NULL;\r
- PdbPath = NULL;\r
- DosHdr = ImageBase;\r
+ CodeViewEntryPointer = NULL;\r
+ PdbPath = NULL;\r
+ DosHdr = ImageBase;\r
\r
//\r
// Check magic\r
if (DosHdr->e_magic != EFI_IMAGE_DOS_SIGNATURE) {\r
return NULL;\r
}\r
- NtHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *) ((UINT8 *) DosHdr + DosHdr->e_lfanew);\r
+\r
+ NtHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)((UINT8 *)DosHdr + DosHdr->e_lfanew);\r
//\r
// Check Machine, filter for EBC\r
//\r
// EBC spec says PE32+, but implementation uses PE32. So check dynamically here.\r
//\r
if (NtHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
- OptionalHdr32 = (VOID *) &NtHdr->Pe32.OptionalHeader;\r
- DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *) &(OptionalHdr32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
+ OptionalHdr32 = (VOID *)&NtHdr->Pe32.OptionalHeader;\r
+ DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(OptionalHdr32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
} else if (NtHdr->Pe32Plus.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {\r
- OptionalHdr64 = (VOID *) &NtHdr->Pe32Plus.OptionalHeader;\r
- DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *) &(OptionalHdr64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
+ OptionalHdr64 = (VOID *)&NtHdr->Pe32Plus.OptionalHeader;\r
+ DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(OptionalHdr64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
} else {\r
return NULL;\r
}\r
+\r
if (DirectoryEntry->VirtualAddress == 0) {\r
return NULL;\r
}\r
+\r
//\r
// Go through DirectoryEntry\r
//\r
for (DirCount = 0;\r
(DirCount < DirectoryEntry->Size / sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)) && CodeViewEntryPointer == NULL;\r
DirCount++\r
- ) {\r
- DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) (DirectoryEntry->VirtualAddress + (UINTN) ImageBase + DirCount * sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY));\r
+ )\r
+ {\r
+ DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)(DirectoryEntry->VirtualAddress + (UINTN)ImageBase + DirCount * sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY));\r
if (DebugEntry->Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {\r
//\r
// Match DebugEntry, only CODEVIEW_SIGNATURE_NB10 and CODEVIEW_SIGNATURE_RSDS are supported.\r
//\r
- CodeViewEntryPointer = (VOID *) ((UINTN) DebugEntry->RVA + (UINTN) ImageBase);\r
- switch (*(UINT32 *) CodeViewEntryPointer) {\r
- case CODEVIEW_SIGNATURE_NB10:\r
- PdbPath = (CHAR8 *) CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);\r
- break;\r
- case CODEVIEW_SIGNATURE_RSDS:\r
- PdbPath = (CHAR8 *) CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);\r
- break;\r
- default:\r
- break;\r
+ CodeViewEntryPointer = (VOID *)((UINTN)DebugEntry->RVA + (UINTN)ImageBase);\r
+ switch (*(UINT32 *)CodeViewEntryPointer) {\r
+ case CODEVIEW_SIGNATURE_NB10:\r
+ PdbPath = (CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);\r
+ break;\r
+ case CODEVIEW_SIGNATURE_RSDS:\r
+ PdbPath = (CHAR8 *)CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);\r
+ break;\r
+ default:\r
+ break;\r
}\r
}\r
}\r
IN CHAR16 *MapFileName\r
)\r
{\r
- UINTN PdbNameSize;\r
- UINTN MapNameSize;\r
- CHAR8 *PurePdbFileName;\r
- UINTN Index;\r
+ UINTN PdbNameSize;\r
+ UINTN MapNameSize;\r
+ CHAR8 *PurePdbFileName;\r
+ UINTN Index;\r
\r
//\r
// remove dir name\r
PurePdbFileName = &PdbFileName[Index + 1];\r
}\r
}\r
+\r
PdbFileName = PurePdbFileName;\r
\r
//\r
// BUGBUG: work-around start\r
//\r
typedef struct {\r
- EFI_DEBUG_IMAGE_INFO *EfiDebugImageInfoTable;\r
- volatile UINT32 UpdateStatus;\r
- UINT32 TableSize;\r
+ EFI_DEBUG_IMAGE_INFO *EfiDebugImageInfoTable;\r
+ volatile UINT32 UpdateStatus;\r
+ UINT32 TableSize;\r
} EFI_DEBUG_IMAGE_INFO_TABLE_HEADER_OLD;\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
+ IN OUT EFI_DEBUG_IMAGE_INFO_TABLE_HEADER **DebugImageInfoTableHeader\r
)\r
{\r
mDebugImageInfoTableHeader.EfiDebugImageInfoTable = ((EFI_DEBUG_IMAGE_INFO_TABLE_HEADER_OLD *)(*DebugImageInfoTableHeader))->EfiDebugImageInfoTable;\r
\r
if ((*DebugImageInfoTableHeader)->UpdateStatus > 3) {\r
*DebugImageInfoTableHeader = &mDebugImageInfoTableHeader;\r
- return ;\r
+ return;\r
}\r
\r
if ((*DebugImageInfoTableHeader)->TableSize % (EFI_PAGE_SIZE / (sizeof (VOID *))) != 0) {\r
*DebugImageInfoTableHeader = &mDebugImageInfoTableHeader;\r
- return ;\r
+ return;\r
}\r
\r
- return ;\r
+ return;\r
}\r
+\r
//\r
// BUGBUG: work-around end\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
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *FileName,\r
+ IN EDB_EBC_IMAGE_RVA_SEARCH_TYPE SearchType\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN ImageNumber;\r
- EFI_DEBUG_IMAGE_INFO *ImageTable;\r
- CHAR8 *PdbPath;\r
- VOID *ImageBase;\r
- VOID *CandidateImageBase;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
-\r
- if (SearchType < 0 || SearchType >= EdbEbcImageRvaSearchTypeMax) {\r
+ EFI_STATUS Status;\r
+ UINTN ImageNumber;\r
+ EFI_DEBUG_IMAGE_INFO *ImageTable;\r
+ CHAR8 *PdbPath;\r
+ VOID *ImageBase;\r
+ VOID *CandidateImageBase;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+\r
+ if ((SearchType < 0) || (SearchType >= EdbEbcImageRvaSearchTypeMax)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if (mDebuggerPrivate.DebugImageInfoTableHeader == NULL) {\r
Status = EfiGetSystemConfigurationTable (\r
&gEfiDebugImageInfoTableGuid,\r
- (VOID **) &mDebuggerPrivate.DebugImageInfoTableHeader\r
+ (VOID **)&mDebuggerPrivate.DebugImageInfoTableHeader\r
);\r
if (EFI_ERROR (Status)) {\r
EDBPrint (L"DebugImageInfoTable not found!\n");\r
return Status;\r
}\r
}\r
+\r
DEBUG ((DEBUG_ERROR, "DebugImageInfoTableHeader: %x\n", mDebuggerPrivate.DebugImageInfoTableHeader));\r
\r
//\r
// Go through DebugImageInfoTable for each Image\r
//\r
CandidateImageBase = NULL;\r
- ImageTable = mDebuggerPrivate.DebugImageInfoTableHeader->EfiDebugImageInfoTable;\r
+ ImageTable = mDebuggerPrivate.DebugImageInfoTableHeader->EfiDebugImageInfoTable;\r
for (ImageNumber = 0; ImageNumber < mDebuggerPrivate.DebugImageInfoTableHeader->TableSize; ImageNumber++) {\r
if (ImageTable[ImageNumber].NormalImage == NULL) {\r
continue;\r
}\r
+\r
ImageBase = ImageTable[ImageNumber].NormalImage->LoadedImageProtocolInstance->ImageBase;\r
//\r
// Get PDB path\r
//\r
- PdbPath = GetPdbPath (ImageBase);\r
+ PdbPath = GetPdbPath (ImageBase);\r
if (PdbPath == NULL) {\r
continue;\r
}\r
+\r
//\r
// Check PDB name\r
//\r
if (!MatchPdbAndMap (PdbPath, FileName)) {\r
continue;\r
}\r
+\r
DEBUG ((DEBUG_ERROR, "ImageBase: %x\n", ImageBase));\r
\r
//\r
// Check SearchType\r
//\r
- if (SearchType == EdbEbcImageRvaSearchTypeAny || SearchType == EdbEbcImageRvaSearchTypeFirst) {\r
+ if ((SearchType == EdbEbcImageRvaSearchTypeAny) || (SearchType == EdbEbcImageRvaSearchTypeFirst)) {\r
//\r
// Assign base address and return\r
//\r
if (CandidateImageBase == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
//\r
// Assign base address and return\r
//\r
IN CHAR16 *CodFileName\r
)\r
{\r
- UINTN ObjNameSize;\r
- UINTN CodNameSize;\r
- CHAR8 *PureObjFileName;\r
- UINTN Index;\r
+ UINTN ObjNameSize;\r
+ UINTN CodNameSize;\r
+ CHAR8 *PureObjFileName;\r
+ UINTN Index;\r
\r
//\r
// remove library name\r
break;\r
}\r
}\r
+\r
ObjFileName = PureObjFileName;\r
\r
//\r
**/\r
CHAR8 *\r
EdbLoadCodBySymbolByIec (\r
- IN CHAR8 *Name,\r
- IN VOID *Buffer,\r
- IN UINTN BufferSize,\r
- OUT UINTN *CodeBufferSize,\r
- OUT UINTN *FuncOffset\r
+ IN CHAR8 *Name,\r
+ IN VOID *Buffer,\r
+ IN UINTN BufferSize,\r
+ OUT UINTN *CodeBufferSize,\r
+ OUT UINTN *FuncOffset\r
)\r
{\r
- CHAR8 *LineBuffer;\r
- CHAR8 *FieldBuffer;\r
- VOID *BufferStart;\r
- VOID *BufferEnd;\r
- UINTN Offset;\r
- EDB_EBC_COD_PARSE_STATE CodParseState;\r
- CHAR8 Char[2];\r
+ CHAR8 *LineBuffer;\r
+ CHAR8 *FieldBuffer;\r
+ VOID *BufferStart;\r
+ VOID *BufferEnd;\r
+ UINTN Offset;\r
+ EDB_EBC_COD_PARSE_STATE CodParseState;\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
- BufferEnd = NULL;\r
+ Char[0] = 9;\r
+ Char[1] = 0;\r
+ LineBuffer = AsciiStrGetNewTokenLine (Buffer, "\n\r");\r
+ Offset = (UINTN)-1;\r
+ BufferStart = NULL;\r
+ BufferEnd = NULL;\r
CodParseState = EdbEbcCodParseStateUninitialized;\r
\r
//\r
//\r
while (LineBuffer != NULL) {\r
switch (CodParseState) {\r
- case EdbEbcCodParseStateUninitialized:\r
- //\r
- // check mark_begin, begin to check line after this match\r
- //\r
- if (AsciiStrCmp (LineBuffer, "; mark_begin;") == 0) {\r
- CodParseState = EdbEbcCodParseStateSymbolInitialized;\r
- }\r
- LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
- PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
- break;\r
+ case EdbEbcCodParseStateUninitialized:\r
+ //\r
+ // check mark_begin, begin to check line after this match\r
+ //\r
+ if (AsciiStrCmp (LineBuffer, "; mark_begin;") == 0) {\r
+ CodParseState = EdbEbcCodParseStateSymbolInitialized;\r
+ }\r
\r
- case EdbEbcCodParseStateSymbolInitialized:\r
- //\r
- // check mark_end, not check line after this match\r
- //\r
- if (AsciiStrCmp (LineBuffer, "; mark_end;") == 0) {\r
- CodParseState = EdbEbcCodParseStateUninitialized;\r
LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
break;\r
- }\r
\r
- //\r
- // not check this line if the first char is as follows\r
- //\r
- if ((*LineBuffer == 0) ||\r
- (*LineBuffer == '$') ||\r
- (*LineBuffer == ';') ||\r
- (*LineBuffer == '_') ||\r
- (*LineBuffer == ' ')) {\r
+ case EdbEbcCodParseStateSymbolInitialized:\r
+ //\r
+ // check mark_end, not check line after this match\r
+ //\r
+ if (AsciiStrCmp (LineBuffer, "; mark_end;") == 0) {\r
+ CodParseState = EdbEbcCodParseStateUninitialized;\r
+ LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
+ PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
+ break;\r
+ }\r
+\r
+ //\r
+ // not check this line if the first char is as follows\r
+ //\r
+ if ((*LineBuffer == 0) ||\r
+ (*LineBuffer == '$') ||\r
+ (*LineBuffer == ';') ||\r
+ (*LineBuffer == '_') ||\r
+ (*LineBuffer == ' '))\r
+ {\r
+ LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
+ PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
+ break;\r
+ }\r
+\r
+ //\r
+ // get function name, function name is followed by char 0x09.\r
+ //\r
+ FieldBuffer = AsciiStrGetNewTokenField (LineBuffer, Char);\r
+ ASSERT (FieldBuffer != NULL);\r
+ if (AsciiStriCmp (FieldBuffer, Name) == 0) {\r
+ BufferStart = FieldBuffer;\r
+ CodParseState = EdbEbcCodParseStateSymbolStart;\r
+ }\r
+\r
+ PatchForAsciiStrTokenAfter (FieldBuffer, 0x9);\r
+\r
+ //\r
+ // Get next line\r
+ //\r
LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
break;\r
- }\r
\r
- //\r
- // get function name, function name is followed by char 0x09.\r
- //\r
- FieldBuffer = AsciiStrGetNewTokenField (LineBuffer, Char);\r
- ASSERT (FieldBuffer != NULL);\r
- if (AsciiStriCmp (FieldBuffer, Name) == 0) {\r
- BufferStart = FieldBuffer;\r
- CodParseState = EdbEbcCodParseStateSymbolStart;\r
- }\r
- PatchForAsciiStrTokenAfter (FieldBuffer, 0x9);\r
-\r
- //\r
- // Get next line\r
- //\r
- LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
- PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
- break;\r
-\r
- case EdbEbcCodParseStateSymbolStart:\r
- //\r
- // check mark_end, if this match, means the function is found successfully.\r
- //\r
- if (AsciiStrCmp (LineBuffer, "; mark_end;") == 0) {\r
- CodParseState = EdbEbcCodParseStateSymbolEnd;\r
+ case EdbEbcCodParseStateSymbolStart:\r
//\r
- // prepare CodeBufferSize, FuncOffset, and FuncStart to return\r
+ // check mark_end, if this match, means the function is found successfully.\r
//\r
- BufferEnd = LineBuffer + sizeof("; mark_end;") - 1;\r
- *CodeBufferSize = (UINTN)BufferEnd - (UINTN)BufferStart;\r
- *FuncOffset = Offset;\r
- PatchForAsciiStrTokenAfter (LineBuffer, '\n');\r
- return BufferStart;\r
- }\r
+ if (AsciiStrCmp (LineBuffer, "; mark_end;") == 0) {\r
+ CodParseState = EdbEbcCodParseStateSymbolEnd;\r
+ //\r
+ // prepare CodeBufferSize, FuncOffset, and FuncStart to return\r
+ //\r
+ BufferEnd = LineBuffer + sizeof ("; mark_end;") - 1;\r
+ *CodeBufferSize = (UINTN)BufferEnd - (UINTN)BufferStart;\r
+ *FuncOffset = Offset;\r
+ PatchForAsciiStrTokenAfter (LineBuffer, '\n');\r
+ return BufferStart;\r
+ }\r
\r
- //\r
- // Get function offset\r
- //\r
- if ((Offset == (UINTN)-1) &&\r
- (*LineBuffer == ' ')) {\r
- FieldBuffer = AsciiStrGetNewTokenField (LineBuffer + 2, " ");\r
- Offset = AsciiXtoi (FieldBuffer);\r
- PatchForAsciiStrTokenAfter (FieldBuffer, ' ');\r
- }\r
+ //\r
+ // Get function offset\r
+ //\r
+ if ((Offset == (UINTN)-1) &&\r
+ (*LineBuffer == ' '))\r
+ {\r
+ FieldBuffer = AsciiStrGetNewTokenField (LineBuffer + 2, " ");\r
+ Offset = AsciiXtoi (FieldBuffer);\r
+ PatchForAsciiStrTokenAfter (FieldBuffer, ' ');\r
+ }\r
\r
- //\r
- // Get next line\r
- //\r
- LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
- PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
- break;\r
+ //\r
+ // Get next line\r
+ //\r
+ LineBuffer = AsciiStrGetNextTokenLine ("\n\r");\r
+ PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
+ break;\r
\r
- case EdbEbcCodParseStateSymbolEnd:\r
- break;\r
+ case EdbEbcCodParseStateSymbolEnd:\r
+ break;\r
\r
- default:\r
- break;\r
+ default:\r
+ break;\r
}\r
}\r
\r
**/\r
CHAR8 *\r
EdbLoadCodBySymbol (\r
- IN CHAR8 *Name,\r
- IN VOID *Buffer,\r
- IN UINTN BufferSize,\r
- OUT UINTN *CodeBufferSize,\r
- OUT UINTN *FuncOffset\r
+ IN CHAR8 *Name,\r
+ IN VOID *Buffer,\r
+ IN UINTN BufferSize,\r
+ OUT UINTN *CodeBufferSize,\r
+ OUT UINTN *FuncOffset\r
)\r
{\r
//\r
IN CHAR16 *FileName\r
)\r
{\r
- UINTN EntryIndex;\r
+ UINTN EntryIndex;\r
\r
//\r
// Go througn each Entry in this Object\r
// This check is for Function only\r
//\r
if ((Object->Entry[EntryIndex].Type != EfiDebuggerSymbolFunction) &&\r
- (Object->Entry[EntryIndex].Type != EfiDebuggerSymbolStaticFunction)) {\r
+ (Object->Entry[EntryIndex].Type != EfiDebuggerSymbolStaticFunction))\r
+ {\r
continue;\r
}\r
+\r
//\r
// Skip match varbss_init function, because they has no source code\r
//\r
- if (AsciiStrnCmp (Object->Entry[EntryIndex].Name, "varbss_init", sizeof("varbss_init") - 1) == 0) {\r
+ if (AsciiStrnCmp (Object->Entry[EntryIndex].Name, "varbss_init", sizeof ("varbss_init") - 1) == 0) {\r
continue;\r
}\r
+\r
//\r
// check the name\r
//\r
if (!MatchObjAndCod (Object->Entry[EntryIndex].ObjName, FileName)) {\r
continue;\r
}\r
+\r
//\r
// found it, return source buffer\r
//\r
**/\r
EFI_STATUS\r
EdbLoadCode (\r
- IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
- IN CHAR16 *MapFileName,\r
- IN CHAR16 *FileName,\r
- IN UINTN BufferSize,\r
- IN VOID *Buffer\r
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *MapFileName,\r
+ IN CHAR16 *FileName,\r
+ IN UINTN BufferSize,\r
+ IN VOID *Buffer\r
)\r
{\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
- UINTN ObjectIndex;\r
- UINTN EntryIndex;\r
- VOID *SourceBuffer;\r
- EFI_STATUS Status;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ UINTN ObjectIndex;\r
+ UINTN EntryIndex;\r
+ VOID *SourceBuffer;\r
+ EFI_STATUS Status;\r
\r
//\r
// Find Symbol\r
// unnload duplicated code\r
//\r
Status = EdbUnloadCode (DebuggerPrivate, MapFileName, FileName, &SourceBuffer);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Unload Duplicated Code File Error!\n"));\r
return Status;\r
}\r
+\r
Status = EdbDeleteCodeBuffer (DebuggerPrivate, MapFileName, FileName, SourceBuffer);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Delete Duplicated Code File Error!\n"));\r
return Status;\r
}\r
// load symbol for function only\r
//\r
if ((Object->Entry[EntryIndex].Type != EfiDebuggerSymbolFunction) &&\r
- (Object->Entry[EntryIndex].Type != EfiDebuggerSymbolStaticFunction)) {\r
+ (Object->Entry[EntryIndex].Type != EfiDebuggerSymbolStaticFunction))\r
+ {\r
continue;\r
}\r
+\r
//\r
// skip varbss_init\r
//\r
- if (AsciiStrnCmp (Object->Entry[EntryIndex].Name, "varbss_init", sizeof("varbss_init") - 1) == 0) {\r
+ if (AsciiStrnCmp (Object->Entry[EntryIndex].Name, "varbss_init", sizeof ("varbss_init") - 1) == 0) {\r
continue;\r
}\r
+\r
//\r
// Check the name\r
//\r
if (!MatchObjAndCod (Object->Entry[EntryIndex].ObjName, FileName)) {\r
continue;\r
}\r
+\r
//\r
// load code for this symbol\r
//\r
if (Object->Entry[EntryIndex].CodBuffer != NULL) {\r
*((UINT8 *)Object->Entry[EntryIndex].CodBuffer + Object->Entry[EntryIndex].CodBufferSize) = 0;\r
DEBUG ((DEBUG_ERROR, " CodeSymbol: %a, FuncOffset: 0x05%x\n", Object->Entry[EntryIndex].Name, Object->Entry[EntryIndex].FuncOffsetBase));\r
-// DEBUG ((DEBUG_ERROR, " [CODE]:\n%a\n", Object->Entry[EntryIndex].CodBuffer));\r
+ // DEBUG ((DEBUG_ERROR, " [CODE]:\n%a\n", Object->Entry[EntryIndex].CodBuffer));\r
}\r
}\r
\r
**/\r
EFI_STATUS\r
EdbUnloadCode (\r
- IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
- IN CHAR16 *MapFileName,\r
- IN CHAR16 *FileName,\r
- OUT VOID **Buffer\r
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *MapFileName,\r
+ IN CHAR16 *FileName,\r
+ OUT VOID **Buffer\r
)\r
{\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
- UINTN ObjectIndex;\r
- UINTN EntryIndex;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ UINTN ObjectIndex;\r
+ UINTN EntryIndex;\r
\r
//\r
// Find Symbol\r
//\r
for (EntryIndex = 0; EntryIndex < Object->EntryCount; EntryIndex++) {\r
if ((Object->Entry[EntryIndex].Type != EfiDebuggerSymbolFunction) &&\r
- (Object->Entry[EntryIndex].Type != EfiDebuggerSymbolStaticFunction)) {\r
+ (Object->Entry[EntryIndex].Type != EfiDebuggerSymbolStaticFunction))\r
+ {\r
continue;\r
}\r
- if (AsciiStrnCmp (Object->Entry[EntryIndex].Name, "varbss_init", sizeof("varbss_init") - 1) == 0) {\r
+\r
+ if (AsciiStrnCmp (Object->Entry[EntryIndex].Name, "varbss_init", sizeof ("varbss_init") - 1) == 0) {\r
continue;\r
}\r
+\r
if (!MatchObjAndCod (Object->Entry[EntryIndex].ObjName, FileName)) {\r
continue;\r
}\r
+\r
//\r
// clean up the buffer\r
//\r
- Object->Entry[EntryIndex].CodBuffer = NULL;\r
- Object->Entry[EntryIndex].CodBufferSize = 0;\r
+ Object->Entry[EntryIndex].CodBuffer = NULL;\r
+ Object->Entry[EntryIndex].CodBufferSize = 0;\r
Object->Entry[EntryIndex].FuncOffsetBase = 0;\r
- Object->Entry[EntryIndex].SourceBuffer = NULL;\r
+ Object->Entry[EntryIndex].SourceBuffer = NULL;\r
}\r
\r
//\r
**/\r
EFI_STATUS\r
EdbAddCodeBuffer (\r
- IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
- IN CHAR16 *MapFileName,\r
- IN CHAR16 *CodeFileName,\r
- IN UINTN SourceBufferSize,\r
- IN VOID *SourceBuffer\r
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *MapFileName,\r
+ IN CHAR16 *CodeFileName,\r
+ IN UINTN SourceBufferSize,\r
+ IN VOID *SourceBuffer\r
)\r
{\r
- UINTN Index;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ UINTN Index;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
\r
//\r
// Find Symbol\r
// Add it to last entry\r
//\r
for (Index = 0; Object->SourceBuffer[Index] != NULL; Index++) {\r
- ;\r
}\r
+\r
Object->SourceBuffer[Index] = SourceBuffer;\r
\r
return EFI_SUCCESS;\r
**/\r
EFI_STATUS\r
EdbDeleteCodeBuffer (\r
- IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
- IN CHAR16 *MapFileName,\r
- IN CHAR16 *CodeFileName,\r
- IN VOID *SourceBuffer\r
+ IN EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,\r
+ IN CHAR16 *MapFileName,\r
+ IN CHAR16 *CodeFileName,\r
+ IN VOID *SourceBuffer\r
)\r
{\r
- UINTN Index;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
+ UINTN Index;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *Object;\r
\r
//\r
// Find Symbol\r
for (Index = Index + 1; Object->SourceBuffer[Index] != NULL; Index++) {\r
Object->SourceBuffer[Index - 1] = Object->SourceBuffer[Index];\r
}\r
+\r
Object->SourceBuffer[Index - 1] = NULL;\r
\r
return EFI_SUCCESS;\r
**/\r
CHAR8 *\r
FindSymbolStr (\r
- IN UINTN Address\r
+ IN UINTN Address\r
)\r
{\r
UINTN ObjectIndex;\r
//\r
// if Address match, return Name\r
//\r
- if (Address == (Entry[EntryIndex].RVA + Object[ObjectIndex].BaseAddress)) {\r
+ if (Address == (Entry[EntryIndex].Rva + Object[ObjectIndex].BaseAddress)) {\r
return Entry[EntryIndex].Name;\r
}\r
}\r
**/\r
UINTN\r
EdbGetLineNumberAndOffsetFromThisLine (\r
- IN VOID *Line,\r
- OUT UINTN *Offset\r
+ IN VOID *Line,\r
+ OUT UINTN *Offset\r
)\r
{\r
UINTN LineNumber;\r
\r
LineNumber = (UINTN)-1;\r
LineBuffer = Line;\r
- *Offset = (UINTN)-1;\r
+ *Offset = (UINTN)-1;\r
\r
while (LineBuffer != NULL) {\r
//\r
if (*(LineBuffer + 2) != ' ') {\r
if (*Offset == (UINTN)-1) {\r
FieldBuffer = AsciiStrGetNewTokenField (LineBuffer + 2, " ");\r
- *Offset = AsciiXtoi (FieldBuffer);\r
+ *Offset = AsciiXtoi (FieldBuffer);\r
PatchForAsciiStrTokenAfter (FieldBuffer, ' ');\r
}\r
}\r
PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
continue;\r
}\r
+\r
//\r
// 3. line number\r
//\r
UINTN CandidateLineNumber;\r
UINTN CandidateOffset;\r
\r
- if (SearchType < 0 || SearchType >= EdbEbcLineSearchTypeMax) {\r
+ if ((SearchType < 0) || (SearchType >= EdbEbcLineSearchTypeMax)) {\r
return (UINTN)-1;\r
}\r
\r
- LineNumber = (UINTN)-1;\r
+ LineNumber = (UINTN)-1;\r
CandidateLineNumber = (UINTN)-1;\r
- CandidateOffset = (UINTN)-1;\r
- LineBuffer = AsciiStrGetNewTokenLine (Entry->CodBuffer, "\n");\r
+ CandidateOffset = (UINTN)-1;\r
+ LineBuffer = AsciiStrGetNewTokenLine (Entry->CodBuffer, "\n");\r
while (LineBuffer != NULL) {\r
if (*LineBuffer != ' ') {\r
LineBuffer = AsciiStrGetNextTokenLine ("\n");\r
}\r
\r
CandidateLineNumber = LineNumber;\r
- CandidateOffset = Offset;\r
+ CandidateOffset = Offset;\r
\r
LineBuffer = AsciiStrGetNextTokenLine ("\n");\r
PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
VOID *FuncStart;\r
UINTN Number;\r
\r
- FuncStart = NULL;\r
+ FuncStart = NULL;\r
LineBuffer = AsciiStrGetNewTokenLine (Entry->CodBuffer, "\n");\r
while (LineBuffer != NULL) {\r
if (*LineBuffer != ';') {\r
PatchForAsciiStrTokenAfter (LineBuffer, '\n');\r
return FuncStart;\r
}\r
+\r
LineBuffer = AsciiStrGetNextTokenLine ("\n");\r
PatchForAsciiStrTokenBefore (LineBuffer, '\n');\r
continue;\r
// Check LineNumber\r
//\r
FieldBuffer = AsciiStrGetNewTokenField (LineBuffer + 1, " ");\r
- Number = AsciiAtoi (FieldBuffer);\r
+ Number = AsciiAtoi (FieldBuffer);\r
PatchForAsciiStrTokenAfter (FieldBuffer, ' ');\r
if (Number != LineNumber) {\r
LineBuffer = AsciiStrGetNextTokenLine ("\n");\r
**/\r
UINTN\r
EdbPrintSource (\r
- IN UINTN Address,\r
- IN BOOLEAN IsPrint\r
+ IN UINTN Address,\r
+ IN BOOLEAN IsPrint\r
)\r
{\r
- UINTN SymbolAddress;\r
- EFI_DEBUGGER_SYMBOL_OBJECT *RetObject;\r
- EFI_DEBUGGER_SYMBOL_ENTRY *RetEntry;\r
- UINTN FuncOffset;\r
- UINT8 *FuncStart;\r
- UINT8 *FuncEnd;\r
- UINT8 *FuncIndex;\r
- CHAR8 Buffer[EFI_DEBUG_MAX_PRINT_BUFFER];\r
- UINTN BufferSize;\r
+ UINTN SymbolAddress;\r
+ EFI_DEBUGGER_SYMBOL_OBJECT *RetObject;\r
+ EFI_DEBUGGER_SYMBOL_ENTRY *RetEntry;\r
+ UINTN FuncOffset;\r
+ UINT8 *FuncStart;\r
+ UINT8 *FuncEnd;\r
+ UINT8 *FuncIndex;\r
+ CHAR8 Buffer[EFI_DEBUG_MAX_PRINT_BUFFER];\r
+ UINTN BufferSize;\r
\r
//\r
// need we display symbol\r
//\r
if (!mDebuggerPrivate.DebuggerSymbolContext.DisplaySymbol) {\r
- return 0 ;\r
+ return 0;\r
}\r
\r
//\r
&RetObject,\r
&RetEntry\r
);\r
- if (SymbolAddress == 0) {\r
- return 0 ;\r
+ if ((SymbolAddress == 0) || (RetEntry == NULL)) {\r
+ return 0;\r
}\r
\r
FuncOffset = Address - SymbolAddress + RetEntry->FuncOffsetBase;\r
//\r
// Get Func String\r
//\r
- FuncStart = EdbGetSourceStrFromCode (RetEntry, FuncOffset, (VOID**) &FuncEnd);\r
+ FuncStart = EdbGetSourceStrFromCode (RetEntry, FuncOffset, (VOID **)&FuncEnd);\r
if (FuncStart == NULL) {\r
- return 0 ;\r
+ return 0;\r
}\r
\r
//\r
} else {\r
BufferSize = EFI_DEBUG_MAX_PRINT_BUFFER - 3;\r
}\r
+\r
if (BufferSize != 0) {\r
CopyMem (Buffer, FuncStart, BufferSize);\r
}\r
+\r
Buffer[BufferSize] = 0;\r
EDBPrint (L"%a\n", Buffer);\r
FuncStart = FuncIndex + 1;\r
FuncIndex = FuncStart;\r
} else {\r
- FuncIndex ++;\r
+ FuncIndex++;\r
}\r
}\r
\r
//\r
*(UINT8 *)FuncEnd = '\n';\r
\r
- return 1 ;\r
+ return 1;\r
}\r
\r
/**\r
CHAR16 *Ch;\r
\r
*MapfileName = NULL;\r
- *SymbolName = Symbol;\r
+ *SymbolName = Symbol;\r
\r
for (Ch = Symbol; *Ch != 0; Ch++) {\r
//\r
//\r
if (*Ch == L':') {\r
*MapfileName = Symbol;\r
- *Ch = 0;\r
- *SymbolName = Ch + 1;\r
+ *Ch = 0;\r
+ *SymbolName = Ch + 1;\r
break;\r
}\r
}\r
\r
- return ;\r
+ return;\r
}\r
\r
/**\r
**/\r
EFI_STATUS\r
Symboltoi (\r
- IN CHAR16 *Symbol,\r
- OUT UINTN *Address\r
+ IN CHAR16 *Symbol,\r
+ OUT UINTN *Address\r
)\r
{\r
UINTN ObjectIndex;\r
if ((MapfileName != NULL) && (StriCmp (Object[ObjectIndex].Name, MapfileName) != 0)) {\r
continue;\r
}\r
+\r
//\r
// Go through each entry\r
//\r
//\r
// record Address\r
//\r
- *Address = (Entry[EntryIndex].RVA + Object[ObjectIndex].BaseAddress);\r
+ *Address = (Entry[EntryIndex].Rva + Object[ObjectIndex].BaseAddress);\r
}\r
}\r
}\r