Baranee: Could you use CopyMem() to fill gEfiCallerBaseName instead of AsciiSPrint()? This library instance is for size optimization. So, it uses CopyMem() to fill FileName and Description.
Thanks Liming -----Original Message----- From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Anbazhagan, Baraneedharan Sent: Wednesday, December 02, 2015 11:42 PM To: edk2-devel@lists.01.org Subject: [edk2] 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. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Baraneedharan Anbazhagan <anbazha...@hp.com> --- .../PeiDxeDebugLibReportStatusCode/DebugLib.c | 58 ++++++++++++++-------- .../PeiDxeDebugLibReportStatusCode.inf | 1 + 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c index f1d9827..af369ea 100644 --- a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c +++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c @@ -22,6 +22,7 @@ #include <Library/DebugLib.h> #include <Library/BaseLib.h> +#include <Library/PrintLib.h> #include <Library/BaseMemoryLib.h> #include <Library/ReportStatusCodeLib.h> #include <Library/PcdLib.h> @@ -261,6 +262,7 @@ DebugAssert ( UINTN HeaderSize; UINTN TotalSize; CHAR8 *Temp; + UINTN ModuleNameSize; UINTN FileNameSize; UINTN DescriptionSize; @@ -268,31 +270,37 @@ DebugAssert ( // Get string size // HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA); + ModuleNameSize = AsciiStrLen("[") + AsciiStrLen (gEfiCallerBaseName) + AsciiStrLen("] "); 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)) { + ModuleNameSize = 0; + if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) + { // - // Description has enough buffer to be truncated. + // FileName + Description is too long to be filled into buffer. // - 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; + 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,17 +308,27 @@ DebugAssert ( AssertData->LineNumber = (UINT32)LineNumber; TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA); - // - // Copy Ascii FileName including NULL terminator. - // - Temp = CopyMem (AssertData + 1, FileName, FileNameSize); - Temp[FileNameSize - 1] = 0; - TotalSize += FileNameSize; + Temp = (CHAR8 *)(AssertData + 1); + if (ModuleNameSize != 0) { + // + // Copy Ascii ModuleName & FileName including NULL terminator + // + AsciiSPrint(Temp, ModuleNameSize + FileNameSize, "[%a] %a", gEfiCallerBaseName, FileName); + TotalSize += (ModuleNameSize + FileNameSize); } else { + // + // Copy Ascii FileName including NULL terminator. + // + Temp = CopyMem (Temp, FileName, FileNameSize); + Temp[FileNameSize - 1] = 0; + TotalSize += FileNameSize; + } + // // Copy Ascii Description include NULL terminator. // - Temp = CopyMem (Temp + FileNameSize, Description, DescriptionSize); + Temp = CopyMem (Temp + ModuleNameSize + FileNameSize, Description, DescriptionSize); Temp[DescriptionSize - 1] = 0; TotalSize += DescriptionSize; diff --git a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf index 5544667..50f60c7 100644 --- a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf +++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf @@ -43,6 +43,7 @@ BaseMemoryLib BaseLib DebugPrintErrorLevelLib + PrintLib [Pcd] gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue ## SOMETIMES_CONSUMES -- 2.6.3.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel