]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
MdeModulePkg: DebugAssert enhancement
[mirror_edk2.git] / MdeModulePkg / Library / PeiDxeDebugLibReportStatusCode / DebugLib.c
index ce2f72aef8b6fdd6dde6c1b66e9a2c5bbe127476..163d530ae5ae210a468c708b9b9d2c405f8cc478 100644 (file)
@@ -115,7 +115,7 @@ DebugPrint (
   //\r
   // Copy the Format string into the record\r
   //\r
-  AsciiStrCpy (FormatString, Format);\r
+  AsciiStrCpyS (FormatString, sizeof(Buffer) - (4 + sizeof(EFI_DEBUG_INFO) + 12 * sizeof(UINT64)), Format);\r
 \r
   //\r
   // The first 12 * sizeof (UINT64) bytes following EFI_DEBUG_INFO are for variable arguments\r
@@ -182,7 +182,7 @@ DebugPrint (
     if ((*Format == 'p') && (sizeof (VOID *) > 4)) {\r
       Long = TRUE;\r
     }\r
-    if (*Format == 'p' || *Format == 'X' || *Format == 'x' || *Format == 'd') {\r
+    if (*Format == 'p' || *Format == 'X' || *Format == 'x' || *Format == 'd' || *Format == 'u') {\r
       if (Long) {\r
         BASE_ARG (BaseListMarker, INT64) = VA_ARG (VaListMarker, INT64);\r
       } else {\r
@@ -261,6 +261,7 @@ DebugAssert (
   UINTN                  HeaderSize;\r
   UINTN                  TotalSize;\r
   CHAR8                  *Temp;\r
+  UINTN                  ModuleNameSize;\r
   UINTN                  FileNameSize;\r
   UINTN                  DescriptionSize;\r
 \r
@@ -268,31 +269,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
-      //\r
-      DescriptionSize = sizeof (Buffer) - HeaderSize - FileNameSize;\r
-    } else {\r
+    ModuleNameSize = 0;\r
+    if (HeaderSize + FileNameSize + DescriptionSize > sizeof (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
+      // FileName + Description is too long to be filled into buffer.\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 +310,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