[edk2-devel] [Patch 1/6] MdePkg: Reproduce builds across source format changes

Leif Lindholm leif at nuviainc.com
Mon Nov 1 18:52:25 UTC 2021


On Mon, Nov 01, 2021 at 11:29:37 -0700, Michael D Kinney wrote:
> 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 pre-define
>   DEBUG_LINE_NUMBER to use a fixed value.
> * Add DEBUG_EXPRESSION_STRING(Expression) macrso 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.

I think it would be useful to separate this


> * Use DEBUG_LINE_NUMBER instead of __LINE__.
> * Use DEBUG_EXPRESSION_STRING instead of #Expression.

from this.

I.e., I have no need to verify whether macro use changes in MdePkg are
correct, but it is interesting to me to see the new macros being
defined.

/
    Leif

> Cc: Liming Gao <gaoliming at byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang.liu at intel.com>
> Cc: Michael Kubacki <michael.kubacki at microsoft.com>
> Signed-off-by: Michael D Kinney <michael.d.kinney at intel.com>
> ---
>  MdePkg/Include/Library/DebugLib.h    | 42 +++++++++++++++++++++++++---
>  MdePkg/Include/Library/UnitTestLib.h | 18 ++++++------
>  MdePkg/Library/BaseLib/SafeString.c  |  2 +-
>  3 files changed, 48 insertions(+), 14 deletions(-)
> 
> diff --git a/MdePkg/Include/Library/DebugLib.h b/MdePkg/Include/Library/DebugLib.h
> index 4cacd4b8e243..287b922e9f74 100644
> --- a/MdePkg/Include/Library/DebugLib.h
> +++ b/MdePkg/Include/Library/DebugLib.h
> @@ -71,6 +71,40 @@ 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.
> +//
> +#ifndef DEBUG_LINE_NUMBER
> +#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.
> +
> +**/
> +
> +#ifndef DEBUG_EXPRESSION_STRING_VALUE
> +#define DEBUG_EXPRESSION_STRING(Expression)  #Expression
> +#else
> +#define DEBUG_EXPRESSION_STRING(Expression)  DEBUG_EXPRESSION_STRING_VALUE
> +#endif
> +
>  /**
>    Prints a debug message to the debug output device if the specified error level is enabled.
>  
> @@ -310,15 +344,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
>  
> diff --git a/MdePkg/Include/Library/UnitTestLib.h b/MdePkg/Include/Library/UnitTestLib.h
> index 99175496c8cd..7cc6082387bb 100644
> --- a/MdePkg/Include/Library/UnitTestLib.h
> +++ b/MdePkg/Include/Library/UnitTestLib.h
> @@ -348,7 +348,7 @@ SaveFrameworkState (
>    @param[in]  Expression  Expression to be evaluated for TRUE.
>  **/
>  #define UT_ASSERT_TRUE(Expression)                                                        \
> -  if(!UnitTestAssertTrue ((Expression), __FUNCTION__, __LINE__, __FILE__, #Expression)) { \
> +  if(!UnitTestAssertTrue ((Expression), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #Expression)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                   \
>    }
>  
> @@ -360,7 +360,7 @@ SaveFrameworkState (
>    @param[in]  Expression  Expression to be evaluated for FALSE.
>  **/
>  #define UT_ASSERT_FALSE(Expression)                                                        \
> -  if(!UnitTestAssertFalse ((Expression), __FUNCTION__, __LINE__, __FILE__, #Expression)) { \
> +  if(!UnitTestAssertFalse ((Expression), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #Expression)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                    \
>    }
>  
> @@ -373,7 +373,7 @@ SaveFrameworkState (
>    @param[in]  ValueB  Value to be compared for equality (64-bit comparison).
>  **/
>  #define UT_ASSERT_EQUAL(ValueA, ValueB)                                                                           \
> -  if(!UnitTestAssertEqual ((UINT64)(ValueA), (UINT64)(ValueB), __FUNCTION__, __LINE__, __FILE__, #ValueA, #ValueB)) { \
> +  if(!UnitTestAssertEqual ((UINT64)(ValueA), (UINT64)(ValueB), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #ValueA, #ValueB)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                                           \
>    }
>  
> @@ -387,7 +387,7 @@ SaveFrameworkState (
>    @param[in]  Length   Number of bytes to compare in BufferA and BufferB.
>  **/
>  #define UT_ASSERT_MEM_EQUAL(BufferA, BufferB, Length)                                                                               \
> -  if(!UnitTestAssertMemEqual ((VOID *)(UINTN)(BufferA), (VOID *)(UINTN)(BufferB), (UINTN)Length, __FUNCTION__, __LINE__, __FILE__, #BufferA, #BufferB)) { \
> +  if(!UnitTestAssertMemEqual ((VOID *)(UINTN)(BufferA), (VOID *)(UINTN)(BufferB), (UINTN)Length, __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #BufferA, #BufferB)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                                                           \
>    }
>  
> @@ -400,7 +400,7 @@ SaveFrameworkState (
>    @param[in]  ValueB  Value to be compared for inequality (64-bit comparison).
>  **/
>  #define UT_ASSERT_NOT_EQUAL(ValueA, ValueB)                                                                          \
> -  if(!UnitTestAssertNotEqual ((UINT64)(ValueA), (UINT64)(ValueB), __FUNCTION__, __LINE__, __FILE__, #ValueA, #ValueB)) { \
> +  if(!UnitTestAssertNotEqual ((UINT64)(ValueA), (UINT64)(ValueB), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #ValueA, #ValueB)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                                              \
>    }
>  
> @@ -412,7 +412,7 @@ SaveFrameworkState (
>    @param[in]  Status  EFI_STATUS value to check.
>  **/
>  #define UT_ASSERT_NOT_EFI_ERROR(Status)                                                \
> -  if(!UnitTestAssertNotEfiError ((Status), __FUNCTION__, __LINE__, __FILE__, #Status)) { \
> +  if(!UnitTestAssertNotEfiError ((Status), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #Status)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                \
>    }
>  
> @@ -425,7 +425,7 @@ SaveFrameworkState (
>    @param[in]  Expected  EFI_STATUS values to compare for equality.
>  **/
>  #define UT_ASSERT_STATUS_EQUAL(Status, Expected)                                                 \
> -  if(!UnitTestAssertStatusEqual ((Status), (Expected), __FUNCTION__, __LINE__, __FILE__, #Status)) { \
> +  if(!UnitTestAssertStatusEqual ((Status), (Expected), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #Status)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                                          \
>    }
>  
> @@ -437,7 +437,7 @@ SaveFrameworkState (
>    @param[in]  Pointer  Pointer to be checked against NULL.
>  **/
>  #define UT_ASSERT_NOT_NULL(Pointer)                                                  \
> -  if(!UnitTestAssertNotNull ((Pointer), __FUNCTION__, __LINE__, __FILE__, #Pointer)) { \
> +  if(!UnitTestAssertNotNull ((Pointer), __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__, #Pointer)) { \
>      return UNIT_TEST_ERROR_TEST_FAILED;                                              \
>    }
>  
> @@ -482,7 +482,7 @@ SaveFrameworkState (
>        }                                                                \
>        if (!UnitTestExpectAssertFailure (                               \
>               UnitTestJumpStatus,                                       \
> -             __FUNCTION__, __LINE__, __FILE__,                         \
> +             __FUNCTION__, DEBUG_LINE_NUMBER, __FILE__,                    \
>               #FunctionCall, Status)) {                                 \
>          return UNIT_TEST_ERROR_TEST_FAILED;                            \
>        }                                                                \
> diff --git a/MdePkg/Library/BaseLib/SafeString.c b/MdePkg/Library/BaseLib/SafeString.c
> index 3bb23ca1a130..ce6db2b94eff 100644
> --- a/MdePkg/Library/BaseLib/SafeString.c
> +++ b/MdePkg/Library/BaseLib/SafeString.c
> @@ -17,7 +17,7 @@
>      if (!(Expression)) { \
>        DEBUG ((DEBUG_VERBOSE, \
>          "%a(%d) %a: SAFE_STRING_CONSTRAINT_CHECK(%a) failed.  Return %r\n", \
> -        __FILE__, __LINE__, __FUNCTION__, #Expression, Status)); \
> +        __FILE__, DEBUG_LINE_NUMBER, __FUNCTION__, DEBUG_EXPRESSION_STRING(Expression), Status)); \
>        return Status; \
>      } \
>    } while (FALSE)
> -- 
> 2.32.0.windows.1
> 
> 
> 
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#83024): https://edk2.groups.io/g/devel/message/83024
Mute This Topic: https://groups.io/mt/86748727/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list