]> git.proxmox.com Git - mirror_edk2.git/commitdiff
IntelFrameworkModulePkg: DebugAssert enhancement
authorBaraneedharan Anbazhagan <anbazhagan@hp.com>
Mon, 7 Dec 2015 03:06:58 +0000 (03:06 +0000)
committerlgao4 <lgao4@Edk2>
Mon, 7 Dec 2015 03:06:58 +0000 (03:06 +0000)
If the assert happens in a library, then it's hard to determine which module
using that library is generating that assert. Use gEfiCallerBaseName in
DebugAssert to display the module name.

In V2: Updated patch to use CopyMem instead of AsciiSPrint.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Baraneedharan Anbazhagan <anbazhagan@hp.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19129 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c

index cfdd2f50d51e0dc6ecfad5f5cde1daf53d78a2d0..7b07916bbdc955dc230f725debee7cd17abcf197 100644 (file)
@@ -268,6 +268,7 @@ DebugAssert (
   UINTN                  HeaderSize;\r
   UINTN                  TotalSize;\r
   CHAR8                  *Temp;\r
   UINTN                  HeaderSize;\r
   UINTN                  TotalSize;\r
   CHAR8                  *Temp;\r
+  UINTN                  ModuleNameSize;\r
   UINTN                  FileNameSize;\r
   UINTN                  DescriptionSize;\r
 \r
   UINTN                  FileNameSize;\r
   UINTN                  DescriptionSize;\r
 \r
@@ -275,31 +276,40 @@ DebugAssert (
   // Get string size\r
   //\r
   HeaderSize       = sizeof (EFI_DEBUG_ASSERT_DATA);\r
   // 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
   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
     //\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
     //\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
       //\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
       //\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
\r
   //\r
   // Fill in EFI_DEBUG_ASSERT_DATA\r
   //\r
   //\r
   // Fill in EFI_DEBUG_ASSERT_DATA\r
   //\r
@@ -307,12 +317,23 @@ DebugAssert (
   AssertData->LineNumber = (UINT32)LineNumber;\r
   TotalSize  = sizeof (EFI_DEBUG_ASSERT_DATA);\r
 \r
   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
   //\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
   Temp[FileNameSize - 1] = 0;\r
-  TotalSize += FileNameSize;\r
+  TotalSize += (ModuleNameSize + FileNameSize);\r
 \r
   //\r
   // Copy Ascii Description include NULL terminator.\r
 \r
   //\r
   // Copy Ascii Description include NULL terminator.\r