mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-01-09 19:08:20 +01:00
103 lines
3.3 KiB
Plaintext
103 lines
3.3 KiB
Plaintext
//
|
|
// DebugLib.h
|
|
// cpp_tests UTF16 signed char
|
|
//
|
|
// Created by Jief on 12/10/2020.
|
|
// Copyright © 2020 JF Knudsen. All rights reserved.
|
|
//
|
|
|
|
#ifndef DebugLib_h
|
|
#define DebugLib_h
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
/**
|
|
Prints an assert message containing a filename, line number, and description.
|
|
This may be followed by a breakpoint or a dead loop.
|
|
|
|
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 recursion. If DebugAssert() is called while
|
|
processing another DebugAssert(), then DebugAssert() must return immediately.
|
|
|
|
If FileName is NULL, then a <FileName> string of "(NULL) Filename" is printed.
|
|
If Description is NULL, then a <Description> string of "(NULL) Description" is printed.
|
|
|
|
@param FileName The 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 The pointer to the description of the assert condition.
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
DebugAssert (
|
|
IN CONST CHAR8 *FileName,
|
|
IN UINTN LineNumber,
|
|
IN CONST CHAR8 *Description
|
|
);
|
|
|
|
/**
|
|
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 (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Internal worker macro that calls DebugAssert().
|
|
|
|
This macro calls DebugAssert(), passing in the filename, line number, and an
|
|
expression that evaluated to FALSE.
|
|
|
|
@param Expression Boolean expression that evaluated to FALSE
|
|
|
|
**/
|
|
#if defined(__clang__) && defined(__FILE_NAME__)
|
|
#define _ASSERT(Expression) DebugAssert (__FILE_NAME__, __LINE__, #Expression)
|
|
#else
|
|
#define _ASSERT(Expression) DebugAssert (__FILE__, __LINE__, #Expression)
|
|
#endif
|
|
|
|
/**
|
|
Macro that calls DebugAssert() if an expression evaluates to FALSE.
|
|
|
|
If MDEPKG_NDEBUG is not defined and the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED
|
|
bit of PcdDebugProperyMask is set, then this macro evaluates the Boolean
|
|
expression specified by Expression. If Expression evaluates to FALSE, then
|
|
DebugAssert() is called passing in the source filename, source line number,
|
|
and Expression.
|
|
|
|
@param Expression Boolean expression.
|
|
|
|
**/
|
|
#if !defined(MDEPKG_NDEBUG)
|
|
#define ASSERT(Expression) \
|
|
do { \
|
|
if (DebugAssertEnabled ()) { \
|
|
if (!(Expression)) { \
|
|
_ASSERT (Expression); \
|
|
ANALYZER_UNREACHABLE (); \
|
|
} \
|
|
} \
|
|
} while (FALSE)
|
|
#else
|
|
#define ASSERT(Expression)
|
|
#endif
|
|
|
|
|
|
#endif /* DebugLib_h */
|