]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
Update PeiDxeDebugLibReportStatusCode library instance to print partial ASSERT messag...
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / PeiDxeDebugLibReportStatusCode / DebugLib.c
index f6ab54ed6a87d86697d7867ff17a40f195cad36f..0d794dfca868b431d2f0f3e8a3f11ba854f7e566 100644 (file)
@@ -258,44 +258,71 @@ DebugAssert (
 {\r
   UINT64                 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)];\r
   EFI_DEBUG_ASSERT_DATA  *AssertData;\r
+  UINTN                  HeaderSize;\r
   UINTN                  TotalSize;\r
   CHAR8                  *Temp;\r
   UINTN                  FileNameSize;\r
   UINTN                  DescriptionSize;\r
 \r
   //\r
-  // Make sure it will all fit in the passed in buffer\r
+  // Get string size\r
   //\r
-  FileNameSize    = AsciiStrSize (FileName);\r
-  DescriptionSize = AsciiStrSize (Description);\r
-  TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA) + FileNameSize + DescriptionSize;\r
-  if (TotalSize <= sizeof (Buffer)) {\r
-    //\r
-    // Fill in EFI_DEBUG_ASSERT_DATA\r
-    //\r
-    AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;\r
-    AssertData->LineNumber = (UINT32)LineNumber;\r
-\r
-    //\r
-    // Copy Ascii FileName including NULL.\r
-    //\r
-    Temp = AsciiStrCpy ((CHAR8 *)(AssertData + 1), FileName);\r
+  HeaderSize       = sizeof (EFI_DEBUG_ASSERT_DATA);\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
     //\r
-    // Copy Ascii Description\r
+    // FileName + Description is too long to be filled into buffer. \r
     //\r
-    AsciiStrCpy (Temp + FileNameSize, Description);\r
-\r
-    REPORT_STATUS_CODE_EX (\r
-      (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),\r
-      (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE),\r
-      0,\r
-      NULL,\r
-      NULL,\r
-      AssertData,\r
-      TotalSize\r
-      );\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
\r
+  //\r
+  // Fill in EFI_DEBUG_ASSERT_DATA\r
+  //\r
+  AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;\r
+  AssertData->LineNumber = (UINT32)LineNumber;\r
+  TotalSize  = sizeof (EFI_DEBUG_ASSERT_DATA);\r
+\r
+  //\r
+  // Copy Ascii FileName including NULL terminator.\r
+  //\r
+  Temp = AsciiStrnCpy ((CHAR8 *)(AssertData + 1), FileName, FileNameSize);\r
+  Temp[FileNameSize - 1] = 0;\r
+  TotalSize += FileNameSize;\r
+\r
+  //\r
+  // Copy Ascii Description include NULL terminator.\r
+  //\r
+  Temp = AsciiStrnCpy (Temp + FileNameSize, Description, DescriptionSize);\r
+  Temp[DescriptionSize - 1] = 0;\r
+  TotalSize += DescriptionSize;\r
+\r
+  REPORT_STATUS_CODE_EX (\r
+    (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),\r
+    (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE),\r
+    0,\r
+    NULL,\r
+    NULL,\r
+    AssertData,\r
+    TotalSize\r
+    );\r
 \r
   //\r
   // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings\r