From ea1b39e617f93f2dd674eb111f101759ea2274b7 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Mon, 21 May 2012 06:10:21 +0000 Subject: Update PeiDxeDebugLibReportStatusCode library instance to print partial ASSERT message if ASSERT message is too big. Signed-off-by: Liming Gao Reviewed-by: Jiewen Yao git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13339 6f19259b-4bc3-4df7-8a09-765794883524 --- .../PeiDxeDebugLibReportStatusCode/DebugLib.c | 81 ++++++++++++++-------- 1 file changed, 54 insertions(+), 27 deletions(-) (limited to 'IntelFrameworkModulePkg') diff --git a/IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c b/IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c index f6ab54ed6a..0d794dfca8 100644 --- a/IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c +++ b/IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c @@ -258,44 +258,71 @@ DebugAssert ( { UINT64 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)]; EFI_DEBUG_ASSERT_DATA *AssertData; + UINTN HeaderSize; UINTN TotalSize; CHAR8 *Temp; UINTN FileNameSize; UINTN DescriptionSize; // - // Make sure it will all fit in the passed in buffer + // Get string size // - FileNameSize = AsciiStrSize (FileName); - DescriptionSize = AsciiStrSize (Description); - TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA) + FileNameSize + DescriptionSize; - if (TotalSize <= sizeof (Buffer)) { - // - // Fill in EFI_DEBUG_ASSERT_DATA - // - AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer; - AssertData->LineNumber = (UINT32)LineNumber; - - // - // Copy Ascii FileName including NULL. - // - Temp = AsciiStrCpy ((CHAR8 *)(AssertData + 1), FileName); + HeaderSize = sizeof (EFI_DEBUG_ASSERT_DATA); + FileNameSize = AsciiStrSize (FileName); + DescriptionSize = AsciiStrSize (Description); + // + // Make sure it will all fit in the passed in buffer. + // + if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) { // - // Copy Ascii Description + // FileName + Description is too long to be filled into buffer. // - AsciiStrCpy (Temp + FileNameSize, Description); - - REPORT_STATUS_CODE_EX ( - (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED), - (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE), - 0, - NULL, - NULL, - AssertData, - TotalSize - ); + 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 + // + AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer; + AssertData->LineNumber = (UINT32)LineNumber; + TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA); + + // + // Copy Ascii FileName including NULL terminator. + // + Temp = AsciiStrnCpy ((CHAR8 *)(AssertData + 1), FileName, FileNameSize); + Temp[FileNameSize - 1] = 0; + TotalSize += FileNameSize; + + // + // Copy Ascii Description include NULL terminator. + // + Temp = AsciiStrnCpy (Temp + FileNameSize, Description, DescriptionSize); + Temp[DescriptionSize - 1] = 0; + TotalSize += DescriptionSize; + + REPORT_STATUS_CODE_EX ( + (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED), + (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE), + 0, + NULL, + NULL, + AssertData, + TotalSize + ); // // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings -- cgit v1.2.3