]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Introduce a MDEPKG_NDEBUG macro to provide a method which can be used to reduce code...
authoreric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 14 Dec 2009 06:26:27 +0000 (06:26 +0000)
committereric_tian <eric_tian@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 14 Dec 2009 06:26:27 +0000 (06:26 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9560 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Library/DebugLib.h

index 9cb9027b7094eae96acde8e0b1f946bd5306bc44..836d807dcfe1bc17d1393356412a9a0e0367b0f7 100644 (file)
@@ -3,7 +3,11 @@
   \r
   The Debug library supports debug print and asserts based on a combination of macros and code.\r
   The debug library can be turned on and off so that the debug code does not increase the size of an image.\r
-  \r
+\r
+  Note that a MDEPKG_NDEBUG macro is introduced to switch on/off debug and assert related macros.\r
+  1. If MDEPKG_NDEBUG is defined, then debug and assert related macros are NULL.\r
+  2. If MDEPKG_NDEBUG is not defined, then PcdDebugProperyMask is used to turn on/off these helper macros.\r
+\r
 Copyright (c) 2006 - 2008, Intel Corporation<BR>\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
@@ -241,71 +245,83 @@ DebugClearMemoryEnabled (
 /**  \r
   Macro that calls DebugAssert() if an expression evaluates to FALSE.\r
 \r
-  If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set, \r
-  then this macro evaluates the Boolean expression specified by Expression.  If \r
-  Expression evaluates to FALSE, then DebugAssert() is called passing in the \r
-  source filename, source line number, and Expression.\r
+  If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED \r
+  bit of PcdDebugProperyMask is set, then this macro evaluates the Boolean \r
+  expression specified by Expression.  If Expression evaluates to FALSE, then \r
+  DebugAssert() is called passing in the source filename, source line number, \r
+  and Expression.\r
 \r
   @param  Expression  Boolean expression\r
 \r
 **/\r
-#define ASSERT(Expression)        \\r
-  do {                            \\r
-    if (DebugAssertEnabled ()) {  \\r
-      if (!(Expression)) {        \\r
-        _ASSERT (Expression);     \\r
-      }                           \\r
-    }                             \\r
-  } while (FALSE)\r
-\r
+#if !defined(MDEPKG_NDEBUG)       \r
+  #define ASSERT(Expression)        \\r
+    do {                            \\r
+      if (DebugAssertEnabled ()) {  \\r
+        if (!(Expression)) {        \\r
+          _ASSERT (Expression);     \\r
+        }                           \\r
+      }                             \\r
+    } while (FALSE)\r
+#else\r
+  #define ASSERT(Expression)\r
+#endif\r
 \r
 /**  \r
   Macro that calls DebugPrint().\r
 \r
-  If the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is set, \r
-  then this macro passes Expression to DebugPrint().\r
+  If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED \r
+  bit of PcdDebugProperyMask is set, then this macro passes Expression to \r
+  DebugPrint().\r
 \r
   @param  Expression  Expression containing an error level, a format string, \r
                       and a variable argument list based on the format string.\r
   \r
 \r
 **/\r
-#define DEBUG(Expression)        \\r
-  do {                           \\r
-    if (DebugPrintEnabled ()) {  \\r
-      _DEBUG (Expression);       \\r
-    }                            \\r
-  } while (FALSE)\r
-\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
+#endif\r
 \r
 /**  \r
   Macro that calls DebugAssert() if an EFI_STATUS evaluates to an error code.\r
 \r
-  If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set, \r
-  then this macro evaluates the EFI_STATUS value specified by StatusParameter.  \r
-  If StatusParameter is an error code, then DebugAssert() is called passing in \r
-  the source filename, source line number, and StatusParameter.\r
+  If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED \r
+  bit of PcdDebugProperyMask is set, then this macro evaluates the EFI_STATUS \r
+  value specified by StatusParameter.  If StatusParameter is an error code, \r
+  then DebugAssert() is called passing in the source filename, source line \r
+  number, and StatusParameter.\r
 \r
   @param  StatusParameter  EFI_STATUS value to evaluate.\r
 \r
 **/\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
-        _ASSERT (!EFI_ERROR (StatusParameter));                                        \\r
-      }                                                                                \\r
-    }                                                                                  \\r
-  } while (FALSE)\r
-\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
+          _ASSERT (!EFI_ERROR (StatusParameter));                                        \\r
+        }                                                                                \\r
+      }                                                                                  \\r
+    } while (FALSE)\r
+#else\r
+  #define ASSERT_EFI_ERROR(StatusParameter)\r
+#endif\r
 \r
 /**  \r
   Macro that calls DebugAssert() if a protocol is already installed in the \r
   handle database.\r
 \r
-  If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear, \r
-  then return.\r
+  If MDEPKG_NDEBUG is defined or the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit \r
+  of PcdDebugProperyMask is clear, then return.\r
 \r
   If Handle is NULL, then a check is made to see if the protocol specified by Guid \r
   is present on any handle in the handle database.  If Handle is not NULL, then \r
@@ -322,23 +338,26 @@ DebugClearMemoryEnabled (
   @param  Guid    Pointer to a protocol GUID.\r
 \r
 **/\r
-#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)                               \\r
-  do {                                                                                \\r
-    if (DebugAssertEnabled ()) {                                                      \\r
-      VOID  *Instance;                                                                \\r
-      ASSERT (Guid != NULL);                                                          \\r
-      if (Handle == NULL) {                                                           \\r
-        if (!EFI_ERROR (gBS->LocateProtocol ((EFI_GUID *)Guid, NULL, &Instance))) {   \\r
-          _ASSERT (Guid already installed in database);                               \\r
-        }                                                                             \\r
-      } else {                                                                        \\r
-        if (!EFI_ERROR (gBS->HandleProtocol (Handle, (EFI_GUID *)Guid, &Instance))) { \\r
-          _ASSERT (Guid already installed on Handle);                                 \\r
-        }                                                                             \\r
-      }                                                                               \\r
-    }                                                                                 \\r
-  } while (FALSE)\r
-\r
+#if !defined(MDEPKG_NDEBUG)\r
+  #define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)                               \\r
+    do {                                                                                \\r
+      if (DebugAssertEnabled ()) {                                                      \\r
+        VOID  *Instance;                                                                \\r
+        ASSERT (Guid != NULL);                                                          \\r
+        if (Handle == NULL) {                                                           \\r
+          if (!EFI_ERROR (gBS->LocateProtocol ((EFI_GUID *)Guid, NULL, &Instance))) {   \\r
+            _ASSERT (Guid already installed in database);                               \\r
+          }                                                                             \\r
+        } else {                                                                        \\r
+          if (!EFI_ERROR (gBS->HandleProtocol (Handle, (EFI_GUID *)Guid, &Instance))) { \\r
+            _ASSERT (Guid already installed on Handle);                                 \\r
+          }                                                                             \\r
+        }                                                                               \\r
+      }                                                                                 \\r
+    } while (FALSE)\r
+#else\r
+  #define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)\r
+#endif\r
 \r
 /**\r
   Macro that marks the beginning of debug source code.\r
@@ -404,21 +423,21 @@ DebugClearMemoryEnabled (
   structure inside a larger private data structure and using a pointer to the \r
   public data structure to retrieve a pointer to the private data structure.\r
 \r
-  If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear, \r
-  then this macro computes the offset, in bytes, of field specified by Field \r
-  from the beginning of the  data structure specified by TYPE.  This offset is \r
-  subtracted from Record, and is used to return a pointer to a data structure \r
-  of the type specified by TYPE.\r
-\r
-  If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set,  \r
-  then this macro computes the offset, in bytes, of field specified by Field from \r
-  the beginning of the data structure specified by TYPE.  This offset is \r
-  subtracted from Record, and is used to compute a pointer to a data structure of \r
-  the type specified by TYPE.  The Signature field of the data structure specified \r
-  by TYPE is compared to TestSignature.  If the signatures match, then a pointer \r
-  to the pointer to a data structure of the type specified by TYPE is returned.  \r
-  If the signatures do not match, then DebugAssert() is called with a description \r
-  of "CR has a bad signature" and Record is returned.  \r
+  If MDEPKG_NDEBUG is defined or the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit \r
+  of PcdDebugProperyMask is clear, then this macro computes the offset, in bytes,\r
+  of field specified by Field from the beginning of the  data structure specified \r
+  by TYPE.  This offset is subtracted from Record, and is used to return a pointer \r
+  to a data structure of the type specified by TYPE.\r
+\r
+  If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit\r
+  of PcdDebugProperyMask is set, then this macro computes the offset, in bytes, \r
+  of field specified by Field from the beginning of the data structure specified \r
+  by TYPE.  This offset is subtracted from Record, and is used to compute a pointer\r
+  to a data structure of the type specified by TYPE.  The Signature field of the \r
+  data structure specified by TYPE is compared to TestSignature.  If the signatures \r
+  match, then a pointer to the pointer to a data structure of the type specified by \r
+  TYPE is returned.  If the signatures do not match, then DebugAssert() is called \r
+  with a description of "CR has a bad signature" and Record is returned.  \r
 \r
   If the data type specified by TYPE does not contain the field specified by Field, \r
   then the module will not compile.\r
@@ -438,9 +457,14 @@ DebugClearMemoryEnabled (
   @param  TestSignature  The 32-bit signature value to match.\r
 \r
 **/\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
+#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
+    BASE_CR (Record, TYPE, Field)\r
+#endif\r
     \r
 #endif\r