If the assert happens in a library, then it's hard to determine which module
using that library is generating that assert. Use gEfiCallerBaseName in
DebugAssert to display the module name.
In V2: Updated patch to use CopyMem instead of AsciiSPrint.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Baraneedharan Anbazhagan <anbazhagan@hp.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19129
6f19259b-4bc3-4df7-8a09-
765794883524
UINTN HeaderSize;\r
UINTN TotalSize;\r
CHAR8 *Temp;\r
UINTN HeaderSize;\r
UINTN TotalSize;\r
CHAR8 *Temp;\r
+ UINTN ModuleNameSize;\r
UINTN FileNameSize;\r
UINTN DescriptionSize;\r
\r
UINTN FileNameSize;\r
UINTN DescriptionSize;\r
\r
// Get string size\r
//\r
HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA);\r
// Get string size\r
//\r
HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA);\r
+ //\r
+ // Compute string size of module name enclosed by []\r
+ //\r
+ ModuleNameSize = 2 + AsciiStrSize (gEfiCallerBaseName);\r
FileNameSize = AsciiStrSize (FileName);\r
DescriptionSize = AsciiStrSize (Description);\r
\r
//\r
// Make sure it will all fit in the passed in buffer.\r
//\r
FileNameSize = AsciiStrSize (FileName);\r
DescriptionSize = AsciiStrSize (Description);\r
\r
//\r
// Make sure it will all fit in the passed in buffer.\r
//\r
- if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {\r
+ if (HeaderSize + ModuleNameSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {\r
- // FileName + Description is too long to be filled into buffer. \r
+ // remove module name if it's too long to be filled into buffer\r
- if (HeaderSize + FileNameSize < sizeof (Buffer)) {\r
- //\r
- // Description has enough buffer to be truncated. \r
- //\r
- DescriptionSize = sizeof (Buffer) - HeaderSize - FileNameSize;\r
- } else {\r
+ ModuleNameSize = 0;\r
+ if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {\r
- // FileName is too long to be filled into buffer.\r
- // FileName will be truncated. Reserved one byte for Description NULL terminator.\r
+ // FileName + Description is too long to be filled into buffer.\r
- DescriptionSize = 1;\r
- FileNameSize = sizeof (Buffer) - HeaderSize - DescriptionSize;\r
+ if (HeaderSize + FileNameSize < sizeof (Buffer)) {\r
+ //\r
+ // Description has enough buffer to be truncated.\r
+ //\r
+ DescriptionSize = sizeof (Buffer) - HeaderSize - FileNameSize;\r
+ } else {\r
+ //\r
+ // FileName is too long to be filled into buffer.\r
+ // FileName will be truncated. Reserved one byte for Description NULL terminator.\r
+ //\r
+ DescriptionSize = 1;\r
+ FileNameSize = sizeof (Buffer) - HeaderSize - DescriptionSize;\r
+ }\r
//\r
// Fill in EFI_DEBUG_ASSERT_DATA\r
//\r
//\r
// Fill in EFI_DEBUG_ASSERT_DATA\r
//\r
AssertData->LineNumber = (UINT32)LineNumber;\r
TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA);\r
\r
AssertData->LineNumber = (UINT32)LineNumber;\r
TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA);\r
\r
+ Temp = (CHAR8 *)(AssertData + 1);\r
+\r
+ //\r
+ // Copy Ascii [ModuleName].\r
+ //\r
+ if (ModuleNameSize != 0) {\r
+ CopyMem(Temp, "[", 1);\r
+ CopyMem(Temp + 1, gEfiCallerBaseName, ModuleNameSize - 3);\r
+ CopyMem(Temp + ModuleNameSize - 2, "] ", 2);\r
+ }\r
+\r
//\r
// Copy Ascii FileName including NULL terminator.\r
//\r
//\r
// Copy Ascii FileName including NULL terminator.\r
//\r
- Temp = CopyMem (AssertData + 1, FileName, FileNameSize);\r
+ Temp = CopyMem (Temp + ModuleNameSize, FileName, FileNameSize);\r
Temp[FileNameSize - 1] = 0;\r
Temp[FileNameSize - 1] = 0;\r
- TotalSize += FileNameSize;\r
+ TotalSize += (ModuleNameSize + FileNameSize);\r
\r
//\r
// Copy Ascii Description include NULL terminator.\r
\r
//\r
// Copy Ascii Description include NULL terminator.\r