MdePkg/Include: Enhance DebugLib to support reproduce builds

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3688

* Add DEBUG_LINE_NUMBER define to DebugLib.h that is
  by default mapped to __LINE__.  A build can define
  DEBUG_LINE_NUMBER to use a fixed value.
* Add DEBUG_EXPRESSION_STRING(Expression) macros to
  DebugLib.h that is by default mapped to #Expression.
  A build can define DEBUG_EXPRESSION_STRING_VALUE to
  set all expression strings to a fixed string value.

Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
Tested-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
Michael D Kinney 2021-10-12 16:42:28 -07:00 committed by mergify[bot]
parent b5d4a35d90
commit 48452993ad
1 changed files with 39 additions and 4 deletions

View File

@ -71,6 +71,41 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define EFI_D_VERBOSE DEBUG_VERBOSE
#define EFI_D_ERROR DEBUG_ERROR
//
// Source file line number.
// Default is use the to compiler provided __LINE__ macro value. The __LINE__
// mapping can be overriden by predefining DEBUG_LINE_NUMBER
//
// Defining DEBUG_LINE_NUMBER to a fixed value is useful when comparing builds
// across source code formatting changes that may add/remove lines in a source
// file.
//
#ifdef DEBUG_LINE_NUMBER
#else
#define DEBUG_LINE_NUMBER __LINE__
#endif
/**
Macro that converts a Boolean expression to a Null-terminated ASCII string.
The default is to use the C pre-processor stringizing operator '#' to add
quotes around the C expression. If DEBUG_EXPRESSION_STRING_VALUE is defined
then the C expression is converted to the fixed string value.
Defining DEBUG_EXPRESSION_STRING_VALUE to a fixed value is useful when
comparing builds across source code formatting changes that may make
changes to spaces or parenthesis in a Boolean expression.
@param Expression Boolean expression.
**/
#ifdef DEBUG_EXPRESSION_STRING_VALUE
#define DEBUG_EXPRESSION_STRING(Expression) DEBUG_EXPRESSION_STRING_VALUE
#else
#define DEBUG_EXPRESSION_STRING(Expression) #Expression
#endif
/**
Prints a debug message to the debug output device if the specified error level is enabled.
@ -310,15 +345,15 @@ UnitTestDebugAssert (
);
#if defined(__clang__) && defined(__FILE_NAME__)
#define _ASSERT(Expression) UnitTestDebugAssert (__FILE_NAME__, __LINE__, #Expression)
#define _ASSERT(Expression) UnitTestDebugAssert (__FILE_NAME__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
#else
#define _ASSERT(Expression) UnitTestDebugAssert (__FILE__, __LINE__, #Expression)
#define _ASSERT(Expression) UnitTestDebugAssert (__FILE__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
#endif
#else
#if defined(__clang__) && defined(__FILE_NAME__)
#define _ASSERT(Expression) DebugAssert (__FILE_NAME__, __LINE__, #Expression)
#define _ASSERT(Expression) DebugAssert (__FILE_NAME__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
#else
#define _ASSERT(Expression) DebugAssert (__FILE__, __LINE__, #Expression)
#define _ASSERT(Expression) DebugAssert (__FILE__, DEBUG_LINE_NUMBER, DEBUG_EXPRESSION_STRING (Expression))
#endif
#endif