Reviewed-by: Liming Gao <liming....@intel.com>

I would like to help commit your serial patches if no other comments. 

Thanks
Liming
-----Original Message-----
From: Anbazhagan, Baraneedharan [mailto:anbazha...@hp.com] 
Sent: Friday, December 04, 2015 1:13 AM
To: Kinney, Michael D; Gao, Liming; edk2-devel@lists.01.org
Subject: RE: MdeModulePkg: DebugAssert enhancement

Updated code based on your suggestion to use copy mem and ModuleNameSize 
calculation.


diff --git a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c 
b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
index f1d9827..c3010df 100644
--- a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
+++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
@@ -261,6 +261,7 @@ DebugAssert (
   UINTN                  HeaderSize;
   UINTN                  TotalSize;
   CHAR8                  *Temp;
+  UINTN                  ModuleNameSize;
   UINTN                  FileNameSize;
   UINTN                  DescriptionSize;
 
@@ -268,31 +269,40 @@ DebugAssert (
   // Get string size
   //
   HeaderSize       = sizeof (EFI_DEBUG_ASSERT_DATA);
+  //
+  // Compute string size of module name enclosed by []  //
+  ModuleNameSize   = 2 + AsciiStrSize (gEfiCallerBaseName);
   FileNameSize     = AsciiStrSize (FileName);
   DescriptionSize  = AsciiStrSize (Description);
 
   //
   // Make sure it will all fit in the passed in buffer.
   //
-  if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) {
+  if (HeaderSize + ModuleNameSize + FileNameSize + DescriptionSize > 
+ sizeof (Buffer)) {
     //
-    // FileName + Description is too long to be filled into buffer. 
+    // remove module name if it's 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 {
+    ModuleNameSize = 0;
+    if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer)) 
+ {
       //
-      // FileName is too long to be filled into buffer.
-      // FileName will be truncated. Reserved one byte for Description NULL 
terminator.
+      // FileName + Description is too long to be filled into buffer. 
       //
-      DescriptionSize = 1;
-      FileNameSize    = sizeof (Buffer) - HeaderSize - DescriptionSize;
+      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
   //
@@ -300,12 +310,23 @@ DebugAssert (
   AssertData->LineNumber = (UINT32)LineNumber;
   TotalSize  = sizeof (EFI_DEBUG_ASSERT_DATA);
 
+  Temp = (CHAR8 *)(AssertData + 1);
+
+  //
+  // Copy Ascii [ModuleName].
+  //
+  if (ModuleNameSize != 0) {
+    CopyMem(Temp, "[", 1);
+    CopyMem(Temp + 1, gEfiCallerBaseName, ModuleNameSize - 3);
+    CopyMem(Temp + ModuleNameSize - 2, "] ", 2);  }
+
   //
   // Copy Ascii FileName including NULL terminator.
   //
-  Temp = CopyMem (AssertData + 1, FileName, FileNameSize);
+  Temp = CopyMem (Temp + ModuleNameSize, FileName, FileNameSize);
   Temp[FileNameSize - 1] = 0;
-  TotalSize += FileNameSize;
+  TotalSize += (ModuleNameSize + FileNameSize);
 
   //
   // Copy Ascii Description include NULL terminator.
--
2.6.3.windows.1


> -----Original Message-----
> From: Kinney, Michael D [mailto:michael.d.kin...@intel.com]
> Sent: Wednesday, December 02, 2015 8:22 PM
> To: Gao, Liming; Anbazhagan, Baraneedharan; edk2-devel@lists.01.org; Kinney,
> Michael D
> Subject: RE: MdeModulePkg: DebugAssert enhancement
> 
> Baranee,
> 
> I also think the following line could be changed for smaller code gen from:
> 
> +  ModuleNameSize   = AsciiStrLen("[") + AsciiStrLen (gEfiCallerBaseName) +
> AsciiStrLen("] ");
> 
> To:
> 
> +  //
> +  // Compute string size of module name enclosed by []  //
> +  ModuleNameSize   = 2 + AsciiStrSize (gEfiCallerBaseName);
> 
> Mike
> 
> > -----Original Message-----
> > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> > Gao, Liming
> > Sent: Wednesday, December 2, 2015 6:07 PM
> > To: Anbazhagan, Baraneedharan <anbazha...@hp.com>;
> > edk2-devel@lists.01.org
> > Subject: Re: [edk2] MdeModulePkg: DebugAssert enhancement
> >
> > Baranee:
> >   Could you use CopyMem() to fill gEfiCallerBaseName instead of
> > AsciiSPrint()? This library instance is for size optimization. So, it
> > uses
> > CopyMem() to fill FileName and Description.
> >
> > Thanks
> > Liming
> > -----Original Message-----
> > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> > Anbazhagan, Baraneedharan
> > Sent: Wednesday, December 02, 2015 11:42 PM
> > To: edk2-devel@lists.01.org
> > Subject: [edk2] MdeModulePkg: DebugAssert enhancement
> >
> > 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.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Baraneedharan Anbazhagan <anbazha...@hp.com>
> > ---
> >  .../PeiDxeDebugLibReportStatusCode/DebugLib.c      | 58 
> > ++++++++++++++--------
> >  .../PeiDxeDebugLibReportStatusCode.inf             |  1 +
> >  2 files changed, 39 insertions(+), 20 deletions(-)
> >
> > diff --git
> > a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
> > b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
> > index f1d9827..af369ea 100644
> > --- a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
> > +++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c
> > @@ -22,6 +22,7 @@
> >
> >  #include <Library/DebugLib.h>
> >  #include <Library/BaseLib.h>
> > +#include <Library/PrintLib.h>
> >  #include <Library/BaseMemoryLib.h>
> >  #include <Library/ReportStatusCodeLib.h>  #include <Library/PcdLib.h> @@ -
> 261,6 +262,7 @@ DebugAssert (
> >    UINTN                  HeaderSize;
> >    UINTN                  TotalSize;
> >    CHAR8                  *Temp;
> > +  UINTN                  ModuleNameSize;
> >    UINTN                  FileNameSize;
> >    UINTN                  DescriptionSize;
> >
> > @@ -268,31 +270,37 @@ DebugAssert (
> >    // Get string size
> >    //
> >    HeaderSize       = sizeof (EFI_DEBUG_ASSERT_DATA);
> > +  ModuleNameSize   = AsciiStrLen("[") + AsciiStrLen (gEfiCallerBaseName) +
> AsciiStrLen("] ");
> >    FileNameSize     = AsciiStrSize (FileName);
> >    DescriptionSize  = AsciiStrSize (Description);
> >
> >    //
> >    // Make sure it will all fit in the passed in buffer.
> >    //
> > -  if (HeaderSize + FileNameSize + DescriptionSize > sizeof (Buffer))
> > {
> > +  if (HeaderSize + ModuleNameSize + FileNameSize + DescriptionSize >
> > + sizeof (Buffer)) {
> >      //
> > -    // FileName + Description is too long to be filled into buffer.
> > +    // remove module name if it's too long to be filled into buffer
> >      //
> > -    if (HeaderSize + FileNameSize < sizeof (Buffer)) {
> > +    ModuleNameSize = 0;
> > +    if (HeaderSize + FileNameSize + DescriptionSize > sizeof
> > + (Buffer)) {
> >        //
> > -      // Description has enough buffer to be truncated.
> > +      // FileName + Description is too long to be filled into buffer.
> >        //
> > -      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;
> > +      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
> >    //
> > @@ -300,17 +308,27 @@ DebugAssert (
> >    AssertData->LineNumber = (UINT32)LineNumber;
> >    TotalSize  = sizeof (EFI_DEBUG_ASSERT_DATA);
> >
> > -  //
> > -  // Copy Ascii FileName including NULL terminator.
> > -  //
> > -  Temp = CopyMem (AssertData + 1, FileName, FileNameSize);
> > -  Temp[FileNameSize - 1] = 0;
> > -  TotalSize += FileNameSize;
> > +  Temp = (CHAR8 *)(AssertData + 1);
> > +  if (ModuleNameSize != 0) {
> > +    //
> > +    // Copy Ascii ModuleName & FileName including NULL terminator
> > +    //
> > +    AsciiSPrint(Temp, ModuleNameSize + FileNameSize, "[%a] %a",
> gEfiCallerBaseName, FileName);
> > +    TotalSize += (ModuleNameSize + FileNameSize);  } else {
> > +    //
> > +    // Copy Ascii FileName including NULL terminator.
> > +    //
> > +    Temp = CopyMem (Temp, FileName, FileNameSize);
> > +    Temp[FileNameSize - 1] = 0;
> > +    TotalSize += FileNameSize;
> > +  }
> > +
> >
> >    //
> >    // Copy Ascii Description include NULL terminator.
> >    //
> > -  Temp = CopyMem (Temp + FileNameSize, Description, DescriptionSize);
> > +  Temp = CopyMem (Temp + ModuleNameSize + FileNameSize, Description,
> > + DescriptionSize);
> >    Temp[DescriptionSize - 1] = 0;
> >    TotalSize += DescriptionSize;
> >
> > diff --git
> > a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibRe
> > portStatusCode.inf
> > b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibRe
> > portStatusCode.inf
> > index 5544667..50f60c7 100644
> > ---
> > a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibRe
> > portStatusCode.inf
> > +++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugL
> > +++ ibReportStatusCode.inf
> > @@ -43,6 +43,7 @@
> >    BaseMemoryLib
> >    BaseLib
> >    DebugPrintErrorLevelLib
> > +  PrintLib
> >
> >  [Pcd]
> >    gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue  ##
> > SOMETIMES_CONSUMES
> > --
> > 2.6.3.windows.1
> >
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to