Re: [edk2] MdeModulePkg: DebugAssert enhancement
ize + 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 ; > > > 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 > > > --- > > > .../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 > > > #include > > > +#include > > > #include #include > > > #include @@ - > > 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 > > >
Re: [edk2] MdeModulePkg: DebugAssert enhancement
ael 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 ; > > > 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 > > > --- > > > .../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 > > > #include > > > +#include > > > #include > > > #include #include > > > @@ - > > 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. > > > - // Fil
Re: [edk2] MdeModulePkg: DebugAssert enhancement
Reviewed-by: Liming Gao 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 ; > > edk2-devel@lists.01.org > > Subject: Re: [edk2] MdeModulePkg: DebugAssert enhancement > > > > Baranee: > > Could you use CopyMem() to fill gEfiCallerBaseName instead of > > AsciiSPri
Re: [edk2] 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 ; > > 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: Wednesda
Re: [edk2] 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 ; 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 > --- > .../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 > #include > +#include > #include > #include #include @@ > -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. > - // > -
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 --- .../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 #include +#include #include #include #include @@ -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/PeiDxeDebugLibReportStatusCode.inf b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf index 5544667..50f60c7 100644 --- a/MdeModulePkg/Library/PeiDxeDebu
[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 --- .../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 #include +#include #include #include #include @@ -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/PeiDxeDebugLibReportStatusCode.inf b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf index 5544667..50f60c7 100644 --- a/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf +++ b/MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.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