From 39eccb9c66be7329eaf564d18f8f3cfb9add82e9 Mon Sep 17 00:00:00 2001 From: Baraneedharan Anbazhagan Date: Mon, 7 Dec 2015 03:06:30 +0000 Subject: [PATCH] MdeModulePkg: DebugAssert enhancement 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. V2: Updated code to use copy mem and ModuleNameSize calculation. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Baraneedharan Anbazhagan Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19128 6f19259b-4bc3-4df7-8a09-765794883524 --- .../PeiDxeDebugLibReportStatusCode/DebugLib.c | 51 +++++++++++++------ 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c index f1d98277a3..163d530ae5 100644 --- a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c +++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c @@ -261,6 +261,7 @@ DebugAssert ( UINTN HeaderSize; UINTN TotalSize; CHAR8 *Temp; + UINTN ModuleNameSize; UINTN FileNameSize; UINTN DescriptionSize; @@ -268,31 +269,40 @@ DebugAssert ( // Get string size // HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA); + // + // Compute string size of module name enclosed by [] + // + ModuleNameSize = 2 + AsciiStrSize (gEfiCallerBaseName); FileNameSize = AsciiStrSize (FileName); DescriptionSize = AsciiStrSize (Description); // // Make sure it will all fit in the passed in buffer. // - if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) { + if (HeaderSize + ModuleNameSize + FileNameSize + DescriptionSize > sizeof (Buffer)) { // - // FileName + Description is too long to be filled into buffer. + // remove module name if it's too long to be filled into buffer // - if (HeaderSize + FileNameSize < sizeof (Buffer)) { - // - // Description has enough buffer to be truncated. - // - DescriptionSize = sizeof (Buffer) - HeaderSize - FileNameSize; - } else { + ModuleNameSize = 0; + if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) { // - // FileName is too long to be filled into buffer. - // FileName will be truncated. Reserved one byte for Description NULL terminator. + // FileName + Description is too long to be filled into buffer. // - DescriptionSize = 1; - FileNameSize = sizeof (Buffer) - HeaderSize - DescriptionSize; + if (HeaderSize + FileNameSize < sizeof (Buffer)) { + // + // Description has enough buffer to be truncated. + // + DescriptionSize = sizeof (Buffer) - HeaderSize - FileNameSize; + } else { + // + // FileName is too long to be filled into buffer. + // FileName will be truncated. Reserved one byte for Description NULL terminator. + // + DescriptionSize = 1; + FileNameSize = sizeof (Buffer) - HeaderSize - DescriptionSize; + } } } - // // Fill in EFI_DEBUG_ASSERT_DATA // @@ -300,12 +310,23 @@ DebugAssert ( AssertData->LineNumber = (UINT32)LineNumber; TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA); + Temp = (CHAR8 *)(AssertData + 1); + + // + // Copy Ascii [ModuleName]. + // + if (ModuleNameSize != 0) { + CopyMem(Temp, "[", 1); + CopyMem(Temp + 1, gEfiCallerBaseName, ModuleNameSize - 3); + CopyMem(Temp + ModuleNameSize - 2, "] ", 2); + } + // // Copy Ascii FileName including NULL terminator. // - Temp = CopyMem (AssertData + 1, FileName, FileNameSize); + Temp = CopyMem (Temp + ModuleNameSize, FileName, FileNameSize); Temp[FileNameSize - 1] = 0; - TotalSize += FileNameSize; + TotalSize += (ModuleNameSize + FileNameSize); // // Copy Ascii Description include NULL terminator. -- 2.39.2