Update PeiDxeDebugLibReportStatusCode library instance to print partial ASSERT message if ASSERT message is too big.
Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13339 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
		@@ -258,33 +258,61 @@ DebugAssert (
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  UINT64                 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)];
 | 
					  UINT64                 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)];
 | 
				
			||||||
  EFI_DEBUG_ASSERT_DATA  *AssertData;
 | 
					  EFI_DEBUG_ASSERT_DATA  *AssertData;
 | 
				
			||||||
 | 
					  UINTN                  HeaderSize;
 | 
				
			||||||
  UINTN                  TotalSize;
 | 
					  UINTN                  TotalSize;
 | 
				
			||||||
  CHAR8                  *Temp;
 | 
					  CHAR8                  *Temp;
 | 
				
			||||||
  UINTN                  FileNameSize;
 | 
					  UINTN                  FileNameSize;
 | 
				
			||||||
  UINTN                  DescriptionSize;
 | 
					  UINTN                  DescriptionSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  // Make sure it will all fit in the passed in buffer
 | 
					  // Get string size
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
 | 
					  HeaderSize       = sizeof (EFI_DEBUG_ASSERT_DATA);
 | 
				
			||||||
  FileNameSize     = AsciiStrSize (FileName);
 | 
					  FileNameSize     = AsciiStrSize (FileName);
 | 
				
			||||||
  DescriptionSize  = AsciiStrSize (Description);
 | 
					  DescriptionSize  = AsciiStrSize (Description);
 | 
				
			||||||
  TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA) + FileNameSize + DescriptionSize;
 | 
					
 | 
				
			||||||
  if (TotalSize <= sizeof (Buffer)) {
 | 
					  //
 | 
				
			||||||
 | 
					  // Make sure it will all fit in the passed in buffer.
 | 
				
			||||||
 | 
					  //
 | 
				
			||||||
 | 
					  if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {
 | 
				
			||||||
 | 
					    //
 | 
				
			||||||
 | 
					    // FileName + Description is 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 {
 | 
				
			||||||
 | 
					      //
 | 
				
			||||||
 | 
					      // 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
 | 
					  // Fill in EFI_DEBUG_ASSERT_DATA
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;
 | 
					  AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;
 | 
				
			||||||
  AssertData->LineNumber = (UINT32)LineNumber;
 | 
					  AssertData->LineNumber = (UINT32)LineNumber;
 | 
				
			||||||
 | 
					  TotalSize  = sizeof (EFI_DEBUG_ASSERT_DATA);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
    // Copy Ascii FileName including NULL.
 | 
					  // Copy Ascii FileName including NULL terminator.
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
    Temp = AsciiStrCpy ((CHAR8 *)(AssertData + 1), FileName);
 | 
					  Temp = AsciiStrnCpy ((CHAR8 *)(AssertData + 1), FileName, FileNameSize);
 | 
				
			||||||
 | 
					  Temp[FileNameSize - 1] = 0;
 | 
				
			||||||
 | 
					  TotalSize += FileNameSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
    // Copy Ascii Description
 | 
					  // Copy Ascii Description include NULL terminator.
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
    AsciiStrCpy (Temp + FileNameSize, Description);
 | 
					  Temp = AsciiStrnCpy (Temp + FileNameSize, Description, DescriptionSize);
 | 
				
			||||||
 | 
					  Temp[DescriptionSize - 1] = 0;
 | 
				
			||||||
 | 
					  TotalSize += DescriptionSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  REPORT_STATUS_CODE_EX (
 | 
					  REPORT_STATUS_CODE_EX (
 | 
				
			||||||
    (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),
 | 
					    (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),
 | 
				
			||||||
@@ -295,7 +323,6 @@ DebugAssert (
 | 
				
			|||||||
    AssertData,
 | 
					    AssertData,
 | 
				
			||||||
    TotalSize
 | 
					    TotalSize
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
 | 
					  // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user