]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Library/DebugLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdePkg / Include / Library / DebugLib.h
index 4cacd4b8e2437270baac9174978c0ffa70308b78..9110be2f41b394ab44cf283ee4f2382386b8f4bc 100644 (file)
@@ -48,7 +48,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #define DEBUG_CACHE     0x00200000  // Memory range cachability changes\r
 #define DEBUG_VERBOSE   0x00400000  // Detailed debug messages that may\r
                                     // significantly impact boot performance\r
-#define DEBUG_ERROR     0x80000000  // Error\r
+#define DEBUG_ERROR  0x80000000     // Error\r
 \r
 //\r
 // Aliases of debug message mask bits\r
@@ -71,6 +71,41 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #define EFI_D_VERBOSE   DEBUG_VERBOSE\r
 #define EFI_D_ERROR     DEBUG_ERROR\r
 \r
+//\r
+// Source file line number.\r
+// Default is use the to compiler provided __LINE__ macro value. The __LINE__\r
+// mapping can be overriden by predefining DEBUG_LINE_NUMBER\r
+//\r
+// Defining DEBUG_LINE_NUMBER to a fixed value is useful when comparing builds\r
+// across source code formatting changes that may add/remove lines in a source\r
+// file.\r
+//\r
+#ifdef DEBUG_LINE_NUMBER\r
+#else\r
+#define DEBUG_LINE_NUMBER  __LINE__\r
+#endif\r
+\r
+/**\r
+  Macro that converts a Boolean expression to a Null-terminated ASCII string.\r
+\r
+  The default is to use the C pre-processor stringizing operator '#' to add\r
+  quotes around the C expression. If DEBUG_EXPRESSION_STRING_VALUE is defined\r
+  then the C expression is converted to the fixed string value.\r
+\r
+  Defining DEBUG_EXPRESSION_STRING_VALUE to a fixed value is useful when\r
+  comparing builds across source code formatting changes that may make\r
+  changes to spaces or parenthesis in a Boolean expression.\r
+\r
+  @param  Expression  Boolean expression.\r
+\r
+**/\r
+\r
+#ifdef DEBUG_EXPRESSION_STRING_VALUE\r
+#define DEBUG_EXPRESSION_STRING(Expression)  DEBUG_EXPRESSION_STRING_VALUE\r
+#else\r
+#define DEBUG_EXPRESSION_STRING(Expression)  #Expression\r
+#endif\r
+\r
 /**\r
   Prints a debug message to the debug output device if the specified error level is enabled.\r
 \r
@@ -94,7 +129,6 @@ DebugPrint (
   ...\r
   );\r
 \r
-\r
 /**\r
   Prints a debug message to the debug output device if the specified\r
   error level is enabled.\r
@@ -113,12 +147,11 @@ DebugPrint (
 VOID\r
 EFIAPI\r
 DebugVPrint (\r
-  IN  UINTN         ErrorLevel,\r
-  IN  CONST CHAR8   *Format,\r
-  IN  VA_LIST       VaListMarker\r
+  IN  UINTN        ErrorLevel,\r
+  IN  CONST CHAR8  *Format,\r
+  IN  VA_LIST      VaListMarker\r
   );\r
 \r
-\r
 /**\r
   Prints a debug message to the debug output device if the specified\r
   error level is enabled.\r
@@ -139,12 +172,11 @@ DebugVPrint (
 VOID\r
 EFIAPI\r
 DebugBPrint (\r
-  IN  UINTN         ErrorLevel,\r
-  IN  CONST CHAR8   *Format,\r
-  IN  BASE_LIST     BaseListMarker\r
+  IN  UINTN        ErrorLevel,\r
+  IN  CONST CHAR8  *Format,\r
+  IN  BASE_LIST    BaseListMarker\r
   );\r
 \r
-\r
 /**\r
   Prints an assert message containing a filename, line number, and description.\r
   This may be followed by a breakpoint or a dead loop.\r
@@ -174,7 +206,6 @@ DebugAssert (
   IN CONST CHAR8  *Description\r
   );\r
 \r
-\r
 /**\r
   Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer.\r
 \r
@@ -197,7 +228,6 @@ DebugClearMemory (
   IN UINTN  Length\r
   );\r
 \r
-\r
 /**\r
   Returns TRUE if ASSERT() macros are enabled.\r
 \r
@@ -214,7 +244,6 @@ DebugAssertEnabled (
   VOID\r
   );\r
 \r
-\r
 /**\r
   Returns TRUE if DEBUG() macros are enabled.\r
 \r
@@ -231,7 +260,6 @@ DebugPrintEnabled (
   VOID\r
   );\r
 \r
-\r
 /**\r
   Returns TRUE if DEBUG_CODE() macros are enabled.\r
 \r
@@ -248,7 +276,6 @@ DebugCodeEnabled (
   VOID\r
   );\r
 \r
-\r
 /**\r
   Returns TRUE if DEBUG_CLEAR_MEMORY() macro is enabled.\r
 \r
@@ -277,7 +304,7 @@ DebugClearMemoryEnabled (
 BOOLEAN\r
 EFIAPI\r
 DebugPrintLevelEnabled (\r
-  IN  CONST UINTN        ErrorLevel\r
+  IN  CONST UINTN  ErrorLevel\r
   );\r
 \r
 /**\r
@@ -290,6 +317,7 @@ DebugPrintLevelEnabled (
 \r
 **/\r
 #if defined (EDKII_UNIT_TEST_FRAMEWORK_ENABLED)\r
+\r
 /**\r
   Unit test library replacement for DebugAssert() in DebugLib.\r
 \r
@@ -309,17 +337,20 @@ UnitTestDebugAssert (
   IN CONST CHAR8  *Description\r
   );\r
 \r
-#if defined(__clang__) && defined(__FILE_NAME__)\r
-#define _ASSERT(Expression)  UnitTestDebugAssert (__FILE_NAME__, __LINE__, #Expression)\r
-#else\r
-#define _ASSERT(Expression)  UnitTestDebugAssert (__FILE__, __LINE__, #Expression)\r
-#endif\r
+  #if defined (_ASSERT)\r
+    #undef _ASSERT\r
+  #endif\r
+  #if defined (__clang__) && defined (__FILE_NAME__)\r
+#define _ASSERT(Expression)  UnitTestDebugAssert (__FILE_NAME__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))\r
+  #else\r
+#define _ASSERT(Expression)  UnitTestDebugAssert (__FILE__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))\r
+  #endif\r
 #else\r
-#if defined(__clang__) && defined(__FILE_NAME__)\r
-#define _ASSERT(Expression)  DebugAssert (__FILE_NAME__, __LINE__, #Expression)\r
-#else\r
-#define _ASSERT(Expression)  DebugAssert (__FILE__, __LINE__, #Expression)\r
-#endif\r
+  #if defined (__clang__) && defined (__FILE_NAME__)\r
+#define _ASSERT(Expression)  DebugAssert (__FILE_NAME__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))\r
+  #else\r
+#define _ASSERT(Expression)  DebugAssert (__FILE__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))\r
+  #endif\r
 #endif\r
 \r
 /**\r
@@ -335,16 +366,16 @@ UnitTestDebugAssert (
 \r
 **/\r
 \r
-#if !defined(MDE_CPU_EBC) && (!defined (_MSC_VER) || _MSC_VER > 1400)\r
-  #define _DEBUG_PRINT(PrintLevel, ...)              \\r
+#if !defined (MDE_CPU_EBC) && (!defined (_MSC_VER) || _MSC_VER > 1400)\r
+#define _DEBUG_PRINT(PrintLevel, ...)              \\r
     do {                                             \\r
       if (DebugPrintLevelEnabled (PrintLevel)) {     \\r
         DebugPrint (PrintLevel, ##__VA_ARGS__);      \\r
       }                                              \\r
     } while (FALSE)\r
-  #define _DEBUG(Expression)   _DEBUG_PRINT Expression\r
+#define _DEBUG(Expression)  _DEBUG_PRINT Expression\r
 #else\r
-#define _DEBUG(Expression)   DebugPrint Expression\r
+#define _DEBUG(Expression)  DebugPrint Expression\r
 #endif\r
 \r
 /**\r
@@ -359,8 +390,8 @@ UnitTestDebugAssert (
   @param  Expression  Boolean expression.\r
 \r
 **/\r
-#if !defined(MDEPKG_NDEBUG)\r
-  #define ASSERT(Expression)        \\r
+#if !defined (MDEPKG_NDEBUG)\r
+#define ASSERT(Expression)        \\r
     do {                            \\r
       if (DebugAssertEnabled ()) {  \\r
         if (!(Expression)) {        \\r
@@ -370,7 +401,7 @@ UnitTestDebugAssert (
       }                             \\r
     } while (FALSE)\r
 #else\r
-  #define ASSERT(Expression)\r
+#define ASSERT(Expression)\r
 #endif\r
 \r
 /**\r
@@ -385,15 +416,15 @@ UnitTestDebugAssert (
 \r
 \r
 **/\r
-#if !defined(MDEPKG_NDEBUG)\r
-  #define DEBUG(Expression)        \\r
+#if !defined (MDEPKG_NDEBUG)\r
+#define DEBUG(Expression)        \\r
     do {                           \\r
       if (DebugPrintEnabled ()) {  \\r
         _DEBUG (Expression);       \\r
       }                            \\r
     } while (FALSE)\r
 #else\r
-  #define DEBUG(Expression)\r
+#define DEBUG(Expression)\r
 #endif\r
 \r
 /**\r
@@ -408,18 +439,18 @@ UnitTestDebugAssert (
   @param  StatusParameter  EFI_STATUS value to evaluate.\r
 \r
 **/\r
-#if !defined(MDEPKG_NDEBUG)\r
-  #define ASSERT_EFI_ERROR(StatusParameter)                                              \\r
+#if !defined (MDEPKG_NDEBUG)\r
+#define ASSERT_EFI_ERROR(StatusParameter)                                              \\r
     do {                                                                                 \\r
       if (DebugAssertEnabled ()) {                                                       \\r
         if (EFI_ERROR (StatusParameter)) {                                               \\r
-          DEBUG ((EFI_D_ERROR, "\nASSERT_EFI_ERROR (Status = %r)\n", StatusParameter));  \\r
+          DEBUG ((DEBUG_ERROR, "\nASSERT_EFI_ERROR (Status = %r)\n", StatusParameter));  \\r
           _ASSERT (!EFI_ERROR (StatusParameter));                                        \\r
         }                                                                                \\r
       }                                                                                  \\r
     } while (FALSE)\r
 #else\r
-  #define ASSERT_EFI_ERROR(StatusParameter)\r
+#define ASSERT_EFI_ERROR(StatusParameter)\r
 #endif\r
 \r
 /**\r
@@ -434,8 +465,8 @@ UnitTestDebugAssert (
   @param  StatusParameter  RETURN_STATUS value to evaluate.\r
 \r
 **/\r
-#if !defined(MDEPKG_NDEBUG)\r
-  #define ASSERT_RETURN_ERROR(StatusParameter)                          \\r
+#if !defined (MDEPKG_NDEBUG)\r
+#define ASSERT_RETURN_ERROR(StatusParameter)                          \\r
     do {                                                                \\r
       if (DebugAssertEnabled ()) {                                      \\r
         if (RETURN_ERROR (StatusParameter)) {                           \\r
@@ -446,7 +477,7 @@ UnitTestDebugAssert (
       }                                                                 \\r
     } while (FALSE)\r
 #else\r
-  #define ASSERT_RETURN_ERROR(StatusParameter)\r
+#define ASSERT_RETURN_ERROR(StatusParameter)\r
 #endif\r
 \r
 /**\r
@@ -471,8 +502,8 @@ UnitTestDebugAssert (
   @param  Guid    The pointer to a protocol GUID.\r
 \r
 **/\r
-#if !defined(MDEPKG_NDEBUG)\r
-  #define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)                               \\r
+#if !defined (MDEPKG_NDEBUG)\r
+#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)                               \\r
     do {                                                                                \\r
       if (DebugAssertEnabled ()) {                                                      \\r
         VOID  *Instance;                                                                \\r
@@ -489,7 +520,7 @@ UnitTestDebugAssert (
       }                                                                                 \\r
     } while (FALSE)\r
 #else\r
-  #define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)\r
+#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)\r
 #endif\r
 \r
 /**\r
@@ -503,7 +534,6 @@ UnitTestDebugAssert (
 **/\r
 #define DEBUG_CODE_BEGIN()  do { if (DebugCodeEnabled ()) { UINT8  __DebugCodeLocal\r
 \r
-\r
 /**\r
   The macro that marks the end of debug source code.\r
 \r
@@ -513,8 +543,7 @@ UnitTestDebugAssert (
   are not included in a module.\r
 \r
 **/\r
-#define DEBUG_CODE_END()    __DebugCodeLocal = 0; __DebugCodeLocal++; } } while (FALSE)\r
-\r
+#define DEBUG_CODE_END()  __DebugCodeLocal = 0; __DebugCodeLocal++; } } while (FALSE)\r
 \r
 /**\r
   The macro that declares a section of debug source code.\r
@@ -529,7 +558,6 @@ UnitTestDebugAssert (
   Expression                    \\r
   DEBUG_CODE_END ()\r
 \r
-\r
 /**\r
   The macro that calls DebugClearMemory() to clear a buffer to a default value.\r
 \r
@@ -547,7 +575,6 @@ UnitTestDebugAssert (
     }                                        \\r
   } while (FALSE)\r
 \r
-\r
 /**\r
   Macro that calls DebugAssert() if the containing record does not have a\r
   matching signature.  If the signatures matches, then a pointer to the data\r
@@ -590,13 +617,13 @@ UnitTestDebugAssert (
   @param  TestSignature  The 32-bit signature value to match.\r
 \r
 **/\r
-#if !defined(MDEPKG_NDEBUG)\r
-  #define CR(Record, TYPE, Field, TestSignature)                                              \\r
+#if !defined (MDEPKG_NDEBUG)\r
+#define CR(Record, TYPE, Field, TestSignature)                                              \\r
     (DebugAssertEnabled () && (BASE_CR (Record, TYPE, Field)->Signature != TestSignature)) ?  \\r
     (TYPE *) (_ASSERT (CR has Bad Signature), Record) :                                       \\r
     BASE_CR (Record, TYPE, Field)\r
 #else\r
-  #define CR(Record, TYPE, Field, TestSignature)                                              \\r
+#define CR(Record, TYPE, Field, TestSignature)                                              \\r
     BASE_CR (Record, TYPE, Field)\r
 #endif\r
 \r