summaryrefslogtreecommitdiff
path: root/EdkModulePkg/Library
diff options
context:
space:
mode:
Diffstat (limited to 'EdkModulePkg/Library')
-rw-r--r--EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c344
-rw-r--r--EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/EdkDxeDebugLibReportStatusCode.msa12
-rw-r--r--EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c265
-rw-r--r--EdkModulePkg/Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa10
-rw-r--r--EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c265
-rw-r--r--EdkModulePkg/Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa12
6 files changed, 525 insertions, 383 deletions
diff --git a/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c b/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c
index 51ea6bd9ba..fed9ba4d66 100644
--- a/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c
+++ b/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/DebugLib.c
@@ -1,177 +1,100 @@
-/*++
+/** @file
+ EFI Debug Library that installs Debug Level Protocol.
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ Copyright (c) 2006, Intel Corporation<BR>
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
-Module Name:
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
- DebugLib.c
-
-Abstract:
+**/
- EFI Debug Library
+STATIC BOOLEAN mDebugLevelInstalled = FALSE;
+STATIC EFI_DEBUG_LEVEL_PROTOCOL mDebugLevel = { 0 };
---*/
+/**
+ Installs Debug Level Protocol.
+
+ The constructor function installs Debug Level Protocol on the ImageHandle.
+ It will ASSERT() if the installation fails and will always return EFI_SUCCESS.
-static BOOLEAN mDebugLevelInstalled = FALSE;
-static EFI_DEBUG_LEVEL_PROTOCOL mDebugLevel = { 0 };
+ @param ImageHandle The firmware allocated handle for the EFI image.
+ @param SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
+**/
EFI_STATUS
+EFIAPI
DebugLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
-/*++
-
-Routine Description:
-
-Arguments:
-
-Returns:
-
---*/
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
//
- // Initialize Debug Level Protocol
+ // Initialize Debug Level Protocol.
//
mDebugLevel.DebugLevel = PcdGet32(PcdDebugPrintErrorLevel);
//
- // Install Debug Level Protocol
+ // Install Debug Level Protocol.
//
Status = gBS->InstallMultipleProtocolInterfaces (
&ImageHandle,
- &gEfiDebugLevelProtocolGuid, &mDebugLevel,
+ &gEfiDebugLevelProtocolGuid,
+ &mDebugLevel,
NULL
);
ASSERT_EFI_ERROR (Status);
//
- // Set flag to show that the Debug Level Protocol has been installed
+ // Set flag to show that the Debug Level Protocol has been installed.
//
mDebugLevelInstalled = TRUE;
- return EFI_SUCCESS;
+ return Status;
}
-VOID
-EFIAPI
-DebugAssert (
- IN CHAR8 *FileName,
- IN UINTN LineNumber,
- IN CHAR8 *Description
- )
-/*++
-
-Routine Description:
-
- Worker function for ASSERT(). If Error Logging hub is loaded log ASSERT
- information. If Error Logging hub is not loaded CpuBreakpoint ().
-
- We use UINT64 buffers due to IPF alignment concerns.
-
-Arguments:
-
- FileName - File name of failing routine.
-
- LineNumber - Line number of failing ASSERT().
-
- Description - Descritption, usally the assertion,
-
-Returns:
-
- None
-
---*/
-{
- UINT64 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)];
- EFI_DEBUG_ASSERT_DATA *AssertData;
- UINTN TotalSize;
- CHAR8 *Temp;
-
- if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) == 0) {
- return;
- }
-
- //
- // Make sure it will all fit in the passed in buffer
- //
- TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA) + AsciiStrLen (FileName) + 1 + AsciiStrLen (Description) + 1;
- if (TotalSize <= EFI_STATUS_CODE_DATA_MAX_SIZE) {
- //
- // Fill in EFI_DEBUG_ASSERT_DATA
- //
- AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;
- AssertData->LineNumber = (UINT32)LineNumber;
+/**
- //
- // Copy Ascii FileName including NULL.
- //
- Temp = AsciiStrCpy ((CHAR8 *)(AssertData + 1), FileName);
+ Prints a debug message to the debug output device if the specified error level is enabled.
- //
- // Copy Ascii Description
- //
- AsciiStrCpy (Temp + AsciiStrLen(FileName) + 1, Description);
+ If any bit in ErrorLevel is also set in PcdDebugPrintErrorLevel, then print
+ the message specified by Format and the associated variable argument list to
+ the debug output device.
- REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
- (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),
- (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE),
- AssertData,
- TotalSize
- );
- }
+ If Format is NULL, then ASSERT().
- //
- // Put break point in module that contained the error.
- //
- CpuBreakpoint ();
-}
+ @param ErrorLevel The error level of the debug message.
+ @param Format Format string for the debug message to print.
+**/
VOID
-DebugVPrint (
- IN UINTN ErrorLevel,
- IN CHAR8 *Format,
- IN VA_LIST Marker
+EFIAPI
+DebugPrint (
+ IN UINTN ErrorLevel,
+ IN CONST CHAR8 *Format,
+ ...
)
-/*++
-
-Routine Description:
-
- Worker function for DEBUG(). If Error Logging hub is loaded log ASSERT
- information. If Error Logging hub is not loaded do nothing.
-
- We use UINT64 buffers due to IPF alignment concerns.
-
-Arguments:
-
- ErrorLevel - If error level is set do the debug print.
-
- Format - String to use for the print, followed by Print arguments.
-
- Marker - VarArgs
-
-Returns:
-
- None
-
---*/
{
UINT64 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof (UINT64)];
EFI_DEBUG_INFO *DebugInfo;
UINTN TotalSize;
UINTN Index;
+ VA_LIST Marker;
UINT64 *ArgumentPointer;
//
+ // If Format is NULL, then ASSERT().
+ //
+ ASSERT (Format != NULL);
+
+ //
// Check driver Debug Level value and global debug level
//
if (mDebugLevelInstalled) {
@@ -184,7 +107,7 @@ Returns:
}
}
- TotalSize = sizeof (EFI_DEBUG_INFO) + 12 * sizeof (UINT64 *) + AsciiStrLen (Format) + 1;
+ TotalSize = sizeof (EFI_DEBUG_INFO) + 12 * sizeof (UINT64) + AsciiStrLen (Format) + 1;
if (TotalSize > EFI_STATUS_CODE_DATA_MAX_SIZE) {
return;
}
@@ -198,57 +121,103 @@ Returns:
//
// 256 byte mini Var Arg stack. That is followed by the format string.
//
+ VA_START (Marker, Format);
for (Index = 0, ArgumentPointer = (UINT64 *)(DebugInfo + 1); Index < 12; Index++, ArgumentPointer++) {
*ArgumentPointer = VA_ARG (Marker, UINT64);
}
+ VA_END (Marker);
AsciiStrCpy ((CHAR8 *)ArgumentPointer, Format);
- //
- //
- //
- REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
+ REPORT_STATUS_CODE_EX (
EFI_DEBUG_CODE,
(EFI_SOFTWARE_DXE_BS_DRIVER | EFI_DC_UNSPECIFIED),
+ 0,
+ NULL,
+ &gEfiStatusCodeDataTypeDebugGuid,
DebugInfo,
TotalSize
);
}
-VOID
-EFIAPI
-DebugPrint (
- IN UINTN ErrorLevel,
- IN CHAR8 *Format,
- ...
- )
-/*++
-Routine Description:
+/**
- Wrapper for DebugVPrint ()
-
-Arguments:
+ Prints an assert message containing a filename, line number, and description.
+ This may be followed by a breakpoint or a dead loop.
- ErrorLevel - If error level is set do the debug print.
+ Print a message of the form "ASSERT <FileName>(<LineNumber>): <Description>\n"
+ to the debug output device. If DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED bit of
+ PcdDebugProperyMask is set then CpuBreakpoint() is called. Otherwise, if
+ DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED bit of PcdDebugProperyMask is set then
+ CpuDeadLoop() is called. If neither of these bits are set, then this function
+ returns immediately after the message is printed to the debug output device.
+ DebugAssert() must actively prevent recusrsion. If DebugAssert() is called while
+ processing another DebugAssert(), then DebugAssert() must return immediately.
- Format - String to use for the print, followed by Print arguments.
+ If FileName is NULL, then a <FileName> string of "(NULL) Filename" is printed.
- ... - Print arguments.
+ If Description is NULL, then a <Description> string of "(NULL) Description" is printed.
-Returns:
-
- None
+ @param FileName Pointer to the name of the source file that generated the assert condition.
+ @param LineNumber The line number in the source file that generated the assert condition
+ @param Description Pointer to the description of the assert condition.
---*/
+**/
+VOID
+EFIAPI
+DebugAssert (
+ IN CONST CHAR8 *FileName,
+ IN UINTN LineNumber,
+ IN CONST CHAR8 *Description
+ )
{
- VA_LIST Marker;
+ UINT64 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE / sizeof(UINT64)];
+ EFI_DEBUG_ASSERT_DATA *AssertData;
+ UINTN TotalSize;
+ CHAR8 *Temp;
- VA_START (Marker, Format);
- DebugVPrint (ErrorLevel, Format, Marker);
- VA_END (Marker);
+ //
+ // Make sure it will all fit in the passed in buffer.
+ //
+ TotalSize = sizeof (EFI_DEBUG_ASSERT_DATA) + AsciiStrLen (FileName) + 1 + AsciiStrLen (Description) + 1;
+ if (TotalSize <= EFI_STATUS_CODE_DATA_MAX_SIZE) {
+ //
+ // Fill in EFI_DEBUG_ASSERT_DATA
+ //
+ AssertData = (EFI_DEBUG_ASSERT_DATA *)Buffer;
+ AssertData->LineNumber = (UINT32)LineNumber;
+
+ //
+ // Copy Ascii FileName including NULL.
+ //
+ Temp = AsciiStrCpy ((CHAR8 *)(AssertData + 1), FileName);
+
+ //
+ // Copy Ascii Description.
+ //
+ AsciiStrCpy (Temp + AsciiStrLen (FileName) + 1, Description);
+
+ REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
+ (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),
+ (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE),
+ AssertData,
+ TotalSize
+ );
+ }
+
+ //
+ // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
+ //
+ if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
+ CpuBreakpoint ();
+ } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
+ CpuDeadLoop ();
+ }
}
+
/**
+
Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer.
This function fills Length bytes of Buffer with the value specified by
@@ -258,8 +227,8 @@ Returns:
If Length is greater than (MAX_ADDRESS – Buffer + 1), then ASSERT().
- @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
- @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
+ @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
+ @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
@return Buffer
@@ -271,11 +240,29 @@ DebugClearMemory (
IN UINTN Length
)
{
-// SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue));
- SetMem (Buffer, Length, 0xAF);
- return Buffer;
+ //
+ // If Buffer is NULL, then ASSERT().
+ //
+ ASSERT (Buffer != NULL);
+
+ //
+ // SetMem() checks for the the ASSERT() condition on Length and returns Buffer
+ //
+ return SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue));
}
+
+/**
+
+ Returns TRUE if ASSERT() macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugAssertEnabled (
@@ -285,6 +272,18 @@ DebugAssertEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG()macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugPrintEnabled (
@@ -294,6 +293,18 @@ DebugPrintEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG_CODE()macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugCodeEnabled (
@@ -303,6 +314,18 @@ DebugCodeEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG_CLEAR_MEMORY()macro is enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugClearMemoryEnabled (
@@ -311,4 +334,3 @@ DebugClearMemoryEnabled (
{
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0);
}
-
diff --git a/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/EdkDxeDebugLibReportStatusCode.msa b/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/EdkDxeDebugLibReportStatusCode.msa
index 3de21286b0..752bc570a4 100644
--- a/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/EdkDxeDebugLibReportStatusCode.msa
+++ b/EdkModulePkg/Library/EdkDxeDebugLibReportStatusCode/EdkDxeDebugLibReportStatusCode.msa
@@ -49,10 +49,15 @@
<Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
</PackageDependencies>
<Protocols>
- <Protocol Usage="ALWAYS_CONSUMED">
+ <Protocol Usage="ALWAYS_PRODUCED">
<ProtocolCName>DebugLevel</ProtocolCName>
</Protocol>
</Protocols>
+ <Guids>
+ <GuidCNames Usage="ALWAYS_CONSUMED">
+ <GuidCName>StatusCodeDataTypeDebug</GuidCName>
+ </GuidCNames>
+ </Guids>
<Externs>
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00090000</Specification>
@@ -66,6 +71,11 @@
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<HelpText/>
</PcdEntry>
+ <PcdEntry PcdItemType="FIXED_AT_BUILD">
+ <C_Name>PcdDebugClearMemoryValue</C_Name>
+ <TokenSpaceGuidCName>FIX_ME_PcdDebugClearMemoryValue</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
<PcdEntry PcdItemType="PATCHABLE_IN_MODULE">
<C_Name>PcdDebugPrintErrorLevel</C_Name>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
diff --git a/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c b/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c
index 9945143dc4..5f5f2c56ca 100644
--- a/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c
+++ b/EdkModulePkg/Library/EdkUefiDebugLibConOut/DebugLib.c
@@ -1,105 +1,99 @@
-/*++
+/** @file
+ UEFI Debug Library that uses PrintLib to send messages to CONOUT.
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ Copyright (c) 2006, Intel Corporation<BR>
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
-Module Name:
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
- DebugLib.c
+**/
-Abstract:
+//
+// Define the maximum debug and assert message length that this library supports.
+//
+#define MAX_DEBUG_MESSAGE_LENGTH 0x100
- UEFI Debug Library that uses PrintLib to send messages to CONOUT
+STATIC BOOLEAN mDebugLevelInstalled = FALSE;
+STATIC EFI_DEBUG_LEVEL_PROTOCOL mDebugLevel = { 0 };
---*/
+/**
+ Installs Debug Level Protocol.
+
+ The constructor function installs Debug Level Protocol on the ImageHandle.
+ It will ASSERT() if the installation fails and will always return EFI_SUCCESS.
-static BOOLEAN mDebugLevelInstalled = FALSE;
-static EFI_DEBUG_LEVEL_PROTOCOL mDebugLevel = { 0 };
+ @param ImageHandle The firmware allocated handle for the EFI image.
+ @param SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
+**/
EFI_STATUS
+EFIAPI
DebugLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
-/*++
-
-Routine Description:
-
-Arguments:
-
-Returns:
-
---*/
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
//
- // Initialize Debug Level Protocol
+ // Initialize Debug Level Protocol.
//
mDebugLevel.DebugLevel = PcdGet32(PcdDebugPrintErrorLevel);
//
- // Install Debug Level Protocol
+ // Install Debug Level Protocol.
//
Status = gBS->InstallMultipleProtocolInterfaces (
&ImageHandle,
- &gEfiDebugLevelProtocolGuid, &mDebugLevel,
+ &gEfiDebugLevelProtocolGuid,
+ &mDebugLevel,
NULL
);
ASSERT_EFI_ERROR (Status);
//
- // Set flag to show that the Debug Level Protocol has been installed
+ // Set flag to show that the Debug Level Protocol has been installed.
//
mDebugLevelInstalled = TRUE;
- return EFI_SUCCESS;
+ return Status;
}
-VOID
-EFIAPI
-DebugPrint (
- IN UINTN ErrorLevel,
- IN CHAR8 *Format,
- ...
- )
-/*++
-
-Routine Description:
-
- Wrapper for DebugVPrint ()
-
-Arguments:
+/**
- ErrorLevel - If error level is set do the debug print.
+ Prints a debug message to the debug output device if the specified error level is enabled.
- Format - String to use for the print, followed by Print arguments.
+ If any bit in ErrorLevel is also set in PcdDebugPrintErrorLevel, then print
+ the message specified by Format and the associated variable argument list to
+ the debug output device.
- ... - Print arguments.
+ If Format is NULL, then ASSERT().
-Returns:
-
- None
+ @param ErrorLevel The error level of the debug message.
+ @param Format Format string for the debug message to print.
---*/
+**/
+VOID
+EFIAPI
+DebugPrint (
+ IN UINTN ErrorLevel,
+ IN CONST CHAR8 *Format,
+ ...
+ )
{
- CHAR16 Buffer[0x100];
- CHAR16 UnicodeBuffer[0x100];
- UINT32 Index;
+ CHAR16 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
VA_LIST Marker;
//
- // Check to see if CONOUT is avilable
+ // If Format is NULL, then ASSERT().
//
- if (gST->ConOut == NULL) {
- return;
- }
+ ASSERT (Format != NULL);
//
// Check driver Debug Level value and global debug level
@@ -115,82 +109,79 @@ Returns:
}
//
- // BUGBUG: Need print that take CHAR8 Format and returns CHAR16 Buffer
- //
- for (Index = 0; Format[Index] != 0; Index++) {
- UnicodeBuffer[Index] = Format[Index];
- }
- UnicodeBuffer[Index] = Format[Index];
-
- //
// Convert the DEBUG() message to a Unicode String
//
VA_START (Marker, Format);
- UnicodeVSPrint (Buffer, sizeof (Buffer), UnicodeBuffer, Marker);
+ UnicodeVSPrintAsciiFormat (Buffer, sizeof (Buffer), Format, Marker);
VA_END (Marker);
//
- // Send the print string to the Standard Error device
+ // Send the print string to the Console Output device if CONOUT is available.
//
- gST->ConOut->OutputString (gST->ConOut, Buffer);
+ if (gST->ConOut != NULL) {
+ gST->ConOut->OutputString (gST->ConOut, Buffer);
+ }
}
-VOID
-EFIAPI
-DebugAssert (
- IN CHAR8 *FileName,
- IN UINTN LineNumber,
- IN CHAR8 *Description
- )
-/*++
-Routine Description:
-
- Worker function for ASSERT(). If Error Logging hub is loaded log ASSERT
- information. If Error Logging hub is not loaded CpuBreakpoint ().
+/**
- We use UINT64 buffers due to IPF alignment concerns.
+ Prints an assert message containing a filename, line number, and description.
+ This may be followed by a breakpoint or a dead loop.
-Arguments:
+ Print a message of the form "ASSERT <FileName>(<LineNumber>): <Description>\n"
+ to the debug output device. If DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED bit of
+ PcdDebugProperyMask is set then CpuBreakpoint() is called. Otherwise, if
+ DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED bit of PcdDebugProperyMask is set then
+ CpuDeadLoop() is called. If neither of these bits are set, then this function
+ returns immediately after the message is printed to the debug output device.
+ DebugAssert() must actively prevent recusrsion. If DebugAssert() is called while
+ processing another DebugAssert(), then DebugAssert() must return immediately.
- FileName - File name of failing routine.
+ If FileName is NULL, then a <FileName> string of "(NULL) Filename" is printed.
- LineNumber - Line number of failing ASSERT().
+ If Description is NULL, then a <Description> string of "(NULL) Description" is printed.
- Description - Descritption, usally the assertion,
-
-Returns:
-
- None
+ @param FileName Pointer to the name of the source file that generated the assert condition.
+ @param LineNumber The line number in the source file that generated the assert condition
+ @param Description Pointer to the description of the assert condition.
---*/
+**/
+VOID
+EFIAPI
+DebugAssert (
+ IN CONST CHAR8 *FileName,
+ IN UINTN LineNumber,
+ IN CONST CHAR8 *Description
+ )
{
- CHAR16 Buffer[0x100];
-
- //
- // Check to see if CONOUT is avilable
- //
- if (gST->ConOut == NULL) {
- return;
- }
+ CHAR16 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
//
// Generate the ASSERT() message in Unicode format
//
- UnicodeSPrint (Buffer, sizeof (Buffer), (CHAR16 *)L"ASSERT %s(%d): %s\n", FileName, LineNumber, Description);
+ UnicodeSPrintAsciiFormat (Buffer, sizeof (Buffer), "ASSERT %s(%d): %s\n", FileName, LineNumber, Description);
//
- // Send the print string to the Standard Error device
+ // Send the print string to the Console Output device if CONOUT is available.
//
- gST->ConOut->OutputString (gST->ConOut, Buffer);
+ if (gST->ConOut != NULL) {
+ gST->ConOut->OutputString (gST->ConOut, Buffer);
+ }
//
- // Put break point in module that contained the error.
+ // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
//
- CpuBreakpoint ();
+ if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
+ CpuBreakpoint ();
+ } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
+ CpuDeadLoop ();
+ }
}
+
/**
+
Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer.
This function fills Length bytes of Buffer with the value specified by
@@ -200,8 +191,8 @@ Returns:
If Length is greater than (MAX_ADDRESS – Buffer + 1), then ASSERT().
- @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
- @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
+ @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
+ @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
@return Buffer
@@ -213,11 +204,29 @@ DebugClearMemory (
IN UINTN Length
)
{
-// SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue));
- SetMem (Buffer, Length, 0xAF);
- return Buffer;
+ //
+ // If Buffer is NULL, then ASSERT().
+ //
+ ASSERT (Buffer != NULL);
+
+ //
+ // SetMem() checks for the the ASSERT() condition on Length and returns Buffer
+ //
+ return SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue));
}
+
+/**
+
+ Returns TRUE if ASSERT() macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugAssertEnabled (
@@ -227,6 +236,18 @@ DebugAssertEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG()macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugPrintEnabled (
@@ -236,6 +257,18 @@ DebugPrintEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG_CODE()macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugCodeEnabled (
@@ -245,6 +278,18 @@ DebugCodeEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG_CLEAR_MEMORY()macro is enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugClearMemoryEnabled (
diff --git a/EdkModulePkg/Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa b/EdkModulePkg/Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa
index 915dad137a..6f7db31d7f 100644
--- a/EdkModulePkg/Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa
+++ b/EdkModulePkg/Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa
@@ -53,6 +53,11 @@
<ProtocolCName>DebugLevel</ProtocolCName>
</Protocol>
</Protocols>
+ <Guids>
+ <GuidCNames Usage="ALWAYS_CONSUMED">
+ <GuidCName>StatusCodeDataTypeDebug</GuidCName>
+ </GuidCNames>
+ </Guids>
<Externs>
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00090000</Specification>
@@ -66,6 +71,11 @@
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<HelpText/>
</PcdEntry>
+ <PcdEntry PcdItemType="FIXED_AT_BUILD">
+ <C_Name>PcdDebugClearMemoryValue</C_Name>
+ <TokenSpaceGuidCName>FIX_ME_PcdDebugClearMemoryValue</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
<PcdEntry PcdItemType="PATCHABLE_IN_MODULE">
<C_Name>PcdDebugPrintErrorLevel</C_Name>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
diff --git a/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c b/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c
index dc0c3ab497..2016701284 100644
--- a/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c
+++ b/EdkModulePkg/Library/EdkUefiDebugLibStdErr/DebugLib.c
@@ -1,105 +1,99 @@
-/*++
+/** @file
+ UEFI Debug Library that uses PrintLib to send messages to STDERR.
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ Copyright (c) 2006, Intel Corporation<BR>
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
-Module Name:
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
- DebugLib.c
+**/
-Abstract:
+//
+// Define the maximum debug and assert message length that this library supports.
+//
+#define MAX_DEBUG_MESSAGE_LENGTH 0x100
- UEFI Debug Library that uses PrintLib to send messages to STDERR
+STATIC BOOLEAN mDebugLevelInstalled = FALSE;
+STATIC EFI_DEBUG_LEVEL_PROTOCOL mDebugLevel = { 0 };
---*/
+/**
+ Installs Debug Level Protocol.
+
+ The constructor function installs Debug Level Protocol on the ImageHandle.
+ It will ASSERT() if the installation fails and will always return EFI_SUCCESS.
-static BOOLEAN mDebugLevelInstalled = FALSE;
-static EFI_DEBUG_LEVEL_PROTOCOL mDebugLevel = { 0 };
+ @param ImageHandle The firmware allocated handle for the EFI image.
+ @param SystemTable A pointer to the EFI System Table.
+
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
+**/
EFI_STATUS
+EFIAPI
DebugLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
-/*++
-
-Routine Description:
-
-Arguments:
-
-Returns:
-
---*/
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
//
- // Initialize Debug Level Protocol
+ // Initialize Debug Level Protocol.
//
mDebugLevel.DebugLevel = PcdGet32(PcdDebugPrintErrorLevel);
//
- // Install Debug Level Protocol
+ // Install Debug Level Protocol.
//
Status = gBS->InstallMultipleProtocolInterfaces (
&ImageHandle,
- &gEfiDebugLevelProtocolGuid, &mDebugLevel,
+ &gEfiDebugLevelProtocolGuid,
+ &mDebugLevel,
NULL
);
ASSERT_EFI_ERROR (Status);
//
- // Set flag to show that the Debug Level Protocol has been installed
+ // Set flag to show that the Debug Level Protocol has been installed.
//
mDebugLevelInstalled = TRUE;
- return EFI_SUCCESS;
+ return Status;
}
-VOID
-EFIAPI
-DebugPrint (
- IN UINTN ErrorLevel,
- IN CHAR8 *Format,
- ...
- )
-/*++
-
-Routine Description:
-
- Wrapper for DebugVPrint ()
-
-Arguments:
+/**
- ErrorLevel - If error level is set do the debug print.
+ Prints a debug message to the debug output device if the specified error level is enabled.
- Format - String to use for the print, followed by Print arguments.
+ If any bit in ErrorLevel is also set in PcdDebugPrintErrorLevel, then print
+ the message specified by Format and the associated variable argument list to
+ the debug output device.
- ... - Print arguments.
+ If Format is NULL, then ASSERT().
-Returns:
-
- None
+ @param ErrorLevel The error level of the debug message.
+ @param Format Format string for the debug message to print.
---*/
+**/
+VOID
+EFIAPI
+DebugPrint (
+ IN UINTN ErrorLevel,
+ IN CONST CHAR8 *Format,
+ ...
+ )
{
- CHAR16 Buffer[0x100];
- CHAR16 UnicodeBuffer[0x100];
- UINT32 Index;
+ CHAR16 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
VA_LIST Marker;
//
- // Check to see if STDERR is avilable
+ // If Format is NULL, then ASSERT().
//
- if (gST->StdErr == NULL) {
- return;
- }
+ ASSERT (Format != NULL);
//
// Check driver Debug Level value and global debug level
@@ -115,82 +109,79 @@ Returns:
}
//
- // BUGBUG: Need print that take CHAR8 Format and returns CHAR16 Buffer
- //
- for (Index = 0; Format[Index] != 0; Index++) {
- UnicodeBuffer[Index] = Format[Index];
- }
- UnicodeBuffer[Index] = Format[Index];
-
- //
// Convert the DEBUG() message to a Unicode String
//
VA_START (Marker, Format);
- UnicodeVSPrint (Buffer, sizeof (Buffer), UnicodeBuffer, Marker);
+ UnicodeVSPrintAsciiFormat (Buffer, sizeof (Buffer), Format, Marker);
VA_END (Marker);
//
- // Send the print string to the Standard Error device
+ // Send the print string to the Standard Error device if STDERR is available.
//
- gST->StdErr->OutputString (gST->StdErr, Buffer);
+ if (gST->StdErr != NULL) {
+ gST->StdErr->OutputString (gST->StdErr, Buffer);
+ }
}
-VOID
-EFIAPI
-DebugAssert (
- IN CHAR8 *FileName,
- IN UINTN LineNumber,
- IN CHAR8 *Description
- )
-/*++
-Routine Description:
-
- Worker function for ASSERT(). If Error Logging hub is loaded log ASSERT
- information. If Error Logging hub is not loaded CpuBreakpoint ().
+/**
- We use UINT64 buffers due to IPF alignment concerns.
+ Prints an assert message containing a filename, line number, and description.
+ This may be followed by a breakpoint or a dead loop.
-Arguments:
+ Print a message of the form "ASSERT <FileName>(<LineNumber>): <Description>\n"
+ to the debug output device. If DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED bit of
+ PcdDebugProperyMask is set then CpuBreakpoint() is called. Otherwise, if
+ DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED bit of PcdDebugProperyMask is set then
+ CpuDeadLoop() is called. If neither of these bits are set, then this function
+ returns immediately after the message is printed to the debug output device.
+ DebugAssert() must actively prevent recusrsion. If DebugAssert() is called while
+ processing another DebugAssert(), then DebugAssert() must return immediately.
- FileName - File name of failing routine.
+ If FileName is NULL, then a <FileName> string of "(NULL) Filename" is printed.
- LineNumber - Line number of failing ASSERT().
+ If Description is NULL, then a <Description> string of "(NULL) Description" is printed.
- Description - Descritption, usally the assertion,
-
-Returns:
-
- None
+ @param FileName Pointer to the name of the source file that generated the assert condition.
+ @param LineNumber The line number in the source file that generated the assert condition
+ @param Description Pointer to the description of the assert condition.
---*/
+**/
+VOID
+EFIAPI
+DebugAssert (
+ IN CONST CHAR8 *FileName,
+ IN UINTN LineNumber,
+ IN CONST CHAR8 *Description
+ )
{
- CHAR16 Buffer[0x100];
-
- //
- // Check to see if STDERR is avilable
- //
- if (gST->StdErr == NULL) {
- return;
- }
+ CHAR16 Buffer[MAX_DEBUG_MESSAGE_LENGTH];
//
// Generate the ASSERT() message in Unicode format
//
- UnicodeSPrint (Buffer, sizeof (Buffer), (CHAR16 *)L"ASSERT %s(%d): %s\n", FileName, LineNumber, Description);
+ UnicodeSPrintAsciiFormat (Buffer, sizeof (Buffer), "ASSERT %s(%d): %s\n", FileName, LineNumber, Description);
//
- // Send the print string to the Standard Error device
+ // Send the print string to the Standard Error device if STDERR is available.
//
- gST->StdErr->OutputString (gST->StdErr, Buffer);
+ if (gST->StdErr != NULL) {
+ gST->StdErr->OutputString (gST->StdErr, Buffer);
+ }
//
- // Put break point in module that contained the error.
+ // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings
//
- CpuBreakpoint ();
+ if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
+ CpuBreakpoint ();
+ } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
+ CpuDeadLoop ();
+ }
}
+
/**
+
Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer.
This function fills Length bytes of Buffer with the value specified by
@@ -200,8 +191,8 @@ Returns:
If Length is greater than (MAX_ADDRESS – Buffer + 1), then ASSERT().
- @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
- @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
+ @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
+ @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
@return Buffer
@@ -213,11 +204,29 @@ DebugClearMemory (
IN UINTN Length
)
{
-// SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue));
- SetMem (Buffer, Length, 0xAF);
- return Buffer;
+ //
+ // If Buffer is NULL, then ASSERT().
+ //
+ ASSERT (Buffer != NULL);
+
+ //
+ // SetMem() checks for the the ASSERT() condition on Length and returns Buffer
+ //
+ return SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue));
}
+
+/**
+
+ Returns TRUE if ASSERT() macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugAssertEnabled (
@@ -227,6 +236,18 @@ DebugAssertEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG()macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugPrintEnabled (
@@ -236,6 +257,18 @@ DebugPrintEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG_CODE()macros are enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugCodeEnabled (
@@ -245,6 +278,18 @@ DebugCodeEnabled (
return ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0);
}
+
+/**
+
+ Returns TRUE if DEBUG_CLEAR_MEMORY()macro is enabled.
+
+ This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of
+ PcdDebugProperyMask is set. Otherwise FALSE is returned.
+
+ @retval TRUE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is set.
+ @retval FALSE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is clear.
+
+**/
BOOLEAN
EFIAPI
DebugClearMemoryEnabled (
diff --git a/EdkModulePkg/Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa b/EdkModulePkg/Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa
index 327e12621f..2ab58bbbd9 100644
--- a/EdkModulePkg/Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa
+++ b/EdkModulePkg/Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa
@@ -19,7 +19,7 @@
<ModuleDefinitions>
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
<BinaryModule>false</BinaryModule>
- <OutputFileBasename>EdkUefiDebugLibStdErr</OutputFileBasename>
+ <OutputFileBasename>EdkUefiDebugLibConOut</OutputFileBasename>
</ModuleDefinitions>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_PRODUCED">
@@ -53,6 +53,11 @@
<ProtocolCName>DebugLevel</ProtocolCName>
</Protocol>
</Protocols>
+ <Guids>
+ <GuidCNames Usage="ALWAYS_CONSUMED">
+ <GuidCName>StatusCodeDataTypeDebug</GuidCName>
+ </GuidCNames>
+ </Guids>
<Externs>
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00090000</Specification>
@@ -66,6 +71,11 @@
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<HelpText/>
</PcdEntry>
+ <PcdEntry PcdItemType="FIXED_AT_BUILD">
+ <C_Name>PcdDebugClearMemoryValue</C_Name>
+ <TokenSpaceGuidCName>FIX_ME_PcdDebugClearMemoryValue</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
<PcdEntry PcdItemType="PATCHABLE_IN_MODULE">
<C_Name>PcdDebugPrintErrorLevel</C_Name>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>