]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
IntelFrameworkModulePkg: DebugAssert enhancement
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / PeiDxeDebugLibReportStatusCode / DebugLib.c
index 68c1a5570b9e59dddc8baa69060e0b8c4e9b6c42..7b07916bbdc955dc230f725debee7cd17abcf197 100644 (file)
@@ -56,6 +56,7 @@ DebugPrint (
   UINT64          Buffer[(EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof (UINT64)) + 1];\r
   EFI_DEBUG_INFO  *DebugInfo;\r
   UINTN           TotalSize;\r
+  UINTN           DestBufferSize;\r
   VA_LIST         VaListMarker;\r
   BASE_LIST       BaseListMarker;\r
   CHAR8           *FormatString;\r
@@ -115,7 +116,13 @@ DebugPrint (
   //\r
   // Copy the Format string into the record\r
   //\r
-  AsciiStrCpy (FormatString, Format);\r
+  // According to the content structure of Buffer shown above, the size of\r
+  // the FormatString buffer is the size of Buffer minus the Padding\r
+  // (4 bytes), minus the size of EFI_DEBUG_INFO, minus the size of\r
+  // variable arguments (12 * sizeof (UINT64)).\r
+  //\r
+  DestBufferSize = sizeof (Buffer) - 4 - sizeof (EFI_DEBUG_INFO) - 12 * sizeof (UINT64);\r
+  AsciiStrCpyS (FormatString, DestBufferSize / sizeof (CHAR8), Format);\r
 \r
   //\r
   // The first 12 * sizeof (UINT64) bytes following EFI_DEBUG_INFO are for variable arguments\r
@@ -261,6 +268,7 @@ DebugAssert (
   UINTN                  HeaderSize;\r
   UINTN                  TotalSize;\r
   CHAR8                  *Temp;\r
+  UINTN                  ModuleNameSize;\r
   UINTN                  FileNameSize;\r
   UINTN                  DescriptionSize;\r
 \r
@@ -268,31 +276,40 @@ DebugAssert (
   // Get string size\r
   //\r
   HeaderSize       = sizeof (EFI_DEBUG_ASSERT_DATA);\r
+  //\r
+  // Compute string size of module name enclosed by []\r
+  //\r
+  ModuleNameSize   = 2 + AsciiStrSize (gEfiCallerBaseName);\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
+  if (HeaderSize + ModuleNameSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {\r
     //\r
-    // FileName + Description is too long to be filled into buffer. \r
+    // remove module name if it's too long to be filled into buffer\r
     //\r
-    if (HeaderSize + FileNameSize < sizeof (Buffer)) {\r
-      //\r
-      // Description has enough buffer to be truncated. \r
+    ModuleNameSize = 0;\r
+    if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {\r
       //\r
-      DescriptionSize = sizeof (Buffer) - HeaderSize - FileNameSize;\r
-    } else {\r
+      // FileName + Description is too long to be filled into buffer.\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
+      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
   //\r
   // Fill in EFI_DEBUG_ASSERT_DATA\r
   //\r
@@ -300,12 +317,23 @@ DebugAssert (
   AssertData->LineNumber = (UINT32)LineNumber;\r
   TotalSize  = sizeof (EFI_DEBUG_ASSERT_DATA);\r
 \r
+  Temp = (CHAR8 *)(AssertData + 1);\r
+\r
+  //\r
+  // Copy Ascii [ModuleName].\r
+  //\r
+  if (ModuleNameSize != 0) {\r
+    CopyMem(Temp, "[", 1);\r
+    CopyMem(Temp + 1, gEfiCallerBaseName, ModuleNameSize - 3);\r
+    CopyMem(Temp + ModuleNameSize - 2, "] ", 2);\r
+  }\r
+\r
   //\r
   // Copy Ascii FileName including NULL terminator.\r
   //\r
-  Temp = CopyMem (AssertData + 1, FileName, FileNameSize);\r
+  Temp = CopyMem (Temp + ModuleNameSize, FileName, FileNameSize);\r
   Temp[FileNameSize - 1] = 0;\r
-  TotalSize += FileNameSize;\r
+  TotalSize += (ModuleNameSize + FileNameSize);\r
 \r
   //\r
   // Copy Ascii Description include NULL terminator.\r